vite-uni-dev-tool 1.0.0 → 1.1.0

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 (168) hide show
  1. package/README.md +46 -0
  2. package/dist/const.cjs +1 -1
  3. package/dist/const.d.ts +12 -0
  4. package/dist/const.d.ts.map +1 -1
  5. package/dist/const.js +1 -1
  6. package/dist/core-shared.d.ts +1 -1
  7. package/dist/core-shared.d.ts.map +1 -1
  8. package/dist/core-shared.js +1 -1
  9. package/dist/core.d.ts +10 -3
  10. package/dist/core.d.ts.map +1 -1
  11. package/dist/core.js +2 -2
  12. package/dist/i18n/locales/en.cjs +1 -1
  13. package/dist/i18n/locales/en.d.ts +81 -0
  14. package/dist/i18n/locales/en.d.ts.map +1 -1
  15. package/dist/i18n/locales/en.js +1 -1
  16. package/dist/i18n/locales/zh-Hans.cjs +1 -1
  17. package/dist/i18n/locales/zh-Hans.d.ts +82 -1
  18. package/dist/i18n/locales/zh-Hans.d.ts.map +1 -1
  19. package/dist/i18n/locales/zh-Hans.js +1 -1
  20. package/dist/modules/devConsole/index.cjs +1 -1
  21. package/dist/modules/devConsole/index.js +3 -3
  22. package/dist/modules/devEvent/index.cjs +3 -3
  23. package/dist/modules/devEvent/index.d.ts +1 -0
  24. package/dist/modules/devEvent/index.d.ts.map +1 -1
  25. package/dist/modules/devEvent/index.js +3 -3
  26. package/dist/modules/devIntercept/index.cjs +14 -13
  27. package/dist/modules/devIntercept/index.d.ts +19 -0
  28. package/dist/modules/devIntercept/index.d.ts.map +1 -1
  29. package/dist/modules/devIntercept/index.js +14 -13
  30. package/dist/modules/devStore/index.cjs +1 -1
  31. package/dist/modules/devStore/index.d.ts +21 -0
  32. package/dist/modules/devStore/index.d.ts.map +1 -1
  33. package/dist/modules/devStore/index.js +1 -1
  34. package/dist/plugins/uniDevTool/transform/transformMain.cjs +1 -1
  35. package/dist/plugins/uniDevTool/transform/transformMain.js +1 -1
  36. package/dist/type.d.ts +47 -2
  37. package/dist/type.d.ts.map +1 -1
  38. package/dist/utils/language.cjs +1 -1
  39. package/dist/utils/language.d.ts.map +1 -1
  40. package/dist/utils/language.js +1 -1
  41. package/dist/utils/object.cjs +1 -1
  42. package/dist/utils/object.d.ts.map +1 -1
  43. package/dist/utils/object.js +1 -1
  44. package/dist/v3/DevTool/components/BluetoothList/BluetoothItem.vue +199 -0
  45. package/dist/v3/DevTool/components/BluetoothList/BluetoothTool.vue +730 -0
  46. package/dist/v3/DevTool/components/BluetoothList/index.vue +167 -0
  47. package/dist/v3/{CaptureScreen → DevTool/components/CaptureScreen}/index.vue +109 -109
  48. package/dist/v3/{ConsoleList → DevTool/components/ConsoleList}/ConsoleItem.vue +225 -224
  49. package/dist/v3/{ConsoleList → DevTool/components/ConsoleList}/RunJSInput.vue +247 -249
  50. package/dist/v3/{ConsoleList → DevTool/components/ConsoleList}/index.vue +171 -160
  51. package/dist/v3/{ConsoleList → DevTool/components/ConsoleList}/staticTips.ts +1145 -1145
  52. package/dist/v3/{DevToolButton → DevTool/components/DevToolButton}/index.vue +7 -4
  53. package/dist/v3/{DevToolTitle → DevTool/components/DevToolTitle}/index.vue +24 -24
  54. package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/DevToolOverlay.vue +197 -182
  55. package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/const.ts +28 -5
  56. package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/hooks/dataUtils.ts +48 -48
  57. package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/hooks/useDevToolData.ts +387 -338
  58. package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/hooks/useDevToolHandlers.ts +629 -549
  59. package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/hooks/useDevToolOverlay.ts +197 -184
  60. package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/index.vue +67 -16
  61. package/dist/v3/{ElEvent → DevTool/components/ElEvent}/ElEventItem.vue +105 -105
  62. package/dist/v3/{ElEvent → DevTool/components/ElEvent}/index.vue +106 -109
  63. package/dist/v3/{Instance → DevTool/components/Instance}/components/InstanceTreeNode.vue +265 -265
  64. package/dist/v3/{Instance → DevTool/components/Instance}/flatten.ts +226 -226
  65. package/dist/v3/{Instance → DevTool/components/Instance}/index.vue +94 -94
  66. package/dist/v3/{Instance → DevTool/components/Instance}/registry.ts +49 -49
  67. package/dist/v3/{Instance → DevTool/components/Instance}/transformTree.ts +375 -375
  68. package/dist/v3/{Instance → DevTool/components/Instance}/transformTreeCtx.ts +268 -268
  69. package/dist/v3/{Instance → DevTool/components/Instance}/typing.d.ts +43 -43
  70. package/dist/v3/{InstanceDetail → DevTool/components/InstanceDetail}/index.vue +485 -485
  71. package/dist/v3/{JsonDetail → DevTool/components/JsonDetail}/index.vue +70 -70
  72. package/dist/v3/{NFCList → DevTool/components/NFCList}/NFCItem.vue +112 -113
  73. package/dist/v3/{NFCList → DevTool/components/NFCList}/NFCTool.vue +454 -478
  74. package/dist/v3/{NFCList → DevTool/components/NFCList}/const.ts +56 -56
  75. package/dist/v3/{NFCList → DevTool/components/NFCList}/index.vue +94 -98
  76. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/InterceptConfig.vue +624 -608
  77. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/InterceptItem.vue +140 -140
  78. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/NetworkDetail.vue +287 -296
  79. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/NetworkIntercept.vue +88 -93
  80. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/NetworkItem.vue +163 -167
  81. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/NetworkSend.vue +589 -556
  82. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/const.ts +4 -4
  83. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/hooks/useNetworkForm.ts +86 -86
  84. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/index.vue +160 -160
  85. package/dist/v3/{NetworkList → DevTool/components/NetworkList}/utils.ts +101 -101
  86. package/dist/v3/{Performance → DevTool/components/Performance}/index.vue +498 -495
  87. package/dist/v3/{Performance → DevTool/components/Performance}/modules/PerformanceMetrics.vue +153 -153
  88. package/dist/v3/{Performance → DevTool/components/Performance}/modules/PerformanceWidget.vue +12 -9
  89. package/dist/v3/{Performance → DevTool/components/Performance}/modules/usePerformanceChart.ts +460 -460
  90. package/dist/v3/{Performance → DevTool/components/Performance}/modules/usePerformanceData.ts +258 -258
  91. package/dist/v3/{PiniaList → DevTool/components/PiniaList}/index.vue +93 -94
  92. package/dist/v3/{RouteList → DevTool/components/RouteList}/index.vue +21 -24
  93. package/dist/v3/{RunJS → DevTool/components/RunJS}/index.vue +148 -148
  94. package/dist/v3/{ScanCodeList → DevTool/components/ScanCodeList}/ScanCodeItem.vue +97 -98
  95. package/dist/v3/{ScanCodeList → DevTool/components/ScanCodeList}/index.vue +100 -104
  96. package/dist/v3/{SettingButton → DevTool/components/SettingButton}/index.vue +45 -45
  97. package/dist/v3/{SettingList → DevTool/components/SettingList}/index.vue +218 -150
  98. package/dist/v3/DevTool/components/SettingList/modules/SettingBarrage.vue +304 -0
  99. package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingDevTool.vue +212 -208
  100. package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingInfo.vue +157 -119
  101. package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingLanguage.vue +74 -74
  102. package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingLog.vue +230 -230
  103. package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingNetwork.vue +3 -3
  104. package/dist/v3/{SettingList → DevTool/components/SettingList}/modules/SettingTheme.vue +37 -7
  105. package/dist/v3/{SettingList → DevTool/components/SettingList}/typing.d.ts +2 -2
  106. package/dist/v3/{SourceCode → DevTool/components/SourceCode}/Line.vue +127 -116
  107. package/dist/v3/{SourceCode → DevTool/components/SourceCode}/index.vue +8 -8
  108. package/dist/v3/{SourceCode → DevTool/components/SourceCode}/parseCode.ts +609 -701
  109. package/dist/v3/{StorageList → DevTool/components/StorageList}/index.vue +174 -174
  110. package/dist/v3/{TransferList → DevTool/components/TransferList}/TransferDetail.vue +268 -268
  111. package/dist/v3/{TransferList → DevTool/components/TransferList}/TransferItem.vue +4 -4
  112. package/dist/v3/{TransferList → DevTool/components/TransferList}/index.vue +8 -8
  113. package/dist/v3/{UniEvent → DevTool/components/UniEvent}/UniEventItem.vue +6 -7
  114. package/dist/v3/{UniEvent → DevTool/components/UniEvent}/index.vue +6 -6
  115. package/dist/v3/{VuexList → DevTool/components/VuexList}/index.vue +84 -84
  116. package/dist/v3/{WebSocket → DevTool/components/WebSocket}/WebSocketDetail.vue +8 -8
  117. package/dist/v3/{WebSocket → DevTool/components/WebSocket}/WebSocketItem.vue +4 -4
  118. package/dist/v3/{WebSocket → DevTool/components/WebSocket}/index.vue +8 -8
  119. package/dist/v3/DevTool/index.vue +179 -5
  120. package/dist/v3/{AppTransition → components/AppTransition}/index.vue +176 -170
  121. package/dist/v3/{AutoSizer → components/AutoSizer}/index.vue +192 -192
  122. package/dist/v3/{AutoSizer → components/AutoSizer}/index1.vue +184 -184
  123. package/dist/v3/{AutoSizer → components/AutoSizer}/utils.ts +49 -49
  124. package/dist/v3/components/Barrage/BarrageItem.vue +137 -0
  125. package/dist/v3/components/Barrage/index.vue +202 -0
  126. package/dist/v3/{CircularButton → components/CircularButton}/index.vue +84 -84
  127. package/dist/v3/{CustomSwiper → components/CustomSwiper}/CustomSwiperItem.vue +49 -49
  128. package/dist/v3/{CustomSwiper → components/CustomSwiper}/index.vue +104 -104
  129. package/dist/v3/{DraggableContainer → components/DraggableContainer}/index.vue +1 -1
  130. package/dist/v3/{Empty → components/Empty}/index.vue +29 -29
  131. package/dist/v3/{FilterInput → components/FilterInput}/index.vue +1 -1
  132. package/dist/v3/{FilterSelect → components/FilterSelect}/index.vue +179 -179
  133. package/dist/v3/{JsonPretty → components/JsonPretty}/components/Brackets/index.vue +27 -27
  134. package/dist/v3/{JsonPretty → components/JsonPretty}/components/Carets/index.vue +59 -59
  135. package/dist/v3/{JsonPretty → components/JsonPretty}/components/CheckController/index.vue +136 -136
  136. package/dist/v3/{JsonPretty → components/JsonPretty}/components/TreeNode/index.vue +387 -381
  137. package/dist/v3/{JsonPretty → components/JsonPretty}/hooks/useClipboard.ts +21 -21
  138. package/dist/v3/{JsonPretty → components/JsonPretty}/hooks/useError.ts +21 -21
  139. package/dist/v3/{JsonPretty → components/JsonPretty}/index.vue +16 -13
  140. package/dist/v3/{JsonPretty → components/JsonPretty}/type.ts +127 -126
  141. package/dist/v3/{JsonPretty → components/JsonPretty}/utils/index.ts +169 -169
  142. package/dist/v3/{MovableContainer → components/MovableContainer}/index.vue +1 -1
  143. package/dist/v3/{Pick → components/Pick}/index.vue +322 -322
  144. package/dist/v3/{Tabs → components/Tabs}/index.vue +30 -4
  145. package/dist/v3/{Tag → components/Tag}/index.vue +113 -113
  146. package/dist/v3/{VirtualList → components/VirtualList}/AutoSize.vue +40 -40
  147. package/dist/v3/{VirtualList → components/VirtualList}/index.vue +416 -412
  148. package/dist/v3/hooks/useBluetooth/index.ts +561 -0
  149. package/dist/v3/hooks/useContainerStyle.ts +153 -153
  150. package/dist/v3/hooks/useNFC/index.ts +107 -107
  151. package/dist/v3/hooks/useNFC/typing.d.ts +396 -396
  152. package/dist/v3/hooks/useNFC/useNFCAndroid.ts +966 -966
  153. package/dist/v3/hooks/useNFC/useNFCMpWeiXin.ts +812 -812
  154. package/dist/v3/hooks/useNFC/utils.ts +754 -754
  155. package/dist/v3/hooks/useRequest/index.ts +586 -573
  156. package/dist/v3/hooks/useRequest/utils.ts +267 -267
  157. package/dist/v3/hooks/useScanCode/index.ts +206 -206
  158. package/dist/v3/hooks/useWebsocket/README.md +79 -0
  159. package/dist/v3/hooks/useWebsocket/index.ts +253 -0
  160. package/dist/v3/styles/theme.css +17 -10
  161. package/dist/v3/styles/theme.ts +12 -12
  162. package/package.json +59 -64
  163. package/dist/plugins/uniParseStock/index.d.ts +0 -10
  164. package/dist/plugins/uniParseStock/index.d.ts.map +0 -1
  165. /package/dist/v3/{DevToolWindow → DevTool/components/DevToolWindow}/index.css +0 -0
  166. /package/dist/v3/{SettingList → DevTool/components/SettingList}/index.css +0 -0
  167. /package/dist/v3/{Empty → components/Empty}/empty.png +0 -0
  168. /package/dist/v3/{VirtualList → components/VirtualList}/readme.md +0 -0
