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
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
{{ sortMap?.[currentNetworkSort] ?? '一' }}
|
|
20
20
|
</Tag>
|
|
21
21
|
|
|
22
|
-
<Tag mode="
|
|
22
|
+
<Tag mode="error" @click="emit('openIntercept')"> 拦截 </Tag>
|
|
23
|
+
<Tag mode="primary" @click="emit('openSend')"> 发起 </Tag>
|
|
23
24
|
<Tag mode="clear" @click="onChoose('clear')"> 清除 </Tag>
|
|
24
25
|
</view>
|
|
25
26
|
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
:pageSize="15"
|
|
29
30
|
:height="height"
|
|
30
31
|
className="network-list"
|
|
32
|
+
v-if="networkList.length > 0"
|
|
31
33
|
>
|
|
32
34
|
<template v-slot="{ list, start }">
|
|
33
35
|
<AutoSize
|
|
@@ -41,24 +43,14 @@
|
|
|
41
43
|
:currentNetworkSort="currentNetworkSort"
|
|
42
44
|
:mode="mode"
|
|
43
45
|
:useDevSource="useDevSource"
|
|
44
|
-
@openDetail="
|
|
45
|
-
@resend="
|
|
46
|
+
@openDetail="emit('openDetail', item)"
|
|
47
|
+
@resend="emit('openSend', item)"
|
|
46
48
|
@openCode="emit('openCode', $event)"
|
|
47
49
|
/>
|
|
48
50
|
</AutoSize>
|
|
49
|
-
<Empty v-if="!networkList || networkList.length === 0" />
|
|
50
51
|
</template>
|
|
51
52
|
</VirtualListPro>
|
|
52
|
-
|
|
53
|
-
<!-- 请求详情 -->
|
|
54
|
-
<NetworkDetail
|
|
55
|
-
v-if="showDetail"
|
|
56
|
-
:network="network"
|
|
57
|
-
@close="onCloseDetail"
|
|
58
|
-
/>
|
|
59
|
-
|
|
60
|
-
<!-- 发起请求 -->
|
|
61
|
-
<NetworkSend v-if="showSend" :network="network" @close="onCloseSend" />
|
|
53
|
+
<Empty v-else />
|
|
62
54
|
</view>
|
|
63
55
|
</template>
|
|
64
56
|
<script lang="ts" setup>
|
|
@@ -70,10 +62,9 @@ import FilterSelect from '../FilterSelect/index.vue';
|
|
|
70
62
|
import type { DevTool } from '../../type';
|
|
71
63
|
import VirtualListPro from '../VirtualListPro/index.vue';
|
|
72
64
|
import AutoSize from '../VirtualListPro/AutoSize.vue';
|
|
73
|
-
|
|
74
|
-
import NetworkDetail from './NetworkDetail.vue';
|
|
65
|
+
|
|
75
66
|
import { sortMap } from './const';
|
|
76
|
-
import { onMounted, ref
|
|
67
|
+
import { onMounted, ref } from 'vue';
|
|
77
68
|
|
|
78
69
|
const props = defineProps<{
|
|
79
70
|
currentNetworkType: string;
|
|
@@ -91,6 +82,9 @@ const emit = defineEmits<{
|
|
|
91
82
|
(e: 'search', value: string): void;
|
|
92
83
|
(e: 'sort', sort: -1 | 1): void;
|
|
93
84
|
(e: 'openCode', value?: string): void;
|
|
85
|
+
(e: 'openSend', value?: DevTool.NetworkItem): void;
|
|
86
|
+
(e: 'openDetail', value?: DevTool.NetworkItem): void;
|
|
87
|
+
(e: 'openIntercept'): void;
|
|
94
88
|
}>();
|
|
95
89
|
const networkFilterItems = [
|
|
96
90
|
{
|
|
@@ -125,29 +119,6 @@ const networkFilterItems = [
|
|
|
125
119
|
},
|
|
126
120
|
];
|
|
127
121
|
|
|
128
|
-
const showSend = ref(false);
|
|
129
|
-
|
|
130
|
-
const showDetail = ref(false);
|
|
131
|
-
|
|
132
|
-
const emptyNetwork = {
|
|
133
|
-
index: 0,
|
|
134
|
-
url: '',
|
|
135
|
-
name: '',
|
|
136
|
-
method: '',
|
|
137
|
-
status: '',
|
|
138
|
-
time: '',
|
|
139
|
-
startTime: 0,
|
|
140
|
-
endTime: 0,
|
|
141
|
-
size: '',
|
|
142
|
-
headers: {
|
|
143
|
-
requestHeader: [],
|
|
144
|
-
responseHeader: [],
|
|
145
|
-
},
|
|
146
|
-
response: '',
|
|
147
|
-
payload: undefined,
|
|
148
|
-
};
|
|
149
|
-
const network = reactive<DevTool.NetworkItem>({ ...emptyNetwork });
|
|
150
|
-
|
|
151
122
|
function onChoose(type: string) {
|
|
152
123
|
emit('choose', type);
|
|
153
124
|
}
|
|
@@ -158,33 +129,6 @@ onMounted(() => {
|
|
|
158
129
|
height.value = windowHeight - 32 - 32;
|
|
159
130
|
});
|
|
160
131
|
|
|
161
|
-
function onOpenSend() {
|
|
162
|
-
showSend.value = true;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function onCloseSend() {
|
|
166
|
-
showSend.value = false;
|
|
167
|
-
|
|
168
|
-
Object.assign(network, emptyNetwork);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
function onOpenDetail(ni: DevTool.NetworkItem) {
|
|
172
|
-
showDetail.value = true;
|
|
173
|
-
|
|
174
|
-
Object.assign(network, emptyNetwork);
|
|
175
|
-
Object.assign(network, ni);
|
|
176
|
-
}
|
|
177
|
-
function onCloseDetail() {
|
|
178
|
-
showDetail.value = false;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
function onResend(ni: DevTool.NetworkItem) {
|
|
182
|
-
showSend.value = true;
|
|
183
|
-
|
|
184
|
-
Object.assign(network, emptyNetwork);
|
|
185
|
-
Object.assign(network, ni);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
132
|
function onSort() {
|
|
189
133
|
const sort = props.currentNetworkSort === 1 ? -1 : 1;
|
|
190
134
|
emit('sort', sort);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view class="setting-content">
|
|
3
3
|
<view class="setting-item">
|
|
4
|
-
<DevToolTitle>DevTool(
|
|
4
|
+
<DevToolTitle>DevTool({{ version }}-vue3)</DevToolTitle>
|
|
5
5
|
<view class="setting-item-content">
|
|
6
6
|
<view class="setting-row">
|
|
7
7
|
<view>显示调试按钮:</view>
|
|
@@ -163,15 +163,34 @@
|
|
|
163
163
|
<button class="setting-button" @click="onExportLog">导出</button>
|
|
164
164
|
</view>
|
|
165
165
|
</view>
|
|
166
|
+
<view class="setting-item">
|
|
167
|
+
<DevToolTitle>请求拦截规则</DevToolTitle>
|
|
168
|
+
<view class="setting-item-content">
|
|
169
|
+
<view class="setting-row">
|
|
170
|
+
<view>缓存拦截规则到本地:</view>
|
|
171
|
+
<checkbox
|
|
172
|
+
:checked="cacheInterceptConfig"
|
|
173
|
+
color="#9254de"
|
|
174
|
+
style="transform: scale(0.8)"
|
|
175
|
+
@click="onCacheInterceptNetworkConfig"
|
|
176
|
+
/>
|
|
177
|
+
</view>
|
|
178
|
+
<view class="setting-tips">勾选后将会把 network 拦截缓存到本地</view>
|
|
179
|
+
</view>
|
|
180
|
+
</view>
|
|
166
181
|
</view>
|
|
167
182
|
</template>
|
|
168
183
|
<script lang="ts" setup>
|
|
169
184
|
import { reactive } from 'vue';
|
|
170
185
|
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
171
|
-
|
|
186
|
+
|
|
187
|
+
const version = __VERSION__ ?? '1.0.0';
|
|
188
|
+
|
|
189
|
+
const props = defineProps<{
|
|
172
190
|
devToolVisible?: boolean;
|
|
173
191
|
sizeFormat?: string;
|
|
174
192
|
theme?: string;
|
|
193
|
+
cacheInterceptConfig?: boolean;
|
|
175
194
|
}>();
|
|
176
195
|
const setting = reactive({
|
|
177
196
|
restartDevTool: false,
|
|
@@ -206,6 +225,7 @@ const emit = defineEmits<{
|
|
|
206
225
|
(e: 'clearCache'): void;
|
|
207
226
|
(e: 'destroyDevTool'): void;
|
|
208
227
|
(e: 'changeTheme', value: string): void;
|
|
228
|
+
(e: 'changeCacheInterceptConfig', value: boolean): void;
|
|
209
229
|
}>();
|
|
210
230
|
|
|
211
231
|
function onChangeShowDevButton(show: boolean) {
|
|
@@ -243,6 +263,10 @@ function onScreenshot() {
|
|
|
243
263
|
function onClearCache() {
|
|
244
264
|
emit('clearCache');
|
|
245
265
|
}
|
|
266
|
+
|
|
267
|
+
function onCacheInterceptNetworkConfig() {
|
|
268
|
+
emit('changeCacheInterceptConfig', !props.cacheInterceptConfig);
|
|
269
|
+
}
|
|
246
270
|
</script>
|
|
247
271
|
<style scoped>
|
|
248
272
|
.setting-content {
|
|
@@ -35,7 +35,7 @@ const props = withDefaults(
|
|
|
35
35
|
.source-code-line {
|
|
36
36
|
display: flex;
|
|
37
37
|
align-items: center;
|
|
38
|
-
height:
|
|
38
|
+
height: 20px;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
.source-code-line-active {
|
|
@@ -49,14 +49,14 @@ const props = withDefaults(
|
|
|
49
49
|
padding: 0 6px;
|
|
50
50
|
margin-right: 6px;
|
|
51
51
|
text-align: right;
|
|
52
|
-
height:
|
|
52
|
+
height: 20px;
|
|
53
53
|
border-right: 1px solid var(--dev-tool-border-color);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
.source-code-line-content {
|
|
57
57
|
display: flex;
|
|
58
58
|
white-space: nowrap;
|
|
59
|
-
height:
|
|
59
|
+
height: 20px;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
.source-code-line-word {
|
|
@@ -206,7 +206,6 @@ onMounted(() => {
|
|
|
206
206
|
position: fixed;
|
|
207
207
|
top: 0;
|
|
208
208
|
left: 0;
|
|
209
|
-
z-index: 1001;
|
|
210
209
|
padding: 0 16px;
|
|
211
210
|
/* #ifdef H5 */
|
|
212
211
|
padding: 50px 16px;
|
|
@@ -218,7 +217,7 @@ onMounted(() => {
|
|
|
218
217
|
|
|
219
218
|
width: 100vw;
|
|
220
219
|
height: 100vh;
|
|
221
|
-
font-size:
|
|
220
|
+
font-size: 12px;
|
|
222
221
|
color: var(--dev-tool-text-color);
|
|
223
222
|
box-sizing: border-box;
|
|
224
223
|
transition: color 0.3s;
|
package/dist/v3/Tag/index.vue
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view class="upload-detail" :style="{ zIndex: zIndex }">
|
|
3
3
|
<view class="upload-detail-control">
|
|
4
|
+
<DevToolTitle style="margin-right: 16px">上传详情</DevToolTitle>
|
|
5
|
+
|
|
4
6
|
<Tag
|
|
5
7
|
v-for="item in selectItems"
|
|
6
8
|
:active="currentSelect === item.value"
|
|
@@ -15,31 +17,42 @@
|
|
|
15
17
|
</view>
|
|
16
18
|
|
|
17
19
|
<view class="upload-detail-header" v-if="currentSelect === 'header'">
|
|
18
|
-
<
|
|
19
|
-
<view class="
|
|
20
|
+
<DevToolTitle>常规</DevToolTitle>
|
|
21
|
+
<view class="upload-detail-item">
|
|
20
22
|
<view>请求url:</view>
|
|
21
23
|
<view>{{ upload.url }}</view>
|
|
22
24
|
</view>
|
|
23
|
-
<view class="
|
|
25
|
+
<view class="upload-detail-item">
|
|
24
26
|
<view>请求方法:</view>
|
|
25
27
|
<Tag mode="info">{{ upload.method ?? 'POST' }}</Tag>
|
|
26
28
|
</view>
|
|
27
|
-
<view class="
|
|
29
|
+
<view class="upload-detail-item">
|
|
28
30
|
<view>状态代码:</view>
|
|
29
31
|
<Tag mode="info">{{ upload.status }}</Tag>
|
|
30
32
|
</view>
|
|
31
|
-
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
v-
|
|
35
|
-
|
|
33
|
+
|
|
34
|
+
<DevToolTitle>请求头</DevToolTitle>
|
|
35
|
+
<template
|
|
36
|
+
v-if="
|
|
37
|
+
upload?.headers &&
|
|
38
|
+
upload?.headers?.requestHeader &&
|
|
39
|
+
upload?.headers?.requestHeader?.length > 0
|
|
40
|
+
"
|
|
36
41
|
>
|
|
37
|
-
<view
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
<view
|
|
43
|
+
class="upload-detail-item"
|
|
44
|
+
v-for="item in upload?.headers?.requestHeader"
|
|
45
|
+
:key="item.key"
|
|
46
|
+
>
|
|
47
|
+
<view>{{ item.key }}:</view>
|
|
48
|
+
{{ item.value }}
|
|
49
|
+
</view>
|
|
50
|
+
</template>
|
|
51
|
+
<Empty v-else />
|
|
52
|
+
|
|
40
53
|
<!-- <view class="upload-detail-title">响应头</view>
|
|
41
54
|
<view
|
|
42
|
-
class="
|
|
55
|
+
class="upload-detail-item"
|
|
43
56
|
v-for="item in upload?.headers?.responseHeader"
|
|
44
57
|
:key="item.key"
|
|
45
58
|
>
|
|
@@ -81,6 +94,7 @@ import JsonPretty from '../JsonPretty/index.vue';
|
|
|
81
94
|
import Tag from '../Tag/index.vue';
|
|
82
95
|
import Empty from '../Empty/index.vue';
|
|
83
96
|
import CircularButton from '../CircularButton/index.vue';
|
|
97
|
+
import DevToolTitle from '../DevToolTitle/index.vue';
|
|
84
98
|
import type { DevTool } from '../../type';
|
|
85
99
|
const props = defineProps<{ upload: DevTool.UploadItem; zIndex?: number }>();
|
|
86
100
|
const emit = defineEmits<{ (e: 'close'): void }>();
|
|
@@ -160,11 +174,14 @@ function onClose() {
|
|
|
160
174
|
top: 0;
|
|
161
175
|
left: 0;
|
|
162
176
|
padding: 0 16px;
|
|
163
|
-
|
|
177
|
+
/* #ifdef H5 */
|
|
178
|
+
padding: 50px 16px;
|
|
179
|
+
/* #endif */
|
|
180
|
+
background-color: var(--dev-tool-bg3-color);
|
|
164
181
|
box-sizing: border-box;
|
|
165
182
|
transform: background-color 0.3s;
|
|
166
183
|
}
|
|
167
|
-
.upload-detail
|
|
184
|
+
.upload-detail-control {
|
|
168
185
|
display: flex;
|
|
169
186
|
align-items: center;
|
|
170
187
|
margin-bottom: 4px;
|
|
@@ -174,18 +191,19 @@ function onClose() {
|
|
|
174
191
|
box-sizing: border-box;
|
|
175
192
|
}
|
|
176
193
|
|
|
177
|
-
.upload-detail
|
|
194
|
+
.upload-detail-item {
|
|
178
195
|
display: flex;
|
|
179
196
|
align-items: center;
|
|
180
197
|
min-height: 28px;
|
|
181
198
|
word-break: break-all;
|
|
199
|
+
font-size: 12px;
|
|
182
200
|
}
|
|
183
|
-
.upload-detail
|
|
201
|
+
.upload-detail-item > view:first-child {
|
|
184
202
|
white-space: nowrap;
|
|
185
203
|
margin-right: 8px;
|
|
186
204
|
color: var(--dev-tool-info-color);
|
|
187
205
|
}
|
|
188
|
-
.upload-detail
|
|
206
|
+
.upload-detail-payload {
|
|
189
207
|
word-break: break-all;
|
|
190
208
|
max-width: 100%;
|
|
191
209
|
}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<view class="upload-item">
|
|
2
|
+
<view class="upload-item" @click="emit('openDetail', upload)">
|
|
3
3
|
<view class="upload-url-row">
|
|
4
4
|
<Tag mode="info">POST</Tag>
|
|
5
5
|
<view class="upload-url" v-html="upload.url" />
|
|
6
|
-
<Tag
|
|
7
|
-
mode="main"
|
|
8
|
-
class="upload-detail-icon"
|
|
9
|
-
@click="showDetail = !showDetail"
|
|
10
|
-
>详情</Tag
|
|
11
|
-
>
|
|
12
6
|
</view>
|
|
13
7
|
<view class="upload-info">
|
|
14
8
|
<view>
|
|
@@ -28,39 +22,53 @@
|
|
|
28
22
|
<view>进度: {{ upload.progress }}%</view>
|
|
29
23
|
<view>
|
|
30
24
|
开始:
|
|
31
|
-
{{
|
|
25
|
+
{{
|
|
26
|
+
upload.startTime
|
|
27
|
+
? formatDate(upload.startTime, ' HH:mm:ss:SS')
|
|
28
|
+
: '--:--:--:---'
|
|
29
|
+
}}
|
|
32
30
|
</view>
|
|
33
31
|
<view>
|
|
34
32
|
结束:
|
|
35
|
-
{{
|
|
33
|
+
{{
|
|
34
|
+
upload.endTime
|
|
35
|
+
? formatDate(upload.endTime, ' HH:mm:ss:SS')
|
|
36
|
+
: '--:--:--:---'
|
|
37
|
+
}}
|
|
36
38
|
</view>
|
|
37
39
|
</view>
|
|
40
|
+
<view
|
|
41
|
+
:class="['upload-stock ', isUseDevSource ? 'upload-stock-link' : '']"
|
|
42
|
+
@click.stop="emit('openCode', upload.stack)"
|
|
43
|
+
>
|
|
44
|
+
{{ upload?.stack }}
|
|
45
|
+
</view>
|
|
38
46
|
</view>
|
|
39
|
-
<!-- <Transition name="slide-fade"> -->
|
|
40
|
-
<UploadDetail
|
|
41
|
-
v-if="showDetail"
|
|
42
|
-
:upload="upload"
|
|
43
|
-
:zIndex="zIndex"
|
|
44
|
-
@close="onClose"
|
|
45
|
-
/>
|
|
46
|
-
<!-- </Transition> -->
|
|
47
47
|
</template>
|
|
48
48
|
|
|
49
49
|
<script lang="ts" setup>
|
|
50
|
-
import {
|
|
50
|
+
import { computed } from 'vue';
|
|
51
51
|
import Tag from '../Tag/index.vue';
|
|
52
|
-
import
|
|
53
|
-
import { formatDate } from '../../utils';
|
|
52
|
+
import { formatDate, isMockWX } from '../../utils';
|
|
54
53
|
import type { DevTool } from '../../type';
|
|
55
|
-
defineProps<{
|
|
54
|
+
const props = defineProps<{
|
|
56
55
|
upload: DevTool.UploadItem;
|
|
57
56
|
zIndex?: number;
|
|
57
|
+
mode?: string;
|
|
58
|
+
useDevSource?: boolean;
|
|
59
|
+
}>();
|
|
60
|
+
const emit = defineEmits<{
|
|
61
|
+
(e: 'openDetail', value: DevTool.UploadItem): void;
|
|
62
|
+
(e: 'openCode', value?: string): void;
|
|
58
63
|
}>();
|
|
59
|
-
const showDetail = ref(false);
|
|
60
64
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
const isUseDevSource = computed(() => {
|
|
66
|
+
return (
|
|
67
|
+
!isMockWX(props?.upload?.stack ?? '') &&
|
|
68
|
+
props.mode === 'development' &&
|
|
69
|
+
props.useDevSource
|
|
70
|
+
);
|
|
71
|
+
});
|
|
64
72
|
</script>
|
|
65
73
|
<style scoped>
|
|
66
74
|
.upload-item {
|
|
@@ -103,15 +111,11 @@ function onClose() {
|
|
|
103
111
|
color: var(--dev-tool-text-color);
|
|
104
112
|
}
|
|
105
113
|
|
|
106
|
-
.
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
.slide-fade-leave-active {
|
|
110
|
-
transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
|
|
114
|
+
.upload-stock {
|
|
115
|
+
text-align: right;
|
|
116
|
+
word-wrap: break-word;
|
|
111
117
|
}
|
|
112
|
-
.
|
|
113
|
-
|
|
114
|
-
transform: translateY(20px);
|
|
115
|
-
opacity: 0;
|
|
118
|
+
.upload-stock-link {
|
|
119
|
+
text-decoration: underline;
|
|
116
120
|
}
|
|
117
121
|
</style>
|
|
@@ -29,7 +29,14 @@
|
|
|
29
29
|
:index="start + index"
|
|
30
30
|
:key="start + index"
|
|
31
31
|
>
|
|
32
|
-
<UploadItem
|
|
32
|
+
<UploadItem
|
|
33
|
+
:upload="item"
|
|
34
|
+
:zIndex="zIndex"
|
|
35
|
+
:mode="mode"
|
|
36
|
+
:useDevSource="useDevSource"
|
|
37
|
+
@openDetail="emit('openDetail', $event)"
|
|
38
|
+
@openCode="emit('openCode', $event)"
|
|
39
|
+
/>
|
|
33
40
|
</AutoSize>
|
|
34
41
|
<Empty v-if="!uploadList || uploadList.length === 0" />
|
|
35
42
|
</template>
|
|
@@ -50,13 +57,17 @@ defineProps<{
|
|
|
50
57
|
currentUploadType: string;
|
|
51
58
|
uploadList: DevTool.UploadItem[];
|
|
52
59
|
modelValue: string;
|
|
60
|
+
mode: string;
|
|
53
61
|
zIndex: number;
|
|
62
|
+
useDevSource: boolean;
|
|
54
63
|
}>();
|
|
55
64
|
|
|
56
65
|
const emit = defineEmits<{
|
|
57
66
|
(e: 'choose', type: string): void;
|
|
58
67
|
(e: 'update:modelValue', value: string): void;
|
|
59
68
|
(e: 'search', value: string): void;
|
|
69
|
+
(e: 'openDetail', value: DevTool.UploadItem): void;
|
|
70
|
+
(e: 'openCode', value: string): void;
|
|
60
71
|
}>();
|
|
61
72
|
const uploadFilterItems = [
|
|
62
73
|
{
|
|
@@ -111,14 +111,16 @@ const innerScrollIntoView = computed(() => {
|
|
|
111
111
|
|
|
112
112
|
onBeforeMount(() => {
|
|
113
113
|
// 初始渲染数据
|
|
114
|
-
state.visitableData =
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
114
|
+
state.visitableData =
|
|
115
|
+
props.data?.slice(
|
|
116
|
+
(props.defaultCurrent - 1) * props.pageSize,
|
|
117
|
+
props.pageSize * 2,
|
|
118
|
+
) ?? [];
|
|
119
|
+
|
|
120
|
+
state.currentHeight =
|
|
121
|
+
itemsHeight
|
|
122
|
+
?.slice(0, (props.defaultCurrent - 1) * props.pageSize)
|
|
123
|
+
?.reduce((acc, cur) => acc + cur, 0) ?? 0;
|
|
122
124
|
});
|
|
123
125
|
|
|
124
126
|
// 数据更新时重置
|
|
@@ -147,11 +149,12 @@ watch(
|
|
|
147
149
|
const endIndex = Math.min(currentAdd1 * pageSize, data.length);
|
|
148
150
|
|
|
149
151
|
// 更新可见数据
|
|
150
|
-
state.visitableData = data
|
|
152
|
+
state.visitableData = data?.slice(startIndex, endIndex) ?? [];
|
|
151
153
|
|
|
152
|
-
state.currentHeight =
|
|
153
|
-
|
|
154
|
-
|
|
154
|
+
state.currentHeight =
|
|
155
|
+
itemsHeight
|
|
156
|
+
?.slice(0, currentSub1 * pageSize)
|
|
157
|
+
?.reduce((acc, cur) => acc + cur, 0) ?? 0;
|
|
155
158
|
},
|
|
156
159
|
);
|
|
157
160
|
|