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.
Files changed (47) hide show
  1. package/README.md +13 -3
  2. package/dist/const.d.ts +16 -0
  3. package/dist/const.d.ts.map +1 -1
  4. package/dist/const.js +29 -25
  5. package/dist/core.d.ts +3 -3
  6. package/dist/core.d.ts.map +1 -1
  7. package/dist/core.js +89 -49
  8. package/dist/devEvent/index.d.ts +34 -0
  9. package/dist/devEvent/index.d.ts.map +1 -1
  10. package/dist/devEvent/index.js +71 -27
  11. package/dist/devIntercept/index.d.ts.map +1 -1
  12. package/dist/devIntercept/index.js +195 -157
  13. package/dist/devStore/index.d.ts +9 -0
  14. package/dist/devStore/index.d.ts.map +1 -1
  15. package/dist/devStore/index.js +54 -20
  16. package/dist/plugins/uniDevTool/uniDevTool.d.ts +1 -1
  17. package/dist/plugins/uniDevTool/uniDevTool.d.ts.map +1 -1
  18. package/dist/type.d.ts +22 -2
  19. package/dist/type.d.ts.map +1 -1
  20. package/dist/v2/DevTool/index.vue +8 -8
  21. package/dist/v3/ConsoleList/ConsoleItem.vue +1 -1
  22. package/dist/v3/DevTool/index.vue +13 -12
  23. package/dist/v3/DevToolWindow/const.d.ts +30 -0
  24. package/dist/v3/DevToolWindow/const.d.ts.map +1 -0
  25. package/dist/v3/DevToolWindow/const.ts +123 -0
  26. package/dist/v3/DevToolWindow/index.vue +242 -108
  27. package/dist/v3/NetworkList/InterceptConfig.vue +835 -0
  28. package/dist/v3/NetworkList/InterceptItem.vue +132 -0
  29. package/dist/v3/NetworkList/NetworkDetail.vue +25 -13
  30. package/dist/v3/NetworkList/NetworkIntercept.vue +85 -0
  31. package/dist/v3/NetworkList/NetworkItem.vue +18 -29
  32. package/dist/v3/NetworkList/NetworkSend.vue +61 -45
  33. package/dist/v3/NetworkList/index.vue +11 -67
  34. package/dist/v3/SettingList/index.vue +26 -2
  35. package/dist/v3/SettingList/typing.d.ts +2 -0
  36. package/dist/v3/SourceCode/Line.vue +3 -3
  37. package/dist/v3/SourceCode/index.vue +1 -2
  38. package/dist/v3/Tag/index.vue +1 -0
  39. package/dist/v3/UploadList/UploadDetail.vue +36 -18
  40. package/dist/v3/UploadList/UploadItem.vue +38 -34
  41. package/dist/v3/UploadList/index.vue +12 -1
  42. package/dist/v3/VirtualListPro/index.vue +15 -12
  43. package/dist/v3/WebSocket/WebSocketDetail.vue +258 -0
  44. package/dist/v3/WebSocket/WebSocketItem.vue +14 -30
  45. package/dist/v3/WebSocket/index.vue +6 -1
  46. package/package.json +1 -1
  47. 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 class="network-detail-header" v-if="currentSelect === 'header'">
17
- <DevToolTitle>常规</DevToolTitle>
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
- z-index: 5;
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 .network-detail-control {
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 .network-detail-control :deep(.tag):last-child {
231
+ .network-detail-control :deep(.tag):last-child {
224
232
  margin-right: 0;
225
233
  }
226
234
 
227
- .network-detail .network-detail-header .net-detail-item {
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
- .network-detail .network-detail-header .net-detail-item > view:first-child {
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 .network-detail-payload {
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
- <view>
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
- }}</view
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: 4px;
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 :checked="item.checked" :value="item.id" />
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
- <view class="network-send-buttons">
147
- <button size="mini" :disabled="!isFinished" @click="onDetail">
148
- 详情
149
- </button>
150
- <button size="mini" @click="onReset">重置</button>
151
- <button size="mini" @click="onSend">发送</button>
152
- </view>
153
-
154
- <NetworkDetail
155
- v-show="showDetail"
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<{ network: DevTool.NetworkItem; zIndex?: number }>();
173
+ const props = defineProps<{
174
+ network: DevTool.NetworkItem;
175
+ zIndex?: number;
176
+ interceptNetworkList?: DevTool.NetworkItem[];
177
+ }>();
170
178
 
171
- const emit = defineEmits<{ (e: 'close'): void }>();
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 = Object.entries(
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 .network-send-control {
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 .network-send-control :deep(.tag) {
634
+ .network-send-control :deep(.tag) {
620
635
  margin-right: 16px;
621
636
  }
622
- .network-send .network-send-control :deep(.tag):last-child {
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 .radio-group-item {
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 {