vite-uni-dev-tool 0.0.12 → 0.0.13

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 (181) hide show
  1. package/dist/const.d.ts +133 -0
  2. package/dist/const.d.ts.map +1 -0
  3. package/dist/const.js +36 -0
  4. package/dist/core.d.ts +52 -0
  5. package/dist/core.d.ts.map +1 -0
  6. package/dist/core.js +80 -0
  7. package/dist/devConsole/index.d.ts +169 -0
  8. package/dist/devConsole/index.d.ts.map +1 -0
  9. package/dist/devConsole/index.js +270 -0
  10. package/dist/devEvent/index.d.ts +286 -0
  11. package/dist/devEvent/index.d.ts.map +1 -0
  12. package/dist/devEvent/index.js +435 -0
  13. package/dist/devEventBus/index.d.ts +42 -0
  14. package/dist/devEventBus/index.d.ts.map +1 -0
  15. package/dist/devEventBus/index.js +70 -0
  16. package/dist/devIntercept/index.d.ts +119 -0
  17. package/dist/devIntercept/index.d.ts.map +1 -0
  18. package/dist/devIntercept/index.js +582 -0
  19. package/dist/devRunJS/index.d.ts +67 -0
  20. package/dist/devRunJS/index.d.ts.map +1 -0
  21. package/dist/devStore/index.d.ts +178 -0
  22. package/dist/devStore/index.d.ts.map +1 -0
  23. package/dist/devStore/index.js +395 -0
  24. package/dist/devToolInfo/index.d.ts +17 -0
  25. package/dist/devToolInfo/index.d.ts.map +1 -0
  26. package/dist/devToolInfo/index.js +15 -0
  27. package/{dev → dist}/plugins/uniDevTool/uniDevTool.d.ts +7 -1
  28. package/dist/plugins/uniDevTool/uniDevTool.d.ts.map +1 -0
  29. package/dist/plugins/uniDevTool/uniDevTool.js +35 -0
  30. package/{dev → dist}/plugins/utils/index.d.ts +3 -0
  31. package/{dev → dist}/plugins/utils/index.d.ts.map +1 -1
  32. package/dist/plugins/utils/index.js +1 -0
  33. package/dist/type.d.ts +264 -0
  34. package/dist/type.d.ts.map +1 -0
  35. package/dist/utils/array.d.ts +2 -0
  36. package/dist/utils/array.d.ts.map +1 -0
  37. package/dist/utils/array.js +12 -0
  38. package/dist/utils/date.d.ts +19 -0
  39. package/dist/utils/date.d.ts.map +1 -0
  40. package/dist/utils/date.js +40 -0
  41. package/dist/utils/file.d.ts +11 -0
  42. package/dist/utils/file.d.ts.map +1 -0
  43. package/dist/utils/file.js +87 -0
  44. package/dist/utils/function.d.ts +28 -0
  45. package/dist/utils/function.d.ts.map +1 -0
  46. package/dist/utils/function.js +46 -0
  47. package/dist/utils/index.d.ts +11 -0
  48. package/dist/utils/index.d.ts.map +1 -0
  49. package/dist/utils/index.js +55 -0
  50. package/dist/utils/ip.d.ts +5 -0
  51. package/dist/utils/ip.d.ts.map +1 -0
  52. package/dist/utils/ip.js +21 -0
  53. package/dist/utils/language.d.ts +29 -0
  54. package/dist/utils/language.d.ts.map +1 -0
  55. package/dist/utils/language.js +50 -0
  56. package/dist/utils/object.d.ts +49 -0
  57. package/dist/utils/object.d.ts.map +1 -0
  58. package/dist/utils/object.js +118 -0
  59. package/dist/utils/page.d.ts +7 -0
  60. package/dist/utils/page.d.ts.map +1 -0
  61. package/dist/utils/page.js +7 -0
  62. package/dist/utils/platform.d.ts +4 -0
  63. package/dist/utils/platform.d.ts.map +1 -0
  64. package/dist/utils/platform.js +14 -0
  65. package/dist/utils/string.d.ts +45 -0
  66. package/dist/utils/string.d.ts.map +1 -0
  67. package/dist/utils/string.js +88 -0
  68. package/dist/utils/utils.d.ts +16 -0
  69. package/dist/utils/utils.d.ts.map +1 -0
  70. package/dist/v2/AutoSizer/utils.d.ts +5 -0
  71. package/dist/v2/AutoSizer/utils.d.ts.map +1 -0
  72. package/dist/v2/JsonPretty/hooks/useClipboard.d.ts +4 -0
  73. package/dist/v2/JsonPretty/hooks/useClipboard.d.ts.map +1 -0
  74. package/dist/v2/JsonPretty/hooks/useError.d.ts +8 -0
  75. package/dist/v2/JsonPretty/hooks/useError.d.ts.map +1 -0
  76. package/dist/v2/JsonPretty/type.d.ts +93 -0
  77. package/dist/v2/JsonPretty/type.d.ts.map +1 -0
  78. package/dist/v3/AutoSizer/utils.d.ts +5 -0
  79. package/dist/v3/AutoSizer/utils.d.ts.map +1 -0
  80. package/dist/v3/ConsoleList/staticTips.d.ts +13 -0
  81. package/dist/v3/ConsoleList/staticTips.d.ts.map +1 -0
  82. package/dist/v3/JsonPretty/hooks/useClipboard.d.ts +4 -0
  83. package/dist/v3/JsonPretty/hooks/useClipboard.d.ts.map +1 -0
  84. package/dist/v3/JsonPretty/hooks/useError.d.ts +8 -0
  85. package/dist/v3/JsonPretty/hooks/useError.d.ts.map +1 -0
  86. package/dist/v3/JsonPretty/type.d.ts +93 -0
  87. package/dist/v3/JsonPretty/type.d.ts.map +1 -0
  88. package/dist/v3/JsonPretty/utils/index.d.ts +10 -0
  89. package/dist/v3/JsonPretty/utils/index.d.ts.map +1 -0
  90. package/package.json +5 -5
  91. package/dev/components/AppInfo/index.vue +0 -36
  92. package/dev/components/AutoSizer/index.vue +0 -193
  93. package/dev/components/AutoSizer/index1.vue +0 -186
  94. package/dev/components/AutoSizer/utils.ts +0 -49
  95. package/dev/components/Button/index.vue +0 -34
  96. package/dev/components/CaptureScreen/index.vue +0 -62
  97. package/dev/components/Checkbox/index.vue +0 -40
  98. package/dev/components/CloseButton/index.vue +0 -26
  99. package/dev/components/Code/index.vue +0 -230
  100. package/dev/components/Connection/index.vue +0 -88
  101. package/dev/components/ConsoleList/Code.vue +0 -227
  102. package/dev/components/ConsoleList/ConsoleItem.vue +0 -207
  103. package/dev/components/ConsoleList/RunJSInput.vue +0 -237
  104. package/dev/components/ConsoleList/index.vue +0 -139
  105. package/dev/components/ConsoleList/staticTips.ts +0 -1145
  106. package/dev/components/DevTool/index.vue +0 -188
  107. package/dev/components/DevToolButton/index.vue +0 -210
  108. package/dev/components/DevToolTitle/index.vue +0 -21
  109. package/dev/components/DevToolWindow/index.vue +0 -1053
  110. package/dev/components/DeviceInfo/index.vue +0 -32
  111. package/dev/components/Empty/empty.png +0 -0
  112. package/dev/components/Empty/index.vue +0 -28
  113. package/dev/components/FilterInput/index.vue +0 -86
  114. package/dev/components/JsonPretty/components/Brackets/index.vue +0 -23
  115. package/dev/components/JsonPretty/components/Carets/index.vue +0 -59
  116. package/dev/components/JsonPretty/components/CheckController/index.vue +0 -125
  117. package/dev/components/JsonPretty/components/TreeNode/index.vue +0 -349
  118. package/dev/components/JsonPretty/hooks/useClipboard.ts +0 -21
  119. package/dev/components/JsonPretty/hooks/useError.ts +0 -21
  120. package/dev/components/JsonPretty/index.vue +0 -476
  121. package/dev/components/JsonPretty/type.ts +0 -125
  122. package/dev/components/JsonPretty/utils/index.ts +0 -172
  123. package/dev/components/NetworkList/NetworkDetail.vue +0 -194
  124. package/dev/components/NetworkList/NetworkItem.vue +0 -119
  125. package/dev/components/NetworkList/index.vue +0 -128
  126. package/dev/components/PiniaList/index.vue +0 -64
  127. package/dev/components/RouteList/index.vue +0 -121
  128. package/dev/components/RunJS/index.vue +0 -128
  129. package/dev/components/SettingList/index.vue +0 -222
  130. package/dev/components/SourceCode/index.vue +0 -231
  131. package/dev/components/StorageList/index.vue +0 -170
  132. package/dev/components/SystemInfo/index.vue +0 -34
  133. package/dev/components/Tabs/index.vue +0 -123
  134. package/dev/components/Tag/index.vue +0 -89
  135. package/dev/components/UniEvent/UniEventItem.vue +0 -126
  136. package/dev/components/UniEvent/index.vue +0 -98
  137. package/dev/components/UploadList/UploadDetail.vue +0 -204
  138. package/dev/components/UploadList/UploadItem.vue +0 -117
  139. package/dev/components/UploadList/index.vue +0 -117
  140. package/dev/components/VirtualList/index.vue +0 -112
  141. package/dev/components/VirtualListPro/AutoSize.vue +0 -43
  142. package/dev/components/VirtualListPro/index.vue +0 -238
  143. package/dev/components/VirtualListPro/readme.md +0 -40
  144. package/dev/components/VuexList/index.vue +0 -54
  145. package/dev/components/WebSocket/WebSocketItem.vue +0 -103
  146. package/dev/components/WebSocket/WebSocketList.vue +0 -173
  147. package/dev/components/WebSocket/index.vue +0 -124
  148. package/dev/components/WindowInfo/index.vue +0 -33
  149. package/dev/const.ts +0 -164
  150. package/dev/core.ts +0 -118
  151. package/dev/devConsole/index.ts +0 -350
  152. package/dev/devEvent/index.ts +0 -810
  153. package/dev/devEventBus/index.ts +0 -94
  154. package/dev/devIntercept/index.ts +0 -745
  155. package/dev/devRunJS/index.ts +0 -170
  156. package/dev/devStore/index.ts +0 -732
  157. package/dev/devToolInfo/index.ts +0 -26
  158. package/dev/plugins/uniDevTool/uniDevTool.d.ts.map +0 -1
  159. package/dev/plugins/uniDevTool/uniDevTool.js +0 -36
  160. package/dev/plugins/utils/index.js +0 -1
  161. package/dev/shims-uni.d.ts +0 -43
  162. package/dev/type.ts +0 -291
  163. package/dev/utils/array.ts +0 -15
  164. package/dev/utils/date.ts +0 -75
  165. package/dev/utils/file.ts +0 -121
  166. package/dev/utils/function.ts +0 -192
  167. package/dev/utils/index.d.ts +0 -6
  168. package/dev/utils/index.ts +0 -51
  169. package/dev/utils/ip.ts +0 -79
  170. package/dev/utils/language.ts +0 -77
  171. package/dev/utils/object.ts +0 -306
  172. package/dev/utils/page.ts +0 -13
  173. package/dev/utils/platform.ts +0 -14
  174. package/dev/utils/string.ts +0 -133
  175. package/dev/utils/utils.ts +0 -198
  176. /package/{dev → dist}/index.d.ts +0 -0
  177. /package/{dev → dist}/index.d.ts.map +0 -0
  178. /package/{dev → dist}/index.js +0 -0
  179. /package/{dev → dist}/plugins/uniGlobalComponents/uniGlobalComponents.d.ts +0 -0
  180. /package/{dev → dist}/plugins/uniGlobalComponents/uniGlobalComponents.d.ts.map +0 -0
  181. /package/{dev → dist}/plugins/uniGlobalComponents/uniGlobalComponents.js +0 -0
