vite-uni-dev-tool 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/README.md +21 -1
  2. package/dist/const.cjs +1 -1
  3. package/dist/const.d.ts +2 -1
  4. package/dist/const.js +1 -1
  5. package/dist/core-shared.d.ts +2 -3
  6. package/dist/core.d.ts +8 -8
  7. package/dist/core.js +2 -2
  8. package/dist/i18n/index.d.ts +0 -1
  9. package/dist/i18n/instance.d.ts +0 -1
  10. package/dist/i18n/locales/en.cjs +1 -1
  11. package/dist/i18n/locales/en.d.ts +6 -1
  12. package/dist/i18n/locales/en.js +1 -1
  13. package/dist/i18n/locales/zh-Hans.cjs +1 -1
  14. package/dist/i18n/locales/zh-Hans.d.ts +6 -1
  15. package/dist/i18n/locales/zh-Hans.js +1 -1
  16. package/dist/index.d.ts +0 -1
  17. package/dist/modules/devConsole/index.cjs +4 -4
  18. package/dist/modules/devConsole/index.d.ts +6 -107
  19. package/dist/modules/devConsole/index.js +4 -4
  20. package/dist/modules/devEvent/index.cjs +3 -3
  21. package/dist/modules/devEvent/index.d.ts +2 -3
  22. package/dist/modules/devEvent/index.js +3 -3
  23. package/dist/modules/devIntercept/index.cjs +14 -14
  24. package/dist/modules/devIntercept/index.d.ts +34 -6
  25. package/dist/modules/devIntercept/index.js +14 -14
  26. package/dist/modules/devStore/index.cjs +1 -1
  27. package/dist/modules/devStore/index.d.ts +48 -40
  28. package/dist/modules/devStore/index.js +1 -1
  29. package/dist/modules/devToolInfo/index.cjs +1 -1
  30. package/dist/modules/devToolInfo/index.d.ts +6 -25
  31. package/dist/modules/devToolInfo/index.js +1 -1
  32. package/dist/plugins/uniDevTool/transform/transformApp.d.ts +0 -1
  33. package/dist/plugins/uniDevTool/transform/transformMain.cjs +3 -3
  34. package/dist/plugins/uniDevTool/transform/transformMain.d.ts +2 -2
  35. package/dist/plugins/uniDevTool/transform/transformMain.js +3 -3
  36. package/dist/plugins/uniDevTool/transform/transformVue.cjs +31 -25
  37. package/dist/plugins/uniDevTool/transform/transformVue.d.ts +2 -2
  38. package/dist/plugins/uniDevTool/transform/transformVue.js +30 -24
  39. package/dist/plugins/uniDevTool/uniDevTool.cjs +3 -3
  40. package/dist/plugins/uniDevTool/uniDevTool.d.ts +3 -2
  41. package/dist/plugins/uniDevTool/uniDevTool.js +3 -3
  42. package/dist/plugins/uniGlobalComponents/uniGlobalComponents.d.ts +0 -1
  43. package/dist/plugins/utils/index.d.ts +0 -1
  44. package/dist/shims-uni.d.ts +26 -22
  45. package/dist/type.d.ts +47 -43
  46. package/dist/utils/array.d.ts +0 -1
  47. package/dist/utils/date.d.ts +0 -1
  48. package/dist/utils/file.d.ts +0 -1
  49. package/dist/utils/function.d.ts +0 -1
  50. package/dist/utils/index.d.ts +0 -1
  51. package/dist/utils/ip.d.ts +0 -1
  52. package/dist/utils/language.d.ts +14 -15
  53. package/dist/utils/object.cjs +1 -1
  54. package/dist/utils/object.d.ts +7 -8
  55. package/dist/utils/object.js +1 -1
  56. package/dist/utils/openLink.d.ts +0 -1
  57. package/dist/utils/page.d.ts +0 -1
  58. package/dist/utils/platform.d.ts +0 -1
  59. package/dist/utils/string.d.ts +0 -1
  60. package/dist/utils/utils.d.ts +0 -1
  61. package/dist/v3/DevTool/components/BluetoothList/BluetoothItem.vue +199 -199
  62. package/dist/v3/DevTool/components/BluetoothList/BluetoothTool.vue +730 -730
  63. package/dist/v3/DevTool/components/BluetoothList/index.vue +167 -167
  64. package/dist/v3/DevTool/components/CaptureScreen/index.vue +109 -109
  65. package/dist/v3/DevTool/components/ConsoleList/ConsoleItem.vue +230 -225
  66. package/dist/v3/DevTool/components/ConsoleList/RunJSInput.vue +247 -247
  67. package/dist/v3/DevTool/components/ConsoleList/index.vue +171 -171
  68. package/dist/v3/DevTool/components/ConsoleList/staticTips.ts +1145 -1145
  69. package/dist/v3/DevTool/components/DevToolButton/index.vue +42 -6
  70. package/dist/v3/DevTool/components/DevToolTitle/index.vue +24 -24
  71. package/dist/v3/DevTool/components/DevToolWindow/DevToolOverlay.vue +197 -197
  72. package/dist/v3/DevTool/components/DevToolWindow/hooks/dataUtils.ts +48 -48
  73. package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolData.ts +411 -387
  74. package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolHandlers.ts +644 -629
  75. package/dist/v3/DevTool/components/DevToolWindow/hooks/useDevToolOverlay.ts +201 -197
  76. package/dist/v3/DevTool/components/DevToolWindow/index.vue +27 -64
  77. package/dist/v3/DevTool/components/ElEvent/ElEventItem.vue +105 -105
  78. package/dist/v3/DevTool/components/ElEvent/index.vue +106 -106
  79. package/dist/v3/DevTool/components/Instance/components/InstanceTreeNode.vue +265 -265
  80. package/dist/v3/DevTool/components/Instance/flatten.ts +226 -226
  81. package/dist/v3/DevTool/components/Instance/index.vue +94 -94
  82. package/dist/v3/DevTool/components/Instance/registry.ts +49 -49
  83. package/dist/v3/DevTool/components/Instance/transformTree.ts +393 -375
  84. package/dist/v3/DevTool/components/Instance/transformTreeCtx.ts +268 -268
  85. package/dist/v3/DevTool/components/Instance/typing.d.ts +43 -43
  86. package/dist/v3/DevTool/components/InstanceDetail/index.vue +485 -485
  87. package/dist/v3/DevTool/components/JsonDetail/index.vue +70 -70
  88. package/dist/v3/DevTool/components/NFCList/NFCItem.vue +112 -112
  89. package/dist/v3/DevTool/components/NFCList/NFCTool.vue +454 -454
  90. package/dist/v3/DevTool/components/NFCList/const.ts +56 -56
  91. package/dist/v3/DevTool/components/NFCList/index.vue +94 -94
  92. package/dist/v3/DevTool/components/NetworkList/InterceptConfig.vue +624 -624
  93. package/dist/v3/DevTool/components/NetworkList/InterceptItem.vue +140 -140
  94. package/dist/v3/DevTool/components/NetworkList/NetworkDetail.vue +287 -287
  95. package/dist/v3/DevTool/components/NetworkList/NetworkIntercept.vue +88 -88
  96. package/dist/v3/DevTool/components/NetworkList/NetworkItem.vue +163 -163
  97. package/dist/v3/DevTool/components/NetworkList/NetworkSend.vue +589 -589
  98. package/dist/v3/DevTool/components/NetworkList/const.ts +4 -4
  99. package/dist/v3/DevTool/components/NetworkList/hooks/useNetworkForm.ts +86 -86
  100. package/dist/v3/DevTool/components/NetworkList/index.vue +160 -160
  101. package/dist/v3/DevTool/components/NetworkList/utils.ts +101 -101
  102. package/dist/v3/DevTool/components/Performance/index.vue +498 -498
  103. package/dist/v3/DevTool/components/Performance/modules/PerformanceMetrics.vue +153 -153
  104. package/dist/v3/DevTool/components/Performance/modules/usePerformanceChart.ts +460 -460
  105. package/dist/v3/DevTool/components/Performance/modules/usePerformanceData.ts +258 -258
  106. package/dist/v3/DevTool/components/PiniaList/index.vue +93 -93
  107. package/dist/v3/DevTool/components/RunJS/index.vue +148 -148
  108. package/dist/v3/DevTool/components/ScanCodeList/ScanCodeItem.vue +97 -97
  109. package/dist/v3/DevTool/components/ScanCodeList/index.vue +100 -100
  110. package/dist/v3/DevTool/components/SettingButton/index.vue +45 -45
  111. package/dist/v3/DevTool/components/SettingList/index.vue +226 -218
  112. package/dist/v3/DevTool/components/SettingList/modules/SettingBarrage.vue +320 -304
  113. package/dist/v3/DevTool/components/SettingList/modules/SettingDevTool.vue +212 -212
  114. package/dist/v3/DevTool/components/SettingList/modules/SettingInfo.vue +157 -157
  115. package/dist/v3/DevTool/components/SettingList/modules/SettingLanguage.vue +74 -74
  116. package/dist/v3/DevTool/components/SettingList/modules/SettingLog.vue +230 -230
  117. package/dist/v3/DevTool/components/SettingList/typing.d.ts +2 -2
  118. package/dist/v3/DevTool/components/SourceCode/Line.vue +127 -127
  119. package/dist/v3/DevTool/components/SourceCode/parseCode.ts +609 -609
  120. package/dist/v3/DevTool/components/StorageList/index.vue +174 -174
  121. package/dist/v3/DevTool/components/TransferList/TransferDetail.vue +268 -268
  122. package/dist/v3/DevTool/components/VuexList/index.vue +84 -84
  123. package/dist/v3/DevTool/index.vue +85 -138
  124. package/dist/v3/components/AppTransition/index.vue +156 -176
  125. package/dist/v3/components/AutoSizer/index.vue +192 -192
  126. package/dist/v3/components/AutoSizer/index1.vue +184 -184
  127. package/dist/v3/components/AutoSizer/utils.ts +49 -49
  128. package/dist/v3/components/Barrage/BarrageItem.vue +194 -137
  129. package/dist/v3/components/Barrage/index.vue +205 -202
  130. package/dist/v3/components/CircularButton/index.vue +84 -84
  131. package/dist/v3/components/CustomSwiper/CustomSwiperItem.vue +49 -49
  132. package/dist/v3/components/CustomSwiper/index.vue +104 -104
  133. package/dist/v3/components/DevErrorBoundary/index.vue +388 -0
  134. package/dist/v3/components/DraggableContainer/index.vue +186 -73
  135. package/dist/v3/components/Empty/index.vue +29 -29
  136. package/dist/v3/components/FilterSelect/index.vue +179 -179
  137. package/dist/v3/components/JsonPretty/components/Brackets/index.vue +27 -27
  138. package/dist/v3/components/JsonPretty/components/Carets/index.vue +59 -59
  139. package/dist/v3/components/JsonPretty/components/CheckController/index.vue +136 -136
  140. package/dist/v3/components/JsonPretty/components/TreeNode/index.vue +387 -387
  141. package/dist/v3/components/JsonPretty/hooks/useClipboard.ts +21 -21
  142. package/dist/v3/components/JsonPretty/hooks/useError.ts +21 -21
  143. package/dist/v3/components/JsonPretty/type.ts +127 -127
  144. package/dist/v3/components/JsonPretty/utils/index.ts +169 -169
  145. package/dist/v3/components/MovableContainer/index.vue +10 -4
  146. package/dist/v3/components/Pick/index.vue +321 -322
  147. package/dist/v3/components/Tag/index.vue +113 -113
  148. package/dist/v3/components/VirtualList/AutoSize.vue +40 -40
  149. package/dist/v3/components/VirtualList/index.vue +416 -416
  150. package/dist/v3/hooks/useBluetooth/index.ts +561 -561
  151. package/dist/v3/hooks/useContainerStyle.ts +95 -153
  152. package/dist/v3/hooks/useNFC/index.ts +107 -107
  153. package/dist/v3/hooks/useNFC/typing.d.ts +396 -396
  154. package/dist/v3/hooks/useNFC/useNFCAndroid.ts +966 -966
  155. package/dist/v3/hooks/useNFC/useNFCMpWeiXin.ts +812 -812
  156. package/dist/v3/hooks/useNFC/utils.ts +754 -754
  157. package/dist/v3/hooks/useRequest/index.ts +586 -586
  158. package/dist/v3/hooks/useRequest/utils.ts +267 -267
  159. package/dist/v3/hooks/useScanCode/index.ts +206 -206
  160. package/dist/v3/hooks/useWebsocket/index.ts +253 -253
  161. package/dist/v3/styles/theme.ts +12 -12
  162. package/package.json +70 -59
  163. package/dist/const.d.ts.map +0 -1
  164. package/dist/core-shared.d.ts.map +0 -1
  165. package/dist/core.d.ts.map +0 -1
  166. package/dist/i18n/index.d.ts.map +0 -1
  167. package/dist/i18n/instance.d.ts.map +0 -1
  168. package/dist/i18n/locales/en.d.ts.map +0 -1
  169. package/dist/i18n/locales/zh-Hans.d.ts.map +0 -1
  170. package/dist/index.d.ts.map +0 -1
  171. package/dist/modules/devConsole/index.d.ts.map +0 -1
  172. package/dist/modules/devEvent/index.d.ts.map +0 -1
  173. package/dist/modules/devIntercept/index.d.ts.map +0 -1
  174. package/dist/modules/devStore/index.d.ts.map +0 -1
  175. package/dist/modules/devToolInfo/index.d.ts.map +0 -1
  176. package/dist/plugins/uniDevTool/transform/transformApp.d.ts.map +0 -1
  177. package/dist/plugins/uniDevTool/transform/transformMain.d.ts.map +0 -1
  178. package/dist/plugins/uniDevTool/transform/transformVue.d.ts.map +0 -1
  179. package/dist/plugins/uniDevTool/uniDevTool.d.ts.map +0 -1
  180. package/dist/plugins/uniGlobalComponents/uniGlobalComponents.d.ts.map +0 -1
  181. package/dist/plugins/utils/index.d.ts.map +0 -1
  182. package/dist/type.d.ts.map +0 -1
  183. package/dist/utils/array.d.ts.map +0 -1
  184. package/dist/utils/date.d.ts.map +0 -1
  185. package/dist/utils/file.d.ts.map +0 -1
  186. package/dist/utils/function.d.ts.map +0 -1
  187. package/dist/utils/index.d.ts.map +0 -1
  188. package/dist/utils/ip.d.ts.map +0 -1
  189. package/dist/utils/language.d.ts.map +0 -1
  190. package/dist/utils/object.d.ts.map +0 -1
  191. package/dist/utils/openLink.d.ts.map +0 -1
  192. package/dist/utils/page.d.ts.map +0 -1
  193. package/dist/utils/platform.d.ts.map +0 -1
  194. package/dist/utils/string.d.ts.map +0 -1
  195. package/dist/utils/utils.d.ts.map +0 -1
