@cmstops/pro-compo 3.9.1-rc.4 → 3.9.1-rc.5
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/dist/index.css +45 -4
- package/dist/index.min.css +1 -1
- package/es/hooks/usePopper.d.ts +1 -1
- package/es/hooks/usePopper.js +3 -3
- package/es/index.css +45 -4
- package/es/selectResourceModal/__demo__/module/DivWrapper.d.ts +268 -0
- package/es/selectResourceModal/__demo__/module/basic.d.ts +299 -0
- package/es/selectResourceModal/components/List/ListNormal/Filter.js +192 -90
- package/es/selectResourceModal/components/List/ListNormal/index.js +23 -7
- package/es/selectResourceModal/hooks/useResponsiveFilter.d.ts +21 -0
- package/es/selectResourceModal/hooks/useResponsiveFilter.js +142 -0
- package/es/selectResourceModal/style/index.css +45 -4
- package/es/selectResourceModal/style/index.less +14 -0
- package/es/selectResourceModal/style/list.less +40 -4
- package/es/utils/index.js +6 -6
- package/lib/hooks/usePopper.js +3 -3
- package/lib/index.css +45 -4
- package/lib/selectResourceModal/components/List/ListNormal/Filter.js +189 -87
- package/lib/selectResourceModal/components/List/ListNormal/index.js +22 -6
- package/lib/selectResourceModal/hooks/useResponsiveFilter.js +144 -0
- package/lib/selectResourceModal/style/index.css +45 -4
- package/lib/selectResourceModal/style/index.less +14 -0
- package/lib/selectResourceModal/style/list.less +40 -4
- package/lib/utils/index.js +6 -6
- package/package.json +1 -1
|
@@ -1,43 +1,71 @@
|
|
|
1
|
-
import { defineComponent, inject, computed, ref, watch, onMounted, openBlock, createElementBlock, createElementVNode,
|
|
2
|
-
import { Input, Dropdown, Doption,
|
|
3
|
-
import { IconUpload } from "@arco-design/web-vue/es/icon";
|
|
1
|
+
import { defineComponent, inject, computed, ref, watch, onMounted, openBlock, createElementBlock, createCommentVNode, createElementVNode, withDirectives, createVNode, unref, withModifiers, withCtx, createTextVNode, vShow, toDisplayString, Fragment, renderList, createBlock, normalizeClass } from "vue";
|
|
2
|
+
import { Button, Input, Dropdown, Doption, TreeSelect, Select, Option, RangePicker } from "@arco-design/web-vue";
|
|
3
|
+
import { IconCaretDown, IconRefresh, IconUpload } from "@arco-design/web-vue/es/icon";
|
|
4
4
|
import useSelection from "../../../../hooks/useSelection.js";
|
|
5
5
|
import { useDirectory } from "../../../../hooks/useAttachement.js";
|
|
6
6
|
import { RESOURCE_SOURCE_OPTIONS, RESOURCE_CATALOG_OPTIONS } from "../../../../utils/typeMap.js";
|
|
7
7
|
import { getAccountList } from "../../../scripts/selectionApis.js";
|
|
8
8
|
import { keywordsSelection } from "../../../../utils/resource.js";
|
|
9
|
+
import { useResponsiveFilter } from "../../../hooks/useResponsiveFilter.js";
|
|
9
10
|
const _hoisted_1 = { class: "list-filter-wrapper" };
|
|
10
11
|
const _hoisted_2 = { class: "list-filter" };
|
|
11
|
-
const _hoisted_3 = { class: "
|
|
12
|
-
const _hoisted_4 = {
|
|
12
|
+
const _hoisted_3 = { class: "more-btn" };
|
|
13
|
+
const _hoisted_4 = { class: "right-prefix" };
|
|
13
14
|
const _hoisted_5 = {
|
|
14
15
|
class: "filter-item",
|
|
15
|
-
style: { "width": "
|
|
16
|
+
style: { "width": "200px" }
|
|
17
|
+
};
|
|
18
|
+
const _hoisted_6 = {
|
|
19
|
+
class: "filter-item",
|
|
20
|
+
style: { "width": "180px" }
|
|
16
21
|
};
|
|
17
|
-
const _hoisted_6 = { class: "filter-item" };
|
|
18
22
|
const _hoisted_7 = {
|
|
23
|
+
class: "filter-item",
|
|
24
|
+
style: { "width": "170px" }
|
|
25
|
+
};
|
|
26
|
+
const _hoisted_8 = {
|
|
27
|
+
class: "filter-item",
|
|
28
|
+
style: { "width": "240px" }
|
|
29
|
+
};
|
|
30
|
+
const _hoisted_9 = {
|
|
31
|
+
class: "filter-item",
|
|
32
|
+
style: { "width": "240px" }
|
|
33
|
+
};
|
|
34
|
+
const _hoisted_10 = {
|
|
19
35
|
key: 0,
|
|
20
36
|
class: "filter-item"
|
|
21
37
|
};
|
|
22
|
-
const
|
|
23
|
-
const
|
|
38
|
+
const _hoisted_11 = { class: "filter-extra" };
|
|
39
|
+
const _hoisted_12 = { class: "filter-item" };
|
|
40
|
+
const _hoisted_13 = {
|
|
24
41
|
key: 0,
|
|
25
42
|
class: "list-filter-tags"
|
|
26
43
|
};
|
|
27
|
-
const
|
|
44
|
+
const _hoisted_14 = ["onClick"];
|
|
28
45
|
const _sfc_main = defineComponent({
|
|
29
46
|
__name: "Filter",
|
|
30
47
|
props: {
|
|
48
|
+
smallScreen: { type: Boolean },
|
|
31
49
|
disableUploadBy: { type: Boolean }
|
|
32
50
|
},
|
|
33
51
|
emits: ["upload", "change"],
|
|
34
52
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
53
|
+
var _a, _b, _c;
|
|
35
54
|
const props = __props;
|
|
36
55
|
const emits = __emit;
|
|
37
56
|
const userInfo = inject("userInfo");
|
|
38
57
|
const baseAPI = inject("baseAPI");
|
|
39
58
|
const filterOptions = inject("filterOptions");
|
|
40
59
|
const domainId = computed(() => userInfo == null ? void 0 : userInfo.value.domain_id);
|
|
60
|
+
const filterItemsRef = ref();
|
|
61
|
+
const {
|
|
62
|
+
moreBtnRef,
|
|
63
|
+
popperPanelRef,
|
|
64
|
+
hiddenElementList,
|
|
65
|
+
visible,
|
|
66
|
+
show,
|
|
67
|
+
hide
|
|
68
|
+
} = useResponsiveFilter(filterItemsRef);
|
|
41
69
|
const { options, loading, load, loadMore, handleSearch } = useSelection({
|
|
42
70
|
labelStr: "alias",
|
|
43
71
|
valueStr: "id",
|
|
@@ -71,7 +99,17 @@ const _sfc_main = defineComponent({
|
|
|
71
99
|
sf: "",
|
|
72
100
|
directory_id: void 0
|
|
73
101
|
};
|
|
74
|
-
|
|
102
|
+
if ((_a = filterOptions == null ? void 0 : filterOptions.value) == null ? void 0 : _a.mediaTypeStrict) {
|
|
103
|
+
originFilter.catalog = filterOptions.value.mediaType.split(",");
|
|
104
|
+
}
|
|
105
|
+
const filter = ref(
|
|
106
|
+
JSON.parse(
|
|
107
|
+
JSON.stringify({
|
|
108
|
+
...originFilter,
|
|
109
|
+
catalog: ((_c = (_b = filterOptions == null ? void 0 : filterOptions.value) == null ? void 0 : _b.mediaType) == null ? void 0 : _c.split(",")) || []
|
|
110
|
+
})
|
|
111
|
+
)
|
|
112
|
+
);
|
|
75
113
|
const handleReset = () => {
|
|
76
114
|
filter.value = JSON.parse(JSON.stringify(originFilter));
|
|
77
115
|
};
|
|
@@ -116,82 +154,114 @@ const _sfc_main = defineComponent({
|
|
|
116
154
|
filter.value.keyword = val;
|
|
117
155
|
filter.value.precise_keyword = "";
|
|
118
156
|
}
|
|
157
|
+
filter.value.sf = "";
|
|
119
158
|
}
|
|
120
159
|
});
|
|
121
|
-
watch(
|
|
122
|
-
() => searchType.value,
|
|
123
|
-
() => {
|
|
124
|
-
searchInput.value = filter.value.keyword || filter.value.precise_keyword;
|
|
125
|
-
}
|
|
126
|
-
);
|
|
127
160
|
const isEmpty = computed(() => {
|
|
128
|
-
return Object.keys(
|
|
161
|
+
return Object.keys(originFilter).every((key) => {
|
|
162
|
+
if (key === "catalog") {
|
|
163
|
+
const currentCatalog = filter.value[key] || [];
|
|
164
|
+
const originCatalog = originFilter[key] || [];
|
|
165
|
+
return currentCatalog.length === originCatalog.length && currentCatalog.every((v) => originCatalog.includes(v));
|
|
166
|
+
}
|
|
129
167
|
return filter.value[key] === originFilter[key];
|
|
130
168
|
});
|
|
131
169
|
});
|
|
132
170
|
watch(
|
|
133
171
|
() => filter.value,
|
|
134
|
-
() => {
|
|
135
|
-
const result = { ...
|
|
172
|
+
(val) => {
|
|
173
|
+
const result = { ...val };
|
|
136
174
|
Object.keys(result).forEach((key) => {
|
|
137
175
|
if (props.disableUploadBy && key === "upload_by")
|
|
138
176
|
delete result[key];
|
|
139
|
-
if (
|
|
140
|
-
|
|
177
|
+
if (result[key] === "" || result[key] === null || result[key] === void 0) {
|
|
178
|
+
if (key !== "catalog") {
|
|
179
|
+
delete result[key];
|
|
180
|
+
}
|
|
181
|
+
}
|
|
141
182
|
});
|
|
142
|
-
if (
|
|
143
|
-
result.catalog
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
},
|
|
148
|
-
{ deep: true, immediate: true }
|
|
149
|
-
);
|
|
150
|
-
watch(
|
|
151
|
-
() => filterOptions == null ? void 0 : filterOptions.value,
|
|
152
|
-
() => {
|
|
153
|
-
var _a;
|
|
154
|
-
if ((_a = filterOptions == null ? void 0 : filterOptions.value) == null ? void 0 : _a.mediaType) {
|
|
155
|
-
filter.value.catalog = filterOptions == null ? void 0 : filterOptions.value.mediaType.split(",");
|
|
156
|
-
if (filterOptions == null ? void 0 : filterOptions.value.mediaTypeStrict) {
|
|
157
|
-
originFilter.catalog = filterOptions == null ? void 0 : filterOptions.value.mediaType.split(",");
|
|
183
|
+
if (result.catalog && Array.isArray(result.catalog)) {
|
|
184
|
+
if (result.catalog.length > 0) {
|
|
185
|
+
result.catalog = result.catalog.join(",");
|
|
186
|
+
} else {
|
|
187
|
+
delete result.catalog;
|
|
158
188
|
}
|
|
159
189
|
}
|
|
190
|
+
emits("change", result);
|
|
160
191
|
},
|
|
161
|
-
{
|
|
192
|
+
{ deep: true, immediate: true }
|
|
162
193
|
);
|
|
163
194
|
onMounted(() => {
|
|
164
195
|
load();
|
|
165
196
|
});
|
|
166
197
|
__expose({
|
|
167
|
-
|
|
198
|
+
filter,
|
|
199
|
+
handleReset
|
|
168
200
|
});
|
|
169
201
|
return (_ctx, _cache) => {
|
|
170
|
-
var
|
|
202
|
+
var _a2;
|
|
171
203
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
204
|
+
createCommentVNode(" Use filterItemsRef's parentElement as the container for boundary checks "),
|
|
172
205
|
createElementVNode("div", _hoisted_2, [
|
|
173
|
-
|
|
206
|
+
createCommentVNode(" Filter Items Container "),
|
|
207
|
+
createElementVNode("div", {
|
|
208
|
+
id: "resource-filter-pannel",
|
|
209
|
+
ref_key: "filterItemsRef",
|
|
210
|
+
ref: filterItemsRef,
|
|
211
|
+
class: "filter-list"
|
|
212
|
+
}, [
|
|
213
|
+
createCommentVNode(" More Filters Button and Popper Panel "),
|
|
214
|
+
createElementVNode("div", _hoisted_3, [
|
|
215
|
+
createElementVNode("div", {
|
|
216
|
+
ref_key: "moreBtnRef",
|
|
217
|
+
ref: moreBtnRef
|
|
218
|
+
}, [
|
|
219
|
+
withDirectives(createVNode(unref(Button), {
|
|
220
|
+
style: { marginRight: "10px" },
|
|
221
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(() => unref(visible) ? unref(hide)() : unref(show)(), ["stop"]))
|
|
222
|
+
}, {
|
|
223
|
+
default: withCtx(() => [
|
|
224
|
+
createElementVNode("span", _hoisted_4, [
|
|
225
|
+
_cache[11] || (_cache[11] = createTextVNode(" \u66F4\u591A ")),
|
|
226
|
+
createVNode(unref(IconCaretDown))
|
|
227
|
+
])
|
|
228
|
+
]),
|
|
229
|
+
_: 1
|
|
230
|
+
}, 512), [
|
|
231
|
+
[vShow, unref(hiddenElementList).length]
|
|
232
|
+
])
|
|
233
|
+
], 512),
|
|
234
|
+
withDirectives(createElementVNode("div", {
|
|
235
|
+
ref_key: "popperPanelRef",
|
|
236
|
+
ref: popperPanelRef,
|
|
237
|
+
class: "filter-pannel",
|
|
238
|
+
onClick: _cache[1] || (_cache[1] = withModifiers(() => {
|
|
239
|
+
}, ["stop"]))
|
|
240
|
+
}, null, 512), [
|
|
241
|
+
[vShow, unref(visible)]
|
|
242
|
+
])
|
|
243
|
+
]),
|
|
174
244
|
createCommentVNode(" \u5173\u952E\u8BCD "),
|
|
175
|
-
createElementVNode("div",
|
|
245
|
+
createElementVNode("div", _hoisted_5, [
|
|
176
246
|
createVNode(unref(Input), {
|
|
177
247
|
modelValue: searchInput.value,
|
|
178
|
-
"onUpdate:modelValue": _cache[
|
|
248
|
+
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => searchInput.value = $event),
|
|
179
249
|
"allow-clear": "",
|
|
180
250
|
placeholder: "\u8BF7\u8F93\u5165\u5173\u952E\u8BCD"
|
|
181
251
|
}, {
|
|
182
252
|
prepend: withCtx(() => [
|
|
183
253
|
createVNode(unref(Dropdown), {
|
|
184
|
-
onSelect: _cache[
|
|
254
|
+
onSelect: _cache[2] || (_cache[2] = (e) => searchType.value = e)
|
|
185
255
|
}, {
|
|
186
256
|
content: withCtx(() => [
|
|
187
257
|
createVNode(unref(Doption), { value: 0 }, {
|
|
188
|
-
default: withCtx(() => _cache[
|
|
258
|
+
default: withCtx(() => _cache[12] || (_cache[12] = [
|
|
189
259
|
createTextVNode("\u7CBE\u51C6\u641C")
|
|
190
260
|
])),
|
|
191
261
|
_: 1
|
|
192
262
|
}),
|
|
193
263
|
createVNode(unref(Doption), { value: 1 }, {
|
|
194
|
-
default: withCtx(() => _cache[
|
|
264
|
+
default: withCtx(() => _cache[13] || (_cache[13] = [
|
|
195
265
|
createTextVNode("\u6A21\u7CCA\u641C")
|
|
196
266
|
])),
|
|
197
267
|
_: 1
|
|
@@ -212,24 +282,28 @@ const _sfc_main = defineComponent({
|
|
|
212
282
|
}, 8, ["modelValue"])
|
|
213
283
|
]),
|
|
214
284
|
createCommentVNode(" \u76EE\u5F55 "),
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
285
|
+
createElementVNode("div", _hoisted_6, [
|
|
286
|
+
createVNode(unref(TreeSelect), {
|
|
287
|
+
modelValue: filter.value.directory_id,
|
|
288
|
+
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => filter.value.directory_id = $event),
|
|
289
|
+
data: unref(tree),
|
|
290
|
+
"popup-container": "#resource-filter-pannel",
|
|
291
|
+
placeholder: "\u8BF7\u9009\u62E9\u76EE\u5F55",
|
|
292
|
+
"field-names": {
|
|
293
|
+
title: "alias",
|
|
294
|
+
key: "id"
|
|
295
|
+
},
|
|
296
|
+
"allow-clear": "",
|
|
297
|
+
"allow-search": ""
|
|
298
|
+
}, null, 8, ["modelValue", "data"])
|
|
299
|
+
]),
|
|
227
300
|
createCommentVNode(" \u7D20\u6750\u7C7B\u578B "),
|
|
228
|
-
createElementVNode("div",
|
|
301
|
+
createElementVNode("div", _hoisted_7, [
|
|
229
302
|
createVNode(unref(Select), {
|
|
230
303
|
modelValue: filter.value.catalog,
|
|
231
|
-
"onUpdate:modelValue": _cache[
|
|
232
|
-
disabled: (
|
|
304
|
+
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => filter.value.catalog = $event),
|
|
305
|
+
disabled: (_a2 = unref(filterOptions)) == null ? void 0 : _a2.mediaTypeStrict,
|
|
306
|
+
"popup-container": "#resource-filter-pannel",
|
|
233
307
|
"allow-clear": "",
|
|
234
308
|
placeholder: "\u7C7B\u578B",
|
|
235
309
|
multiple: "",
|
|
@@ -248,19 +322,22 @@ const _sfc_main = defineComponent({
|
|
|
248
322
|
}, 8, ["modelValue", "disabled"])
|
|
249
323
|
]),
|
|
250
324
|
createCommentVNode(" \u65F6\u95F4\u8303\u56F4 "),
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
325
|
+
createElementVNode("div", _hoisted_8, [
|
|
326
|
+
createVNode(unref(RangePicker), {
|
|
327
|
+
modelValue: rangeTime.value,
|
|
328
|
+
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => rangeTime.value = $event),
|
|
329
|
+
"allow-clear": "",
|
|
330
|
+
"popup-container": "#resource-filter-pannel"
|
|
331
|
+
}, null, 8, ["modelValue"])
|
|
332
|
+
]),
|
|
257
333
|
createCommentVNode(" \u7D20\u6750\u4E0A\u4F20\u6765\u6E90 "),
|
|
258
|
-
createElementVNode("div",
|
|
334
|
+
createElementVNode("div", _hoisted_9, [
|
|
259
335
|
createVNode(unref(Select), {
|
|
260
336
|
modelValue: filter.value.source,
|
|
261
|
-
"onUpdate:modelValue": _cache[
|
|
337
|
+
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => filter.value.source = $event),
|
|
262
338
|
"allow-clear": "",
|
|
263
|
-
placeholder: "\u6765\u6E90"
|
|
339
|
+
placeholder: "\u6765\u6E90",
|
|
340
|
+
"popup-container": "#resource-filter-pannel"
|
|
264
341
|
}, {
|
|
265
342
|
default: withCtx(() => [
|
|
266
343
|
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(resourceSource), (item) => {
|
|
@@ -275,14 +352,15 @@ const _sfc_main = defineComponent({
|
|
|
275
352
|
}, 8, ["modelValue"])
|
|
276
353
|
]),
|
|
277
354
|
createCommentVNode(" \u7D20\u6750\u4E0A\u4F20\u4EBA "),
|
|
278
|
-
!_ctx.disableUploadBy ? (openBlock(), createElementBlock("div",
|
|
355
|
+
!_ctx.disableUploadBy ? (openBlock(), createElementBlock("div", _hoisted_10, [
|
|
279
356
|
createVNode(unref(Select), {
|
|
280
357
|
modelValue: filter.value.upload_by,
|
|
281
|
-
"onUpdate:modelValue": _cache[
|
|
358
|
+
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => filter.value.upload_by = $event),
|
|
282
359
|
"allow-clear": "",
|
|
283
360
|
placeholder: "\u4E0A\u4F20\u4EBA",
|
|
284
361
|
loading: unref(loading),
|
|
285
362
|
"allow-search": "",
|
|
363
|
+
"popup-container": "#resource-filter-pannel",
|
|
286
364
|
onSearch: unref(handleSearch),
|
|
287
365
|
onDropdownReachBottom: unref(loadMore)
|
|
288
366
|
}, {
|
|
@@ -297,40 +375,64 @@ const _sfc_main = defineComponent({
|
|
|
297
375
|
]),
|
|
298
376
|
_: 1
|
|
299
377
|
}, 8, ["modelValue", "loading", "onSearch", "onDropdownReachBottom"])
|
|
300
|
-
])) : createCommentVNode("v-if", true)
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
378
|
+
])) : createCommentVNode("v-if", true)
|
|
379
|
+
], 512),
|
|
380
|
+
createElementVNode("div", _hoisted_11, [
|
|
381
|
+
createCommentVNode(" \u91CD\u7F6E\u6309\u94AE - Wrap in filter-item to be managed by the hook "),
|
|
382
|
+
withDirectives(createElementVNode("div", _hoisted_12, [
|
|
383
|
+
_ctx.smallScreen ? (openBlock(), createBlock(unref(Button), {
|
|
384
|
+
key: 0,
|
|
385
|
+
type: "text",
|
|
386
|
+
onClick: handleReset
|
|
387
|
+
}, {
|
|
388
|
+
icon: withCtx(() => [
|
|
389
|
+
createVNode(unref(IconRefresh))
|
|
390
|
+
]),
|
|
391
|
+
_: 1
|
|
392
|
+
})) : (openBlock(), createBlock(unref(Button), {
|
|
393
|
+
key: 1,
|
|
394
|
+
type: "text",
|
|
395
|
+
onClick: handleReset
|
|
396
|
+
}, {
|
|
397
|
+
default: withCtx(() => _cache[14] || (_cache[14] = [
|
|
398
|
+
createTextVNode(" \u91CD\u7F6E ")
|
|
399
|
+
])),
|
|
400
|
+
_: 1
|
|
401
|
+
}))
|
|
402
|
+
], 512), [
|
|
403
|
+
[vShow, !isEmpty.value]
|
|
404
|
+
]),
|
|
405
|
+
_ctx.smallScreen ? (openBlock(), createBlock(unref(Button), {
|
|
406
|
+
key: 0,
|
|
407
|
+
type: "primary",
|
|
408
|
+
onClick: _cache[9] || (_cache[9] = ($event) => emits("upload"))
|
|
305
409
|
}, {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
])
|
|
410
|
+
icon: withCtx(() => [
|
|
411
|
+
createVNode(unref(IconUpload))
|
|
412
|
+
]),
|
|
309
413
|
_: 1
|
|
310
|
-
})) :
|
|
311
|
-
|
|
312
|
-
createElementVNode("div", _hoisted_8, [
|
|
313
|
-
createVNode(unref(Button), {
|
|
414
|
+
})) : (openBlock(), createBlock(unref(Button), {
|
|
415
|
+
key: 1,
|
|
314
416
|
type: "primary",
|
|
315
|
-
onClick: _cache[
|
|
417
|
+
onClick: _cache[10] || (_cache[10] = ($event) => emits("upload"))
|
|
316
418
|
}, {
|
|
317
419
|
icon: withCtx(() => [
|
|
318
420
|
createVNode(unref(IconUpload))
|
|
319
421
|
]),
|
|
320
422
|
default: withCtx(() => [
|
|
321
|
-
_cache[
|
|
423
|
+
_cache[15] || (_cache[15] = createTextVNode(" \u4E0A\u4F20 "))
|
|
322
424
|
]),
|
|
323
425
|
_: 1
|
|
324
|
-
})
|
|
426
|
+
}))
|
|
325
427
|
])
|
|
326
428
|
]),
|
|
327
|
-
searchInput.value ? (openBlock(), createElementBlock("div",
|
|
429
|
+
searchInput.value ? (openBlock(), createElementBlock("div", _hoisted_13, [
|
|
328
430
|
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(keywordsSelection), (item) => {
|
|
329
431
|
return openBlock(), createElementBlock("div", {
|
|
330
432
|
key: item.value,
|
|
331
433
|
class: normalizeClass(["list-filter-tag", { active: filter.value.sf === item.value }]),
|
|
332
434
|
onClick: ($event) => filter.value.sf = item.value
|
|
333
|
-
}, toDisplayString(item.name), 11,
|
|
435
|
+
}, toDisplayString(item.name), 11, _hoisted_14);
|
|
334
436
|
}), 128))
|
|
335
437
|
])) : createCommentVNode("v-if", true)
|
|
336
438
|
]);
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { defineComponent, inject, watch, onMounted, openBlock, createBlock, unref, withCtx, renderSlot, createVNode, isRef, createElementVNode, createElementBlock, Fragment, renderList } from "vue";
|
|
1
|
+
import { defineComponent, inject, watch, ref, onMounted, openBlock, createBlock, unref, withCtx, renderSlot, createVNode, isRef, createElementVNode, createElementBlock, Fragment, renderList } from "vue";
|
|
2
2
|
import { Pagination } from "@arco-design/web-vue";
|
|
3
3
|
import _sfc_main$1 from "../ListWraper.js";
|
|
4
4
|
import useAttachement from "../../../../hooks/useAttachement.js";
|
|
5
5
|
import _sfc_main$2 from "./Filter.js";
|
|
6
|
-
const _hoisted_1 = { class: "list-item-grid" };
|
|
7
6
|
const _sfc_main = defineComponent({
|
|
8
7
|
__name: "index",
|
|
9
8
|
props: {
|
|
@@ -27,6 +26,18 @@ const _sfc_main = defineComponent({
|
|
|
27
26
|
changeKey
|
|
28
27
|
} = useAttachement({ key: props.activeKey, BASE_API });
|
|
29
28
|
watch(() => props.activeKey, changeKey);
|
|
29
|
+
const listWrapper = ref(null);
|
|
30
|
+
const smallScreen = ref(false);
|
|
31
|
+
watch(
|
|
32
|
+
() => {
|
|
33
|
+
var _a;
|
|
34
|
+
return (_a = listWrapper.value) == null ? void 0 : _a.offsetWidth;
|
|
35
|
+
},
|
|
36
|
+
(val) => {
|
|
37
|
+
smallScreen.value = !!(val && val < 600);
|
|
38
|
+
},
|
|
39
|
+
{ immediate: true }
|
|
40
|
+
);
|
|
30
41
|
onMounted(() => {
|
|
31
42
|
loadData();
|
|
32
43
|
});
|
|
@@ -40,9 +51,10 @@ const _sfc_main = defineComponent({
|
|
|
40
51
|
]),
|
|
41
52
|
header: withCtx(() => [
|
|
42
53
|
createVNode(_sfc_main$2, {
|
|
54
|
+
smallScreen: smallScreen.value,
|
|
43
55
|
onChange: unref(changeFilter),
|
|
44
56
|
onUpload: _cache[0] || (_cache[0] = ($event) => emits("change-tab", "local"))
|
|
45
|
-
}, null, 8, ["onChange"])
|
|
57
|
+
}, null, 8, ["smallScreen", "onChange"])
|
|
46
58
|
]),
|
|
47
59
|
footer: withCtx(() => [
|
|
48
60
|
createVNode(unref(Pagination), {
|
|
@@ -51,22 +63,26 @@ const _sfc_main = defineComponent({
|
|
|
51
63
|
total: unref(total),
|
|
52
64
|
"page-size": unref(limit),
|
|
53
65
|
"show-total": "",
|
|
54
|
-
"show-page-size":
|
|
66
|
+
"show-page-size": !smallScreen.value,
|
|
55
67
|
"base-size": 3,
|
|
56
68
|
"buffer-size": 1,
|
|
57
69
|
onChange: _cache[2] || (_cache[2] = (e) => unref(changePage)((e - 1) * unref(limit))),
|
|
58
70
|
onPageSizeChange: unref(changeSize)
|
|
59
|
-
}, null, 8, ["current", "total", "page-size", "onPageSizeChange"])
|
|
71
|
+
}, null, 8, ["current", "total", "page-size", "show-page-size", "onPageSizeChange"])
|
|
60
72
|
]),
|
|
61
73
|
default: withCtx(() => [
|
|
62
|
-
createElementVNode("div",
|
|
74
|
+
createElementVNode("div", {
|
|
75
|
+
ref_key: "listWrapper",
|
|
76
|
+
ref: listWrapper,
|
|
77
|
+
class: "list-item-grid"
|
|
78
|
+
}, [
|
|
63
79
|
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(list), (item) => {
|
|
64
80
|
return renderSlot(_ctx.$slots, "item", {
|
|
65
81
|
key: item.id,
|
|
66
82
|
item
|
|
67
83
|
});
|
|
68
84
|
}), 128))
|
|
69
|
-
])
|
|
85
|
+
], 512)
|
|
70
86
|
]),
|
|
71
87
|
_: 3
|
|
72
88
|
}, 8, ["loading", "is-empty"]);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
declare type HideElementType = {
|
|
3
|
+
width: number;
|
|
4
|
+
el: HTMLDivElement;
|
|
5
|
+
};
|
|
6
|
+
export declare function useResponsiveFilter(filterItemsRef: Ref<HTMLElement | undefined>): {
|
|
7
|
+
moreBtnRef: Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
8
|
+
popperPanelRef: Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
9
|
+
hiddenElementList: Ref<{
|
|
10
|
+
width: number;
|
|
11
|
+
el: HTMLDivElement;
|
|
12
|
+
}[], HideElementType[] | {
|
|
13
|
+
width: number;
|
|
14
|
+
el: HTMLDivElement;
|
|
15
|
+
}[]>;
|
|
16
|
+
visible: Ref<boolean, boolean>;
|
|
17
|
+
show: () => void;
|
|
18
|
+
hide: () => void;
|
|
19
|
+
refreshLayout: () => Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { ref, onMounted, nextTick, onUnmounted } from "vue";
|
|
2
|
+
import usePopper from "../../hooks/usePopper.js";
|
|
3
|
+
const getRect = (el) => {
|
|
4
|
+
if (!el || typeof el.getClientRects !== "function")
|
|
5
|
+
return { right: 0, width: 0 };
|
|
6
|
+
const rects = el.getClientRects();
|
|
7
|
+
if (rects.length === 0)
|
|
8
|
+
return { right: 0, width: 0 };
|
|
9
|
+
const rect = rects[0];
|
|
10
|
+
return {
|
|
11
|
+
right: rect.right,
|
|
12
|
+
width: rect.width
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
function useResponsiveFilter(filterItemsRef) {
|
|
16
|
+
const moreBtnRef = ref();
|
|
17
|
+
const popperPanelRef = ref();
|
|
18
|
+
const { initPopper, show, visible, hide } = usePopper(
|
|
19
|
+
popperPanelRef,
|
|
20
|
+
moreBtnRef
|
|
21
|
+
);
|
|
22
|
+
const windowWidth = ref(0);
|
|
23
|
+
const filterContainerRightBoundary = ref(0);
|
|
24
|
+
const hiddenElementList = ref([]);
|
|
25
|
+
const initWidths = () => {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
windowWidth.value = ((_a = document.body) == null ? void 0 : _a.clientWidth) || 0;
|
|
28
|
+
const containerElement = (_b = filterItemsRef.value) == null ? void 0 : _b.parentElement;
|
|
29
|
+
if (containerElement) {
|
|
30
|
+
filterContainerRightBoundary.value = getRect(containerElement).right;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const initResizeListener = () => {
|
|
34
|
+
window.addEventListener("resize", refreshLayout);
|
|
35
|
+
};
|
|
36
|
+
const removeResizeListener = () => {
|
|
37
|
+
window.removeEventListener("resize", refreshLayout);
|
|
38
|
+
};
|
|
39
|
+
const hideElement = (el) => {
|
|
40
|
+
var _a, _b, _c;
|
|
41
|
+
const { width } = getRect(el);
|
|
42
|
+
if (width > 0 && ((_a = filterItemsRef.value) == null ? void 0 : _a.contains(el))) {
|
|
43
|
+
hiddenElementList.value.push({ width, el });
|
|
44
|
+
(_b = filterItemsRef.value) == null ? void 0 : _b.removeChild(el);
|
|
45
|
+
(_c = popperPanelRef.value) == null ? void 0 : _c.insertBefore(el, popperPanelRef.value.firstChild);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const showElement = () => {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
if (!hiddenElementList.value.length || !filterItemsRef.value)
|
|
51
|
+
return;
|
|
52
|
+
const popEl = hiddenElementList.value.pop();
|
|
53
|
+
if (!popEl)
|
|
54
|
+
return;
|
|
55
|
+
const { el } = popEl;
|
|
56
|
+
(_a = popperPanelRef.value) == null ? void 0 : _a.removeChild(el);
|
|
57
|
+
(_b = filterItemsRef.value) == null ? void 0 : _b.appendChild(el);
|
|
58
|
+
};
|
|
59
|
+
const checkOverflow = () => {
|
|
60
|
+
if (!filterItemsRef.value)
|
|
61
|
+
return -1;
|
|
62
|
+
const containerRight = filterContainerRightBoundary.value;
|
|
63
|
+
const children = filterItemsRef.value.children;
|
|
64
|
+
let currentRightmostBoundary = getRect(filterItemsRef.value).right - getRect(filterItemsRef.value).width;
|
|
65
|
+
for (let i = children.length - 1; i >= 0; i--) {
|
|
66
|
+
const item = children[i];
|
|
67
|
+
if (!item || !item.classList || !item.classList.contains("filter-item"))
|
|
68
|
+
continue;
|
|
69
|
+
const itemRect = getRect(item);
|
|
70
|
+
if (itemRect.right > containerRight - 400) {
|
|
71
|
+
hideElement(item);
|
|
72
|
+
} else {
|
|
73
|
+
currentRightmostBoundary = Math.max(
|
|
74
|
+
currentRightmostBoundary,
|
|
75
|
+
itemRect.right
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return currentRightmostBoundary;
|
|
80
|
+
};
|
|
81
|
+
const refreshLayout = async () => {
|
|
82
|
+
await nextTick();
|
|
83
|
+
initWidths();
|
|
84
|
+
if (!filterItemsRef.value || !popperPanelRef.value)
|
|
85
|
+
return;
|
|
86
|
+
const containerRight = filterContainerRightBoundary.value;
|
|
87
|
+
let lastVisibleItemRight = checkOverflow();
|
|
88
|
+
if (lastVisibleItemRight === -1 && filterItemsRef.value.children.length > 0) {
|
|
89
|
+
lastVisibleItemRight = getRect(filterItemsRef.value).left;
|
|
90
|
+
} else if (filterItemsRef.value.children.length === 0) {
|
|
91
|
+
lastVisibleItemRight = getRect(filterItemsRef.value).left;
|
|
92
|
+
}
|
|
93
|
+
await nextTick();
|
|
94
|
+
let availableSpace = containerRight - lastVisibleItemRight;
|
|
95
|
+
while (hiddenElementList.value.length > 0) {
|
|
96
|
+
const nextHiddenItem = hiddenElementList.value[hiddenElementList.value.length - 1];
|
|
97
|
+
const nextHiddenItemWidth = nextHiddenItem.width;
|
|
98
|
+
if (availableSpace > nextHiddenItemWidth + 10) {
|
|
99
|
+
showElement();
|
|
100
|
+
await nextTick();
|
|
101
|
+
const visibleElements = Array.from(
|
|
102
|
+
filterItemsRef.value.children
|
|
103
|
+
);
|
|
104
|
+
if (visibleElements.length > 0) {
|
|
105
|
+
lastVisibleItemRight = visibleElements.reduce((maxRight, el) => {
|
|
106
|
+
var _a;
|
|
107
|
+
if ((_a = el.classList) == null ? void 0 : _a.contains("filter-item")) {
|
|
108
|
+
return Math.max(maxRight, getRect(el).right);
|
|
109
|
+
}
|
|
110
|
+
return maxRight;
|
|
111
|
+
}, getRect(filterItemsRef.value).left);
|
|
112
|
+
} else {
|
|
113
|
+
lastVisibleItemRight = getRect(filterItemsRef.value).left;
|
|
114
|
+
}
|
|
115
|
+
availableSpace = containerRight - lastVisibleItemRight;
|
|
116
|
+
} else {
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
onMounted(async () => {
|
|
122
|
+
initResizeListener();
|
|
123
|
+
initPopper("bottom-start", [0, 40]);
|
|
124
|
+
await nextTick();
|
|
125
|
+
initWidths();
|
|
126
|
+
await nextTick();
|
|
127
|
+
refreshLayout();
|
|
128
|
+
});
|
|
129
|
+
onUnmounted(() => {
|
|
130
|
+
removeResizeListener();
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
moreBtnRef,
|
|
134
|
+
popperPanelRef,
|
|
135
|
+
hiddenElementList,
|
|
136
|
+
visible,
|
|
137
|
+
show,
|
|
138
|
+
hide,
|
|
139
|
+
refreshLayout
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export { useResponsiveFilter };
|