@cmstops/pro-compo 3.9.1-stable.0 → 3.9.1-stable.2
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 +49 -4
- package/dist/index.min.css +1 -1
- package/es/config.js +1 -1
- package/es/contentDetailList/component.js +24 -0
- package/es/contentDetailList/components/Content/index.js +2 -1
- package/es/contentDetailList/components/Doc/index.js +6 -0
- package/es/docHistory/component.js +41 -12
- package/es/docHistory/style/index.css +4 -0
- package/es/docHistory/style/index.less +5 -0
- package/es/hooks/usePopper.d.ts +1 -1
- package/es/hooks/usePopper.js +3 -3
- package/es/hooks/useUpload.d.ts +50 -2
- package/es/hooks/useUpload.js +43 -4
- package/es/index.css +49 -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/ListLocal/index.js +8 -3
- package/es/selectResourceModal/components/List/ListNormal/Filter.js +198 -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/config.js +1 -1
- package/lib/contentDetailList/component.js +24 -0
- package/lib/contentDetailList/components/Content/index.js +2 -1
- package/lib/contentDetailList/components/Doc/index.js +6 -0
- package/lib/docHistory/component.js +39 -10
- package/lib/docHistory/style/index.css +4 -0
- package/lib/docHistory/style/index.less +5 -0
- package/lib/hooks/usePopper.js +3 -3
- package/lib/hooks/useUpload.js +43 -3
- package/lib/index.css +49 -4
- package/lib/selectResourceModal/components/List/ListLocal/index.js +6 -1
- package/lib/selectResourceModal/components/List/ListNormal/Filter.js +195 -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,34 @@ 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
|
+
"filter-tree-node": (searchValue, nodeData) => {
|
|
299
|
+
console.log(nodeData);
|
|
300
|
+
if (!nodeData.alias)
|
|
301
|
+
return false;
|
|
302
|
+
return nodeData.alias.toLowerCase().indexOf(searchValue.toLowerCase()) > -1;
|
|
303
|
+
}
|
|
304
|
+
}, null, 8, ["modelValue", "data", "filter-tree-node"])
|
|
305
|
+
]),
|
|
227
306
|
createCommentVNode(" \u7D20\u6750\u7C7B\u578B "),
|
|
228
|
-
createElementVNode("div",
|
|
307
|
+
createElementVNode("div", _hoisted_7, [
|
|
229
308
|
createVNode(unref(Select), {
|
|
230
309
|
modelValue: filter.value.catalog,
|
|
231
|
-
"onUpdate:modelValue": _cache[
|
|
232
|
-
disabled: (
|
|
310
|
+
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => filter.value.catalog = $event),
|
|
311
|
+
disabled: (_a2 = unref(filterOptions)) == null ? void 0 : _a2.mediaTypeStrict,
|
|
312
|
+
"popup-container": "#resource-filter-pannel",
|
|
233
313
|
"allow-clear": "",
|
|
234
314
|
placeholder: "\u7C7B\u578B",
|
|
235
315
|
multiple: "",
|
|
@@ -248,19 +328,22 @@ const _sfc_main = defineComponent({
|
|
|
248
328
|
}, 8, ["modelValue", "disabled"])
|
|
249
329
|
]),
|
|
250
330
|
createCommentVNode(" \u65F6\u95F4\u8303\u56F4 "),
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
331
|
+
createElementVNode("div", _hoisted_8, [
|
|
332
|
+
createVNode(unref(RangePicker), {
|
|
333
|
+
modelValue: rangeTime.value,
|
|
334
|
+
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => rangeTime.value = $event),
|
|
335
|
+
"allow-clear": "",
|
|
336
|
+
"popup-container": "#resource-filter-pannel"
|
|
337
|
+
}, null, 8, ["modelValue"])
|
|
338
|
+
]),
|
|
257
339
|
createCommentVNode(" \u7D20\u6750\u4E0A\u4F20\u6765\u6E90 "),
|
|
258
|
-
createElementVNode("div",
|
|
340
|
+
createElementVNode("div", _hoisted_9, [
|
|
259
341
|
createVNode(unref(Select), {
|
|
260
342
|
modelValue: filter.value.source,
|
|
261
|
-
"onUpdate:modelValue": _cache[
|
|
343
|
+
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => filter.value.source = $event),
|
|
262
344
|
"allow-clear": "",
|
|
263
|
-
placeholder: "\u6765\u6E90"
|
|
345
|
+
placeholder: "\u6765\u6E90",
|
|
346
|
+
"popup-container": "#resource-filter-pannel"
|
|
264
347
|
}, {
|
|
265
348
|
default: withCtx(() => [
|
|
266
349
|
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(resourceSource), (item) => {
|
|
@@ -275,14 +358,15 @@ const _sfc_main = defineComponent({
|
|
|
275
358
|
}, 8, ["modelValue"])
|
|
276
359
|
]),
|
|
277
360
|
createCommentVNode(" \u7D20\u6750\u4E0A\u4F20\u4EBA "),
|
|
278
|
-
!_ctx.disableUploadBy ? (openBlock(), createElementBlock("div",
|
|
361
|
+
!_ctx.disableUploadBy ? (openBlock(), createElementBlock("div", _hoisted_10, [
|
|
279
362
|
createVNode(unref(Select), {
|
|
280
363
|
modelValue: filter.value.upload_by,
|
|
281
|
-
"onUpdate:modelValue": _cache[
|
|
364
|
+
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => filter.value.upload_by = $event),
|
|
282
365
|
"allow-clear": "",
|
|
283
366
|
placeholder: "\u4E0A\u4F20\u4EBA",
|
|
284
367
|
loading: unref(loading),
|
|
285
368
|
"allow-search": "",
|
|
369
|
+
"popup-container": "#resource-filter-pannel",
|
|
286
370
|
onSearch: unref(handleSearch),
|
|
287
371
|
onDropdownReachBottom: unref(loadMore)
|
|
288
372
|
}, {
|
|
@@ -297,40 +381,64 @@ const _sfc_main = defineComponent({
|
|
|
297
381
|
]),
|
|
298
382
|
_: 1
|
|
299
383
|
}, 8, ["modelValue", "loading", "onSearch", "onDropdownReachBottom"])
|
|
300
|
-
])) : createCommentVNode("v-if", true)
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
384
|
+
])) : createCommentVNode("v-if", true)
|
|
385
|
+
], 512),
|
|
386
|
+
createElementVNode("div", _hoisted_11, [
|
|
387
|
+
createCommentVNode(" \u91CD\u7F6E\u6309\u94AE - Wrap in filter-item to be managed by the hook "),
|
|
388
|
+
withDirectives(createElementVNode("div", _hoisted_12, [
|
|
389
|
+
_ctx.smallScreen ? (openBlock(), createBlock(unref(Button), {
|
|
390
|
+
key: 0,
|
|
391
|
+
type: "text",
|
|
392
|
+
onClick: handleReset
|
|
393
|
+
}, {
|
|
394
|
+
icon: withCtx(() => [
|
|
395
|
+
createVNode(unref(IconRefresh))
|
|
396
|
+
]),
|
|
397
|
+
_: 1
|
|
398
|
+
})) : (openBlock(), createBlock(unref(Button), {
|
|
399
|
+
key: 1,
|
|
400
|
+
type: "text",
|
|
401
|
+
onClick: handleReset
|
|
402
|
+
}, {
|
|
403
|
+
default: withCtx(() => _cache[14] || (_cache[14] = [
|
|
404
|
+
createTextVNode(" \u91CD\u7F6E ")
|
|
405
|
+
])),
|
|
406
|
+
_: 1
|
|
407
|
+
}))
|
|
408
|
+
], 512), [
|
|
409
|
+
[vShow, !isEmpty.value]
|
|
410
|
+
]),
|
|
411
|
+
_ctx.smallScreen ? (openBlock(), createBlock(unref(Button), {
|
|
412
|
+
key: 0,
|
|
413
|
+
type: "primary",
|
|
414
|
+
onClick: _cache[9] || (_cache[9] = ($event) => emits("upload"))
|
|
305
415
|
}, {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
])
|
|
416
|
+
icon: withCtx(() => [
|
|
417
|
+
createVNode(unref(IconUpload))
|
|
418
|
+
]),
|
|
309
419
|
_: 1
|
|
310
|
-
})) :
|
|
311
|
-
|
|
312
|
-
createElementVNode("div", _hoisted_8, [
|
|
313
|
-
createVNode(unref(Button), {
|
|
420
|
+
})) : (openBlock(), createBlock(unref(Button), {
|
|
421
|
+
key: 1,
|
|
314
422
|
type: "primary",
|
|
315
|
-
onClick: _cache[
|
|
423
|
+
onClick: _cache[10] || (_cache[10] = ($event) => emits("upload"))
|
|
316
424
|
}, {
|
|
317
425
|
icon: withCtx(() => [
|
|
318
426
|
createVNode(unref(IconUpload))
|
|
319
427
|
]),
|
|
320
428
|
default: withCtx(() => [
|
|
321
|
-
_cache[
|
|
429
|
+
_cache[15] || (_cache[15] = createTextVNode(" \u4E0A\u4F20 "))
|
|
322
430
|
]),
|
|
323
431
|
_: 1
|
|
324
|
-
})
|
|
432
|
+
}))
|
|
325
433
|
])
|
|
326
434
|
]),
|
|
327
|
-
searchInput.value ? (openBlock(), createElementBlock("div",
|
|
435
|
+
searchInput.value ? (openBlock(), createElementBlock("div", _hoisted_13, [
|
|
328
436
|
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(keywordsSelection), (item) => {
|
|
329
437
|
return openBlock(), createElementBlock("div", {
|
|
330
438
|
key: item.value,
|
|
331
439
|
class: normalizeClass(["list-filter-tag", { active: filter.value.sf === item.value }]),
|
|
332
440
|
onClick: ($event) => filter.value.sf = item.value
|
|
333
|
-
}, toDisplayString(item.name), 11,
|
|
441
|
+
}, toDisplayString(item.name), 11, _hoisted_14);
|
|
334
442
|
}), 128))
|
|
335
443
|
])) : createCommentVNode("v-if", true)
|
|
336
444
|
]);
|
|
@@ -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 };
|