vite-uni-dev-tool 0.0.20 → 0.0.22
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 +14 -3
- package/dist/const.d.ts +12 -0
- package/dist/const.d.ts.map +1 -1
- package/dist/const.js +23 -20
- 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 +171 -145
- 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 +18 -1
- package/dist/type.d.ts.map +1 -1
- package/dist/v2/DevTool/index.vue +8 -8
- 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 +186 -107
- package/dist/v3/NetworkList/InterceptConfig.vue +835 -0
- package/dist/v3/NetworkList/InterceptItem.vue +132 -0
- package/dist/v3/NetworkList/NetworkDetail.vue +86 -31
- package/dist/v3/NetworkList/NetworkIntercept.vue +85 -0
- package/dist/v3/NetworkList/NetworkItem.vue +18 -18
- package/dist/v3/NetworkList/NetworkSend.vue +61 -45
- package/dist/v3/NetworkList/index.vue +11 -67
- package/dist/v3/SettingList/index.vue +23 -2
- package/dist/v3/SourceCode/Line.vue +101 -0
- package/dist/v3/SourceCode/index.vue +35 -62
- package/dist/v3/SourceCode/parseCode.d.ts +27 -0
- package/dist/v3/SourceCode/parseCode.d.ts.map +1 -0
- package/dist/v3/SourceCode/parseCode.ts +643 -0
- package/dist/v3/Tag/index.vue +1 -0
- package/package.json +1 -1
|
@@ -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>
|
|
@@ -13,10 +13,14 @@
|
|
|
13
13
|
<CircularButton style="margin-left: auto" text="×" @click="onClose" />
|
|
14
14
|
</view>
|
|
15
15
|
|
|
16
|
-
<view
|
|
17
|
-
|
|
16
|
+
<view
|
|
17
|
+
class="network-detail-header"
|
|
18
|
+
:style="{ height: height + 'px' }"
|
|
19
|
+
v-if="currentSelect === 'header'"
|
|
20
|
+
>
|
|
21
|
+
<DevToolTitle> 常规 </DevToolTitle>
|
|
18
22
|
<view class="net-detail-item">
|
|
19
|
-
<view
|
|
23
|
+
<view>请求地址:</view>
|
|
20
24
|
<view>{{ network.url }}</view>
|
|
21
25
|
</view>
|
|
22
26
|
<view class="net-detail-item">
|
|
@@ -26,32 +30,69 @@
|
|
|
26
30
|
<view class="net-detail-item">
|
|
27
31
|
<view>状态代码:</view>
|
|
28
32
|
{{ network.status }}
|
|
33
|
+
|
|
34
|
+
<Tag v-if="network.intercepted" mode="error" style="margin-left: 6px">
|
|
35
|
+
已拦截
|
|
36
|
+
</Tag>
|
|
37
|
+
</view>
|
|
38
|
+
<view class="net-detail-item">
|
|
39
|
+
<view>开始时间:</view>
|
|
40
|
+
{{
|
|
41
|
+
network.startTime
|
|
42
|
+
? formatDate(network.startTime, 'HH:mm:ss:SS')
|
|
43
|
+
: '--:--:--'
|
|
44
|
+
}}
|
|
45
|
+
</view>
|
|
46
|
+
<view class="net-detail-item">
|
|
47
|
+
<view>结束时间:</view>
|
|
48
|
+
{{
|
|
49
|
+
network.endTime
|
|
50
|
+
? formatDate(network.endTime, 'HH:mm:ss:SS')
|
|
51
|
+
: '--:--:--'
|
|
52
|
+
}}
|
|
53
|
+
</view>
|
|
54
|
+
<view class="net-detail-item">
|
|
55
|
+
<view>请求耗时:</view>
|
|
56
|
+
{{ network.time ?? '--' }}
|
|
57
|
+
</view>
|
|
58
|
+
<view class="net-detail-item">
|
|
59
|
+
<view>请求大小:</view>
|
|
60
|
+
{{ network.size ?? '--' }}
|
|
29
61
|
</view>
|
|
30
62
|
|
|
31
63
|
<DevToolTitle>请求头</DevToolTitle>
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
64
|
+
<template v-if="network.headers.requestHeader.length > 0">
|
|
65
|
+
<view
|
|
66
|
+
class="net-detail-item"
|
|
67
|
+
v-for="item in network.headers.requestHeader"
|
|
68
|
+
:key="item.key"
|
|
69
|
+
>
|
|
70
|
+
<view>{{ item.key }}:</view>
|
|
71
|
+
{{ item.value }}
|
|
72
|
+
</view>
|
|
73
|
+
</template>
|
|
74
|
+
<view v-else>
|
|
75
|
+
<Empty text="暂无请求头" />
|
|
39
76
|
</view>
|
|
40
77
|
|
|
41
78
|
<DevToolTitle>响应头</DevToolTitle>
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
79
|
+
<template v-if="network.headers.responseHeader.length > 0">
|
|
80
|
+
<view
|
|
81
|
+
class="net-detail-item"
|
|
82
|
+
v-for="item in network.headers.responseHeader"
|
|
83
|
+
:key="item.key"
|
|
84
|
+
>
|
|
85
|
+
<view>{{ item.key }}:</view>
|
|
86
|
+
{{ item.value }}
|
|
87
|
+
</view>
|
|
88
|
+
</template>
|
|
89
|
+
<view v-else>
|
|
90
|
+
<Empty text="暂无响应头" />
|
|
49
91
|
</view>
|
|
50
92
|
</view>
|
|
51
|
-
|
|
52
93
|
<template v-if="currentSelect === 'payload'">
|
|
53
94
|
<template v-if="payload?.type === 'object'">
|
|
54
|
-
<JsonPretty :data="payload.value" />
|
|
95
|
+
<JsonPretty :data="payload.value" virtual :height="height" />
|
|
55
96
|
</template>
|
|
56
97
|
<view
|
|
57
98
|
v-else-if="payload?.type === 'string'"
|
|
@@ -64,7 +105,7 @@
|
|
|
64
105
|
|
|
65
106
|
<template v-if="currentSelect === 'response'">
|
|
66
107
|
<template v-if="response?.type === 'object'">
|
|
67
|
-
<JsonPretty :data="response.value" virtual />
|
|
108
|
+
<JsonPretty :data="response.value" virtual :height="height" />
|
|
68
109
|
</template>
|
|
69
110
|
<view
|
|
70
111
|
v-else-if="response?.type === 'string'"
|
|
@@ -77,13 +118,14 @@
|
|
|
77
118
|
</view>
|
|
78
119
|
</template>
|
|
79
120
|
<script lang="ts" setup>
|
|
80
|
-
import { ref, computed } from 'vue';
|
|
121
|
+
import { ref, computed, onMounted } from 'vue';
|
|
81
122
|
import JsonPretty from '../JsonPretty/index.vue';
|
|
82
123
|
import Tag from '../Tag/index.vue';
|
|
83
124
|
import Empty from '../Empty/index.vue';
|
|
84
125
|
import CircularButton from '../CircularButton/index.vue';
|
|
85
126
|
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
86
127
|
import type { DevTool } from '../../type';
|
|
128
|
+
import { formatDate } from '../../utils';
|
|
87
129
|
const props = defineProps<{ network: DevTool.NetworkItem; zIndex?: number }>();
|
|
88
130
|
const emit = defineEmits<{ (e: 'close'): void }>();
|
|
89
131
|
const selectItems = [
|
|
@@ -100,6 +142,9 @@ const selectItems = [
|
|
|
100
142
|
value: 'response',
|
|
101
143
|
},
|
|
102
144
|
];
|
|
145
|
+
|
|
146
|
+
const height = ref(0);
|
|
147
|
+
|
|
103
148
|
const currentSelect = ref('header');
|
|
104
149
|
|
|
105
150
|
const payload = computed(() => {
|
|
@@ -148,50 +193,60 @@ function onSelect(item: { label: string; value: string }) {
|
|
|
148
193
|
function onClose() {
|
|
149
194
|
emit('close');
|
|
150
195
|
}
|
|
196
|
+
|
|
197
|
+
onMounted(() => {
|
|
198
|
+
const { windowHeight } = uni.getWindowInfo();
|
|
199
|
+
|
|
200
|
+
height.value = windowHeight - 32 - 32 - 2;
|
|
201
|
+
});
|
|
151
202
|
</script>
|
|
152
203
|
<style scoped>
|
|
153
204
|
.network-detail {
|
|
154
205
|
position: fixed;
|
|
155
206
|
width: 100vw;
|
|
156
207
|
height: 100%;
|
|
157
|
-
|
|
158
|
-
/* z-index: 1001; */
|
|
208
|
+
|
|
159
209
|
top: 0;
|
|
160
210
|
left: 0;
|
|
161
211
|
padding: 0 16px;
|
|
212
|
+
/* #ifdef H5 */
|
|
213
|
+
padding: 50px 16px;
|
|
214
|
+
/* #endif */
|
|
162
215
|
|
|
163
216
|
background-color: var(--dev-tool-bg3-color);
|
|
164
217
|
box-sizing: border-box;
|
|
165
218
|
}
|
|
166
|
-
.network-detail
|
|
219
|
+
.network-detail-control {
|
|
167
220
|
display: flex;
|
|
168
221
|
align-items: center;
|
|
169
|
-
margin-bottom: 4px;
|
|
222
|
+
/* margin-bottom: 4px; */
|
|
170
223
|
gap: 12px;
|
|
171
224
|
height: 32px;
|
|
172
225
|
border-bottom: 1px solid transparent;
|
|
173
226
|
box-sizing: border-box;
|
|
174
227
|
}
|
|
175
|
-
|
|
176
|
-
.network-detail .network-detail-control :deep(.tag) {
|
|
228
|
+
.network-detail-control :deep(.tag) {
|
|
177
229
|
margin-right: 16px;
|
|
178
230
|
}
|
|
179
|
-
.network-detail
|
|
231
|
+
.network-detail-control :deep(.tag):last-child {
|
|
180
232
|
margin-right: 0;
|
|
181
233
|
}
|
|
182
234
|
|
|
183
|
-
.
|
|
235
|
+
.net-detail-item {
|
|
184
236
|
display: flex;
|
|
185
237
|
align-items: center;
|
|
186
238
|
min-height: 28px;
|
|
187
239
|
word-break: break-all;
|
|
188
240
|
}
|
|
189
|
-
.network-detail
|
|
241
|
+
.network-detail-header {
|
|
242
|
+
overflow: auto;
|
|
243
|
+
}
|
|
244
|
+
.net-detail-item > view:first-child {
|
|
190
245
|
white-space: nowrap;
|
|
191
246
|
margin-right: 8px;
|
|
192
247
|
color: var(--dev-tool-info-color);
|
|
193
248
|
}
|
|
194
|
-
.network-detail
|
|
249
|
+
.network-detail-payload {
|
|
195
250
|
word-break: break-all;
|
|
196
251
|
max-width: 100%;
|
|
197
252
|
}
|
|
@@ -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;
|