ling-yun-custom-components 0.0.47 → 0.0.48

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.
@@ -0,0 +1,149 @@
1
+ import { useCssVars as L, ref as N, watch as O, createElementBlock as u, createCommentVNode as v, openBlock as s, Fragment as x, renderList as U, normalizeClass as z, unref as o, createElementVNode as m, createBlock as f, normalizeStyle as j, withCtx as S, resolveDynamicComponent as T, toDisplayString as k, renderSlot as M, createVNode as E } from "vue";
2
+ import { ElImage as R, ElIcon as w } from "element-plus";
3
+ import { emitsMap as c, uploadFileTypeMap as P, uploadFileType as a } from "ling-yun-methods";
4
+ import { IconTxt as A, IconPpt as F, IconXls as I, IconDoc as b, IconPdf as G, IconDelete as K, IconOtherFile as X } from "color-message-lingyun-vue";
5
+ import { _ as q } from "./_plugin-vue_export-helper.CHgC5LLL.js";
6
+ import '../assets/layout6.css';const i = {
7
+ uploading: "uploading",
8
+ success: "success",
9
+ error: "error"
10
+ }, H = {
11
+ key: 0,
12
+ class: "file-list display-grid pd-t-12 pd-b-12"
13
+ }, J = { class: "flex overflow-hidden flex-1 pd-r-10" }, Q = { class: "pd-l-8 flex-1 overflow-hidden" }, W = ["title"], Y = { class: "fz-12 text-ellipsis lh-16" }, Z = {
14
+ key: 1,
15
+ class: "text-74798c"
16
+ }, ee = /* @__PURE__ */ Object.assign({
17
+ name: "FileList"
18
+ }, {
19
+ __name: "layout",
20
+ props: {
21
+ // 文件列表数据
22
+ modelValue: {
23
+ type: Array,
24
+ default: () => []
25
+ },
26
+ // 是否显示删除按钮
27
+ showDelete: {
28
+ type: Boolean,
29
+ default: !0
30
+ },
31
+ // 字段映射配置
32
+ fieldMapping: {
33
+ type: Object,
34
+ default: () => ({
35
+ // fileName: 'fileName',
36
+ // fileUrl: 'fileUrl',
37
+ })
38
+ },
39
+ rowCount: {
40
+ type: Number,
41
+ default: 2
42
+ },
43
+ // 图标大小
44
+ iconSize: {
45
+ type: Number,
46
+ default: 36
47
+ }
48
+ },
49
+ emits: [c.delete, c.change, c.updateModelValue],
50
+ setup(l, { emit: _ }) {
51
+ L((e) => ({
52
+ v751237c3: l.rowCount
53
+ }));
54
+ const p = l, y = _, n = N(p.modelValue), B = Object.fromEntries(
55
+ Object.entries(P).map(([e, r]) => [r, e])
56
+ ), h = (e) => e[p.fieldMapping.fileUrl] ? e[p.fieldMapping.fileUrl] : e.raw && e.raw instanceof File ? URL.createObjectURL(e.raw) : e instanceof File ? URL.createObjectURL(e) : "", C = {
57
+ [a.pdf]: G,
58
+ [a.doc]: b,
59
+ [a.docx]: b,
60
+ [a.xls]: I,
61
+ [a.xlsx]: I,
62
+ [a.ppt]: F,
63
+ [a.pptx]: F,
64
+ [a.txt]: A
65
+ }, V = (e) => e?.includes("image"), $ = (e) => {
66
+ const r = B[e];
67
+ return C[r] || X;
68
+ }, g = (e) => {
69
+ if (!e || e === 0) return "0 B";
70
+ const r = 1024, t = ["B", "KB", "MB", "GB"], d = Math.floor(Math.log(e) / Math.log(r));
71
+ return `${parseFloat((e / Math.pow(r, d)).toFixed(2))} ${t[d]}`;
72
+ }, D = (e, r) => {
73
+ n.value.splice(r, 1), y(c.delete, e), y(c.updateModelValue, n.value), y(c.change, n.value);
74
+ };
75
+ return O(
76
+ () => p.modelValue,
77
+ (e) => {
78
+ n.value = e;
79
+ },
80
+ { immediate: !0 }
81
+ ), (e, r) => n.value?.length ? (s(), u("div", H, [
82
+ (s(!0), u(x, null, U(n.value, (t, d) => (s(), u("div", {
83
+ key: d,
84
+ class: z(["pd-l-8 pd-r-8 pd-t-6 pd-b-6 radius-8 file-item overflow-hidden flex items-center", {
85
+ "bg-uploading": t.fileStatus === o(i).uploading,
86
+ "bg-fcfdff": t.fileStatus !== o(i).uploading,
87
+ "border-error": t.fileStatus === o(i).error,
88
+ "border-normal": t.fileStatus !== o(i).error
89
+ }])
90
+ }, [
91
+ m("div", J, [
92
+ V(t?.type) && h(t) ? (s(), f(o(R), {
93
+ key: 0,
94
+ src: h(t),
95
+ class: "radius-4",
96
+ fit: "cover",
97
+ style: j({ width: `${l.iconSize}px`, height: `${l.iconSize}px` })
98
+ }, null, 8, ["src", "style"])) : (s(), f(o(w), {
99
+ key: 1,
100
+ size: l.iconSize,
101
+ class: "pointer"
102
+ }, {
103
+ default: S(() => [
104
+ (s(), f(T($(t?.type))))
105
+ ]),
106
+ _: 2
107
+ }, 1032, ["size"])),
108
+ m("div", Q, [
109
+ m("div", {
110
+ class: z(["fz-14 text-ellipsis lh-20 flex-1", {
111
+ "text-ec0e13": t.fileStatus === o(i).error,
112
+ "text-262626": t.fileStatus !== o(i).error
113
+ }]),
114
+ title: t[l.fieldMapping.fileName]
115
+ }, k(t[l.fieldMapping.fileName]), 11, W),
116
+ m("div", Y, [
117
+ e.$slots.status ? M(e.$slots, "status", {
118
+ key: 0,
119
+ file: t
120
+ }, void 0, !0) : (s(), u(x, { key: 1 }, [
121
+ e.$slots.size ? M(e.$slots, "size", {
122
+ key: 0,
123
+ file: t,
124
+ size: g(t.size)
125
+ }, void 0, !0) : (s(), u("span", Z, k(g(t.size)), 1))
126
+ ], 64))
127
+ ])
128
+ ])
129
+ ]),
130
+ l.showDelete ? (s(), f(o(w), {
131
+ key: 0,
132
+ size: 16,
133
+ color: t.fileStatus === o(i).error ? "var(--error-color-1)" : "var(--text-color-4)",
134
+ class: "pointer",
135
+ onClick: (te) => D(t, d)
136
+ }, {
137
+ default: S(() => [
138
+ E(o(K))
139
+ ]),
140
+ _: 1
141
+ }, 8, ["color", "onClick"])) : v("", !0)
142
+ ], 2))), 128))
143
+ ])) : v("", !0);
144
+ }
145
+ }), ie = /* @__PURE__ */ q(ee, [["__scopeId", "data-v-c5b5f416"]]);
146
+ export {
147
+ ie as _,
148
+ i as u
149
+ };
@@ -0,0 +1,230 @@
1
+ import { ref as z, computed as p, watch as M, createElementBlock as f, openBlock as m, createVNode as R, createBlock as k, createCommentVNode as U, unref as h, mergeProps as B, withCtx as D, renderSlot as O, Fragment as E, createElementVNode as c, toDisplayString as x } from "vue";
2
+ import { ElUpload as N, ElImage as Y } from "element-plus";
3
+ import { emitsMap as i, uploadFileTypeMap as L, messageError as Q, messageWarning as F } from "ling-yun-methods";
4
+ import { _ as J, u as v } from "./layout.BcE_uXfl.js";
5
+ import { _ as K } from "./_plugin-vue_export-helper.CHgC5LLL.js";
6
+ import '../assets/layout5.css';const u = [];
7
+ for (let A = 0; A < 256; ++A)
8
+ u.push((A + 256).toString(16).slice(1));
9
+ function G(A, a = 0) {
10
+ return (u[A[a + 0]] + u[A[a + 1]] + u[A[a + 2]] + u[A[a + 3]] + "-" + u[A[a + 4]] + u[A[a + 5]] + "-" + u[A[a + 6]] + u[A[a + 7]] + "-" + u[A[a + 8]] + u[A[a + 9]] + "-" + u[A[a + 10]] + u[A[a + 11]] + u[A[a + 12]] + u[A[a + 13]] + u[A[a + 14]] + u[A[a + 15]]).toLowerCase();
11
+ }
12
+ let W;
13
+ const $ = new Uint8Array(16);
14
+ function _() {
15
+ if (!W) {
16
+ if (typeof crypto > "u" || !crypto.getRandomValues)
17
+ throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
18
+ W = crypto.getRandomValues.bind(crypto);
19
+ }
20
+ return W($);
21
+ }
22
+ const AA = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), T = { randomUUID: AA };
23
+ function eA(A, a, y) {
24
+ A = A || {};
25
+ const t = A.random ?? A.rng?.() ?? _();
26
+ if (t.length < 16)
27
+ throw new Error("Random bytes length must be >= 16");
28
+ return t[6] = t[6] & 15 | 64, t[8] = t[8] & 63 | 128, G(t);
29
+ }
30
+ function tA(A, a, y) {
31
+ return T.randomUUID && !A ? T.randomUUID() : eA(A);
32
+ }
33
+ const aA = "data:image/webp;base64,UklGRroSAABXRUJQVlA4WAoAAAAwAAAAvwAAyQAASUNDUMgBAAAAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADZWUDhMyxAAAC+/QDIQPwa3tm3Vytr3uWffXYqAWiiA9mjI3aPnllIC5Ni2VUX7vPvx+4uZuwXhJEKS5OPSNuoRbnBr21at7HXP++6Ka0QF1gtN0obnhO4QPZfjsG0bSU5S2fvvcpMgoP53s7ia5+NLfro7zb2ofZR9/H12Nb98N/ei/BTnJtse9x91z6pZae75+FX3rMryvalv+VwMLh5////X8/FjLoen7/qWZ0eR7lnVv+rqW17/qpNoUlh/mnvR/fZ5zv3jtcz0r7r6lpfEo+2e1dwun2ZRW0+Wn7ybe9HT7r1te8fL13vz8ob79Uub1vaaEFhmHjavTcuLYh/+hnfT8/G9eXmdk2jt3fq5RXXNMmOZKS9pQaa3lpmvv5+iuM+EQIIEO4oU5yQJErxUx+Pu9ezae8aP/y0zd+uXlrU1CXYUedi+nl17V/+qu57ZCV2CWIQELoGLkMAldAljCVxCl9ClTV9LE6cqPXBTbZaZQCea8MgyY5mxIuOxpwuvkEjOBICxDBAIQU6Co5Uh/JAMQIixAIkQABIhACTCAQDIAYQDACQHQCIEgEQIQHSNikEAEA45AAAgBIBqAIAAagiDGiIAoAYEQpCTABCCBCDBBAD///+P27Z5EhABEgBB2aKS7r3r7ibddffe9Qazl0rvKcvblveUEnoPAbDUVnDrPRi1bIms+7tw9/1+D4RweOS3RPRfFm07QSudlQwxIHXxaEWEzD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwtLS0tLS0tLS0tLS0tLS0tLSYy05RdIF69pW1AD2zcCw+T61Wq9VqtVqtVqvVarVarVar1RadY5qy+y+6YDTtmaFjMVn1er1er9fr9Xq9Xq/X6/V6vV6v1+v1er1er5c7FoqVzptJ0UViBFbkOS/GotB6/cCBAwcOHFheXl5ebjQajUaj0Wg0Go1Go9FoNBqNRqPRWF5eDq6ruMDi1MUgJVbpuc1ms9lsTndqISmj+t7YSrVVs9lsNpvNZrPZbDabzWazWdKGKSOUiuvEG1opz36zYqPkpAWgU3hWVlZWVlZWVlZWVsqNuJq0VFlDb7q9VldXV1dbrVar1Wq1Wq1Wq9VqtVZXwxaMW7JwVL1UqKE3kVdybrvdbrfb7Xaq6OTUZF/IjUpLUFtSf+gT//q58Xg8Ho/H4/F4PB6Px+PxeDwej8fj8Xg8Ho/He3t7e3uXfnwlWSD5sVXXT3yupHmCJtrd3d3d3d3d3d3d20tczFP/0FqdVqqtf/itMG+asru7u7vpBnzqwYtbE2NKqR6p2n7jW4HnnTNnhsPhcDgcDofD4XA4HA6Hw+FwOBwOh8NTp06dOnXq1BMPPnhxO5TwNzAp1dTg075U6Nv9fr/f7/f7/X6/3+/3+/1+v9/v9/v9fr/ff/nll19++eWXX378wQcf/M12q1VmhuOwqn1WeLcs9BcLPbNfTfOVH+u005JIKpv++Xg8frc/I14qePALP97ptFenkoqmq/80Hu/NTJ+fEMhPTiuVqqUYpTeCu+XqleO9D/dLQnMC+Uy3RBJlKjTaTaYFb8+I5wtC+cvuWijBCKBaEj7ohWlA68q9vf+amT73yIOR/Gm3uxZIaeWVeVANjkNtz5TtCbH8XiAJV16mWqSO2wX/vk8S+ds5Cfn5bnetFbqqlMSzHJM0ZLXV7lyxd26/RGma4vbzU91up3AVY+DkR1WE+Dhgd2Y8lyD8vJ/qrrWnOaUis0zLCTprV+yeOzMjni1Iyw92O5FrOemqFq12Z+2KczsRjx47duzYsROPHruv//Cxh4sruae4kLsDiuPtJx5Myz+sddvFACanKkliijLPCemUcPSOe++9d/vRo/f2jx89XlzJ3UfvuffeBwJeKHj6wRL527VJEmank0oQl2wX7MTk9RU1lXAiUVFOflgmF0c3n0Y6qcQka4q17uU7O6dj7jlx4kQZDz/66DMhhXv7a088VCJ/HCXFTEhOWEmFKHLWP5Xk6NGjx0ooruTel8PDIPnqyZMnT548efLk17a3X3lz54pOp8hOHVaMdsFmkjuPH3+4jMdOnNh+OZEUZqwRQRLMRVWafbrT2ZHzq8EFvPjm+1d0OkUl4WRgPikeypy/IUmxUnBwc+f96bj7+PHj/buP3pfXlBi4P7e9vb29vb29HTbga2/uXL7Wmdz8g4LhYaUoSrY73ekp6py4w5qmledOvb9z2Vpw2AwOq8Zk0JgiusOf2I5r2j5xIv8JjGrKn/wSktTnB+/vbAZPUM2IxGGVWE8wq5mDyegroS8P339/s7vW6azE5EnlWIuYiaSevp977vnnX3r55YD1IKMaLO2PmUrUghEHgwfYfCo8uPMkbp2VYKWgGzETmZ52uxUTZlST8ySDgm4wixaRSqpCJ2ZGcmoaPrXe7bTbcUalOT9GUdHB9YLJyKWSrJYwO8erCe2f3iknzKg4M23C02X/RAWjZIGyFhMVrBSd+SEvWFHW5pk5X2BUTHvMDXlVpczr2/SlOSd/9P6unmJhQ0hyRc/cLm5MEJz23QX5jT9iTg/nlQsSNMqZ+/vmvFKshYmowLh3jijW9FSSybhrLjiYoCi4mFlrB2uqUsTrahcowcq2yZNrOYvzoJMgWpK6gAkyqkcw73S++M//+cY3vvOdb35r71MB+arC6ajKvFk+bz9rznz9O1mWZVmWZVn26V9b63TaIcF62nlm2nnj88B738my+2+9/vprr73+5rvOZtlVPzEhT2KCkW9VWDk//G+W3Xb91tbW1tbW1tbW1beczY78UkgzWBR/YP5H7uV8arYMv52dvWlra2srZdyeZb+VHxYjl4pQ+t5n1vxf9uQ1W1tbJcYtWfazIeEa+snMTZwx54Sv/TvFe88zs9OvZ2dznUY+/6OtVjFynHvK3psHL05CZvdBWXZDorWuvzpxCbdnfx0UjDISzOvMR7zuIn/xVhzOlP/Pbk39sZM9+Jonsx8Oq6oWeUbAuZ3/mF169urkly0pt2V/s7paPLmGReb3yals3UuUcfm5nbdmxUfZbUkNJE6yIyurK+GGkPme+ihf91Xwj+d2PhjOiG9kN6X0tuyu21Jyf3bRhGI/SAlzPPV3IJnxZ7vndv57RmRZdHxzdvam67O7tlJya/YH8ZNTRUge/sruuTx7RjlPxn/ls9dt5eTft7gn3JT9dVVIrzsNV+60v7h7bmfnjRkR3+uv2SooPir4ES+u4qoy5nXuuIQ4+ZG9Qj544/Tp06dPv/76668PBoPBYDAYDAaDwWAwGAwGg8FgMHgjuz9xswxIXsWN2d/HU8eVmPuO111Ht87fDmRn5/3333///TfffPPNN0ej0Wg0Go1Go9FoNBqNRqPRaPRmdnYqEgdp5v7dVUQgxdq1n7sil9iY7tTgMt7Pi0xDokhMuBNkjl8+R+v2w5XX8b2n86t/9S+f2tzc3Nzc3Oz1er1er9fr9Xq9Xq/X6/V6vV6v1+v1/i27cXruyn4hfPCuDImkGL3nEsyAH7zgggsvPHTo0KGNjY2NjY2NjY2NjY2NjY2Nw4cPHz58+PDvT+6bJSQH79mRj0UTHxHzu/oiQXLpe0pyR5FVOKbK+pksuyZNeuR7SfHqfJJWgmC3bqnERuFInHrhhWEvOHTo0KFDh4r+8HfZLYmmui67PZWezS4KKTlz3vdKR65w+XUugZFyTHpxlJVswJ/OsutSck1y3H5J8eZ28txUIZIS3D4nRlRgba2odn19fX19fdKGQRdIdYIL/2Ty2Dflc9ORHwrePMeEOu+b1VMSOuONorkjKNrtdrvdbrc76QpRdUVXWP/naZ9bL8pXvoRpCRVIwvFXZIR7XcMe3Mm7cd6CURsW7Rj2hh/4bHb2hrJ5g1uz7HfCF/+lVCHYQSGFM7Fxd7Jht6RoSQuGNX3/32TZXTckb/hPZkd+PVi5GYUUSC9+rI4ZfVi8bTrYO53ee9yebEJOtebvHsmyu2658dqrr73+ptuezLJLfihceBqkVaHMTBppR6oJo53UsfF9f3QkNW/55U/m26lDX/nZVZGUUUyFTHZ2T51VYnz/L//FJZ8/8vlLLvnkD0+28cY6RVoVKQ2ZURI8YHqj3Qn3tIdb8id3zHINqIqknHFkj2RW+bexaKdEHw624id0Giok0WekHFOEACnrz4kwArkWKwan1EpFvNm/I/pKTvWNzLfcJLWECobsiXvwfhxh8WRMjSiKxoEZ6Hyvg58iYFIYiSUOhVPeg+NuXAQxSVv717lfiT1VgKEiK/WrXtYXwgso5llLNaJSsdpmFDRsql6R7B31cq1ssLnzZdSn0GpHy9uPMV2nLotoFU+XLYBwf1Mb+43HldBFEbBw1kYymNhiCbk4jTEDXUAxI/fvKAunt7CiXk7vKA9ouNDids4mGuPiCz2632iYiyR46oxacLqIqovIsZDjwZ5HXeBZCz6U8IIP5rzgA2ov6Kjmi7q1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+18D/9P09//+nbwA=", lA = { class: "w-full" }, uA = { class: "flex items-center justify-center" }, nA = { class: "upload-webp overflow-hidden flex items-center justify-center relative" }, oA = { class: "text-74798c fz-12 pd-t-6" }, rA = { key: 0 }, dA = { key: 1 }, iA = /* @__PURE__ */ Object.assign({
34
+ name: "UploadFile"
35
+ }, {
36
+ __name: "layout",
37
+ props: {
38
+ // 已上传的文件列表
39
+ modelValue: {
40
+ type: Array,
41
+ default: () => []
42
+ },
43
+ // 是否禁用
44
+ disabled: {
45
+ type: Boolean,
46
+ default: !1
47
+ },
48
+ // 是否支持多选
49
+ multiple: {
50
+ type: Boolean,
51
+ default: !1
52
+ },
53
+ // 文件类型
54
+ uploadFileType: {
55
+ type: Array,
56
+ default: () => []
57
+ },
58
+ // 单个文件最大大小 (MB)
59
+ maxSize: {
60
+ type: Number,
61
+ default: 10
62
+ },
63
+ // 最多上传的文件个数
64
+ maxCount: {
65
+ type: Number,
66
+ default: 10
67
+ },
68
+ // 上传接口配置
69
+ apiConfig: {
70
+ type: Function,
71
+ default: null
72
+ },
73
+ // 自定义参数
74
+ params: {
75
+ type: Object,
76
+ default: () => ({})
77
+ },
78
+ // 是否自动上传
79
+ autoUpload: {
80
+ type: Boolean,
81
+ default: !0
82
+ },
83
+ // 字段映射
84
+ fieldMapping: {
85
+ type: Object,
86
+ default: () => ({
87
+ // fileName: 'fileName',
88
+ // fileUrl: 'fileUrl',
89
+ })
90
+ },
91
+ // 是否显示文件列表
92
+ showFileList: {
93
+ type: Boolean,
94
+ default: !0
95
+ },
96
+ // 是否自定义请求
97
+ isCustomRequest: {
98
+ type: Boolean,
99
+ default: !1
100
+ },
101
+ // 上传文件时的字段名
102
+ fileField: {
103
+ type: String,
104
+ default: "file"
105
+ },
106
+ // 是否拖拽
107
+ drag: {
108
+ type: Boolean,
109
+ default: !0
110
+ },
111
+ uploadTipObj: {
112
+ type: Object,
113
+ default: null
114
+ }
115
+ },
116
+ emits: [i.updateModelValue, i.change, i.delete],
117
+ setup(A, { expose: a, emit: y }) {
118
+ const t = A, s = y, j = z(null), n = z([]), w = p(() => typeof t.apiConfig == "function"), S = p(() => t.uploadFileType?.join("、")), C = p(() => t.uploadFileType?.map((e) => `.${e}`)?.join(",")), P = p(() => t.maxSize ? `${t.maxSize}MB` : ""), o = p(() => t.uploadTipObj ? t.uploadTipObj : {
119
+ formatAcceptText: `支持 ${S.value} 格式文件`,
120
+ formatMaxSize: `单个文件不超过 ${P.value}`,
121
+ maxCount: `最多上传 ${t.maxCount} 个文件`
122
+ }), X = (e) => {
123
+ if (!t.maxSize) return !0;
124
+ const l = t.maxSize * 1024 * 1024;
125
+ return e.size <= l;
126
+ }, Z = (e) => b(e, !0), b = (e, l) => {
127
+ const r = t.uploadFileType.map((g) => L?.[g]), d = [...new Set(r)];
128
+ if (t.maxCount && n.value?.length >= t.maxCount)
129
+ if (t.maxCount === 1)
130
+ n.value = [];
131
+ else
132
+ return l && Q(o.value.maxCount), !1;
133
+ return d?.includes(e.type) ? X(e) ? !0 : (l && F(o.value.formatMaxSize), !1) : (l && F(o.value.formatAcceptText), !1);
134
+ }, q = ({ file: e }) => {
135
+ if (!b(e, !1))
136
+ return;
137
+ const l = {
138
+ uuid: tA(),
139
+ raw: e,
140
+ type: e.type,
141
+ size: e.size,
142
+ fileStatus: v.uploading,
143
+ [t.fieldMapping.fileName]: e.name
144
+ };
145
+ if (I(l), !w.value || t.isCustomRequest) {
146
+ setTimeout(() => {
147
+ V(l, v.success);
148
+ }, 100);
149
+ return;
150
+ }
151
+ t.apiConfig?.({
152
+ [t.fileField]: e,
153
+ ...t.params
154
+ }).then(({ data: r }) => {
155
+ const d = r?.[0] || r?.files?.[0] || r;
156
+ V(l, v.success, d);
157
+ }).catch(() => {
158
+ V(l, v.error);
159
+ });
160
+ }, I = (e) => {
161
+ n.value.push(e), s(i.updateModelValue, n.value), s(i.change, e);
162
+ }, V = (e, l, r = {}) => {
163
+ const d = n.value.findIndex((g) => g.uuid === e.uuid);
164
+ d !== -1 && (n.value[d] = {
165
+ ...n.value[d],
166
+ fileStatus: l,
167
+ ...r
168
+ }, s(i.updateModelValue, n.value), s(i.change, n.value[d]));
169
+ }, H = (e) => {
170
+ s(i.delete, e);
171
+ };
172
+ return M(
173
+ () => t.modelValue,
174
+ (e) => {
175
+ Array.isArray(e) && (n.value = e);
176
+ },
177
+ { immediate: !0 }
178
+ ), a({
179
+ handleBeforeUpload: b,
180
+ httpRequest: q
181
+ }), (e, l) => (m(), f("div", lA, [
182
+ R(h(N), B({
183
+ ref_key: "uploadRef",
184
+ ref: j,
185
+ action: "#",
186
+ accept: C.value,
187
+ multiple: A.multiple,
188
+ disabled: A.disabled,
189
+ "before-upload": Z,
190
+ "http-request": q,
191
+ "show-file-list": !1,
192
+ "auto-upload": A.autoUpload,
193
+ drag: A.drag
194
+ }, e.$attrs, { class: "upload-wrapper" }), {
195
+ default: D(() => [
196
+ e.$slots.tip ? O(e.$slots, "tip", {
197
+ key: 0,
198
+ uploadTip: o.value
199
+ }, void 0, !0) : (m(), f(E, { key: 1 }, [
200
+ c("div", uA, [
201
+ c("div", nA, [
202
+ R(h(Y), {
203
+ src: h(aA),
204
+ class: "absolute image"
205
+ }, null, 8, ["src"])
206
+ ])
207
+ ]),
208
+ l[1] || (l[1] = c("div", { class: "text-262626 fz-14 weight-500" }, "点击或拖拽文件上传", -1)),
209
+ c("div", oA, [
210
+ c("span", null, x(o.value.formatAcceptText), 1),
211
+ o.value.formatMaxSize ? (m(), f("span", rA, "," + x(o.value.formatMaxSize), 1)) : U("", !0),
212
+ o.value.maxCount ? (m(), f("span", dA, "," + x(o.value.maxCount), 1)) : U("", !0)
213
+ ])
214
+ ], 64))
215
+ ]),
216
+ _: 3
217
+ }, 16, ["accept", "multiple", "disabled", "auto-upload", "drag"]),
218
+ n.value?.length && A.showFileList ? (m(), k(J, B({
219
+ key: 0,
220
+ modelValue: n.value,
221
+ "onUpdate:modelValue": l[0] || (l[0] = (r) => n.value = r),
222
+ "field-mapping": A.fieldMapping,
223
+ "show-delete": !A.disabled
224
+ }, e.$attrs, { onDelete: H }), null, 16, ["modelValue", "field-mapping", "show-delete"])) : U("", !0)
225
+ ]));
226
+ }
227
+ }), vA = /* @__PURE__ */ K(iA, [["__scopeId", "data-v-c9d51ce3"]]);
228
+ export {
229
+ vA as default
230
+ };
@@ -0,0 +1,150 @@
1
+ import { useCssVars as N, ref as O, watch as U, createElementBlock as u, createCommentVNode as v, openBlock as s, Fragment as x, renderList as j, normalizeClass as z, unref as o, createElementVNode as m, createBlock as f, normalizeStyle as T, withCtx as S, resolveDynamicComponent as E, toDisplayString as k, renderSlot as M, createVNode as R } from "vue";
2
+ import { ElImage as P, ElIcon as w } from "element-plus";
3
+ import { emitsMap as c, uploadFileTypeMap as F, uploadFileType as a } from "ling-yun-methods";
4
+ import { IconTxt as A, IconPpt as I, IconXls as b, IconDoc as _, IconPdf as G, IconDelete as K, IconOtherFile as X } from "color-message-lingyun-vue";
5
+ import { _ as q } from "./_plugin-vue_export-helper.CHgC5LLL.js";
6
+ import '../assets/layout6.css';const i = {
7
+ uploading: "uploading",
8
+ success: "success",
9
+ error: "error"
10
+ }, H = {
11
+ key: 0,
12
+ class: "file-list display-grid pd-t-12 pd-b-12"
13
+ }, J = { class: "flex overflow-hidden flex-1 pd-r-10" }, Q = { class: "pd-l-8 flex-1 overflow-hidden" }, W = ["title"], Y = { class: "fz-12 text-ellipsis lh-16" }, Z = {
14
+ key: 1,
15
+ class: "text-74798c"
16
+ }, ee = /* @__PURE__ */ Object.assign({
17
+ name: "FileList"
18
+ }, {
19
+ __name: "layout",
20
+ props: {
21
+ // 文件列表数据
22
+ modelValue: {
23
+ type: Array,
24
+ default: () => []
25
+ },
26
+ // 是否显示删除按钮
27
+ showDelete: {
28
+ type: Boolean,
29
+ default: !0
30
+ },
31
+ // 字段映射配置
32
+ fieldMapping: {
33
+ type: Object,
34
+ default: () => ({
35
+ // fileName: 'fileName',
36
+ // fileUrl: 'fileUrl',
37
+ })
38
+ },
39
+ rowCount: {
40
+ type: Number,
41
+ default: 2
42
+ },
43
+ // 图标大小
44
+ iconSize: {
45
+ type: Number,
46
+ default: 36
47
+ }
48
+ },
49
+ emits: [c.delete, c.change, c.updateModelValue],
50
+ setup(l, { emit: B }) {
51
+ N((e) => ({
52
+ v7a4f6f21: l.rowCount
53
+ }));
54
+ const p = l, h = B, n = O(p.modelValue), C = Object.fromEntries(
55
+ Object.entries(F).map(([e, r]) => [r, e])
56
+ ), y = (e) => e[p.fieldMapping.fileUrl] ? e[p.fieldMapping.fileUrl] : e.raw && e.raw instanceof File ? URL.createObjectURL(e.raw) : e instanceof File ? URL.createObjectURL(e) : "", V = {
57
+ [a.pdf]: G,
58
+ [a.doc]: _,
59
+ [a.docx]: _,
60
+ [a.xls]: b,
61
+ [a.xlsx]: b,
62
+ [a.ppt]: I,
63
+ [a.pptx]: I,
64
+ [a.txt]: A,
65
+ other: X
66
+ }, $ = (e) => e?.includes("image"), D = (e) => {
67
+ const r = C[e];
68
+ return V[r] || F[other];
69
+ }, g = (e) => {
70
+ if (!e || e === 0) return "0 B";
71
+ const r = 1024, t = ["B", "KB", "MB", "GB"], d = Math.floor(Math.log(e) / Math.log(r));
72
+ return `${parseFloat((e / Math.pow(r, d)).toFixed(2))} ${t[d]}`;
73
+ }, L = (e, r) => {
74
+ n.value.splice(r, 1), h(c.delete, e), h(c.updateModelValue, n.value), h(c.change, n.value);
75
+ };
76
+ return U(
77
+ () => p.modelValue,
78
+ (e) => {
79
+ n.value = e;
80
+ },
81
+ { immediate: !0 }
82
+ ), (e, r) => n.value?.length ? (s(), u("div", H, [
83
+ (s(!0), u(x, null, j(n.value, (t, d) => (s(), u("div", {
84
+ key: d,
85
+ class: z(["pd-l-8 pd-r-8 pd-t-6 pd-b-6 radius-8 file-item overflow-hidden flex items-center", {
86
+ "bg-uploading": t.fileStatus === o(i).uploading,
87
+ "bg-fcfdff": t.fileStatus !== o(i).uploading,
88
+ "border-error": t.fileStatus === o(i).error,
89
+ "border-normal": t.fileStatus !== o(i).error
90
+ }])
91
+ }, [
92
+ m("div", J, [
93
+ $(t?.type) && y(t) ? (s(), f(o(P), {
94
+ key: 0,
95
+ src: y(t),
96
+ class: "radius-4",
97
+ fit: "cover",
98
+ style: T({ width: `${l.iconSize}px`, height: `${l.iconSize}px` })
99
+ }, null, 8, ["src", "style"])) : (s(), f(o(w), {
100
+ key: 1,
101
+ size: l.iconSize,
102
+ class: "pointer"
103
+ }, {
104
+ default: S(() => [
105
+ (s(), f(E(D(t?.type))))
106
+ ]),
107
+ _: 2
108
+ }, 1032, ["size"])),
109
+ m("div", Q, [
110
+ m("div", {
111
+ class: z(["fz-14 text-ellipsis lh-20 flex-1", {
112
+ "text-ec0e13": t.fileStatus === o(i).error,
113
+ "text-262626": t.fileStatus !== o(i).error
114
+ }]),
115
+ title: t[l.fieldMapping.fileName]
116
+ }, k(t[l.fieldMapping.fileName]), 11, W),
117
+ m("div", Y, [
118
+ e.$slots.status ? M(e.$slots, "status", {
119
+ key: 0,
120
+ file: t
121
+ }, void 0, !0) : (s(), u(x, { key: 1 }, [
122
+ e.$slots.size ? M(e.$slots, "size", {
123
+ key: 0,
124
+ file: t,
125
+ size: g(t.size)
126
+ }, void 0, !0) : (s(), u("span", Z, k(g(t.size)), 1))
127
+ ], 64))
128
+ ])
129
+ ])
130
+ ]),
131
+ l.showDelete ? (s(), f(o(w), {
132
+ key: 0,
133
+ size: 16,
134
+ color: t.fileStatus === o(i).error ? "var(--error-color-1)" : "var(--text-color-4)",
135
+ class: "pointer",
136
+ onClick: (te) => L(t, d)
137
+ }, {
138
+ default: S(() => [
139
+ R(o(K))
140
+ ]),
141
+ _: 1
142
+ }, 8, ["color", "onClick"])) : v("", !0)
143
+ ], 2))), 128))
144
+ ])) : v("", !0);
145
+ }
146
+ }), ie = /* @__PURE__ */ q(ee, [["__scopeId", "data-v-df7390ef"]]);
147
+ export {
148
+ ie as _,
149
+ i as u
150
+ };