@das-fed/ui 7.0.7-hot.17 → 7.0.7-hot.19
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/esm-map.json +2 -2
- package/package.json +5 -5
- package/packages/business-components/ai-panel/{index-OwRrV6K8.js → index-BeqEuT6Z.js} +1 -1
- package/packages/business-components/ai-panel/index-BeqEuT6Z.js.gz +0 -0
- package/packages/business-components/ai-panel/{index-8yffh0Id.js → index-DP1B0qnu.js} +1138 -1120
- package/packages/business-components/ai-panel/index-DP1B0qnu.js.gz +0 -0
- package/packages/business-components/ai-panel/{index-IzGl26KU.js → index-d7mK0plW.js} +5 -5
- package/packages/business-components/ai-panel/index-d7mK0plW.js.gz +0 -0
- package/packages/business-components/ai-panel/index.js +1 -1
- package/packages/business-components/app-container/index.js +75 -75
- package/packages/business-components/app-container/index.js.gz +0 -0
- package/packages/business-components/area-phone-select/index.js +87 -87
- package/packages/business-components/area-phone-select/index.js.gz +0 -0
- package/packages/business-components/change-enterprises/index.js +19 -19
- package/packages/business-components/change-enterprises/index.js.gz +0 -0
- package/packages/business-components/change-pwd/index.js +15 -15
- package/packages/business-components/change-pwd/index.js.gz +0 -0
- package/packages/business-components/currency-page/index.js +40 -40
- package/packages/business-components/currency-page/index.js.gz +0 -0
- package/packages/business-components/device-panel/index.js +265 -265
- package/packages/business-components/device-panel/index.js.gz +0 -0
- package/packages/business-components/device-panel/style.css +1 -1
- package/packages/business-components/device-panel/style.css.gz +0 -0
- package/packages/business-components/export-button/index.js +92 -92
- package/packages/business-components/export-button/index.js.gz +0 -0
- package/packages/business-components/import-button/index.js +191 -191
- package/packages/business-components/import-button/index.js.gz +0 -0
- package/packages/business-components/layout-breadcrumb/index.js +47 -47
- package/packages/business-components/layout-breadcrumb/index.js.gz +0 -0
- package/packages/business-components/model-table-dialog/index.js +232 -232
- package/packages/business-components/model-table-dialog/index.js.gz +0 -0
- package/packages/business-components/payment/api.d.ts +8 -0
- package/packages/business-components/payment/index.d.ts +9 -11
- package/packages/business-components/payment/index.js +186 -180
- package/packages/business-components/payment/index.js.gz +0 -0
- package/packages/business-components/payment/style.css +1 -1
- package/packages/business-components/payment/type.d.ts +2 -0
- package/packages/business-components/process-configuration/index.js +5 -5
- package/packages/business-components/process-configuration/index.js.gz +0 -0
- package/packages/business-components/process-configuration/style.css +1 -1
- package/packages/business-components/process-configuration/style.css.gz +0 -0
- package/packages/business-components/process-form/index.js +1154 -1134
- package/packages/business-components/process-form/index.js.gz +0 -0
- package/packages/business-components/process-form/src/utils/common-methods.d.ts +6 -0
- package/packages/business-components/process-log/index.js +329 -329
- package/packages/business-components/process-log/index.js.gz +0 -0
- package/packages/business-components/process-log/style.css +1 -1
- package/packages/business-components/process-log/style.css.gz +0 -0
- package/packages/business-components/process-search-form/index.js +54 -54
- package/packages/business-components/process-search-form/index.js.gz +0 -0
- package/packages/business-components/upload-file/index.js +46 -46
- package/packages/business-components/upload-file/index.js.gz +0 -0
- package/packages/business-components/upload-file/style.css +1 -1
- package/packages/business-components/urgent-panel/index.js +295 -295
- package/packages/business-components/urgent-panel/index.js.gz +0 -0
- package/packages/business-components/video-dialog/index.d.ts +10 -0
- package/packages/business-components/video-dialog/index.js +396 -377
- package/packages/business-components/video-dialog/index.js.gz +0 -0
- package/packages/business-components/video-dialog/src/api.d.ts +1 -0
- package/packages/business-components/video-dialog/src/component/Player/index.vue.d.ts +2 -0
- package/packages/business-components/video-dialog/src/hooks/use-video/PlayerProvider.d.ts +6 -0
- package/packages/business-components/video-dialog/src/index.vue.d.ts +2 -0
- package/packages/business-components/video-dialog/src/type.d.ts +7 -1
- package/packages/business-components/video-dialog/style.css +1 -1
- package/packages/business-components/video-dialog/style.css.gz +0 -0
- package/packages/components/alert/index.js +9 -9
- package/packages/components/alert/index.js.gz +0 -0
- package/packages/components/audio-video/index.js +141 -141
- package/packages/components/audio-video/index.js.gz +0 -0
- package/packages/components/autocomplete/index.js +39 -39
- package/packages/components/autocomplete/index.js.gz +0 -0
- package/packages/components/autocomplete/style.css +1 -1
- package/packages/components/autocomplete/style.css.gz +0 -0
- package/packages/components/breadcrumb/index.js +39 -39
- package/packages/components/breadcrumb/index.js.gz +0 -0
- package/packages/components/button/index.js +188 -188
- package/packages/components/button/index.js.gz +0 -0
- package/packages/components/calendar/index.js +172 -172
- package/packages/components/calendar/index.js.gz +0 -0
- package/packages/components/cascader/index.js +92 -92
- package/packages/components/cascader/index.js.gz +0 -0
- package/packages/components/cascader/style.css +1 -1
- package/packages/components/cascader/style.css.gz +0 -0
- package/packages/components/checkbox/index.js +176 -176
- package/packages/components/checkbox/index.js.gz +0 -0
- package/packages/components/checkbox/style.css +1 -1
- package/packages/components/checkbox/style.css.gz +0 -0
- package/packages/components/collapse-panel/index.js +16 -16
- package/packages/components/collapse-panel/index.js.gz +0 -0
- package/packages/components/collaspe/index.js +22 -22
- package/packages/components/collaspe/index.js.gz +0 -0
- package/packages/components/custom-search-item/index.js +36 -36
- package/packages/components/custom-search-item/index.js.gz +0 -0
- package/packages/components/date-picker/index.js +496 -496
- package/packages/components/date-picker/index.js.gz +0 -0
- package/packages/components/date-picker/style.css +1 -1
- package/packages/components/date-picker/style.css.gz +0 -0
- package/packages/components/dialog/index.js +89 -89
- package/packages/components/dialog/index.js.gz +0 -0
- package/packages/components/dimple-layout/index.js +73 -31
- package/packages/components/dimple-layout/index.js.gz +0 -0
- package/packages/components/dropdown/index.js +30 -30
- package/packages/components/dropdown/index.js.gz +0 -0
- package/packages/components/edit-table/index.d.ts +2 -2
- package/packages/components/edit-table/index.js +150 -150
- package/packages/components/edit-table/index.js.gz +0 -0
- package/packages/components/empty/index.js +32 -32
- package/packages/components/empty/index.js.gz +0 -0
- package/packages/components/error-overlay-model/index.js +30 -30
- package/packages/components/error-overlay-model/index.js.gz +0 -0
- package/packages/components/form/index.js +19 -19
- package/packages/components/form/index.js.gz +0 -0
- package/packages/components/form-item/index.js +715 -715
- package/packages/components/form-item/index.js.gz +0 -0
- package/packages/components/form-item/style.css +1 -1
- package/packages/components/form-item/style.css.gz +0 -0
- package/packages/components/hls-player/index.js +5229 -4588
- package/packages/components/hls-player/index.js.gz +0 -0
- package/packages/components/hls-player/src/type.d.ts +3 -0
- package/packages/components/hls-player/style.css +1 -1
- package/packages/components/hls-player/style.css.gz +0 -0
- package/packages/components/image-upload/index.js +184 -184
- package/packages/components/image-upload/index.js.gz +0 -0
- package/packages/components/image-viewer/index.js +566 -566
- package/packages/components/image-viewer/index.js.gz +0 -0
- package/packages/components/input/index.js +94 -94
- package/packages/components/input/index.js.gz +0 -0
- package/packages/components/input-dialog-select/index.js +86 -86
- package/packages/components/input-dialog-select/index.js.gz +0 -0
- package/packages/components/input-number/index.js +93 -93
- package/packages/components/input-number/index.js.gz +0 -0
- package/packages/components/input-number/style.css +1 -1
- package/packages/components/input-number/style.css.gz +0 -0
- package/packages/components/live-player/index.d.ts +2 -0
- package/packages/components/live-player/index.js +822 -814
- package/packages/components/live-player/index.js.gz +0 -0
- package/packages/components/live-player/src/type.d.ts +3 -0
- package/packages/components/live-player/style.css +1 -1
- package/packages/components/loading/index.js +45 -45
- package/packages/components/loading/index.js.gz +0 -0
- package/packages/components/menu-aside/index.js +558 -558
- package/packages/components/menu-aside/index.js.gz +0 -0
- package/packages/components/menu-header/index.js +16 -16
- package/packages/components/menu-header/index.js.gz +0 -0
- package/packages/components/pagination/index.js +100 -100
- package/packages/components/pagination/index.js.gz +0 -0
- package/packages/components/pagination/style.css +1 -1
- package/packages/components/pagination/style.css.gz +0 -0
- package/packages/components/popover/index.js +33 -33
- package/packages/components/popover/index.js.gz +0 -0
- package/packages/components/popup-mask/index.js +13 -13
- package/packages/components/popup-mask/index.js.gz +0 -0
- package/packages/components/progress/index.js +111 -111
- package/packages/components/progress/index.js.gz +0 -0
- package/packages/components/progress/style.css +1 -1
- package/packages/components/progress/style.css.gz +0 -0
- package/packages/components/radio/index.js +162 -162
- package/packages/components/radio/index.js.gz +0 -0
- package/packages/components/rich-editor/index.js +7906 -7889
- package/packages/components/rich-editor/index.js.gz +0 -0
- package/packages/components/scrollbar/index.js +2 -2
- package/packages/components/scrollbar/index.js.gz +0 -0
- package/packages/components/search/index.js +76 -76
- package/packages/components/search/index.js.gz +0 -0
- package/packages/components/search-form/index.js +598 -597
- package/packages/components/search-form/index.js.gz +0 -0
- package/packages/components/search-form/style.css +1 -1
- package/packages/components/search-form/style.css.gz +0 -0
- package/packages/components/select/index.js +284 -284
- package/packages/components/select/index.js.gz +0 -0
- package/packages/components/select/style.css +1 -1
- package/packages/components/select/style.css.gz +0 -0
- package/packages/components/select-input/index.js +76 -76
- package/packages/components/select-input/index.js.gz +0 -0
- package/packages/components/select-list/index.js +406 -406
- package/packages/components/select-list/index.js.gz +0 -0
- package/packages/components/select-list/style.css +1 -1
- package/packages/components/select-list/style.css.gz +0 -0
- package/packages/components/special-range-picker-month/index.js +154 -154
- package/packages/components/special-range-picker-month/index.js.gz +0 -0
- package/packages/components/special-range-picker-month/style.css +1 -1
- package/packages/components/special-range-picker-month/style.css.gz +0 -0
- package/packages/components/special-range-picker-year/index.js +196 -196
- package/packages/components/special-range-picker-year/index.js.gz +0 -0
- package/packages/components/special-range-picker-year/style.css +1 -1
- package/packages/components/special-range-picker-year/style.css.gz +0 -0
- package/packages/components/spin/index.js +30 -30
- package/packages/components/spin/index.js.gz +0 -0
- package/packages/components/split-panel/index.js +60 -60
- package/packages/components/split-panel/index.js.gz +0 -0
- package/packages/components/table/index.d.ts +253 -27
- package/packages/components/table/index.js +2061 -2061
- package/packages/components/table/index.js.gz +0 -0
- package/packages/components/table/src/Table.vue.d.ts +39 -5
- package/packages/components/tabs/index.js +109 -109
- package/packages/components/tabs/index.js.gz +0 -0
- package/packages/components/time-line/index.js +35 -35
- package/packages/components/time-line/index.js.gz +0 -0
- package/packages/components/tooltip/index.js +52 -52
- package/packages/components/tooltip/index.js.gz +0 -0
- package/packages/components/tooltip/style.css +1 -1
- package/packages/components/tooltip/style.css.gz +0 -0
- package/packages/components/tree/index.js +748 -748
- package/packages/components/tree/index.js.gz +0 -0
- package/packages/components/tree/src/App.vue.d.ts +29 -5
- package/packages/components/tree-select/index.js +262 -262
- package/packages/components/tree-select/index.js.gz +0 -0
- package/packages/components/tree-select/src/App.vue.d.ts +116 -16
- package/packages/components/tree-select/src/hooks/use-tree-select.d.ts +116 -16
- package/packages/components/tree-table/index.js +224 -224
- package/packages/components/tree-table/index.js.gz +0 -0
- package/packages/components/tree-v2/index.d.ts +175 -27
- package/packages/components/tree-v2/index.js +614 -614
- package/packages/components/tree-v2/index.js.gz +0 -0
- package/packages/components/tree-v2/src/App.vue.d.ts +27 -5
- package/packages/components/upload/index.js +80 -80
- package/packages/components/upload/index.js.gz +0 -0
- package/packages/components/virtual-tree/index.js +61 -61
- package/packages/components/virtual-tree/index.js.gz +0 -0
- package/packages/business-components/ai-panel/index-8yffh0Id.js.gz +0 -0
- package/packages/business-components/ai-panel/index-IzGl26KU.js.gz +0 -0
- package/packages/business-components/ai-panel/index-OwRrV6K8.js.gz +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '@das-fed/ui/packages/business-components/import-button/style.css';
|
|
2
2
|
import { withInstall as fe } from "@das-fed/utils/with-install/index";
|
|
3
|
-
import { ref as
|
|
4
|
-
import { t as
|
|
3
|
+
import { ref as x, defineComponent as ge, computed as ve, watch as he, createElementBlock as Ce, openBlock as we, createElementVNode as q, createCommentVNode as re, createVNode as D, unref as o, renderSlot as le, withCtx as L, createTextVNode as Y, toDisplayString as H, isRef as Q } from "vue";
|
|
4
|
+
import { t as m, currentLang as xe, i18n as j, setI18nRule as ke } from "@das-fed/web/packages/i18n/index";
|
|
5
5
|
import { DasDialog as se } from "@das-fed/ui/packages/components/dialog/index";
|
|
6
6
|
import { DasUpload as ye } from "@das-fed/ui/packages/components/upload/index";
|
|
7
7
|
import { DasProgress as Ne } from "@das-fed/ui/packages/components/progress/index";
|
|
@@ -14,171 +14,171 @@ import { extractFilename as Te } from "@das-fed/utils/common-tools";
|
|
|
14
14
|
import { getUserInfo as Fe } from "@das-fed/utils/common-info/index";
|
|
15
15
|
import { pureImageSrc as ie } from "@das-fed/utils/pure-image-src";
|
|
16
16
|
let te = (e = 21) => {
|
|
17
|
-
let
|
|
17
|
+
let p = "", u = crypto.getRandomValues(new Uint8Array(e));
|
|
18
18
|
for (; e--; ) {
|
|
19
|
-
let l =
|
|
20
|
-
l < 36 ?
|
|
19
|
+
let l = u[e] & 63;
|
|
20
|
+
l < 36 ? p += l.toString(36) : l < 62 ? p += (l - 26).toString(36).toUpperCase() : l < 63 ? p += "_" : p += "-";
|
|
21
21
|
}
|
|
22
|
-
return
|
|
22
|
+
return p;
|
|
23
23
|
};
|
|
24
|
-
const
|
|
25
|
-
let
|
|
24
|
+
const Ie = ae.get("token"), Se = ae.post("put-object", (e) => (e.headers || (e.headers = {}), e.headers["Content-Type"] = "multipart/form-data", e.responseType = "blob", e)), $e = ae.post("upload-objects", (e) => (e.headers || (e.headers = {}), e.headers["Content-Type"] = "multipart/form-data", e.responseType = "blob", e)), _e = be.get("progress"), Pe = (e) => {
|
|
25
|
+
let p = x(!1), u = x(!1), l = x(""), C = x(0), n = x("normal"), g = x(!1), k, N = x(""), S = x(""), $ = x(""), b = x(""), _ = x(!1), M = x(""), T = "", F = x(""), P;
|
|
26
26
|
const E = () => {
|
|
27
|
-
|
|
28
|
-
},
|
|
29
|
-
const [r, s] = await
|
|
27
|
+
S.value = "", $.value = "", b.value = "", _.value = !1, M.value = "";
|
|
28
|
+
}, y = async () => {
|
|
29
|
+
const [r, s] = await Ie().run();
|
|
30
30
|
return r ? { stauts: !1 } : { status: !0, data: s };
|
|
31
|
-
}, B = (r) => new Promise((s,
|
|
31
|
+
}, B = (r) => new Promise((s, d) => {
|
|
32
32
|
const i = [];
|
|
33
33
|
let t = 0;
|
|
34
34
|
for (; t < r.size; ) {
|
|
35
|
-
const
|
|
36
|
-
i.push(
|
|
35
|
+
const h = r.slice(t, t + 1048576);
|
|
36
|
+
i.push(h), t += 1048576;
|
|
37
37
|
}
|
|
38
38
|
const c = new Blob(i, { type: r.type });
|
|
39
39
|
s(c);
|
|
40
|
-
}), A = async (r, s,
|
|
41
|
-
|
|
42
|
-
const c = await
|
|
40
|
+
}), A = async (r, s, d, a = !1, i = !0, t = "") => {
|
|
41
|
+
T = t, F.value = "import", i && (n.value = "normal", C.value = 0, l.value = m("导入进度"), u.value = !0, N.value = ""), P = s;
|
|
42
|
+
const c = await y();
|
|
43
43
|
if (!c.status) return;
|
|
44
|
-
let
|
|
45
|
-
const
|
|
44
|
+
let h = c.data, w = null, { autoContentType: K, bucketName: V, importFileName: J } = d;
|
|
45
|
+
const me = a ? $e : Se;
|
|
46
46
|
if (a) {
|
|
47
47
|
let X = [];
|
|
48
48
|
await s.forEach(async (G) => {
|
|
49
49
|
let ee = await B(G);
|
|
50
50
|
X.push(ee);
|
|
51
|
-
}),
|
|
52
|
-
|
|
51
|
+
}), w = new FormData(), w.append("accessKeyId", h.accessKeyId), w.append("secretAccessKey", h.secretAccessKey), w.append("sessionToken", h.sessionToken), w.append("bucketName", V), s.forEach((G, ee) => {
|
|
52
|
+
w.append("file", X[ee]);
|
|
53
53
|
}), J.forEach((G) => {
|
|
54
|
-
|
|
54
|
+
w.append("filePaths", G);
|
|
55
55
|
});
|
|
56
56
|
} else {
|
|
57
57
|
const X = await B(s);
|
|
58
|
-
|
|
59
|
-
accessKeyId:
|
|
60
|
-
secretAccessKey:
|
|
61
|
-
sessionToken:
|
|
58
|
+
w = {
|
|
59
|
+
accessKeyId: h.accessKeyId,
|
|
60
|
+
secretAccessKey: h.secretAccessKey,
|
|
61
|
+
sessionToken: h.sessionToken,
|
|
62
62
|
file: X,
|
|
63
63
|
bucketName: V,
|
|
64
64
|
filePath: J,
|
|
65
65
|
autoContentType: K
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
|
-
const [
|
|
69
|
-
if (
|
|
68
|
+
const [pe, ce] = await me(w).run();
|
|
69
|
+
if (pe) return;
|
|
70
70
|
const de = await Ue(ce.data), Z = await (r == null ? void 0 : r(de));
|
|
71
71
|
if (i) {
|
|
72
72
|
if (!Z.status) {
|
|
73
|
-
|
|
73
|
+
u.value = !1, n.value = "error";
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
|
-
l.value =
|
|
76
|
+
l.value = m("导入进度"), u.value = !0, z(Z.taskId, "import", "");
|
|
77
77
|
} else {
|
|
78
78
|
if (!Z.status) return;
|
|
79
79
|
n.value = "success", U.success({
|
|
80
|
-
message:
|
|
80
|
+
message: m("导入成功"),
|
|
81
81
|
grouping: !0,
|
|
82
82
|
repeatNum: 1
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
|
-
}, R = async (r, s = "",
|
|
86
|
-
n.value = "normal",
|
|
85
|
+
}, R = async (r, s = "", d = "") => {
|
|
86
|
+
n.value = "normal", C.value = 0, l.value = d || m("导出进度"), u.value = !0;
|
|
87
87
|
const a = await (r == null ? void 0 : r());
|
|
88
88
|
if (!a.status) {
|
|
89
|
-
|
|
89
|
+
u.value = !1, n.value = "error";
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
|
-
|
|
93
|
-
}, O = async (r, s = "",
|
|
94
|
-
|
|
92
|
+
z(a.taskId, "action", "");
|
|
93
|
+
}, O = async (r, s = "", d = "xlsx") => {
|
|
94
|
+
F.value = "export", n.value = "normal", C.value = 0, l.value = m("导出进度"), u.value = !0;
|
|
95
95
|
const a = await (r == null ? void 0 : r());
|
|
96
96
|
if (!a.status) {
|
|
97
|
-
|
|
97
|
+
u.value = !1, n.value = "error";
|
|
98
98
|
return;
|
|
99
99
|
}
|
|
100
|
-
ze().format("YYYYMMDDHHmmss") + "",
|
|
101
|
-
},
|
|
102
|
-
|
|
100
|
+
ze().format("YYYYMMDDHHmmss") + "", z(a.taskId, "export", s || "", d);
|
|
101
|
+
}, z = async (r, s, d, a = "") => {
|
|
102
|
+
g.value = !0, f(r, s, d, a), k = setTimeout(() => {
|
|
103
103
|
}, 50);
|
|
104
|
-
},
|
|
105
|
-
clearTimeout(
|
|
106
|
-
},
|
|
107
|
-
var
|
|
108
|
-
const [i, t] = await
|
|
104
|
+
}, I = () => {
|
|
105
|
+
clearTimeout(k), k = null, u.value = !1;
|
|
106
|
+
}, f = async (r, s = "export", d, a = "") => {
|
|
107
|
+
var h, w;
|
|
108
|
+
const [i, t] = await _e("", {
|
|
109
109
|
url: `progress/${r}`
|
|
110
110
|
}).run();
|
|
111
111
|
if (i) {
|
|
112
|
-
|
|
112
|
+
g.value = !1;
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
|
-
|
|
116
|
-
const c = s == "export" ?
|
|
117
|
-
if (
|
|
118
|
-
if (
|
|
119
|
-
t.status == 1 ? (n.value = "success",
|
|
120
|
-
message: t.message || `${c}${
|
|
115
|
+
C.value = t.percentage;
|
|
116
|
+
const c = s == "export" ? m("导出") : m("导入");
|
|
117
|
+
if (C.value == 100)
|
|
118
|
+
if (N.value = t, g.value = !1, I(), s == "export")
|
|
119
|
+
t.status == 1 ? (n.value = "success", ue(`${ne().baseURL}/oss${t.filePath}`, d, a), g.value = !1) : t.status == 2 && (b.value = t.message || `${c}${m("失败")}`, U.error({
|
|
120
|
+
message: t.message || `${c}${m("失败")}`,
|
|
121
121
|
grouping: !0,
|
|
122
122
|
repeatNum: 1
|
|
123
123
|
}));
|
|
124
124
|
else if (s == "import") {
|
|
125
125
|
if (t.filePath) {
|
|
126
126
|
n.value = "error";
|
|
127
|
-
const K = (
|
|
128
|
-
K.length && K[2],
|
|
127
|
+
const K = (h = P.name) == null ? void 0 : h.match(/(.*?)(\.[^.]*$|$)/);
|
|
128
|
+
K.length && K[2], _.value = !0;
|
|
129
129
|
let V = await Te(`/oss/${t == null ? void 0 : t.filePath}`);
|
|
130
|
-
const J = ((
|
|
131
|
-
|
|
130
|
+
const J = ((w = V == null ? void 0 : V.split("/")) == null ? void 0 : w.pop()) || "";
|
|
131
|
+
S.value = T || J, $.value = P.sizeText, b.value = m("部分数据校验不通过,请下载附件并修改,重新导入!"), M.value = `${ne().baseURL}/oss/${t == null ? void 0 : t.filePath}`;
|
|
132
132
|
}
|
|
133
|
-
|
|
133
|
+
v(t.status, c, t.message), t.status == 1 && (p.value = !1), e("success");
|
|
134
134
|
} else s == "action" && (n.value = "success");
|
|
135
135
|
else
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}, 50) : (
|
|
139
|
-
},
|
|
136
|
+
k && t.status != 2 ? k = setTimeout(() => {
|
|
137
|
+
f(r, s, d, a);
|
|
138
|
+
}, 50) : (N.value = t, g.value = !1, v(t.status, c, t.message), I(), _.value = !0, b.value = (t == null ? void 0 : t.message) || "", e("error", t));
|
|
139
|
+
}, v = (r, s, d) => {
|
|
140
140
|
r == 1 ? (n.value = "success", U.success({
|
|
141
|
-
message:
|
|
141
|
+
message: m("business-components_export-success-tip", s),
|
|
142
142
|
grouping: !0,
|
|
143
143
|
repeatNum: 1
|
|
144
|
-
}),
|
|
145
|
-
message:
|
|
144
|
+
}), S.value = "", $.value = "", b.value = "") : r == 2 ? (n.value = "error", U.error({
|
|
145
|
+
message: d || m("business-components_export-failure-tip", s),
|
|
146
146
|
grouping: !0,
|
|
147
147
|
repeatNum: 1
|
|
148
148
|
})) : r == 3 && (n.value = "error", U.error({
|
|
149
|
-
message:
|
|
149
|
+
message: m("business-components_export-partially-failure-tip", s),
|
|
150
150
|
grouping: !0,
|
|
151
151
|
repeatNum: 1
|
|
152
152
|
}));
|
|
153
153
|
};
|
|
154
154
|
return {
|
|
155
|
-
importDialog:
|
|
156
|
-
showProgressDialog:
|
|
155
|
+
importDialog: p,
|
|
156
|
+
showProgressDialog: u,
|
|
157
157
|
progressTitle: l,
|
|
158
|
-
percent:
|
|
158
|
+
percent: C,
|
|
159
159
|
progressStatus: n,
|
|
160
|
-
progressLoading:
|
|
161
|
-
progressResult:
|
|
162
|
-
errorFileName:
|
|
163
|
-
errorFileSize:
|
|
164
|
-
errorMessage:
|
|
165
|
-
errorImport:
|
|
160
|
+
progressLoading: g,
|
|
161
|
+
progressResult: N,
|
|
162
|
+
errorFileName: S,
|
|
163
|
+
errorFileSize: $,
|
|
164
|
+
errorMessage: b,
|
|
165
|
+
errorImport: _,
|
|
166
166
|
errorFilePath: M,
|
|
167
|
-
fileHandleType:
|
|
167
|
+
fileHandleType: F,
|
|
168
168
|
fileImport: A,
|
|
169
169
|
fileExport: O,
|
|
170
170
|
fileAction: R,
|
|
171
171
|
generateUniqueName: (r) => {
|
|
172
|
-
const s = r == null ? void 0 : r.match(/(.*?)(\.[^.]*$|$)/),
|
|
173
|
-
return `${s.length ? s[1] : r}${te()}${
|
|
172
|
+
const s = r == null ? void 0 : r.match(/(.*?)(\.[^.]*$|$)/), d = s.length ? s[2] : "";
|
|
173
|
+
return `${s.length ? s[1] : r}${te()}${d}`;
|
|
174
174
|
},
|
|
175
|
-
downloadFile:
|
|
175
|
+
downloadFile: ue,
|
|
176
176
|
resetStataus: E,
|
|
177
|
-
checkProgress:
|
|
178
|
-
clearTimer:
|
|
177
|
+
checkProgress: z,
|
|
178
|
+
clearTimer: I
|
|
179
179
|
};
|
|
180
180
|
}, De = (e) => {
|
|
181
|
-
let
|
|
181
|
+
let p = e == null ? void 0 : e.toLocaleLowerCase();
|
|
182
182
|
return {
|
|
183
183
|
excel: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
184
184
|
pdf: "application/pdf",
|
|
@@ -205,72 +205,72 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
205
205
|
crt: "application/x-x509-ca-cert",
|
|
206
206
|
der: "application/x-x509-ca-cert",
|
|
207
207
|
cer: "application/pkix-cert"
|
|
208
|
-
}[
|
|
209
|
-
},
|
|
208
|
+
}[p];
|
|
209
|
+
}, ue = (e, p, u = "excel") => {
|
|
210
210
|
const l = new XMLHttpRequest();
|
|
211
|
-
l.open("get", e), l.setRequestHeader("Content-Type", "application/json; charset=UTF-8"), l.responseType = "blob", l.onload = function(
|
|
211
|
+
l.open("get", e), l.setRequestHeader("Content-Type", "application/json; charset=UTF-8"), l.responseType = "blob", l.onload = function(C) {
|
|
212
212
|
const n = new Blob([this.response], {
|
|
213
|
-
type: De(
|
|
214
|
-
}),
|
|
213
|
+
type: De(u)
|
|
214
|
+
}), g = URL.createObjectURL(n);
|
|
215
215
|
if (window.navigator.msSaveOrOpenBlob)
|
|
216
|
-
navigator.msSaveBlob(n,
|
|
216
|
+
navigator.msSaveBlob(n, p);
|
|
217
217
|
else {
|
|
218
|
-
const
|
|
219
|
-
|
|
218
|
+
const k = document.createElement("a");
|
|
219
|
+
k.href = g, k.download = p, k.click(), window.URL.revokeObjectURL(g);
|
|
220
220
|
}
|
|
221
221
|
}, l.send();
|
|
222
|
-
}, Ue = (e) => new Promise((
|
|
222
|
+
}, Ue = (e) => new Promise((p, u) => {
|
|
223
223
|
var l = new FileReader();
|
|
224
|
-
l.onload = function(
|
|
224
|
+
l.onload = function(C) {
|
|
225
225
|
let n = "";
|
|
226
|
-
typeof l.result == "string" && (n = JSON.parse(l.result)),
|
|
226
|
+
typeof l.result == "string" && (n = JSON.parse(l.result)), p(n);
|
|
227
227
|
}, l.readAsText(e);
|
|
228
|
-
}), Me = (e,
|
|
229
|
-
var
|
|
228
|
+
}), Me = (e, p) => {
|
|
229
|
+
var d;
|
|
230
230
|
const {
|
|
231
|
-
importDialog:
|
|
231
|
+
importDialog: u,
|
|
232
232
|
showProgressDialog: l,
|
|
233
|
-
progressTitle:
|
|
233
|
+
progressTitle: C,
|
|
234
234
|
percent: n,
|
|
235
|
-
progressStatus:
|
|
236
|
-
progressLoading:
|
|
237
|
-
errorFileName:
|
|
238
|
-
errorFileSize:
|
|
239
|
-
errorMessage:
|
|
240
|
-
errorImport:
|
|
241
|
-
errorFilePath:
|
|
235
|
+
progressStatus: g,
|
|
236
|
+
progressLoading: k,
|
|
237
|
+
errorFileName: N,
|
|
238
|
+
errorFileSize: S,
|
|
239
|
+
errorMessage: $,
|
|
240
|
+
errorImport: b,
|
|
241
|
+
errorFilePath: _,
|
|
242
242
|
fileHandleType: M,
|
|
243
|
-
fileImport:
|
|
244
|
-
fileExport:
|
|
243
|
+
fileImport: T,
|
|
244
|
+
fileExport: F,
|
|
245
245
|
downloadFile: P,
|
|
246
246
|
clearTimer: E
|
|
247
|
-
} = Pe(
|
|
248
|
-
let
|
|
247
|
+
} = Pe(p);
|
|
248
|
+
let y = x([]), B = (d = Fe()) == null ? void 0 : d.tenantId;
|
|
249
249
|
const A = () => {
|
|
250
|
-
|
|
250
|
+
y.value = [], b.value = !1, N.value = "", S.value = "", $.value = "", u.value = !0, _.value = "", p("open");
|
|
251
251
|
};
|
|
252
252
|
let R;
|
|
253
253
|
const O = (a) => {
|
|
254
|
-
const i = e.fileType.split(","), t = a.name.substring(a.name.lastIndexOf(".")), c =
|
|
254
|
+
const i = e.fileType.split(","), t = a.name.substring(a.name.lastIndexOf(".")), c = z(a.sizeText), h = z(e.fileMaxSize);
|
|
255
255
|
if (!i.includes(t)) {
|
|
256
|
-
U.warning(
|
|
257
|
-
|
|
256
|
+
U.warning(m("文件格式错误,请重新上传!")), setTimeout(() => {
|
|
257
|
+
y.value = [];
|
|
258
258
|
});
|
|
259
259
|
return;
|
|
260
260
|
}
|
|
261
|
-
if (c >
|
|
261
|
+
if (c > h) {
|
|
262
262
|
U.warning(
|
|
263
|
-
`${
|
|
263
|
+
`${m("文件大小不超过")}${xe.value === "zh-CN" ? e.fileMaxSize : " " + e.fileMaxSize}`
|
|
264
264
|
), setTimeout(() => {
|
|
265
|
-
|
|
265
|
+
y.value = [];
|
|
266
266
|
});
|
|
267
267
|
return;
|
|
268
268
|
}
|
|
269
269
|
R = a.name;
|
|
270
|
-
},
|
|
270
|
+
}, z = (a) => {
|
|
271
271
|
let i = a.match(/\d+(\.\d+)?/)[0], t = a.match(/[a-zA-z]+/gi)[0], c = 0;
|
|
272
272
|
return i = parseFloat(i), t = t.toLowerCase(), t === "gb" || t === "g" ? c = (i * 1024 * 1024 * 1024).toFixed(2) : t === "mb" || t === "m" ? c = (i * 1024 * 1024).toFixed(2) : t === "kb" || t === "k" ? c = (i * 1024).toFixed(2) : t === "b" && (c = i), parseFloat(c);
|
|
273
|
-
},
|
|
273
|
+
}, I = async (a) => {
|
|
274
274
|
const i = a.value.split("/");
|
|
275
275
|
let t = te();
|
|
276
276
|
const c = {
|
|
@@ -278,21 +278,21 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
278
278
|
filePath: a.value,
|
|
279
279
|
taskId: t,
|
|
280
280
|
...e.importParams
|
|
281
|
-
},
|
|
282
|
-
return
|
|
283
|
-
},
|
|
284
|
-
if (!
|
|
281
|
+
}, h = e.importParamsPosition === "params" ? e.importFun("", { params: c }) : e.importFun(c), [w, K] = await h.run();
|
|
282
|
+
return w ? { status: !1 } : { status: !0, taskId: t };
|
|
283
|
+
}, f = async () => {
|
|
284
|
+
if (!y.value.length) return U.warning(m("请上传文件"));
|
|
285
285
|
const a = {
|
|
286
286
|
bucketName: e.bucketName,
|
|
287
287
|
importFileName: `${B}/${e.ossName}/${R}`
|
|
288
288
|
};
|
|
289
|
-
e.maxCount > 1 && (a.importFileName =
|
|
290
|
-
const i = e.maxCount > 1, t = e.maxCount > 1 ?
|
|
291
|
-
await
|
|
292
|
-
},
|
|
293
|
-
P(
|
|
289
|
+
e.maxCount > 1 && (a.importFileName = y.value.map((c) => c.name));
|
|
290
|
+
const i = e.maxCount > 1, t = e.maxCount > 1 ? y.value : y.value[0];
|
|
291
|
+
await T(I, t, a, i);
|
|
292
|
+
}, v = () => {
|
|
293
|
+
P(_.value, N.value);
|
|
294
294
|
}, oe = () => {
|
|
295
|
-
|
|
295
|
+
F(r, e.templateName);
|
|
296
296
|
}, r = async () => {
|
|
297
297
|
let a = te();
|
|
298
298
|
const [i, t] = await e.templateFun({ taskId: a }).run();
|
|
@@ -300,21 +300,21 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
300
300
|
};
|
|
301
301
|
return {
|
|
302
302
|
showProgressDialog: l,
|
|
303
|
-
progressTitle:
|
|
303
|
+
progressTitle: C,
|
|
304
304
|
percent: n,
|
|
305
|
-
progressStatus:
|
|
306
|
-
progressLoading:
|
|
307
|
-
errorFileName:
|
|
308
|
-
errorFileSize:
|
|
309
|
-
errorMessage:
|
|
310
|
-
errorImport:
|
|
311
|
-
importDialog:
|
|
312
|
-
fileList:
|
|
305
|
+
progressStatus: g,
|
|
306
|
+
progressLoading: k,
|
|
307
|
+
errorFileName: N,
|
|
308
|
+
errorFileSize: S,
|
|
309
|
+
errorMessage: $,
|
|
310
|
+
errorImport: b,
|
|
311
|
+
importDialog: u,
|
|
312
|
+
fileList: y,
|
|
313
313
|
fileHandleType: M,
|
|
314
314
|
showImportHandle: A,
|
|
315
|
-
confirmImport:
|
|
315
|
+
confirmImport: f,
|
|
316
316
|
fileUpload: O,
|
|
317
|
-
errorFileDownload:
|
|
317
|
+
errorFileDownload: v,
|
|
318
318
|
downTemplate: async () => {
|
|
319
319
|
let a = "";
|
|
320
320
|
if (e.templateUrl)
|
|
@@ -358,38 +358,38 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
358
358
|
dialogSecondTip: {}
|
|
359
359
|
},
|
|
360
360
|
emits: ["open", "success", "error"],
|
|
361
|
-
setup(e, { expose:
|
|
362
|
-
const l = e,
|
|
363
|
-
showProgressDialog:
|
|
364
|
-
progressTitle:
|
|
365
|
-
percent:
|
|
366
|
-
progressStatus:
|
|
367
|
-
errorFileName:
|
|
368
|
-
errorFileSize:
|
|
369
|
-
errorMessage:
|
|
361
|
+
setup(e, { expose: p, emit: u }) {
|
|
362
|
+
const l = e, C = u, n = ve(() => l.btnText ? l.btnText : m("导入")), {
|
|
363
|
+
showProgressDialog: g,
|
|
364
|
+
progressTitle: k,
|
|
365
|
+
percent: N,
|
|
366
|
+
progressStatus: S,
|
|
367
|
+
errorFileName: $,
|
|
368
|
+
errorFileSize: b,
|
|
369
|
+
errorMessage: _,
|
|
370
370
|
errorImport: M,
|
|
371
|
-
importDialog:
|
|
372
|
-
fileList:
|
|
371
|
+
importDialog: T,
|
|
372
|
+
fileList: F,
|
|
373
373
|
fileHandleType: P,
|
|
374
374
|
showImportHandle: E,
|
|
375
|
-
confirmImport:
|
|
375
|
+
confirmImport: y,
|
|
376
376
|
fileUpload: B,
|
|
377
377
|
errorFileDownload: A,
|
|
378
378
|
downTemplate: R,
|
|
379
379
|
clearTimer: O
|
|
380
|
-
} = Me(l,
|
|
381
|
-
let
|
|
382
|
-
return he(P, (
|
|
383
|
-
|
|
384
|
-
}),
|
|
385
|
-
confirmImport:
|
|
380
|
+
} = Me(l, C);
|
|
381
|
+
let z;
|
|
382
|
+
return he(P, (I) => {
|
|
383
|
+
I.includes("import") ? z = [m("正在导入中..."), m("导入失败"), m("导入成功")] : z = [m("正在导出中..."), m("导出失败"), m("导出成功")];
|
|
384
|
+
}), p({
|
|
385
|
+
confirmImport: y,
|
|
386
386
|
showImportHandle: E
|
|
387
|
-
}), (
|
|
387
|
+
}), (I, f) => (we(), Ce("div", Ee, [
|
|
388
388
|
q("div", {
|
|
389
|
-
onClick:
|
|
390
|
-
(...
|
|
389
|
+
onClick: f[0] || (f[0] = //@ts-ignore
|
|
390
|
+
(...v) => o(E) && o(E)(...v))
|
|
391
391
|
}, [
|
|
392
|
-
le(
|
|
392
|
+
le(I.$slots, "default", {}, () => [
|
|
393
393
|
D(o(W), {
|
|
394
394
|
size: "middle",
|
|
395
395
|
"btn-type": "primary"
|
|
@@ -408,9 +408,9 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
408
408
|
]),
|
|
409
409
|
re(" 导入弹窗 "),
|
|
410
410
|
D(o(se), {
|
|
411
|
-
title: o(j)(
|
|
412
|
-
modelValue: o(
|
|
413
|
-
"onUpdate:modelValue":
|
|
411
|
+
title: o(j)(e.importDialogName).value,
|
|
412
|
+
modelValue: o(T),
|
|
413
|
+
"onUpdate:modelValue": f[3] || (f[3] = (v) => Q(T) ? T.value = v : null),
|
|
414
414
|
customClass: "upload-dialog",
|
|
415
415
|
width: "610px",
|
|
416
416
|
height: "500px"
|
|
@@ -419,7 +419,7 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
419
419
|
q("div", null, [
|
|
420
420
|
D(o(W), {
|
|
421
421
|
size: "middle",
|
|
422
|
-
onClick:
|
|
422
|
+
onClick: f[2] || (f[2] = (v) => T.value = !1)
|
|
423
423
|
}, {
|
|
424
424
|
default: L(() => [
|
|
425
425
|
Y(
|
|
@@ -434,13 +434,13 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
434
434
|
D(o(W), {
|
|
435
435
|
size: "middle",
|
|
436
436
|
"btn-type": "primary",
|
|
437
|
-
disabled:
|
|
437
|
+
disabled: e.openDisabled && o(F).length === 0,
|
|
438
438
|
style: { "margin-left": "12px", width: "100%" },
|
|
439
|
-
onClick: o(
|
|
439
|
+
onClick: o(y)
|
|
440
440
|
}, {
|
|
441
441
|
default: L(() => [
|
|
442
442
|
Y(
|
|
443
|
-
H(o(j)(`${
|
|
443
|
+
H(o(j)(`${e.confirmButtonName}`).value),
|
|
444
444
|
1
|
|
445
445
|
/* TEXT */
|
|
446
446
|
)
|
|
@@ -451,11 +451,11 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
451
451
|
])
|
|
452
452
|
]),
|
|
453
453
|
default: L(() => [
|
|
454
|
-
le(
|
|
454
|
+
le(I.$slots, "tip", {}, () => [
|
|
455
455
|
q("div", Le, [
|
|
456
456
|
q("div", je, [
|
|
457
457
|
Y(
|
|
458
|
-
H(
|
|
458
|
+
H(e.dialogFistTip || o(j)("1、点击下载 ").value) + " ",
|
|
459
459
|
1
|
|
460
460
|
/* TEXT */
|
|
461
461
|
),
|
|
@@ -467,7 +467,7 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
467
467
|
}, {
|
|
468
468
|
default: L(() => [
|
|
469
469
|
Y(
|
|
470
|
-
H(o(j)(`${
|
|
470
|
+
H(o(j)(`${e.templateName}`).value),
|
|
471
471
|
1
|
|
472
472
|
/* TEXT */
|
|
473
473
|
)
|
|
@@ -479,22 +479,22 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
479
479
|
q(
|
|
480
480
|
"div",
|
|
481
481
|
Be,
|
|
482
|
-
H(
|
|
482
|
+
H(e.dialogSecondTip || o(j)("2、仅支持上传Excel文件,重复数据以最后一条为准").value),
|
|
483
483
|
1
|
|
484
484
|
/* TEXT */
|
|
485
485
|
)
|
|
486
486
|
])
|
|
487
487
|
], !0),
|
|
488
488
|
D(o(ye), {
|
|
489
|
-
modelValue: o(
|
|
490
|
-
"onUpdate:modelValue":
|
|
489
|
+
modelValue: o(F),
|
|
490
|
+
"onUpdate:modelValue": f[1] || (f[1] = (v) => Q(F) ? F.value = v : null),
|
|
491
491
|
error: o(M),
|
|
492
|
-
"error-file-name": o(
|
|
493
|
-
"error-file-size": o(
|
|
494
|
-
"error-message": o(
|
|
495
|
-
accept:
|
|
496
|
-
maxCount:
|
|
497
|
-
multiple:
|
|
492
|
+
"error-file-name": o($),
|
|
493
|
+
"error-file-size": o(b),
|
|
494
|
+
"error-message": o(_),
|
|
495
|
+
accept: e.fileType,
|
|
496
|
+
maxCount: e.maxCount,
|
|
497
|
+
multiple: e.multiple,
|
|
498
498
|
onErrorFileDownload: o(A),
|
|
499
499
|
onFileUpload: o(B)
|
|
500
500
|
}, null, 8, ["modelValue", "error", "error-file-name", "error-file-size", "error-message", "accept", "maxCount", "multiple", "onErrorFileDownload", "onFileUpload"])
|
|
@@ -505,21 +505,21 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
505
505
|
re(" 进度弹窗 "),
|
|
506
506
|
D(o(se), {
|
|
507
507
|
size: "mini",
|
|
508
|
-
title: o(j)(o(
|
|
508
|
+
title: o(j)(o(k)).value,
|
|
509
509
|
"is-feedback-img": !1,
|
|
510
|
-
modelValue: o(
|
|
511
|
-
"onUpdate:modelValue":
|
|
510
|
+
modelValue: o(g),
|
|
511
|
+
"onUpdate:modelValue": f[5] || (f[5] = (v) => Q(g) ? g.value = v : null),
|
|
512
512
|
type: "feedback",
|
|
513
513
|
onClose: o(O)
|
|
514
514
|
}, {
|
|
515
515
|
default: L(() => [
|
|
516
516
|
D(o(Ne), {
|
|
517
|
-
modelValue: o(
|
|
518
|
-
"onUpdate:modelValue":
|
|
517
|
+
modelValue: o(N),
|
|
518
|
+
"onUpdate:modelValue": f[4] || (f[4] = (v) => Q(N) ? N.value = v : null),
|
|
519
519
|
style: { "margin-top": "35px" },
|
|
520
520
|
type: "circle",
|
|
521
|
-
status: o(
|
|
522
|
-
textMap: o(
|
|
521
|
+
status: o(S),
|
|
522
|
+
textMap: o(z)
|
|
523
523
|
}, null, 8, ["modelValue", "status", "textMap"])
|
|
524
524
|
]),
|
|
525
525
|
_: 1
|
|
@@ -527,11 +527,11 @@ const _e = ae.get("token"), Ie = ae.post("put-object", (e) => (e.headers || (e.h
|
|
|
527
527
|
}, 8, ["title", "modelValue", "onClose"])
|
|
528
528
|
]));
|
|
529
529
|
}
|
|
530
|
-
}), Ve = (e,
|
|
531
|
-
const
|
|
532
|
-
for (const [l,
|
|
533
|
-
|
|
534
|
-
return
|
|
530
|
+
}), Ve = (e, p) => {
|
|
531
|
+
const u = e.__vccOpts || e;
|
|
532
|
+
for (const [l, C] of p)
|
|
533
|
+
u[l] = C;
|
|
534
|
+
return u;
|
|
535
535
|
}, He = /* @__PURE__ */ Ve(Re, [["__scopeId", "data-v-49caa32f"]]), Ae = {
|
|
536
536
|
"1、点击下载 ": { "zh-CN": "1、点击下载 ", en: "1.Click to Download ", _appCode: "framework" },
|
|
537
537
|
"2、仅支持上传Excel文件,重复数据以最后一条为准": {
|
|
Binary file
|