@jt-home/mfe-components 1.0.27 → 1.0.28

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.
@@ -1,760 +0,0 @@
1
- import { defineComponent as k, openBlock as O, createElementBlock as I, createElementVNode as J, render as A, h as n, computed as x, onMounted as W, onBeforeUnmount as T, ref as D, watch as V, nextTick as ae } from "vue";
2
- import { ElIcon as N } from "element-plus";
3
- /*! Element Plus Icons Vue v2.3.2 */
4
- var re = /* @__PURE__ */ k({
5
- name: "Download",
6
- __name: "download",
7
- setup(e) {
8
- return (t, a) => (O(), I("svg", {
9
- xmlns: "http://www.w3.org/2000/svg",
10
- viewBox: "0 0 1024 1024"
11
- }, [
12
- J("path", {
13
- fill: "currentColor",
14
- d: "M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64z"
15
- })
16
- ]));
17
- }
18
- }), ie = re, oe = /* @__PURE__ */ k({
19
- name: "RefreshLeft",
20
- __name: "refresh-left",
21
- setup(e) {
22
- return (t, a) => (O(), I("svg", {
23
- xmlns: "http://www.w3.org/2000/svg",
24
- viewBox: "0 0 1024 1024"
25
- }, [
26
- J("path", {
27
- fill: "currentColor",
28
- d: "M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"
29
- })
30
- ]));
31
- }
32
- }), ce = oe, se = /* @__PURE__ */ k({
33
- name: "ZoomIn",
34
- __name: "zoom-in",
35
- setup(e) {
36
- return (t, a) => (O(), I("svg", {
37
- xmlns: "http://www.w3.org/2000/svg",
38
- viewBox: "0 0 1024 1024"
39
- }, [
40
- J("path", {
41
- fill: "currentColor",
42
- d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"
43
- })
44
- ]));
45
- }
46
- }), le = se, ue = /* @__PURE__ */ k({
47
- name: "ZoomOut",
48
- __name: "zoom-out",
49
- setup(e) {
50
- return (t, a) => (O(), I("svg", {
51
- xmlns: "http://www.w3.org/2000/svg",
52
- viewBox: "0 0 1024 1024"
53
- }, [
54
- J("path", {
55
- fill: "currentColor",
56
- d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"
57
- })
58
- ]));
59
- }
60
- }), de = ue;
61
- const ve = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANgAAADYCAMAAAC+/t3fAAAAaVBMVEUAAABWapNVapKeqsLJztx3hKnGzN2yu8////9XapWcqMGps8lXapVYa5RWaZWps8lfcJjS1+KjrsVXapWapr////9sfaKrtMrV2uWBj7B4iKqWob1wgaXr7fOBj6/Ax9dhc5yhq8OKl7Wba+6tAAAAE3RSTlMAgGDuDyVLoYDe2XuXRb68cy6e4BCQEAAAAyZJREFUeNrt29tyokAUheGOQjIoeMhuCQ4e0Pd/yCE1STU4mGq7bXqzZ/23ufoqYblTqkIIIYQQQggNlM42Lzctf5nMD22bKQYVOQ30sTPt6dEO74mKXLoiCgDTi1RFbUMUBhZXluQUDKbnWxWtjMLB2pYqUjmFg8WUzSg0TL+rCKVZeJheRJj9DYWHRRnHbBSYnr+qcSsoKCyeLKcfK/emc2UqH4LFGMcVWVftTC4w/TbmhGQjwvR6RBmNAbMYx4nD7k/I1GF3ZZOH3RtHAbDhcZQAG5SJgOn1Vt0mAzYwIUJgvjJ/2OVo2pcmcoQZWehxpBGue5sJEQTryyTBeuMoCtadEFmwjkwYzIyjNJief02IONj3OAqE/ZVJhJnZj3RS1c4nld04ijiC/5EJhbUyobBWJhT2OY5CYa1MKKyVCYXpdSIUphdbobB2HIXCWplQmJGFhZUn07kyNaFgbUsx1/1tb1Jh+i1hDmu0Y+uEN4xqV9ki5Q27atfmKWtYqd1lW84wqj1kr5xhB+3RkjGMrl4yxrCm9pG984V5ytZJINjpY7hmLNki5XjdP0fGFkZ0qL1kfGEt7erzgsYY1lYefrtWsIZ5NAMMMBNg9gEGmD3sejbVnRpyjAvs5rr3DzDAAOsEmH2AAQZYJ8Ds4wJrSlN1NE3+CDYJu+5NgNkHGGCAdQLMPsAAA0zuEQyYbYABBlgnwOwDDDDAOvVhl5NJ1Fu1O6lHMGA/xQl2rPodpcBq6gfYYIABBpgJsAdiBDvX/cTAxF4egNkEWGDY5Q5s8v9onoZdR3KNC4yOg7AzOccFNvi36POJIy4wqgZgF/KIC6yporuCwNrq/nNW7ckzLjCi/bO//MEF9mCAAQYYYDwCDDAmAQYYkwADjEmAAcYkwABjEmCAMQkwwJgEGGBMAgwwJgEGGJMAA4xJgAHGJMD+B1hGE6hwgK1oAqUOsJz4lymHCuJfrpTM9SicYC/EvUw5lRD3Psde4lP29YSJG8bse+ulvZZ5uFTCV5YZl6hpXKXKs5TlL22jnlCaM7uHV7NEPam02LwwaVYkCiGEEEIIITTUH1Fqd5V0WMtQAAAAAElFTkSuQmCC", me = "data:image/png;base64,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", fe = /* @__PURE__ */ new Set(["jpg", "jpeg", "png", "gif", "webp", "bmp", "svg", "avif", "ico"]), we = /* @__PURE__ */ new Set(["mp4", "webm", "ogg", "ogv", "mov", "m4v"]), pe = /* @__PURE__ */ new Set(["mp3", "wav", "ogg", "oga", "m4a", "aac", "flac"]), he = /* @__PURE__ */ new Set(["html", "htm", "txt", "json", "xml", "csv", "md", "log"]), ge = /* @__PURE__ */ new Set([
62
- "doc",
63
- "docx",
64
- "xls",
65
- "xlsx",
66
- "ppt",
67
- "pptx",
68
- "zip",
69
- "rar",
70
- "7z"
71
- ]);
72
- let _ = null, U = null, P = null;
73
- async function ye() {
74
- return U || (U = Promise.all([
75
- import("./pdf-BmBuG7of.js"),
76
- import("./pdf.worker.min-4PI-nNLo.js")
77
- ]).then(([e, t]) => (e.GlobalWorkerOptions.workerSrc = t.default, e))), U;
78
- }
79
- function Ae(e) {
80
- return typeof e == "string" ? { url: e } : e;
81
- }
82
- function F(e) {
83
- const [t] = e.split(/[?#]/);
84
- return t ?? "";
85
- }
86
- function K(e, t) {
87
- if (t?.trim()) return t.trim();
88
- const a = F(e).split("/").filter(Boolean).pop();
89
- if (!a) return "附件预览";
90
- try {
91
- return decodeURIComponent(a);
92
- } catch {
93
- return a;
94
- }
95
- }
96
- function z(e) {
97
- return F(e).match(/\.([a-z0-9]+)$/i)?.[1]?.toLowerCase() ?? "";
98
- }
99
- function _e(e) {
100
- return e?.trim().replace(/^\./, "").toLowerCase() ?? "";
101
- }
102
- function be(e) {
103
- const t = _e(e);
104
- return fe.has(t) ? "image" : t === "pdf" ? "pdf" : we.has(t) ? "video" : pe.has(t) ? "audio" : he.has(t) ? "iframe" : ge.has(t) ? "unsupported" : "unknown";
105
- }
106
- function Q(e) {
107
- const t = e.toLowerCase().split(";")[0]?.trim() ?? "";
108
- return t.startsWith("image/") ? "image" : t === "application/pdf" ? "pdf" : t.startsWith("video/") ? "video" : t.startsWith("audio/") ? "audio" : t.startsWith("text/") ? "iframe" : "unknown";
109
- }
110
- function X(e) {
111
- if (!e.url.trim()) return "empty";
112
- if (e.mode && e.mode !== "auto") return e.mode;
113
- if (e.mimeType) {
114
- const a = Q(e.mimeType);
115
- if (a !== "unknown") return a;
116
- }
117
- const t = be(
118
- e.extension || z(e.name || "") || z(e.url)
119
- );
120
- return t !== "unknown" ? t : "unknown";
121
- }
122
- async function je(e) {
123
- try {
124
- const a = (await fetch(e, { method: "HEAD" })).headers.get("content-type") ?? "";
125
- return Q(a);
126
- } catch {
127
- return "unknown";
128
- }
129
- }
130
- async function Z(e) {
131
- const t = await fetch(e);
132
- if (!t.ok) throw new Error(`fetch failed: ${t.status}`);
133
- return t.blob();
134
- }
135
- function Ee(e, t) {
136
- const a = z(t);
137
- return a === "doc" || a === "docx" ? "W" : a === "xls" || a === "xlsx" ? "X" : a === "ppt" || a === "pptx" ? "P" : a === "zip" || a === "rar" || a === "7z" ? "ZIP" : e === "pdf" ? "PDF" : "FILE";
138
- }
139
- function $(e, t, a) {
140
- return n(
141
- "button",
142
- {
143
- class: a,
144
- type: "button",
145
- onClick: () => {
146
- te(e, t);
147
- }
148
- },
149
- [
150
- n(N, { class: "jt-attachment-preview-service__download-icon" }, () => n(ie)),
151
- n("span", { class: "jt-attachment-preview-service__download-text" }, "下载")
152
- ]
153
- );
154
- }
155
- function R(e) {
156
- return e === "image" || e === "pdf";
157
- }
158
- function ee(e) {
159
- return n("div", { class: "jt-attachment-preview-service__preview-fallback" }, [
160
- n("img", {
161
- class: "jt-attachment-preview-service__preview-fallback-icon",
162
- src: e.icon,
163
- alt: ""
164
- }),
165
- n("div", { class: "jt-attachment-preview-service__unsupported-text" }, "暂不支持预览此类型的文件"),
166
- n("div", { class: "jt-attachment-preview-service__file-name", title: e.name }, e.name)
167
- ]);
168
- }
169
- function H(e, t) {
170
- const a = document.createElement("a");
171
- a.href = e, a.download = t, a.style.display = "none", document.body.appendChild(a), a.click(), a.remove();
172
- }
173
- async function te(e, t) {
174
- try {
175
- const a = await Z(e), i = URL.createObjectURL(a);
176
- H(i, t), URL.revokeObjectURL(i);
177
- } catch {
178
- H(e, t);
179
- }
180
- }
181
- const xe = k({
182
- name: "JtAttachmentPreviewPdfCanvas",
183
- props: {
184
- url: {
185
- type: String,
186
- required: !0
187
- },
188
- name: {
189
- type: String,
190
- required: !0
191
- },
192
- downloadName: {
193
- type: String,
194
- required: !0
195
- },
196
- downloadable: {
197
- type: Boolean,
198
- required: !0
199
- }
200
- },
201
- emits: {
202
- previewLoad: (e) => e instanceof Event,
203
- previewError: (e) => e instanceof Event
204
- },
205
- setup(e, { emit: t }) {
206
- const a = D("loading"), i = D([]), r = D([]), s = /* @__PURE__ */ new Map(), l = D("");
207
- let d = null, h = [], v = 0;
208
- async function m(o, u) {
209
- if (!u) return null;
210
- const w = typeof u == "string" ? await o.getDestination(u) : u;
211
- return !Array.isArray(w) || !w[0] ? null : await o.getPageIndex(w[0]) + 1;
212
- }
213
- async function L(o, u, w = 0) {
214
- if (!u?.length) return [];
215
- const j = [];
216
- for (const E of u) {
217
- const C = await m(o, E.dest);
218
- j.push({
219
- title: E.title || "未命名标题",
220
- pageNumber: C,
221
- level: w
222
- });
223
- const g = await L(o, E.items, w + 1);
224
- j.push(...g);
225
- }
226
- return j;
227
- }
228
- function p() {
229
- v += 1;
230
- for (const o of h)
231
- o.cancel();
232
- h = [], d?.destroy(), d = null, s.clear();
233
- }
234
- async function b() {
235
- p();
236
- const o = v;
237
- a.value = "loading", l.value = "", i.value = [], r.value = [];
238
- try {
239
- const u = await ye();
240
- if (o !== v) return;
241
- d = u.getDocument({ url: e.url });
242
- const w = await d.promise;
243
- if (o !== v) return;
244
- i.value = Array.from({ length: w.numPages }, (C, g) => g + 1), r.value = await L(w, await w.getOutline()), await ae();
245
- const j = s.values().next().value, E = Math.max((j?.parentElement?.clientWidth ?? 800) - 32, 320);
246
- for (const C of i.value) {
247
- if (o !== v) return;
248
- const g = await w.getPage(C), y = s.get(C), M = y?.getContext("2d");
249
- if (!y || !M) continue;
250
- const G = g.getViewport({ scale: 1 }), S = Math.min(E / G.width, 2), c = g.getViewport({ scale: S }), B = window.devicePixelRatio || 1;
251
- y.width = Math.floor(c.width * B), y.height = Math.floor(c.height * B), y.style.width = `${Math.floor(c.width)}px`, y.style.height = `${Math.floor(c.height)}px`, M.setTransform(B, 0, 0, B, 0, 0);
252
- const q = g.render({
253
- canvas: y,
254
- canvasContext: M,
255
- viewport: c
256
- });
257
- h.push(q), await q.promise;
258
- }
259
- if (o !== v) return;
260
- a.value = "ready", t("previewLoad", new Event("load"));
261
- } catch (u) {
262
- if (o !== v) return;
263
- a.value = "error", l.value = u instanceof Error ? u.message : "PDF 加载失败", t("previewError", new Event("error"));
264
- }
265
- }
266
- V(() => e.url, b, { immediate: !0 }), T(p);
267
- function f(o) {
268
- if (!o) return;
269
- s.get(o)?.scrollIntoView({ behavior: "smooth", block: "start" });
270
- }
271
- return () => n("div", { class: "jt-attachment-preview-service__pdf-viewer" }, [
272
- a.value === "loading" ? n("div", { class: "jt-attachment-preview-service__pdf-state" }, "PDF 加载中...") : null,
273
- a.value === "error" ? n("div", { class: "jt-attachment-preview-service__pdf-state" }, [
274
- ee({
275
- icon: me,
276
- name: e.name
277
- })
278
- ]) : null,
279
- null,
280
- null,
281
- n(
282
- "div",
283
- {
284
- class: [
285
- "jt-attachment-preview-service__pdf-layout",
286
- a.value !== "ready" ? "jt-attachment-preview-service__pdf-layout--hidden" : ""
287
- ]
288
- },
289
- [
290
- r.value.length ? n("aside", { class: "jt-attachment-preview-service__pdf-outline" }, [
291
- n("div", { class: "jt-attachment-preview-service__pdf-outline-title" }, "目录"),
292
- n(
293
- "div",
294
- { class: "jt-attachment-preview-service__pdf-outline-list" },
295
- r.value.map(
296
- (o, u) => n(
297
- "button",
298
- {
299
- key: `${o.title}-${u}`,
300
- class: "jt-attachment-preview-service__pdf-outline-item",
301
- style: { paddingLeft: `${12 + o.level * 14}px` },
302
- type: "button",
303
- disabled: !o.pageNumber,
304
- title: o.title,
305
- onClick: () => f(o.pageNumber)
306
- },
307
- o.title
308
- )
309
- )
310
- )
311
- ]) : null,
312
- n(
313
- "div",
314
- { class: "jt-attachment-preview-service__pdf-pages" },
315
- i.value.map(
316
- (o) => n("canvas", {
317
- key: o,
318
- ref: (u) => {
319
- u instanceof HTMLCanvasElement && s.set(o, u);
320
- },
321
- class: "jt-attachment-preview-service__pdf-page"
322
- })
323
- )
324
- )
325
- ]
326
- )
327
- ]);
328
- }
329
- }), De = k({
330
- name: "JtAttachmentPreviewImageTransform",
331
- props: {
332
- url: {
333
- type: String,
334
- required: !0
335
- },
336
- name: {
337
- type: String,
338
- required: !0
339
- },
340
- downloadName: {
341
- type: String,
342
- required: !0
343
- },
344
- downloadable: {
345
- type: Boolean,
346
- required: !0
347
- },
348
- fit: {
349
- type: String,
350
- default: "contain"
351
- }
352
- },
353
- emits: {
354
- previewLoad: (e) => e instanceof Event,
355
- previewError: (e) => e instanceof Event
356
- },
357
- setup(e, { emit: t }) {
358
- const a = D(null), i = D("ready"), r = D(1), s = D(!1);
359
- let l = 0, d = 0, h = 0, v = 0, m = 0, L = 0, p = 0;
360
- const b = x(() => ({
361
- "--jt-attachment-preview-service-image-fit": e.fit,
362
- transform: `translate(${l}px, ${d}px) scale(${r.value})`
363
- }));
364
- function f() {
365
- a.value && (a.value.style.transform = `translate(${l}px, ${d}px) scale(${r.value})`);
366
- }
367
- function o() {
368
- p || (p = window.requestAnimationFrame(() => {
369
- p = 0, f();
370
- }));
371
- }
372
- function u(c) {
373
- r.value = Math.min(Math.max(Number(c.toFixed(2)), 0.2), 5), r.value <= 1 && (l = 0, d = 0), f();
374
- }
375
- function w() {
376
- u(r.value + 0.2);
377
- }
378
- function j() {
379
- const c = Math.max(Number((r.value - 0.2).toFixed(2)), 0.2);
380
- r.value = c, c <= 1 && (l = 0, d = 0), f();
381
- }
382
- function E() {
383
- l = 0, d = 0, u(1);
384
- }
385
- function C(c) {
386
- i.value = "ready", t("previewLoad", c);
387
- }
388
- function g(c) {
389
- i.value = "error", t("previewError", c);
390
- }
391
- function y(c) {
392
- r.value <= 1 || (c.preventDefault(), s.value = !0, h = c.clientX, v = c.clientY, m = l, L = d, window.addEventListener("pointermove", M), window.addEventListener("pointerup", G, { once: !0 }));
393
- }
394
- function M(c) {
395
- s.value && (l = m + c.clientX - h, d = L + c.clientY - v, o());
396
- }
397
- function G() {
398
- s.value = !1, window.removeEventListener("pointermove", M);
399
- }
400
- function S(c) {
401
- c.preventDefault(), u(r.value + (c.deltaY < 0 ? 0.1 : -0.1));
402
- }
403
- return W(f), V(() => e.url, () => {
404
- i.value = "ready", E();
405
- }), T(() => {
406
- window.removeEventListener("pointermove", M), p && window.cancelAnimationFrame(p);
407
- }), () => n("div", { class: "jt-attachment-preview-service__image-viewer" }, i.value === "error" ? ee({
408
- icon: ve,
409
- name: e.name
410
- }) : [
411
- n("img", {
412
- ref: a,
413
- class: [
414
- "jt-attachment-preview-service__media",
415
- "jt-attachment-preview-service__image",
416
- r.value > 1 ? "jt-attachment-preview-service__image--draggable" : "",
417
- s.value ? "jt-attachment-preview-service__image--dragging" : ""
418
- ],
419
- src: e.url,
420
- alt: e.name,
421
- style: b.value,
422
- onLoad: C,
423
- onError: g,
424
- onPointerdown: y,
425
- onWheel: S,
426
- onDragstart: (c) => c.preventDefault(),
427
- draggable: !1
428
- }),
429
- n("div", { class: "jt-attachment-preview-service__image-toolbar" }, [
430
- n(
431
- "button",
432
- {
433
- class: "jt-attachment-preview-service__image-tool",
434
- type: "button",
435
- title: "缩小",
436
- onClick: j
437
- },
438
- [n(N, () => n(de))]
439
- ),
440
- n("span", { class: "jt-attachment-preview-service__image-scale" }, `${Math.round(r.value * 100)}%`),
441
- n(
442
- "button",
443
- {
444
- class: "jt-attachment-preview-service__image-tool",
445
- type: "button",
446
- title: "放大",
447
- onClick: w
448
- },
449
- [n(N, () => n(le))]
450
- ),
451
- n(
452
- "button",
453
- {
454
- class: "jt-attachment-preview-service__image-tool",
455
- type: "button",
456
- title: "复位",
457
- onClick: E
458
- },
459
- [n(N, () => n(ce))]
460
- )
461
- ])
462
- ]);
463
- }
464
- }), ke = k({
465
- name: "JtAttachmentPreviewService",
466
- props: {
467
- options: {
468
- type: Object,
469
- required: !0
470
- },
471
- onDestroy: {
472
- type: Function,
473
- required: !0
474
- }
475
- },
476
- setup(e) {
477
- const t = x(() => K(e.options.url, e.options.name)), a = x(() => e.options.downloadName || t.value), i = x(() => X(e.options)), r = x(() => Ee(i.value, e.options.url)), s = x(() => ({
478
- zIndex: e.options.zIndex ?? 3e3,
479
- "--jt-attachment-preview-service-image-fit": e.options.fit ?? "contain"
480
- }));
481
- function l() {
482
- e.options.onClose?.(), e.onDestroy();
483
- }
484
- function d(m) {
485
- m.key === "Escape" && e.options.closeOnPressEscape !== !1 && l();
486
- }
487
- function h(m) {
488
- e.options.onLoad?.(m);
489
- }
490
- function v(m) {
491
- e.options.onError?.(m);
492
- }
493
- return W(() => {
494
- document.addEventListener("keydown", d), document.body.classList.add("jt-attachment-preview-service-lock");
495
- }), T(() => {
496
- document.removeEventListener("keydown", d), document.body.classList.remove("jt-attachment-preview-service-lock");
497
- }), () => {
498
- const m = e.options.downloadable === !1 ? [] : [$(e.options.url, a.value, "jt-attachment-preview-service__top-download")];
499
- return n("div", { class: "jt-attachment-preview-service", style: s.value }, [
500
- n("div", { class: "jt-attachment-preview-service__modal" }, [
501
- n("div", { class: "jt-attachment-preview-service__header" }, [
502
- n("div", { class: "jt-attachment-preview-service__filename", title: t.value }, t.value),
503
- n("div", { class: "jt-attachment-preview-service__header-actions" }, [
504
- ...m,
505
- n(
506
- "button",
507
- {
508
- class: "jt-attachment-preview-service__close",
509
- type: "button",
510
- "aria-label": "关闭",
511
- onClick: l
512
- },
513
- "×"
514
- )
515
- ])
516
- ]),
517
- n("div", { class: "jt-attachment-preview-service__body" }, [
518
- Le({
519
- type: i.value,
520
- url: e.options.url,
521
- name: t.value,
522
- downloadName: a.value,
523
- sandbox: e.options.sandbox,
524
- iconText: r.value,
525
- downloadable: e.options.downloadable !== !1,
526
- onLoad: h,
527
- onError: v
528
- })
529
- ])
530
- ])
531
- ]);
532
- };
533
- }
534
- }), Y = k({
535
- name: "JtAttachmentPreviewDetectingService",
536
- props: {
537
- options: {
538
- type: Object,
539
- required: !0
540
- },
541
- onDestroy: {
542
- type: Function,
543
- required: !0
544
- },
545
- title: {
546
- type: String,
547
- default: "正在识别文件类型"
548
- },
549
- desc: {
550
- type: String,
551
- default: "请稍候,识别完成后将自动预览或下载"
552
- },
553
- spinning: {
554
- type: Boolean,
555
- default: !0
556
- }
557
- },
558
- setup(e) {
559
- const t = x(() => K(e.options.url, e.options.name)), a = x(() => ({
560
- zIndex: e.options.zIndex ?? 3e3
561
- }));
562
- function i() {
563
- e.options.onClose?.(), e.onDestroy();
564
- }
565
- function r(s) {
566
- s.key === "Escape" && e.options.closeOnPressEscape !== !1 && i();
567
- }
568
- return W(() => {
569
- document.addEventListener("keydown", r), document.body.classList.add("jt-attachment-preview-service-lock");
570
- }), T(() => {
571
- document.removeEventListener("keydown", r), document.body.classList.remove("jt-attachment-preview-service-lock");
572
- }), () => n("div", { class: "jt-attachment-preview-service", style: a.value }, [
573
- n("div", { class: "jt-attachment-preview-service__modal" }, [
574
- n("div", { class: "jt-attachment-preview-service__header" }, [
575
- n("div", { class: "jt-attachment-preview-service__filename", title: t.value }, t.value),
576
- n("div", { class: "jt-attachment-preview-service__header-actions" }, [
577
- n(
578
- "button",
579
- {
580
- class: "jt-attachment-preview-service__close",
581
- type: "button",
582
- "aria-label": "关闭",
583
- onClick: i
584
- },
585
- "×"
586
- )
587
- ])
588
- ]),
589
- n("div", { class: "jt-attachment-preview-service__body" }, [
590
- n("div", { class: "jt-attachment-preview-service__detecting" }, [
591
- e.spinning ? n("span", { class: "jt-attachment-preview-service__detecting-spinner" }) : null,
592
- n("span", { class: "jt-attachment-preview-service__detecting-title" }, e.title),
593
- n("span", { class: "jt-attachment-preview-service__detecting-desc" }, e.desc)
594
- ])
595
- ])
596
- ])
597
- ]);
598
- }
599
- });
600
- function Le(e) {
601
- return e.type === "empty" ? n("div", { class: "jt-attachment-preview-service__empty" }, "暂无附件") : e.type === "image" ? n(De, {
602
- url: e.url,
603
- name: e.name,
604
- downloadName: e.downloadName,
605
- downloadable: e.downloadable,
606
- onPreviewLoad: e.onLoad,
607
- onPreviewError: e.onError
608
- }) : e.type === "video" ? n("video", {
609
- class: "jt-attachment-preview-service__media",
610
- src: e.url,
611
- controls: !0,
612
- onLoadeddata: e.onLoad,
613
- onError: e.onError
614
- }) : e.type === "audio" ? n("audio", {
615
- class: "jt-attachment-preview-service__audio",
616
- src: e.url,
617
- controls: !0,
618
- onLoadeddata: e.onLoad,
619
- onError: e.onError
620
- }) : e.type === "pdf" ? n(xe, {
621
- url: e.url,
622
- name: e.name,
623
- downloadName: e.downloadName,
624
- downloadable: e.downloadable,
625
- onPreviewLoad: e.onLoad,
626
- onPreviewError: e.onError
627
- }) : e.type === "iframe" ? n("iframe", {
628
- class: "jt-attachment-preview-service__iframe",
629
- src: e.url,
630
- title: e.name,
631
- sandbox: e.sandbox || void 0,
632
- onLoad: e.onLoad
633
- }) : n("div", { class: "jt-attachment-preview-service__unsupported" }, [
634
- n("div", { class: "jt-attachment-preview-service__file-card" }, [
635
- n("div", { class: "jt-attachment-preview-service__file-icon" }, e.iconText),
636
- n("div", { class: "jt-attachment-preview-service__unsupported-text" }, "暂不支持预览此类型的文件")
637
- ]),
638
- n("div", { class: "jt-attachment-preview-service__file-name", title: e.name }, e.name),
639
- e.downloadable ? $(e.url, e.downloadName, "jt-attachment-preview-service__primary-download") : null
640
- ]);
641
- }
642
- function ne(e) {
643
- if (typeof document > "u")
644
- return { close: () => {
645
- } };
646
- _?.close();
647
- const t = Ae(e), a = t.downloadName || K(t.url, t.name);
648
- let i = !1, r = null, s = null;
649
- const l = () => {
650
- i = !0, r && (A(null, r), r.remove(), r = null), s && (URL.revokeObjectURL(s), s = null), _?.close === l && (_ = null);
651
- };
652
- function d() {
653
- i || (r || (r = document.createElement("div"), document.body.appendChild(r)), A(n(ke, { options: t, onDestroy: l }), r));
654
- }
655
- function h() {
656
- i || (r || (r = document.createElement("div"), document.body.appendChild(r)), A(n(Y, { options: t, onDestroy: l }), r));
657
- }
658
- function v() {
659
- r && (A(null, r), r.remove(), r = null);
660
- }
661
- function m() {
662
- i || te(t.url, a);
663
- }
664
- function L(b) {
665
- if (i) return;
666
- const f = URL.createObjectURL(b);
667
- H(f, a), URL.revokeObjectURL(f);
668
- }
669
- const p = X(t);
670
- return R(p) ? d() : p === "unknown" ? (h(), je(t.url).then(async (b) => {
671
- if (!i) {
672
- if (R(b)) {
673
- t.mode = b, d();
674
- return;
675
- }
676
- try {
677
- const f = await Z(t.url), o = Q(f.type);
678
- if (R(o)) {
679
- s = URL.createObjectURL(f), t.url = s, t.mode = o, d();
680
- return;
681
- }
682
- v(), L(f);
683
- } catch {
684
- v(), m();
685
- }
686
- }
687
- })) : m(), _ = { close: l }, _;
688
- }
689
- function Ce(e) {
690
- P = e;
691
- }
692
- function Me(e) {
693
- if (typeof document > "u")
694
- return { close: () => {
695
- } };
696
- _?.close();
697
- let t = !1, a = document.createElement("div");
698
- document.body.appendChild(a);
699
- const i = () => {
700
- t = !0, a && (A(null, a), a.remove(), a = null), _?.close === i && (_ = null);
701
- }, r = { close: i };
702
- return _ = r, P ? (A(
703
- n(Y, {
704
- options: { url: "", name: "附件预览" },
705
- title: "正在获取文件信息",
706
- desc: "请稍候,获取完成后将自动预览或下载",
707
- spinning: !0,
708
- onDestroy: i
709
- }),
710
- a
711
- ), P.request(e).then((s) => {
712
- if (t) return;
713
- const l = P?.mapResponse(s, e);
714
- if (!l?.url) {
715
- A(
716
- n(Y, {
717
- options: { url: "", name: "附件预览" },
718
- title: "文件信息缺少 URL",
719
- desc: "请检查 mapResponse 是否返回了 url 字段",
720
- spinning: !1,
721
- onDestroy: i
722
- }),
723
- a
724
- );
725
- return;
726
- }
727
- ne(l);
728
- }).catch((s) => {
729
- if (t) return;
730
- const l = s instanceof Error ? s.message : "接口请求失败";
731
- A(
732
- n(Y, {
733
- options: { url: "", name: "附件预览" },
734
- title: "文件信息获取失败",
735
- desc: l,
736
- spinning: !1,
737
- onDestroy: i
738
- }),
739
- a
740
- );
741
- }), r) : (A(
742
- n(Y, {
743
- options: { url: "", name: "附件预览" },
744
- title: "附件预览未初始化",
745
- desc: "请先调用 setupJtAttachmentPreview 注册请求配置",
746
- spinning: !1,
747
- onDestroy: i
748
- }),
749
- a
750
- ), r);
751
- }
752
- const Ne = Object.assign(ne, {
753
- openByParams: Me,
754
- setup: Ce
755
- });
756
- export {
757
- Ne as JtAttachmentPreview,
758
- Me as JtAttachmentPreviewByParams,
759
- Ce as setupJtAttachmentPreview
760
- };