@@ -1,268 +1,268 @@
1
- <template>
2
- <view class="transfer-detail" :style="customStyle">
3
- <view class="transfer-detail-control">
4
- <DevToolTitle style="margin-right: 16px">
5
- {{ t('transfer.detailTitle') }}
6
- </DevToolTitle>
7
-
8
- <Tag
9
- v-for="item in translatedSelectItems"
10
- :active="currentSelect === item.value"
11
- :mode="item.mode"
12
- :key="item.value"
13
- @click="onSelect(item)">
14
- {{ item.label }}
15
- </Tag>
16
-
17
- <CircularButton style="margin-left: auto" text="×" @click="onClose" />
18
- </view>
19
-
20
- <view
21
- class="transfer-detail-header"
22
- :style="{ height: contentHeight - 32 + 'px' }"
23
- v-if="currentSelect === 'header'">
24
- <DevToolTitle>{{ t('network.general') }}</DevToolTitle>
25
- <view class="transfer-detail-item">
26
- <view class="transfer-detail-item-key">
27
- {{ t('network.requestUrl') }}:
28
- </view>
29
- <view class="transfer-detail-url" @click="onClickUrl">
30
- {{ item.url }}
31
- </view>
32
- </view>
33
- <view class="transfer-detail-item">
34
- <view class="transfer-detail-item-key">{{ t('network.method') }}:</view>
35
- <Tag mode="info">
36
- {{ type === 'upload' ? ((item as any).method ?? 'POST') : 'GET' }}
37
- </Tag>
38
- </view>
39
- <view class="transfer-detail-item">
40
- <view class="transfer-detail-item-key">{{ t('common.status') }}:</view>
41
- <Tag mode="info">{{ t(`common.${item.status}`) }}</Tag>
42
- </view>
43
- <view
44
- class="transfer-detail-item"
45
- v-if="type === 'download' && (item as any).filePath">
46
- <view class="transfer-detail-item-key">
47
- {{ t('download.filePath') }}:
48
- </view>
49
- <view>{{ (item as any).filePath }}</view>
50
- </view>
51
-
52
- <DevToolTitle>{{ t('network.requestHeaders') }}</DevToolTitle>
53
- <template
54
- v-if="
55
- item?.headers &&
56
- item?.headers?.requestHeader &&
57
- item?.headers?.requestHeader?.length > 0
58
- ">
59
- <view
60
- class="transfer-detail-item"
61
- v-for="h in item?.headers?.requestHeader"
62
- :key="h.key">
63
- <view class="transfer-detail-item-key">{{ h.key }}:</view>
64
- {{ h.value }}
65
- </view>
66
- </template>
67
- <Empty v-else />
68
- </view>
69
-
70
- <template v-if="currentSelect === 'formdata'">
71
- <template v-if="formData?.type === 'object'">
72
- <JsonPretty
73
- virtual
74
- :data="formData.value"
75
- :nodeSelectable="() => false"
76
- :pathCollapsible="() => false"
77
- :height="contentHeight - 32" />
78
- </template>
79
- <view
80
- v-else-if="formData?.type === 'string'"
81
- class="transfer-detail-payload">
82
- {{ formData.value }}
83
- </view>
84
- <Empty v-else />
85
- </template>
86
-
87
- <template v-if="currentSelect === 'response'">
88
- <template v-if="response?.type === 'object'">
89
- <JsonPretty
90
- virtual
91
- :data="response.value"
92
- :nodeSelectable="() => false"
93
- :pathCollapsible="() => false"
94
- :height="contentHeight - 32" />
95
- </template>
96
- <view
97
- v-else-if="response?.type === 'string'"
98
- class="transfer-detail-payload">
99
- {{ response.value }}
100
- </view>
101
- <Empty v-else />
102
- </template>
103
- </view>
104
- </template>
105
- <script lang="ts" setup>
106
- import { ref, computed } from 'vue';
107
- import JsonPretty from '../../../components/JsonPretty/index.vue';
108
- import Tag from '../../../components/Tag/index.vue';
109
- import Empty from '../../../components/Empty/index.vue';
110
- import CircularButton from '../../../components/CircularButton/index.vue';
111
- import DevToolTitle from '../DevToolTitle/index.vue';
112
- import type { DevTool } from '../../../../type';
113
- import { useI18n } from '../../../../i18n';
114
-
115
- const { t } = useI18n();
116
- const props = defineProps<{
117
- item: DevTool.TransferItem;
118
- type: 'upload' | 'download';
119
- zIndex?: number;
120
- contentHeight: number;
121
- customStyle?: Record<string, any>;
122
- }>();
123
- const emit = defineEmits<{ (e: 'close'): void }>();
124
- const translatedSelectItems = computed(() => {
125
- const items = [
126
- {
127
- label: t('common.header'),
128
- value: 'header',
129
- mode: 'info',
130
- },
131
- {
132
- label: t('common.response'),
133
- value: 'response',
134
- mode: 'info',
135
- },
136
- ];
137
-
138
- if (props.type === 'upload') {
139
- items.splice(1, 0, {
140
- label: t('common.formData'),
141
- value: 'formdata',
142
- mode: 'info',
143
- });
144
- }
145
- return items;
146
- });
147
-
148
- const currentSelect = ref('header');
149
-
150
- const formData = computed(() => {
151
- if (props.type !== 'upload') return { value: {}, type: 'empty' };
152
- const uploadItem = props.item as DevTool.TransferItem;
153
- try {
154
- if (uploadItem.formData) {
155
- return {
156
- value: JSON.parse(JSON.stringify(uploadItem.formData)),
157
- type: 'object',
158
- };
159
- }
160
- return {
161
- value: {},
162
- type: 'empty',
163
- };
164
- } catch (_error) {
165
- return {
166
- value: JSON.parse(JSON.stringify(uploadItem.formData)),
167
- type: 'object',
168
- };
169
- }
170
- });
171
-
172
- const response = computed(() => {
173
- try {
174
- if (props.item.response) {
175
- return {
176
- value: JSON.parse(JSON.stringify(props.item.response)),
177
- type: 'object',
178
- };
179
- }
180
- return {
181
- value: {},
182
- type: 'empty',
183
- };
184
- } catch (_error) {
185
- return {
186
- value: props.item.response,
187
- type: props.item.response ? 'string' : 'empty',
188
- };
189
- }
190
- });
191
-
192
- function onSelect(item: { label: string; value: string }) {
193
- currentSelect.value = item.value;
194
- }
195
-
196
- function onClose() {
197
- emit('close');
198
- }
199
-
200
- function onClickUrl() {
201
- uni.setClipboardData({
202
- data: props.item.url ?? '',
203
- success() {
204
- uni.showToast({
205
- title: t('common.copySuccess'),
206
- icon: 'none',
207
- });
208
- },
209
- fail() {
210
- uni.showToast({
211
- title: t('common.copyFail'),
212
- icon: 'none',
213
- });
214
- },
215
- });
216
- }
217
- </script>
218
- <style>
219
- .transfer-detail {
220
- position: fixed;
221
- width: 100vw;
222
- height: 100vh;
223
- z-index: 1001;
224
- top: 0;
225
- left: 0;
226
- padding: 0 16px;
227
-
228
- /* #ifdef H5 || APP-PLUS */
229
- padding: 50px 16px;
230
-
231
- /* #endif */
232
- background-color: var(--dev-tool-bg3-color);
233
- box-sizing: border-box;
234
- transition: background-color 0.3s;
235
- }
236
-
237
- .transfer-detail-control {
238
- display: flex;
239
- align-items: center;
240
- margin-bottom: 4px;
241
- gap: 12px;
242
- height: 32px;
243
- border-bottom: 1px solid transparent;
244
- box-sizing: border-box;
245
- }
246
-
247
- .transfer-detail-item {
248
- display: flex;
249
- align-items: center;
250
- min-height: 28px;
251
- word-break: break-all;
252
- }
253
-
254
- .transfer-detail-url {
255
- text-decoration: underline;
256
- }
257
-
258
- .transfer-detail-item-key {
259
- white-space: nowrap;
260
- margin-right: 8px;
261
- color: var(--dev-tool-info-color);
262
- }
263
-
264
- .transfer-detail-payload {
265
- word-break: break-all;
266
- max-width: 100%;
267
- }
268
- </style>
1
+ <template>
2
+ <view class="transfer-detail" :style="customStyle">
3
+ <view class="transfer-detail-control">
4
+ <DevToolTitle style="margin-right: 16px">
5
+ {{ t('transfer.detailTitle') }}
6
+ </DevToolTitle>
7
+
8
+ <Tag
9
+ v-for="item in translatedSelectItems"
10
+ :active="currentSelect === item.value"
11
+ :mode="item.mode"
12
+ :key="item.value"
13
+ @click="onSelect(item)">
14
+ {{ item.label }}
15
+ </Tag>
16
+
17
+ <CircularButton style="margin-left: auto" text="×" @click="onClose" />
18
+ </view>
19
+
20
+ <view
21
+ class="transfer-detail-header"
22
+ :style="{ height: contentHeight - 32 + 'px' }"
23
+ v-if="currentSelect === 'header'">
24
+ <DevToolTitle>{{ t('network.general') }}</DevToolTitle>
25
+ <view class="transfer-detail-item">
26
+ <view class="transfer-detail-item-key">
27
+ {{ t('network.requestUrl') }}:
28
+ </view>
29
+ <view class="transfer-detail-url" @click="onClickUrl">
30
+ {{ item.url }}
31
+ </view>
32
+ </view>
33
+ <view class="transfer-detail-item">
34
+ <view class="transfer-detail-item-key">{{ t('network.method') }}:</view>
35
+ <Tag mode="info">
36
+ {{ type === 'upload' ? ((item as any).method ?? 'POST') : 'GET' }}
37
+ </Tag>
38
+ </view>
39
+ <view class="transfer-detail-item">
40
+ <view class="transfer-detail-item-key">{{ t('common.status') }}:</view>
41
+ <Tag mode="info">{{ t(`common.${item.status}`) }}</Tag>
42
+ </view>
43
+ <view
44
+ class="transfer-detail-item"
45
+ v-if="type === 'download' && (item as any).filePath">
46
+ <view class="transfer-detail-item-key">
47
+ {{ t('download.filePath') }}:
48
+ </view>
49
+ <view>{{ (item as any).filePath }}</view>
50
+ </view>
51
+
52
+ <DevToolTitle>{{ t('network.requestHeaders') }}</DevToolTitle>
53
+ <template
54
+ v-if="
55
+ item?.headers &&
56
+ item?.headers?.requestHeader &&
57
+ item?.headers?.requestHeader?.length > 0
58
+ ">
59
+ <view
60
+ class="transfer-detail-item"
61
+ v-for="h in item?.headers?.requestHeader"
62
+ :key="h.key">
63
+ <view class="transfer-detail-item-key">{{ h.key }}:</view>
64
+ {{ h.value }}
65
+ </view>
66
+ </template>
67
+ <Empty v-else />
68
+ </view>
69
+
70
+ <template v-if="currentSelect === 'formdata'">
71
+ <template v-if="formData?.type === 'object'">
72
+ <JsonPretty
73
+ virtual
74
+ :data="formData.value"
75
+ :nodeSelectable="() => false"
76
+ :pathCollapsible="() => false"
77
+ :height="contentHeight - 32" />
78
+ </template>
79
+ <view
80
+ v-else-if="formData?.type === 'string'"
81
+ class="transfer-detail-payload">
82
+ {{ formData.value }}
83
+ </view>
84
+ <Empty v-else />
85
+ </template>
86
+
87
+ <template v-if="currentSelect === 'response'">
88
+ <template v-if="response?.type === 'object'">
89
+ <JsonPretty
90
+ virtual
91
+ :data="response.value"
92
+ :nodeSelectable="() => false"
93
+ :pathCollapsible="() => false"
94
+ :height="contentHeight - 32" />
95
+ </template>
96
+ <view
97
+ v-else-if="response?.type === 'string'"
98
+ class="transfer-detail-payload">
99
+ {{ response.value }}
100
+ </view>
101
+ <Empty v-else />
102
+ </template>
103
+ </view>
104
+ </template>
105
+ <script lang="ts" setup>
106
+ import { ref, computed } from 'vue';
107
+ import JsonPretty from '../../../components/JsonPretty/index.vue';
108
+ import Tag from '../../../components/Tag/index.vue';
109
+ import Empty from '../../../components/Empty/index.vue';
110
+ import CircularButton from '../../../components/CircularButton/index.vue';
111
+ import DevToolTitle from '../DevToolTitle/index.vue';
112
+ import type { DevTool } from '../../../../type';
113
+ import { useI18n } from '../../../../i18n';
114
+
115
+ const { t } = useI18n();
116
+ const props = defineProps<{
117
+ item: DevTool.TransferItem;
118
+ type: 'upload' | 'download';
119
+ zIndex?: number;
120
+ contentHeight: number;
121
+ customStyle?: Record<string, any>;
122
+ }>();
123
+ const emit = defineEmits<{ (e: 'close'): void }>();
124
+ const translatedSelectItems = computed(() => {
125
+ const items = [
126
+ {
127
+ label: t('common.header'),
128
+ value: 'header',
129
+ mode: 'info',
130
+ },
131
+ {
132
+ label: t('common.response'),
133
+ value: 'response',
134
+ mode: 'info',
135
+ },
136
+ ];
137
+
138
+ if (props.type === 'upload') {
139
+ items.splice(1, 0, {
140
+ label: t('common.formData'),
141
+ value: 'formdata',
142
+ mode: 'info',
143
+ });
144
+ }
145
+ return items;
146
+ });
147
+
148
+ const currentSelect = ref('header');
149
+
150
+ const formData = computed(() => {
151
+ if (props.type !== 'upload') return { value: {}, type: 'empty' };
152
+ const uploadItem = props.item as DevTool.TransferItem;
153
+ try {
154
+ if (uploadItem.formData) {
155
+ return {
156
+ value: JSON.parse(JSON.stringify(uploadItem.formData)),
157
+ type: 'object',
158
+ };
159
+ }
160
+ return {
161
+ value: {},
162
+ type: 'empty',
163
+ };
164
+ } catch (_error) {
165
+ return {
166
+ value: JSON.parse(JSON.stringify(uploadItem.formData)),
167
+ type: 'object',
168
+ };
169
+ }
170
+ });
171
+
172
+ const response = computed(() => {
173
+ try {
174
+ if (props.item.response) {
175
+ return {
176
+ value: JSON.parse(JSON.stringify(props.item.response)),
177
+ type: 'object',
178
+ };
179
+ }
180
+ return {
181
+ value: {},
182
+ type: 'empty',
183
+ };
184
+ } catch (_error) {
185
+ return {
186
+ value: props.item.response,
187
+ type: props.item.response ? 'string' : 'empty',
188
+ };
189
+ }
190
+ });
191
+
192
+ function onSelect(item: { label: string; value: string }) {
193
+ currentSelect.value = item.value;
194
+ }
195
+
196
+ function onClose() {
197
+ emit('close');
198
+ }
199
+
200
+ function onClickUrl() {
201
+ uni.setClipboardData({
202
+ data: props.item.url ?? '',
203
+ success() {
204
+ uni.showToast({
205
+ title: t('common.copySuccess'),
206
+ icon: 'none',
207
+ });
208
+ },
209
+ fail() {
210
+ uni.showToast({
211
+ title: t('common.copyFail'),
212
+ icon: 'none',
213
+ });
214
+ },
215
+ });
216
+ }
217
+ </script>
218
+ <style>
219
+ .transfer-detail {
220
+ position: fixed;
221
+ width: 100vw;
222
+ height: 100vh;
223
+ z-index: 1001;
224
+ top: 0;
225
+ left: 0;
226
+ padding: 0 16px;
227
+
228
+ /* #ifdef H5 || APP-PLUS */
229
+ padding: 50px 16px;
230
+
231
+ /* #endif */
232
+ background-color: var(--dev-tool-bg3-color);
233
+ box-sizing: border-box;
234
+ transition: background-color 0.3s;
235
+ }
236
+
237
+ .transfer-detail-control {
238
+ display: flex;
239
+ align-items: center;
240
+ margin-bottom: 4px;
241
+ gap: 12px;
242
+ height: 32px;
243
+ border-bottom: 1px solid transparent;
244
+ box-sizing: border-box;
245
+ }
246
+
247
+ .transfer-detail-item {
248
+ display: flex;
249
+ align-items: center;
250
+ min-height: 28px;
251
+ word-break: break-all;
252
+ }
253
+
254
+ .transfer-detail-url {
255
+ text-decoration: underline;
256
+ }
257
+
258
+ .transfer-detail-item-key {
259
+ white-space: nowrap;
260
+ margin-right: 8px;
261
+ color: var(--dev-tool-info-color);
262
+ }
263
+
264
+ .transfer-detail-payload {
265
+ word-break: break-all;
266
+ max-width: 100%;
267
+ }
268
+ </style>