@@ -1,296 +1,287 @@
1
- <template>
2
- <view class="network-detail" :style="customStyle">
3
- <view class="network-detail-control">
4
- <DevToolTitle> {{ t('network.requestDetail') }} </DevToolTitle>
5
- <Tag
6
- mode="info"
7
- v-for="item in translatedSelectItems"
8
- :active="item.value === currentSelect"
9
- :key="item.value"
10
- customStyle="margin-left: 16px"
11
- @click="onSelect(item)"
12
- >
13
- {{ item.label }}
14
- </Tag>
15
- <CircularButton
16
- style="margin-left: auto"
17
- text="×"
18
- @click="emit('close')"
19
- />
20
- </view>
21
-
22
- <scroll-view
23
- scroll-y
24
- class="network-detail-base"
25
- :style="{ height: contentHeight - 32 + 'px' }"
26
- v-if="currentSelect === 'base'"
27
- @touchmove.stop
28
- >
29
- <!--
30
- @touchmove.stop
31
- [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted.
32
- -->
33
- <DevToolTitle> {{ t('network.general') }} </DevToolTitle>
34
- <view class="net-detail-item">
35
- <view class="net-detail-item-key">{{ t('network.requestUrl') }}:</view>
36
- <view class="net-detail-url" @click="onClickUrl">
37
- {{ network.url }}
38
- </view>
39
- </view>
40
- <view class="net-detail-item">
41
- <view class="net-detail-item-key">{{ t('network.method') }}:</view>
42
- <Tag mode="info">{{ network.method }}</Tag>
43
- </view>
44
- <view class="net-detail-item">
45
- <view class="net-detail-item-key">{{ t('network.statusCode') }}:</view>
46
- {{ network.status }}
47
-
48
- <Tag v-if="network.intercepted" mode="error" style="margin-left: 6px">
49
- {{ t('network.intercepted') }}
50
- </Tag>
51
- </view>
52
- <view class="net-detail-item">
53
- <view class="net-detail-item-key">{{ t('common.startTime') }}:</view>
54
- {{
55
- network.startTime
56
- ? formatDate(network.startTime, 'HH:mm:ss:SS')
57
- : '--:--:--'
58
- }}
59
- </view>
60
- <view class="net-detail-item">
61
- <view class="net-detail-item-key">{{ t('common.endTime') }}:</view>
62
- {{
63
- network.endTime
64
- ? formatDate(network.endTime, 'HH:mm:ss:SS')
65
- : '--:--:--'
66
- }}
67
- </view>
68
- <view class="net-detail-item">
69
- <view class="net-detail-item-key">{{ t('network.duration') }}:</view>
70
- {{ network.time ?? '--' }}
71
- </view>
72
- <view class="net-detail-item">
73
- <view class="net-detail-item-key">{{ t('network.size') }}:</view>
74
- {{ network.size ?? '--' }}
75
- </view>
76
-
77
- <view class="net-detail-item">
78
- <view class="net-detail-item-key">{{ t('network.sponsor') }}:</view>
79
- {{ network.sponsor }}
80
- </view>
81
-
82
- <DevToolTitle>{{ t('network.requestHeaders') }}</DevToolTitle>
83
- <template v-if="network.headers.requestHeader.length > 0">
84
- <view
85
- class="net-detail-item"
86
- v-for="item in network.headers.requestHeader"
87
- :key="item.key"
88
- >
89
- <view class="net-detail-item-key">{{ item.key }}:</view>
90
- {{ item.value }}
91
- </view>
92
- </template>
93
- <view v-else>
94
- <Empty :text="t('network.noRequestHeaders')" />
95
- </view>
96
-
97
- <DevToolTitle>{{ t('network.responseHeaders') }}</DevToolTitle>
98
- <template v-if="network.headers.responseHeader.length > 0">
99
- <view
100
- class="net-detail-item"
101
- v-for="item in network.headers.responseHeader"
102
- :key="item.key"
103
- >
104
- <view class="net-detail-item-key">{{ item.key }}:</view>
105
- {{ item.value }}
106
- </view>
107
- </template>
108
- <view v-else>
109
- <Empty :text="t('network.noResponseHeaders')" />
110
- </view>
111
- </scroll-view>
112
- <template v-if="currentSelect === 'payload'">
113
- <template v-if="payload?.type === 'object'">
114
- <JsonPretty
115
- virtual
116
- :data="payload.value"
117
- :height="contentHeight - 32"
118
- :nodeSelectable="() => false"
119
- :pathCollapsible="() => false"
120
- />
121
- </template>
122
- <view
123
- v-else-if="payload?.type === 'string'"
124
- class="network-detail-payload"
125
- >
126
- {{ payload.value }}
127
- </view>
128
- <Empty v-else />
129
- </template>
130
-
131
- <template v-if="currentSelect === 'response'">
132
- <template v-if="response?.type === 'object'">
133
- <JsonPretty
134
- virtual
135
- :data="response.value"
136
- :height="contentHeight - 32"
137
- :nodeSelectable="() => false"
138
- :pathCollapsible="() => false"
139
- />
140
- </template>
141
- <view
142
- v-else-if="response?.type === 'string'"
143
- class="network-detail-payload"
144
- >
145
- {{ response.value }}
146
- </view>
147
- <Empty v-else />
148
- </template>
149
- </view>
150
- </template>
151
- <script lang="ts" setup>
152
- import { ref, computed } from 'vue';
153
- import JsonPretty from '../JsonPretty/index.vue';
154
- import Tag from '../Tag/index.vue';
155
- import Empty from '../Empty/index.vue';
156
- import CircularButton from '../CircularButton/index.vue';
157
- import DevToolTitle from '../DevToolTitle/index.vue';
158
- import type { DevTool } from '../../type';
159
- import { formatDate } from '../../utils';
160
- import { useI18n } from '../../i18n';
161
-
162
- const { t } = useI18n();
163
- const props = defineProps<{
164
- network: DevTool.NetworkItem;
165
- zIndex?: number;
166
- contentHeight: number;
167
- customStyle?: Record<string, any>;
168
- }>();
169
- const emit = defineEmits<{ (e: 'close'): void }>();
170
- const translatedSelectItems = computed(() => [
171
- {
172
- label: t('common.base'),
173
- value: 'base',
174
- },
175
- {
176
- label: t('common.payload'),
177
- value: 'payload',
178
- },
179
- {
180
- label: t('common.response'),
181
- value: 'response',
182
- },
183
- ]);
184
-
185
- const currentSelect = ref('base');
186
-
187
- const payload = computed(() => {
188
- try {
189
- if (props.network.payload) {
190
- return {
191
- value: JSON.parse(props.network.payload),
192
- type: 'object',
193
- };
194
- }
195
- return {
196
- value: {},
197
- type: 'empty',
198
- };
199
- } catch (_error) {
200
- return {
201
- value: props.network.payload,
202
- type: props.network.payload ? 'string' : 'empty',
203
- };
204
- }
205
- });
206
-
207
- const response = computed(() => {
208
- try {
209
- if (props.network.response) {
210
- return {
211
- value: JSON.parse(JSON.stringify(props.network.response)),
212
- type: 'object',
213
- };
214
- }
215
- return {
216
- value: {},
217
- type: 'empty',
218
- };
219
- } catch (_error) {
220
- return {
221
- value: props.network.response,
222
- type: props.network.response ? 'string' : 'empty',
223
- };
224
- }
225
- });
226
-
227
- function onSelect(item: { label: string; value: string }) {
228
- currentSelect.value = item.value;
229
- }
230
-
231
- function onClickUrl() {
232
- uni.setClipboardData({
233
- data: props.network.url,
234
- success() {
235
- uni.showToast({
236
- title: t('common.copySuccess'),
237
- icon: 'none',
238
- });
239
- },
240
- fail() {
241
- uni.showToast({
242
- title: t('common.copyFail'),
243
- icon: 'none',
244
- });
245
- },
246
- });
247
- }
248
- </script>
249
- <style scoped>
250
- .network-detail {
251
- position: fixed;
252
- width: 100vw;
253
- height: 100%;
254
- top: 0;
255
- left: 0;
256
- padding: 0 16px;
257
- background-color: var(--dev-tool-bg3-color);
258
- box-sizing: border-box;
259
- }
260
-
261
- .network-detail-control {
262
- display: flex;
263
- align-items: center;
264
-
265
- /* margin-bottom: 4px; */
266
- height: 32px;
267
- border-bottom: 1px solid transparent;
268
- box-sizing: border-box;
269
- }
270
-
271
- .net-detail-url {
272
- text-decoration: underline;
273
- }
274
-
275
- .net-detail-item {
276
- display: flex;
277
- align-items: center;
278
- min-height: 28px;
279
- word-break: break-all;
280
- }
281
-
282
- .network-detail-base {
283
- overflow: auto;
284
- }
285
-
286
- .net-detail-item-key {
287
- white-space: nowrap;
288
- margin-right: 8px;
289
- color: var(--dev-tool-info-color);
290
- }
291
-
292
- .network-detail-payload {
293
- word-break: break-all;
294
- max-width: 100%;
295
- }
296
- </style>
1
+ <template>
2
+ <view class="network-detail" :style="customStyle">
3
+ <view class="network-detail-control">
4
+ <DevToolTitle>{{ t('network.requestDetail') }}</DevToolTitle>
5
+ <Tag
6
+ mode="info"
7
+ v-for="item in translatedSelectItems"
8
+ :active="item.value === currentSelect"
9
+ :key="item.value"
10
+ customStyle="margin-left: 16px"
11
+ @click="onSelect(item)">
12
+ {{ item.label }}
13
+ </Tag>
14
+ <CircularButton
15
+ style="margin-left: auto"
16
+ text="×"
17
+ @click="emit('close')" />
18
+ </view>
19
+
20
+ <scroll-view
21
+ scroll-y
22
+ class="network-detail-base"
23
+ :style="{ height: contentHeight - 32 + 'px' }"
24
+ v-if="currentSelect === 'base'"
25
+ @touchmove.stop>
26
+ <!--
27
+ @touchmove.stop
28
+ [Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted.
29
+ -->
30
+ <DevToolTitle>{{ t('network.general') }}</DevToolTitle>
31
+ <view class="net-detail-item">
32
+ <view class="net-detail-item-key">{{ t('network.requestUrl') }}:</view>
33
+ <view class="net-detail-url" @click="onClickUrl">
34
+ {{ network.url }}
35
+ </view>
36
+ </view>
37
+ <view class="net-detail-item">
38
+ <view class="net-detail-item-key">{{ t('network.method') }}:</view>
39
+ <Tag mode="info">{{ network.method }}</Tag>
40
+ </view>
41
+ <view class="net-detail-item">
42
+ <view class="net-detail-item-key">{{ t('network.statusCode') }}:</view>
43
+ {{ network.status }}
44
+
45
+ <Tag v-if="network.intercepted" mode="error" style="margin-left: 6px">
46
+ {{ t('network.intercepted') }}
47
+ </Tag>
48
+ </view>
49
+ <view class="net-detail-item">
50
+ <view class="net-detail-item-key">{{ t('common.startTime') }}:</view>
51
+ {{
52
+ network.startTime
53
+ ? formatDate(network.startTime, 'HH:mm:ss:SS')
54
+ : '--:--:--'
55
+ }}
56
+ </view>
57
+ <view class="net-detail-item">
58
+ <view class="net-detail-item-key">{{ t('common.endTime') }}:</view>
59
+ {{
60
+ network.endTime
61
+ ? formatDate(network.endTime, 'HH:mm:ss:SS')
62
+ : '--:--:--'
63
+ }}
64
+ </view>
65
+ <view class="net-detail-item">
66
+ <view class="net-detail-item-key">{{ t('network.duration') }}:</view>
67
+ {{ network.time ?? '--' }}
68
+ </view>
69
+ <view class="net-detail-item">
70
+ <view class="net-detail-item-key">{{ t('network.size') }}:</view>
71
+ {{ network.size ?? '--' }}
72
+ </view>
73
+
74
+ <view class="net-detail-item">
75
+ <view class="net-detail-item-key">{{ t('network.sponsor') }}:</view>
76
+ {{ network.sponsor }}
77
+ </view>
78
+
79
+ <DevToolTitle>{{ t('network.requestHeaders') }}</DevToolTitle>
80
+ <template v-if="network.headers.requestHeader.length > 0">
81
+ <view
82
+ class="net-detail-item"
83
+ v-for="item in network.headers.requestHeader"
84
+ :key="item.key">
85
+ <view class="net-detail-item-key">{{ item.key }}:</view>
86
+ {{ item.value }}
87
+ </view>
88
+ </template>
89
+ <view v-else>
90
+ <Empty :text="t('network.noRequestHeaders')" />
91
+ </view>
92
+
93
+ <DevToolTitle>{{ t('network.responseHeaders') }}</DevToolTitle>
94
+ <template v-if="network.headers.responseHeader.length > 0">
95
+ <view
96
+ class="net-detail-item"
97
+ v-for="item in network.headers.responseHeader"
98
+ :key="item.key">
99
+ <view class="net-detail-item-key">{{ item.key }}:</view>
100
+ {{ item.value }}
101
+ </view>
102
+ </template>
103
+ <view v-else>
104
+ <Empty :text="t('network.noResponseHeaders')" />
105
+ </view>
106
+ </scroll-view>
107
+ <template v-if="currentSelect === 'payload'">
108
+ <template v-if="payload?.type === 'object'">
109
+ <JsonPretty
110
+ virtual
111
+ :data="payload.value"
112
+ :height="contentHeight - 32"
113
+ :nodeSelectable="() => false"
114
+ :pathCollapsible="() => false" />
115
+ </template>
116
+ <view
117
+ v-else-if="payload?.type === 'string'"
118
+ class="network-detail-payload">
119
+ {{ payload.value }}
120
+ </view>
121
+ <Empty v-else />
122
+ </template>
123
+
124
+ <template v-if="currentSelect === 'response'">
125
+ <template v-if="response?.type === 'object'">
126
+ <JsonPretty
127
+ virtual
128
+ :data="response.value"
129
+ :height="contentHeight - 32"
130
+ :nodeSelectable="() => false"
131
+ :pathCollapsible="() => false" />
132
+ </template>
133
+ <view
134
+ v-else-if="response?.type === 'string'"
135
+ class="network-detail-payload">
136
+ {{ response.value }}
137
+ </view>
138
+ <Empty v-else />
139
+ </template>
140
+ </view>
141
+ </template>
142
+ <script lang="ts" setup>
143
+ import { ref, computed } from 'vue';
144
+ import JsonPretty from '../../../components/JsonPretty/index.vue';
145
+ import Tag from '../../../components/Tag/index.vue';
146
+ import Empty from '../../../components/Empty/index.vue';
147
+ import CircularButton from '../../../components/CircularButton/index.vue';
148
+ import DevToolTitle from '../DevToolTitle/index.vue';
149
+ import type { DevTool } from '../../../../type';
150
+ import { formatDate } from '../../../../utils';
151
+ import { useI18n } from '../../../../i18n';
152
+
153
+ const { t } = useI18n();
154
+ const props = defineProps<{
155
+ network: DevTool.NetworkItem;
156
+ zIndex?: number;
157
+ contentHeight: number;
158
+ customStyle?: Record<string, any>;
159
+ }>();
160
+ const emit = defineEmits<{ (e: 'close'): void }>();
161
+ const translatedSelectItems = computed(() => [
162
+ {
163
+ label: t('common.base'),
164
+ value: 'base',
165
+ },
166
+ {
167
+ label: t('common.payload'),
168
+ value: 'payload',
169
+ },
170
+ {
171
+ label: t('common.response'),
172
+ value: 'response',
173
+ },
174
+ ]);
175
+
176
+ const currentSelect = ref('base');
177
+
178
+ const payload = computed(() => {
179
+ try {
180
+ if (props.network.payload) {
181
+ return {
182
+ value: JSON.parse(props.network.payload),
183
+ type: 'object',
184
+ };
185
+ }
186
+ return {
187
+ value: {},
188
+ type: 'empty',
189
+ };
190
+ } catch (_error) {
191
+ return {
192
+ value: props.network.payload,
193
+ type: props.network.payload ? 'string' : 'empty',
194
+ };
195
+ }
196
+ });
197
+
198
+ const response = computed(() => {
199
+ try {
200
+ if (props.network.response) {
201
+ return {
202
+ value: JSON.parse(JSON.stringify(props.network.response)),
203
+ type: 'object',
204
+ };
205
+ }
206
+ return {
207
+ value: {},
208
+ type: 'empty',
209
+ };
210
+ } catch (_error) {
211
+ return {
212
+ value: props.network.response,
213
+ type: props.network.response ? 'string' : 'empty',
214
+ };
215
+ }
216
+ });
217
+
218
+ function onSelect(item: { label: string; value: string }) {
219
+ currentSelect.value = item.value;
220
+ }
221
+
222
+ function onClickUrl() {
223
+ uni.setClipboardData({
224
+ data: props.network.url,
225
+ success() {
226
+ uni.showToast({
227
+ title: t('common.copySuccess'),
228
+ icon: 'none',
229
+ });
230
+ },
231
+ fail() {
232
+ uni.showToast({
233
+ title: t('common.copyFail'),
234
+ icon: 'none',
235
+ });
236
+ },
237
+ });
238
+ }
239
+ </script>
240
+ <style scoped>
241
+ .network-detail {
242
+ position: fixed;
243
+ width: 100vw;
244
+ height: 100%;
245
+ top: 0;
246
+ left: 0;
247
+ padding: 0 16px;
248
+ background-color: var(--dev-tool-bg3-color);
249
+ box-sizing: border-box;
250
+ }
251
+
252
+ .network-detail-control {
253
+ display: flex;
254
+ align-items: center;
255
+
256
+ /* margin-bottom: 4px; */
257
+ height: 32px;
258
+ border-bottom: 1px solid transparent;
259
+ box-sizing: border-box;
260
+ }
261
+
262
+ .net-detail-url {
263
+ text-decoration: underline;
264
+ }
265
+
266
+ .net-detail-item {
267
+ display: flex;
268
+ align-items: center;
269
+ min-height: 28px;
270
+ word-break: break-all;
271
+ }
272
+
273
+ .network-detail-base {
274
+ overflow: auto;
275
+ }
276
+
277
+ .net-detail-item-key {
278
+ white-space: nowrap;
279
+ margin-right: 8px;
280
+ color: var(--dev-tool-info-color);
281
+ }
282
+
283
+ .network-detail-payload {
284
+ word-break: break-all;
285
+ max-width: 100%;
286
+ }
287
+ </style>