@@ -1,204 +0,0 @@
1
- <template>
2
- <view class="upload-detail" :style="{ zIndex: zIndex }">
3
- <view class="upload-detail-control">
4
- <Tag
5
- v-for="item in selectItems"
6
- :active="currentSelect === item.value"
7
- :mode="item.mode"
8
- :key="item.value"
9
- @click="onSelect(item)"
10
- >
11
- {{ item.label }}
12
- </Tag>
13
-
14
- <CloseButton style="margin-left: auto" @click="onClose" />
15
- </view>
16
-
17
- <view class="upload-detail-header" v-if="currentSelect === 'header'">
18
- <view class="upload-detail-title">常规</view>
19
- <view class="net-detail-item">
20
- <view>请求url:</view>
21
- <view>{{ upload.url }}</view>
22
- </view>
23
- <view class="net-detail-item">
24
- <view>请求方法:</view>
25
- <Tag mode="info">{{ upload.method ?? 'POST' }}</Tag>
26
- </view>
27
- <view class="net-detail-item">
28
- <view>状态代码:</view>
29
- <Tag mode="info">{{ upload.status }}</Tag>
30
- </view>
31
- <view class="upload-detail-title">请求头</view>
32
- <view
33
- class="net-detail-item"
34
- v-for="item in upload?.headers?.requestHeader"
35
- :key="item.key"
36
- >
37
- <view>{{ item.key }}:</view>
38
- {{ item.value }}
39
- </view>
40
- <!-- <view class="upload-detail-title">响应头</view>
41
- <view
42
- class="net-detail-item"
43
- v-for="item in upload?.headers?.responseHeader"
44
- :key="item.key"
45
- >
46
- <view>{{ item.key }}:</view>
47
- {{ item.value }}
48
- </view> -->
49
- </view>
50
-
51
- <template v-if="currentSelect === 'formdata'">
52
- <template v-if="formData?.type === 'object'">
53
- <JsonPretty :data="formData.value" />
54
- </template>
55
- <view
56
- v-else-if="formData?.type === 'string'"
57
- class="upload-detail-payload"
58
- >
59
- {{ formData.value }}
60
- </view>
61
- <Empty v-else />
62
- </template>
63
-
64
- <template v-if="currentSelect === 'response'">
65
- <template v-if="response?.type === 'object'">
66
- <JsonPretty :data="response.value" virtual />
67
- </template>
68
- <view
69
- v-else-if="response?.type === 'string'"
70
- class="upload-detail-payload"
71
- >
72
- {{ response.value }}
73
- </view>
74
- <Empty v-else />
75
- </template>
76
- </view>
77
- </template>
78
- <script lang="ts" setup>
79
- import { ref, computed } from 'vue';
80
- import JsonPretty from '../JsonPretty/index.vue';
81
- import Tag from '../Tag/index.vue';
82
- import Empty from '../Empty/index.vue';
83
- import CloseButton from '../CloseButton/index.vue';
84
- import type { DevTool } from '../../type';
85
- const props = defineProps<{ upload: DevTool.UploadItem; zIndex?: number }>();
86
- const emit = defineEmits<{ (e: 'close'): void }>();
87
- const selectItems = [
88
- {
89
- label: 'header',
90
- value: 'header',
91
- mode: 'info',
92
- },
93
- {
94
- label: 'formdata',
95
- value: 'formdata',
96
- mode: 'info',
97
- },
98
- {
99
- label: 'response',
100
- value: 'response',
101
- mode: 'info',
102
- },
103
- ];
104
- const currentSelect = ref('header');
105
-
106
- const formData = computed(() => {
107
- try {
108
- if (props.upload.formData) {
109
- return {
110
- value: JSON.parse(JSON.stringify(props.upload.formData)),
111
- type: 'object',
112
- };
113
- }
114
- return {
115
- value: {},
116
- type: 'empty',
117
- };
118
- } catch (error) {
119
- return {
120
- value: JSON.parse(JSON.stringify(props.upload.formData)),
121
- type: 'object',
122
- };
123
- }
124
- });
125
-
126
- const response = computed(() => {
127
- try {
128
- if (props.upload.response) {
129
- return {
130
- value: JSON.parse(JSON.stringify(props.upload.response)),
131
- type: 'object',
132
- };
133
- }
134
- return {
135
- value: {},
136
- type: 'empty',
137
- };
138
- } catch (error) {
139
- return {
140
- value: props.upload.response,
141
- type: props.upload.response ? 'string' : 'empty',
142
- };
143
- }
144
- });
145
-
146
- function onSelect(item: { label: string; value: string }) {
147
- currentSelect.value = item.value;
148
- }
149
-
150
- function onClose() {
151
- emit('close');
152
- }
153
- </script>
154
- <style>
155
- .upload-detail {
156
- position: fixed;
157
- width: 100vw;
158
- height: 100vh;
159
- z-index: 1001;
160
- top: 0;
161
- left: 0;
162
- padding: 0 16px;
163
- background-color: rgba(255, 255, 255, 0.95);
164
- box-sizing: border-box;
165
- }
166
- .upload-detail .upload-detail-control {
167
- display: flex;
168
- align-items: center;
169
- margin-bottom: 4px;
170
- gap: 12px;
171
- height: 32px;
172
- border-bottom: 1px solid transparent;
173
- box-sizing: border-box;
174
- }
175
-
176
- .upload-detail .upload-detail-close {
177
- flex-shrink: 0;
178
- display: flex;
179
- align-items: center;
180
- justify-content: center;
181
- width: 24px;
182
- height: 24px;
183
- margin-left: auto;
184
- border-radius: 50%;
185
- border: 1px solid #000;
186
- box-sizing: border-box;
187
- }
188
-
189
- .upload-detail .upload-detail-header .net-detail-item {
190
- display: flex;
191
- align-items: center;
192
- min-height: 28px;
193
- word-break: break-all;
194
- }
195
- .upload-detail .upload-detail-header .net-detail-item > view:first-child {
196
- white-space: nowrap;
197
- margin-right: 8px;
198
- color: #616161;
199
- }
200
- .upload-detail .upload-detail-payload {
201
- word-break: break-all;
202
- max-width: 100%;
203
- }
204
- </style>
@@ -1,117 +0,0 @@
1
- <template>
2
- <view class="upload-item">
3
- <view class="upload-url-row">
4
- <Tag mode="info">POST</Tag>
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
- </view>
13
- <view class="upload-info">
14
- <view>
15
- <Tag v-if="upload.status === 'pending'" mode="info">
16
- {{ upload.status }}
17
- </Tag>
18
- <Tag v-if="upload.status === 'uploading'" mode="warn">
19
- {{ upload.status }}
20
- </Tag>
21
- <Tag v-if="upload.status === 'success'" mode="success">
22
- {{ upload.status }}
23
- </Tag>
24
- <Tag v-if="upload.status === 'error'" mode="error">
25
- {{ upload.status }}
26
- </Tag>
27
- </view>
28
- <view>进度: {{ upload.progress }}%</view>
29
- <view>
30
- 开始:
31
- {{ upload.startTime ? formatDate(upload.startTime, ' HH:mm:ss') : '-' }}
32
- </view>
33
- <view>
34
- 结束:
35
- {{ upload.endTime ? formatDate(upload.endTime, ' HH:mm:ss') : '-' }}
36
- </view>
37
- </view>
38
- </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
- </template>
48
-
49
- <script lang="ts" setup>
50
- import { ref } from 'vue';
51
- import Tag from '../Tag/index.vue';
52
- import UploadDetail from './UploadDetail.vue';
53
- import { formatDate } from '../../utils';
54
- import type { DevTool } from '../../type';
55
- defineProps<{
56
- upload: DevTool.UploadItem;
57
- zIndex?: number;
58
- }>();
59
- const showDetail = ref(false);
60
-
61
- function onClose() {
62
- showDetail.value = false;
63
- }
64
- </script>
65
- <style scoped>
66
- .upload-item {
67
- padding: 16px;
68
- border-bottom: 1px solid var(--dev-tool-border-color);
69
- font-size: var(--dev-tool-base-font-size);
70
- }
71
- .upload-item .upload-url-row {
72
- display: flex;
73
- align-items: center;
74
- word-break: break-all;
75
- }
76
- .websocket-item .websocket-url-row .websocket-url {
77
- margin-left: 4px;
78
- flex: 1;
79
- white-space: nowrap;
80
- overflow: hidden;
81
- text-overflow: ellipsis;
82
- }
83
-
84
- .upload-item .upload-url-row .upload-detail-icon {
85
- flex-shrink: 0;
86
- margin-left: auto;
87
- }
88
- .upload-url {
89
- margin-left: 4px;
90
- flex: 1;
91
- white-space: nowrap;
92
- overflow: hidden;
93
- text-overflow: ellipsis;
94
- }
95
- .upload-item .upload-url-row .upload-detail-active {
96
- transform: rotate(135deg);
97
- }
98
- .upload-item .upload-info {
99
- display: flex;
100
- align-items: center;
101
- justify-content: space-between;
102
- margin-top: 4px;
103
- color: #616161;
104
- }
105
-
106
- .slide-fade-enter-active {
107
- transition: all 0.8s ease-out;
108
- }
109
- .slide-fade-leave-active {
110
- transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
111
- }
112
- .slide-fade-enter-from,
113
- .slide-fade-leave-to {
114
- transform: translateY(20px);
115
- opacity: 0;
116
- }
117
- </style>
@@ -1,117 +0,0 @@
1
- <template>
2
- <view class="upload-content">
3
- <view class="upload-control">
4
- <FilterInput
5
- :modelValue="modelValue"
6
- placeholder="查询url"
7
- @search="emit('search', $event)"
8
- @update:modelValue="emit('update:modelValue', $event)"
9
- />
10
- <Tag
11
- v-for="item in uploadFilterItems"
12
- :mode="item.mode"
13
- :key="item.value"
14
- :active="item.value === currentUploadType"
15
- @click="onChoose(item.value)"
16
- >
17
- {{ item.label }}
18
- </Tag>
19
- </view>
20
- <VirtualListPro
21
- :data="uploadList"
22
- :pageSize="15"
23
- :height="height"
24
- className="upload-list"
25
- >
26
- <template v-slot="{ list, start }">
27
- <AutoSize
28
- v-for="(item, index) in list"
29
- :index="start + index"
30
- :key="start + index"
31
- >
32
- <UploadItem :upload="item" :zIndex="zIndex" />
33
- </AutoSize>
34
- <Empty v-if="!uploadList || uploadList.length === 0" />
35
- </template>
36
- </VirtualListPro>
37
- </view>
38
- </template>
39
- <script lang="ts" setup>
40
- import Tag from '../Tag/index.vue';
41
- import UploadItem from './UploadItem.vue';
42
- import Empty from '../Empty/index.vue';
43
- import FilterInput from '../FilterInput/index.vue';
44
- import type { DevTool } from '../../type';
45
- import VirtualListPro from '../VirtualListPro/index.vue';
46
- import AutoSize from '../VirtualListPro/AutoSize.vue';
47
- import { onMounted, ref } from 'vue';
48
-
49
- defineProps<{
50
- currentUploadType: string;
51
- uploadList: DevTool.UploadItem[];
52
- modelValue: string;
53
- zIndex: number;
54
- }>();
55
-
56
- const emit = defineEmits<{
57
- (e: 'choose', type: string): void;
58
- (e: 'update:modelValue', value: string): void;
59
- (e: 'search', value: string): void;
60
- }>();
61
- const uploadFilterItems = [
62
- {
63
- label: '全部',
64
- value: 'all',
65
- mode: 'all',
66
- },
67
- {
68
- label: 'pending',
69
- value: 'pending',
70
- mode: 'info',
71
- },
72
- {
73
- label: 'success',
74
- value: 'success',
75
- mode: 'success',
76
- },
77
- {
78
- label: 'error',
79
- value: 'error',
80
- mode: 'error',
81
- },
82
- {
83
- label: '清除',
84
- value: 'clear',
85
- mode: 'clear',
86
- },
87
- ];
88
-
89
- function onChoose(type: string) {
90
- emit('choose', type);
91
- }
92
-
93
- const height = ref(0);
94
- onMounted(() => {
95
- const { windowHeight } = uni.getWindowInfo();
96
- height.value = windowHeight - 32 - 32;
97
- });
98
- </script>
99
- <style scoped>
100
- .upload-content {
101
- height: 100%;
102
- font-size: var(--dev-tool-base-font-size);
103
- }
104
- .upload-list {
105
- height: calc(100% - 32px);
106
- }
107
- .upload-control {
108
- display: flex;
109
- align-items: center;
110
- justify-content: space-between;
111
- gap: 8px;
112
- padding: 0 16px;
113
- height: 32px;
114
- border-bottom: 1px solid var(--dev-tool-border-color);
115
- box-sizing: border-box;
116
- }
117
- </style>
@@ -1,112 +0,0 @@
1
- <template>
2
- <scroll-view
3
- v-if="autoVirtual"
4
- scroll-y
5
- class="virtual-list"
6
- :style="{
7
- height: `${props.height}px`,
8
- }"
9
- @scroll="onVirtualScroll"
10
- >
11
- <view
12
- class="virtual-list-holder"
13
- :style="{
14
- height: `${props.data.length * props.itemHeight}px`,
15
- }"
16
- >
17
- <view
18
- class="virtual-list-holder-inner"
19
- :style="{
20
- transform: `translateY(${state.translateY}px)`,
21
- }"
22
- >
23
- <slot :list="state.visibleData"></slot>
24
- </view>
25
- </view>
26
- </scroll-view>
27
- <view
28
- v-else
29
- class="normal-list"
30
- :style="{
31
- height: `${props.height}px`,
32
- }"
33
- >
34
- <slot :list="state.visibleData"></slot>
35
- </view>
36
- </template>
37
- <script lang="ts" setup>
38
- import { computed, onMounted, reactive, watchEffect } from 'vue';
39
- const props = defineProps<{
40
- /** 虚拟列表高度 */
41
- height: number;
42
- /** 每一项高度 */
43
- itemHeight: number;
44
- /** 渲染的数据列表 */
45
- data: any[];
46
- /** 虚拟列表自动开启行数 */
47
- autoVirtualRow?: number;
48
- }>();
49
-
50
- const state = reactive<{ translateY: number; visibleData: any[] }>({
51
- translateY: 0,
52
- visibleData: [],
53
- });
54
-
55
- const autoVirtual = computed(() => {
56
- if (typeof props.autoVirtualRow === 'number') {
57
- if (props.data.length > props.autoVirtualRow) {
58
- return true;
59
- }
60
- return false;
61
- }
62
- return true;
63
- });
64
-
65
- function updateVisibleData(scrollTop: number = 0) {
66
- const flatDataValue = props.data ?? [];
67
- if (autoVirtual.value) {
68
- const visibleCount = props.height / props.itemHeight;
69
- const scrollCount = Math.floor(scrollTop / props.itemHeight);
70
- let start =
71
- scrollCount < 0
72
- ? 0
73
- : scrollCount + visibleCount > flatDataValue.length
74
- ? flatDataValue.length - visibleCount
75
- : scrollCount;
76
- if (start < 0) {
77
- start = 0;
78
- }
79
- const end = start + visibleCount;
80
- state.translateY = start * props.itemHeight;
81
- state.visibleData = state.visibleData = props.data.slice(start, end);
82
- } else {
83
- state.visibleData = flatDataValue;
84
- }
85
- }
86
-
87
- function onVirtualScroll(e: { detail: { scrollTop: number } }) {
88
- updateVisibleData(e?.detail?.scrollTop ?? 0);
89
- }
90
-
91
- watchEffect(() => {
92
- if (props.data) {
93
- updateVisibleData();
94
- }
95
- });
96
-
97
- onMounted(() => {
98
- updateVisibleData();
99
- });
100
- </script>
101
- <style scoped>
102
- .normal-list,
103
- .virtual-list {
104
- position: relative;
105
- width: 100%;
106
- overflow: auto;
107
- }
108
-
109
- .virtual-list-holder {
110
- position: relative;
111
- }
112
- </style>
@@ -1,43 +0,0 @@
1
- <template>
2
- <view :class="className">
3
- <slot></slot>
4
- </view>
5
- </template>
6
- <script lang="ts" setup>
7
- import { getCurrentInstance, onMounted, inject, nextTick } from 'vue';
8
- import { uniqueId } from '../../utils';
9
-
10
- const props = defineProps<{
11
- index: number;
12
- }>();
13
-
14
- const className = uniqueId('virtual-');
15
-
16
- const instance = getCurrentInstance();
17
-
18
- const query = uni.createSelectorQuery().in(instance);
19
-
20
- const onSizeChange =
21
- inject<(index: number, height: number) => void>('onSizeChange');
22
-
23
- const itemsHeight = inject<number[]>('itemsHeight');
24
-
25
- onMounted(() => {
26
- // TODO 可能会存在异步高度的问题
27
- // TODO image 加载完成之后获取高度
28
-
29
- if (itemsHeight?.[props.index]) return;
30
-
31
- nextTick(() => {
32
- query
33
- .select('.' + className)
34
- .boundingClientRect((rect) => {
35
- if (Array.isArray(rect)) return;
36
- onSizeChange?.(props.index, rect.height ?? 0);
37
- })
38
- .exec();
39
- });
40
- });
41
- </script>
42
-
43
- <style scoped></style>