vite-uni-dev-tool 0.0.21 → 0.0.23
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.
- package/README.md +13 -3
- package/dist/const.d.ts +16 -0
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +29 -25
- package/dist/core.d.ts +3 -3
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +89 -49
- package/dist/devEvent/index.d.ts +34 -0
- package/dist/devEvent/index.d.ts.map +1 -1
- package/dist/devEvent/index.js +71 -27
- package/dist/devIntercept/index.d.ts.map +1 -1
- package/dist/devIntercept/index.js +195 -157
- package/dist/devStore/index.d.ts +9 -0
- package/dist/devStore/index.d.ts.map +1 -1
- package/dist/devStore/index.js +54 -20
- package/dist/plugins/uniDevTool/uniDevTool.d.ts +1 -1
- package/dist/plugins/uniDevTool/uniDevTool.d.ts.map +1 -1
- package/dist/type.d.ts +22 -2
- package/dist/type.d.ts.map +1 -1
- package/dist/v2/DevTool/index.vue +8 -8
- package/dist/v3/ConsoleList/ConsoleItem.vue +1 -1
- package/dist/v3/DevTool/index.vue +13 -12
- package/dist/v3/DevToolWindow/const.d.ts +30 -0
- package/dist/v3/DevToolWindow/const.d.ts.map +1 -0
- package/dist/v3/DevToolWindow/const.ts +123 -0
- package/dist/v3/DevToolWindow/index.vue +242 -108
- package/dist/v3/NetworkList/InterceptConfig.vue +835 -0
- package/dist/v3/NetworkList/InterceptItem.vue +132 -0
- package/dist/v3/NetworkList/NetworkDetail.vue +25 -13
- package/dist/v3/NetworkList/NetworkIntercept.vue +85 -0
- package/dist/v3/NetworkList/NetworkItem.vue +18 -29
- package/dist/v3/NetworkList/NetworkSend.vue +61 -45
- package/dist/v3/NetworkList/index.vue +11 -67
- package/dist/v3/SettingList/index.vue +26 -2
- package/dist/v3/SettingList/typing.d.ts +2 -0
- package/dist/v3/SourceCode/Line.vue +3 -3
- package/dist/v3/SourceCode/index.vue +1 -2
- package/dist/v3/Tag/index.vue +1 -0
- package/dist/v3/UploadList/UploadDetail.vue +36 -18
- package/dist/v3/UploadList/UploadItem.vue +38 -34
- package/dist/v3/UploadList/index.vue +12 -1
- package/dist/v3/VirtualListPro/index.vue +15 -12
- package/dist/v3/WebSocket/WebSocketDetail.vue +258 -0
- package/dist/v3/WebSocket/WebSocketItem.vue +14 -30
- package/dist/v3/WebSocket/index.vue +6 -1
- package/package.json +1 -1
- package/dist/v3/WebSocket/WebSocketList.vue +0 -161
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<view class="intercept-item" @click.stop="emit('openConfig', network)">
|
|
3
|
+
<view class="intercept-url-row">
|
|
4
|
+
<Tag mode="info">{{ network.method }}</Tag>
|
|
5
|
+
|
|
6
|
+
<view class="intercept-url"> {{ lastUrl }} </view>
|
|
7
|
+
|
|
8
|
+
<Tag
|
|
9
|
+
mode="error"
|
|
10
|
+
class="intercept-detail-icon"
|
|
11
|
+
@click.stop="emit('remove', network)"
|
|
12
|
+
>
|
|
13
|
+
删除
|
|
14
|
+
</Tag>
|
|
15
|
+
</view>
|
|
16
|
+
<view class="intercept-info">
|
|
17
|
+
<view class="intercept-info-item">
|
|
18
|
+
期待状态:
|
|
19
|
+
<Tag :mode="tagMode" style="margin-left: 6px">{{ network.status }}</Tag>
|
|
20
|
+
</view>
|
|
21
|
+
<view class="intercept-info-item">
|
|
22
|
+
期待结果:
|
|
23
|
+
{{ expectingResults }}
|
|
24
|
+
</view>
|
|
25
|
+
</view>
|
|
26
|
+
</view>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<script lang="ts" setup>
|
|
30
|
+
import { computed } from 'vue';
|
|
31
|
+
|
|
32
|
+
import Tag from '../Tag/index.vue';
|
|
33
|
+
import { formatDate } from '../../utils';
|
|
34
|
+
import type { DevTool } from '../../type';
|
|
35
|
+
const props = defineProps<{
|
|
36
|
+
network: DevTool.NetworkItem;
|
|
37
|
+
|
|
38
|
+
zIndex?: number;
|
|
39
|
+
mode?: string;
|
|
40
|
+
useDevSource?: boolean;
|
|
41
|
+
}>();
|
|
42
|
+
|
|
43
|
+
const emit = defineEmits<{
|
|
44
|
+
(e: 'openDetail'): void;
|
|
45
|
+
(e: 'resend'): void;
|
|
46
|
+
(e: 'openCode', value?: string): void;
|
|
47
|
+
(e: 'openConfig', value?: DevTool.NetworkItem): void;
|
|
48
|
+
(e: 'remove', value: DevTool.NetworkItem): void;
|
|
49
|
+
}>();
|
|
50
|
+
|
|
51
|
+
const lastUrl = computed(() => {
|
|
52
|
+
const start = props.network.url.lastIndexOf('/');
|
|
53
|
+
return props.network.url.slice(start + 1);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
const tagMode = computed(() => {
|
|
57
|
+
const status = props.network.status;
|
|
58
|
+
return status === 'pending'
|
|
59
|
+
? 'info'
|
|
60
|
+
: /[4,5]\d{2,}/.test(status + '') || status === 'error'
|
|
61
|
+
? 'error'
|
|
62
|
+
: 'success';
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const expectingResults = computed(() => {
|
|
66
|
+
return props.network.response.data ? '自定义' : '无';
|
|
67
|
+
});
|
|
68
|
+
</script>
|
|
69
|
+
<style scoped>
|
|
70
|
+
.intercept-item {
|
|
71
|
+
padding: 16px;
|
|
72
|
+
border-bottom: 1px solid var(--dev-tool-border-color);
|
|
73
|
+
font-size: var(--dev-tool-base-font-size);
|
|
74
|
+
}
|
|
75
|
+
.intercept-url-row {
|
|
76
|
+
display: flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.intercept-url {
|
|
81
|
+
margin-left: 4px;
|
|
82
|
+
flex: 1;
|
|
83
|
+
white-space: nowrap;
|
|
84
|
+
overflow: hidden;
|
|
85
|
+
text-overflow: ellipsis;
|
|
86
|
+
}
|
|
87
|
+
.intercept-detail-icon {
|
|
88
|
+
margin-left: auto;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.intercept-info {
|
|
92
|
+
display: flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
justify-content: space-between;
|
|
95
|
+
margin-top: 4px;
|
|
96
|
+
color: var(--dev-tool-text-color);
|
|
97
|
+
transition: color 0.3s;
|
|
98
|
+
}
|
|
99
|
+
.intercept-info-item {
|
|
100
|
+
display: flex;
|
|
101
|
+
align-items: center;
|
|
102
|
+
width: 50%;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.slide-fade-enter-active {
|
|
106
|
+
transition: all 0.8s ease-out;
|
|
107
|
+
}
|
|
108
|
+
.slide-fade-leave-active {
|
|
109
|
+
transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
|
|
110
|
+
}
|
|
111
|
+
.slide-fade-enter-from,
|
|
112
|
+
.slide-fade-leave-to {
|
|
113
|
+
transform: translateY(20px);
|
|
114
|
+
opacity: 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.intercept-time-line {
|
|
118
|
+
position: relative;
|
|
119
|
+
margin-top: 10px;
|
|
120
|
+
height: 2px;
|
|
121
|
+
min-width: 6px;
|
|
122
|
+
background-color: var(--dev-tool-time-line-color);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.intercept-stock {
|
|
126
|
+
text-align: right;
|
|
127
|
+
word-wrap: break-word;
|
|
128
|
+
}
|
|
129
|
+
.intercept-stock-link {
|
|
130
|
+
text-decoration: underline;
|
|
131
|
+
}
|
|
132
|
+
</style>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view class="network-detail" :style="{ zIndex: zIndex }">
|
|
3
3
|
<view class="network-detail-control">
|
|
4
|
+
<DevToolTitle style="margin-right: 16px"> 请求详情 </DevToolTitle>
|
|
4
5
|
<Tag
|
|
5
6
|
mode="info"
|
|
6
7
|
v-for="item in selectItems"
|
|
@@ -13,8 +14,12 @@
|
|
|
13
14
|
<CircularButton style="margin-left: auto" text="×" @click="onClose" />
|
|
14
15
|
</view>
|
|
15
16
|
|
|
16
|
-
<view
|
|
17
|
-
|
|
17
|
+
<view
|
|
18
|
+
class="network-detail-header"
|
|
19
|
+
:style="{ height: height + 'px' }"
|
|
20
|
+
v-if="currentSelect === 'header'"
|
|
21
|
+
>
|
|
22
|
+
<DevToolTitle> 常规 </DevToolTitle>
|
|
18
23
|
<view class="net-detail-item">
|
|
19
24
|
<view>请求地址:</view>
|
|
20
25
|
<view>{{ network.url }}</view>
|
|
@@ -26,6 +31,10 @@
|
|
|
26
31
|
<view class="net-detail-item">
|
|
27
32
|
<view>状态代码:</view>
|
|
28
33
|
{{ network.status }}
|
|
34
|
+
|
|
35
|
+
<Tag v-if="network.intercepted" mode="error" style="margin-left: 6px">
|
|
36
|
+
已拦截
|
|
37
|
+
</Tag>
|
|
29
38
|
</view>
|
|
30
39
|
<view class="net-detail-item">
|
|
31
40
|
<view>开始时间:</view>
|
|
@@ -82,7 +91,6 @@
|
|
|
82
91
|
<Empty text="暂无响应头" />
|
|
83
92
|
</view>
|
|
84
93
|
</view>
|
|
85
|
-
|
|
86
94
|
<template v-if="currentSelect === 'payload'">
|
|
87
95
|
<template v-if="payload?.type === 'object'">
|
|
88
96
|
<JsonPretty :data="payload.value" virtual :height="height" />
|
|
@@ -198,44 +206,48 @@ onMounted(() => {
|
|
|
198
206
|
position: fixed;
|
|
199
207
|
width: 100vw;
|
|
200
208
|
height: 100%;
|
|
201
|
-
|
|
202
|
-
/* z-index: 1001; */
|
|
209
|
+
|
|
203
210
|
top: 0;
|
|
204
211
|
left: 0;
|
|
205
212
|
padding: 0 16px;
|
|
213
|
+
/* #ifdef H5 */
|
|
214
|
+
padding: 50px 16px;
|
|
215
|
+
/* #endif */
|
|
206
216
|
|
|
207
217
|
background-color: var(--dev-tool-bg3-color);
|
|
208
218
|
box-sizing: border-box;
|
|
209
219
|
}
|
|
210
|
-
.network-detail
|
|
220
|
+
.network-detail-control {
|
|
211
221
|
display: flex;
|
|
212
222
|
align-items: center;
|
|
213
223
|
/* margin-bottom: 4px; */
|
|
214
|
-
gap: 12px;
|
|
215
224
|
height: 32px;
|
|
216
225
|
border-bottom: 1px solid transparent;
|
|
217
226
|
box-sizing: border-box;
|
|
218
227
|
}
|
|
219
|
-
|
|
220
|
-
.network-detail .network-detail-control :deep(.tag) {
|
|
228
|
+
.network-detail-control :deep(.tag) {
|
|
221
229
|
margin-right: 16px;
|
|
222
230
|
}
|
|
223
|
-
.network-detail
|
|
231
|
+
.network-detail-control :deep(.tag):last-child {
|
|
224
232
|
margin-right: 0;
|
|
225
233
|
}
|
|
226
234
|
|
|
227
|
-
.
|
|
235
|
+
.net-detail-item {
|
|
228
236
|
display: flex;
|
|
229
237
|
align-items: center;
|
|
230
238
|
min-height: 28px;
|
|
231
239
|
word-break: break-all;
|
|
240
|
+
font-size: 12px;
|
|
241
|
+
}
|
|
242
|
+
.network-detail-header {
|
|
243
|
+
overflow: auto;
|
|
232
244
|
}
|
|
233
|
-
.
|
|
245
|
+
.net-detail-item > view:first-child {
|
|
234
246
|
white-space: nowrap;
|
|
235
247
|
margin-right: 8px;
|
|
236
248
|
color: var(--dev-tool-info-color);
|
|
237
249
|
}
|
|
238
|
-
.network-detail
|
|
250
|
+
.network-detail-payload {
|
|
239
251
|
word-break: break-all;
|
|
240
252
|
max-width: 100%;
|
|
241
253
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<view class="network-intercept" :style="{ zIndex: zIndex }">
|
|
3
|
+
<view class="network-intercept-control">
|
|
4
|
+
<DevToolTitle>请求拦截</DevToolTitle>
|
|
5
|
+
<CircularButton
|
|
6
|
+
style="margin-left: auto"
|
|
7
|
+
text="+"
|
|
8
|
+
@click="emit('openConfig')"
|
|
9
|
+
/>
|
|
10
|
+
<CircularButton
|
|
11
|
+
style="margin-left: 6px"
|
|
12
|
+
text="×"
|
|
13
|
+
@click="emit('close')"
|
|
14
|
+
/>
|
|
15
|
+
</view>
|
|
16
|
+
<VirtualListPro
|
|
17
|
+
class="network-intercept-list"
|
|
18
|
+
:data="interceptNetworkList"
|
|
19
|
+
:pageSize="15"
|
|
20
|
+
v-if="interceptNetworkList && interceptNetworkList.length > 0"
|
|
21
|
+
>
|
|
22
|
+
<template v-slot="{ list, start }">
|
|
23
|
+
<AutoSize
|
|
24
|
+
v-for="(item, index) in list"
|
|
25
|
+
:index="start + index"
|
|
26
|
+
:key="start + index"
|
|
27
|
+
>
|
|
28
|
+
<InterceptItem
|
|
29
|
+
:network="item"
|
|
30
|
+
@openConfig="emit('openConfig', $event)"
|
|
31
|
+
@remove="emit('remove', $event)"
|
|
32
|
+
/>
|
|
33
|
+
</AutoSize>
|
|
34
|
+
</template>
|
|
35
|
+
</VirtualListPro>
|
|
36
|
+
<Empty v-else />
|
|
37
|
+
</view>
|
|
38
|
+
</template>
|
|
39
|
+
<script lang="ts" setup>
|
|
40
|
+
import type { DevTool } from '../../type';
|
|
41
|
+
import CircularButton from '../CircularButton/index.vue';
|
|
42
|
+
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
43
|
+
import InterceptItem from './InterceptItem.vue';
|
|
44
|
+
import VirtualListPro from '../VirtualListPro/index.vue';
|
|
45
|
+
import AutoSize from '../VirtualListPro/AutoSize.vue';
|
|
46
|
+
import Empty from '../Empty/index.vue';
|
|
47
|
+
|
|
48
|
+
const props = defineProps<{
|
|
49
|
+
zIndex?: number;
|
|
50
|
+
interceptNetworkList?: DevTool.NetworkItem[];
|
|
51
|
+
}>();
|
|
52
|
+
const emit = defineEmits<{
|
|
53
|
+
(e: 'close'): void;
|
|
54
|
+
(e: 'remove', value: DevTool.NetworkItem): void;
|
|
55
|
+
(e: 'openConfig', value?: DevTool.NetworkItem): void;
|
|
56
|
+
}>();
|
|
57
|
+
</script>
|
|
58
|
+
<style lang="scss" scoped>
|
|
59
|
+
.network-intercept {
|
|
60
|
+
position: fixed;
|
|
61
|
+
width: 100vw;
|
|
62
|
+
height: 100%;
|
|
63
|
+
top: 0;
|
|
64
|
+
left: 0;
|
|
65
|
+
|
|
66
|
+
/* #ifdef H5 */
|
|
67
|
+
padding: 50px 0px;
|
|
68
|
+
/* #endif */
|
|
69
|
+
|
|
70
|
+
overflow: auto;
|
|
71
|
+
|
|
72
|
+
background-color: var(--dev-tool-bg3-color);
|
|
73
|
+
box-sizing: border-box;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.network-intercept-control {
|
|
77
|
+
padding: 0 16px;
|
|
78
|
+
display: flex;
|
|
79
|
+
align-items: center;
|
|
80
|
+
gap: 12px;
|
|
81
|
+
height: 32px;
|
|
82
|
+
border-bottom: 1px solid var(--dev-tool-border-color);
|
|
83
|
+
box-sizing: border-box;
|
|
84
|
+
}
|
|
85
|
+
</style>
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view class="network-item" @click="emit('openDetail')">
|
|
3
3
|
<view class="network-url-row">
|
|
4
|
+
<Tag mode="error" style="margin-right: 6px" v-if="network?.intercepted">
|
|
5
|
+
拦
|
|
6
|
+
</Tag>
|
|
4
7
|
<Tag mode="info">{{ network.method }}</Tag>
|
|
5
8
|
|
|
6
9
|
<view class="network-url" v-html="lastUrl"> </view>
|
|
@@ -10,20 +13,7 @@
|
|
|
10
13
|
</Tag>
|
|
11
14
|
</view>
|
|
12
15
|
<view class="network-info">
|
|
13
|
-
<
|
|
14
|
-
<Tag
|
|
15
|
-
:mode="
|
|
16
|
-
network.status === 'pending'
|
|
17
|
-
? 'info'
|
|
18
|
-
: /[4,5]\d{2,}/.test(network.status + '') ||
|
|
19
|
-
network.status === 'error'
|
|
20
|
-
? 'error'
|
|
21
|
-
: 'success'
|
|
22
|
-
"
|
|
23
|
-
>{{ network.status }}</Tag
|
|
24
|
-
>
|
|
25
|
-
</view>
|
|
26
|
-
<!-- <view>{{ network.status }}</view> -->
|
|
16
|
+
<Tag :mode="tagMode">{{ network.status }}</Tag>
|
|
27
17
|
<view>{{ network.time }}</view>
|
|
28
18
|
<view>{{ network.size }}</view>
|
|
29
19
|
<view>
|
|
@@ -32,9 +22,9 @@
|
|
|
32
22
|
{{
|
|
33
23
|
network.startTime
|
|
34
24
|
? formatDate(network.startTime, 'HH:mm:ss:SS')
|
|
35
|
-
: '
|
|
36
|
-
}}
|
|
37
|
-
>
|
|
25
|
+
: '--:--:--:---'
|
|
26
|
+
}}
|
|
27
|
+
</view>
|
|
38
28
|
<view>
|
|
39
29
|
结束:
|
|
40
30
|
{{
|
|
@@ -89,6 +79,15 @@ const isUseDevSource = computed(() => {
|
|
|
89
79
|
props.useDevSource
|
|
90
80
|
);
|
|
91
81
|
});
|
|
82
|
+
|
|
83
|
+
const tagMode = computed(() => {
|
|
84
|
+
const status = props.network.status;
|
|
85
|
+
return status === 'pending'
|
|
86
|
+
? 'info'
|
|
87
|
+
: /[4,5]\d{2,}/.test(status + '') || status === 'error'
|
|
88
|
+
? 'error'
|
|
89
|
+
: 'success';
|
|
90
|
+
});
|
|
92
91
|
</script>
|
|
93
92
|
<style scoped>
|
|
94
93
|
.network-item {
|
|
@@ -102,8 +101,9 @@ const isUseDevSource = computed(() => {
|
|
|
102
101
|
}
|
|
103
102
|
|
|
104
103
|
.network-url {
|
|
105
|
-
margin-left:
|
|
104
|
+
margin-left: 6px;
|
|
106
105
|
flex: 1;
|
|
106
|
+
max-width: 300px;
|
|
107
107
|
white-space: nowrap;
|
|
108
108
|
overflow: hidden;
|
|
109
109
|
text-overflow: ellipsis;
|
|
@@ -120,17 +120,6 @@ const isUseDevSource = computed(() => {
|
|
|
120
120
|
color: var(--dev-tool-text-color);
|
|
121
121
|
transition: color 0.3s;
|
|
122
122
|
}
|
|
123
|
-
.slide-fade-enter-active {
|
|
124
|
-
transition: all 0.8s ease-out;
|
|
125
|
-
}
|
|
126
|
-
.slide-fade-leave-active {
|
|
127
|
-
transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
|
|
128
|
-
}
|
|
129
|
-
.slide-fade-enter-from,
|
|
130
|
-
.slide-fade-leave-to {
|
|
131
|
-
transform: translateY(20px);
|
|
132
|
-
opacity: 0;
|
|
133
|
-
}
|
|
134
123
|
|
|
135
124
|
.network-time-line {
|
|
136
125
|
position: relative;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view class="network-send" :style="{ zIndex: zIndex }">
|
|
3
|
+
<view class="network-send-control">
|
|
4
|
+
<DevToolTitle>发起请求</DevToolTitle>
|
|
5
|
+
<CircularButton style="margin-left: auto" text="×" @click="onClose" />
|
|
6
|
+
</view>
|
|
3
7
|
<view class="network-send-form">
|
|
4
8
|
<view class="network-send-control">
|
|
5
9
|
<DevToolTitle>超时时间</DevToolTitle>
|
|
@@ -11,7 +15,6 @@
|
|
|
11
15
|
/>
|
|
12
16
|
<view class="network-send-control">
|
|
13
17
|
<DevToolTitle>请求方式</DevToolTitle>
|
|
14
|
-
<CircularButton style="margin-left: auto" text="×" @click="onClose" />
|
|
15
18
|
</view>
|
|
16
19
|
<radio-group class="radio-group" @change="onChangeRequestMethod">
|
|
17
20
|
<label
|
|
@@ -22,6 +25,7 @@
|
|
|
22
25
|
<radio
|
|
23
26
|
size
|
|
24
27
|
style="transform: scale(0.8)"
|
|
28
|
+
color="#9254de"
|
|
25
29
|
:value="item.value"
|
|
26
30
|
:checked="item.value === state.method"
|
|
27
31
|
/>
|
|
@@ -48,7 +52,7 @@
|
|
|
48
52
|
v-for="(item, index) in headerList"
|
|
49
53
|
:key="item.id"
|
|
50
54
|
>
|
|
51
|
-
<checkbox :checked="item.checked" />
|
|
55
|
+
<checkbox color="#9254de" :checked="item.checked" />
|
|
52
56
|
<input
|
|
53
57
|
class="network-input"
|
|
54
58
|
placeholder="请输入请求头名称"
|
|
@@ -103,7 +107,11 @@
|
|
|
103
107
|
v-for="(item, index) in queryList"
|
|
104
108
|
:key="item.id"
|
|
105
109
|
>
|
|
106
|
-
<checkbox
|
|
110
|
+
<checkbox
|
|
111
|
+
color="#9254de"
|
|
112
|
+
:checked="item.checked"
|
|
113
|
+
:value="item.id"
|
|
114
|
+
/>
|
|
107
115
|
<input
|
|
108
116
|
class="network-input"
|
|
109
117
|
placeholder="请输入参数名称"
|
|
@@ -142,20 +150,17 @@
|
|
|
142
150
|
@input="onChangeState($event, 'bodyText')"
|
|
143
151
|
/>
|
|
144
152
|
</template>
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
<
|
|
155
|
-
|
|
156
|
-
:network="network"
|
|
157
|
-
@close="onCloseDetail"
|
|
158
|
-
/>
|
|
153
|
+
</view>
|
|
154
|
+
<view class="network-send-buttons">
|
|
155
|
+
<button
|
|
156
|
+
size="mini"
|
|
157
|
+
:disabled="!isFinished"
|
|
158
|
+
@click="emit('openDetail', network)"
|
|
159
|
+
>
|
|
160
|
+
详情
|
|
161
|
+
</button>
|
|
162
|
+
<button size="mini" @click="onReset">重置</button>
|
|
163
|
+
<button size="mini" @click="onSend">发送</button>
|
|
159
164
|
</view>
|
|
160
165
|
</view>
|
|
161
166
|
</template>
|
|
@@ -163,12 +168,18 @@
|
|
|
163
168
|
import { ref, reactive, onMounted } from 'vue';
|
|
164
169
|
import CircularButton from '../CircularButton/index.vue';
|
|
165
170
|
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
166
|
-
import NetworkDetail from './NetworkDetail.vue';
|
|
167
171
|
import type { DevTool } from '../../type';
|
|
168
172
|
|
|
169
|
-
const props = defineProps<{
|
|
173
|
+
const props = defineProps<{
|
|
174
|
+
network: DevTool.NetworkItem;
|
|
175
|
+
zIndex?: number;
|
|
176
|
+
interceptNetworkList?: DevTool.NetworkItem[];
|
|
177
|
+
}>();
|
|
170
178
|
|
|
171
|
-
const emit = defineEmits<{
|
|
179
|
+
const emit = defineEmits<{
|
|
180
|
+
(e: 'close'): void;
|
|
181
|
+
(e: 'openDetail', v: DevTool.NetworkItem): void;
|
|
182
|
+
}>();
|
|
172
183
|
|
|
173
184
|
const requestMethods = [
|
|
174
185
|
{ name: 'GET', value: 'GET' },
|
|
@@ -241,8 +252,6 @@ const queryList = reactive<PB[]>([
|
|
|
241
252
|
|
|
242
253
|
const isFinished = ref(false);
|
|
243
254
|
|
|
244
|
-
const showDetail = ref(false);
|
|
245
|
-
|
|
246
255
|
const network = reactive<DevTool.NetworkItem>({
|
|
247
256
|
index: 0,
|
|
248
257
|
url: '',
|
|
@@ -257,8 +266,15 @@ const network = reactive<DevTool.NetworkItem>({
|
|
|
257
266
|
requestHeader: [],
|
|
258
267
|
responseHeader: [],
|
|
259
268
|
},
|
|
260
|
-
response:
|
|
269
|
+
response: {
|
|
270
|
+
data: undefined,
|
|
271
|
+
statusCode: 0,
|
|
272
|
+
header: {},
|
|
273
|
+
cookies: [],
|
|
274
|
+
errMsg: '',
|
|
275
|
+
},
|
|
261
276
|
payload: undefined,
|
|
277
|
+
intercepted: false,
|
|
262
278
|
});
|
|
263
279
|
|
|
264
280
|
const noBodyRequestMethods = ['GET', 'HEAD', 'PATCH', 'OPTIONS'];
|
|
@@ -296,14 +312,6 @@ function onChangeUrl(e: any) {
|
|
|
296
312
|
queryList.splice(0, queryList.length, ...list);
|
|
297
313
|
}
|
|
298
314
|
|
|
299
|
-
function onDetail() {
|
|
300
|
-
showDetail.value = true;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
function onCloseDetail() {
|
|
304
|
-
showDetail.value = false;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
315
|
function onReset() {
|
|
308
316
|
isFinished.value = false;
|
|
309
317
|
hasUrl.value = true;
|
|
@@ -399,18 +407,17 @@ function onSend() {
|
|
|
399
407
|
res?.header?.['Content-Length'] || res?.header?.['content-length'] || 0;
|
|
400
408
|
network.size = len > 1024 ? (len / 1024).toFixed(2) + 'k' : len + 'b';
|
|
401
409
|
network.response = res;
|
|
402
|
-
network.headers.requestHeader =
|
|
410
|
+
network.headers.requestHeader = objectToArray(
|
|
403
411
|
requestOptions?.header ?? {},
|
|
404
|
-
).map(([key, value]) => ({
|
|
405
|
-
key,
|
|
406
|
-
value,
|
|
407
|
-
}));
|
|
408
|
-
network.headers.responseHeader = Object.entries(res?.header ?? {}).map(
|
|
409
|
-
([key, value]) => ({
|
|
410
|
-
key,
|
|
411
|
-
value,
|
|
412
|
-
}),
|
|
413
412
|
);
|
|
413
|
+
network.headers.responseHeader = objectToArray(res.header ?? {});
|
|
414
|
+
|
|
415
|
+
network.intercepted =
|
|
416
|
+
props.interceptNetworkList?.some((item) => {
|
|
417
|
+
const key = `${item.method?.toUpperCase()}|${item.url?.split('?')[0]}`;
|
|
418
|
+
const curKey = `${network.method?.toUpperCase()}|${network.url?.split('?')[0]}`;
|
|
419
|
+
return key === curKey;
|
|
420
|
+
}) ?? false;
|
|
414
421
|
|
|
415
422
|
// 完成
|
|
416
423
|
uni.hideLoading();
|
|
@@ -602,12 +609,20 @@ onMounted(() => {
|
|
|
602
609
|
top: 0;
|
|
603
610
|
left: 0;
|
|
604
611
|
padding: 0 16px;
|
|
612
|
+
/* #ifdef H5 */
|
|
613
|
+
padding: 50px 16px;
|
|
614
|
+
/* #endif */
|
|
605
615
|
overflow: auto;
|
|
606
616
|
|
|
607
617
|
background-color: var(--dev-tool-bg3-color);
|
|
608
618
|
box-sizing: border-box;
|
|
609
619
|
}
|
|
610
|
-
.network-send
|
|
620
|
+
.network-send-form {
|
|
621
|
+
height: calc(100% - 32px - 42px);
|
|
622
|
+
overflow: auto;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
.network-send-control {
|
|
611
626
|
display: flex;
|
|
612
627
|
align-items: center;
|
|
613
628
|
gap: 12px;
|
|
@@ -616,10 +631,10 @@ onMounted(() => {
|
|
|
616
631
|
box-sizing: border-box;
|
|
617
632
|
}
|
|
618
633
|
|
|
619
|
-
.network-send
|
|
634
|
+
.network-send-control :deep(.tag) {
|
|
620
635
|
margin-right: 16px;
|
|
621
636
|
}
|
|
622
|
-
.network-send
|
|
637
|
+
.network-send-control :deep(.tag):last-child {
|
|
623
638
|
margin-right: 0;
|
|
624
639
|
}
|
|
625
640
|
|
|
@@ -628,11 +643,12 @@ onMounted(() => {
|
|
|
628
643
|
flex-wrap: wrap;
|
|
629
644
|
}
|
|
630
645
|
|
|
631
|
-
.radio-group
|
|
646
|
+
.radio-group-item {
|
|
632
647
|
display: flex;
|
|
633
648
|
align-items: center;
|
|
634
649
|
width: 25%;
|
|
635
650
|
margin-bottom: 6px;
|
|
651
|
+
font-size: 12px;
|
|
636
652
|
}
|
|
637
653
|
|
|
638
654
|
.network-input {
|