vant-vtk 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/es/Area.js +193 -0
  2. package/dist/es/Area.js.map +1 -0
  3. package/dist/es/Radio.css +1 -0
  4. package/dist/es/Radio.js +79 -0
  5. package/dist/es/Radio.js.map +1 -0
  6. package/dist/es/Uploader.css +1 -0
  7. package/dist/es/Uploader.js +128 -0
  8. package/dist/es/Uploader.js.map +1 -0
  9. package/dist/es/_plugin-vue_export-helper-CHgC5LLL.js +10 -0
  10. package/dist/es/_plugin-vue_export-helper-CHgC5LLL.js.map +1 -0
  11. package/dist/es/checkbox.css +1 -0
  12. package/dist/es/checkbox.js +86 -0
  13. package/dist/es/checkbox.js.map +1 -0
  14. package/dist/es/index.js +35 -0
  15. package/dist/es/index.js.map +1 -0
  16. package/dist/es/preview.css +1 -0
  17. package/dist/es/preview.js +192 -0
  18. package/dist/es/preview.js.map +1 -0
  19. package/dist/lib/Area.js +2 -0
  20. package/dist/lib/Area.js.map +1 -0
  21. package/dist/lib/Radio.css +1 -0
  22. package/dist/lib/Radio.js +2 -0
  23. package/dist/lib/Radio.js.map +1 -0
  24. package/dist/lib/Uploader.css +1 -0
  25. package/dist/lib/Uploader.js +2 -0
  26. package/dist/lib/Uploader.js.map +1 -0
  27. package/dist/lib/_plugin-vue_export-helper-BHFhmbuH.cjs +2 -0
  28. package/dist/lib/_plugin-vue_export-helper-BHFhmbuH.cjs.map +1 -0
  29. package/dist/lib/checkbox.css +1 -0
  30. package/dist/lib/checkbox.js +2 -0
  31. package/dist/lib/checkbox.js.map +1 -0
  32. package/dist/lib/index.js +2 -0
  33. package/dist/lib/index.js.map +1 -0
  34. package/dist/lib/preview.css +1 -0
  35. package/dist/lib/preview.js +2 -0
  36. package/dist/lib/preview.js.map +1 -0
  37. package/dist/style.css +1 -1
  38. package/dist/vant-vtk.es.js +349 -337
  39. package/dist/vant-vtk.es.js.map +1 -1
  40. package/dist/vant-vtk.umd.js +1 -1
  41. package/dist/vant-vtk.umd.js.map +1 -1
  42. package/package.json +1 -1
  43. package/types/index.d.ts +1 -0
@@ -0,0 +1,192 @@
1
+ import { ref as p, computed as V, watch as y, resolveComponent as b, openBlock as f, createBlock as $, withCtx as m, createElementVNode as a, toDisplayString as _, createVNode as n, createElementBlock as x, createTextVNode as w, unref as j, createCommentVNode as A } from "vue";
2
+ import O from "vue-pdf-embed";
3
+ import { _ as U } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
+ const q = { class: "file-preview-container" }, G = { class: "file-header" }, H = { class: "file-title" }, J = { class: "file-content" }, K = {
5
+ key: 0,
6
+ class: "image-preview"
7
+ }, M = { class: "image-footer" }, Q = { class: "file-info" }, X = {
8
+ key: 1,
9
+ class: "pdf-preview"
10
+ }, Y = {
11
+ key: 1,
12
+ class: "pdf-placeholder"
13
+ }, Z = { class: "pdf-footer" }, ee = { class: "page-info" }, le = { class: "footer" }, te = /* @__PURE__ */ Object.assign({
14
+ name: "VtkPreview"
15
+ }, {
16
+ __name: "index",
17
+ props: {
18
+ modelValue: {
19
+ type: Boolean,
20
+ default: !1
21
+ },
22
+ files: {
23
+ type: Array,
24
+ default: () => []
25
+ },
26
+ startIndex: {
27
+ type: Number,
28
+ default: 0
29
+ }
30
+ },
31
+ emits: ["update:modelValue", "close"],
32
+ setup(i, { emit: D }) {
33
+ const d = i, F = D, v = p(d.modelValue), t = p(d.startIndex), s = p(1), u = p(null), c = p(0), k = V(() => d.files.map((e, l) => {
34
+ if (typeof e == "string") {
35
+ const g = e.toLowerCase().endsWith(".pdf");
36
+ return {
37
+ name: g ? `文档${l + 1}.pdf` : `图片${l + 1}`,
38
+ url: e,
39
+ type: g ? "pdf" : "image"
40
+ };
41
+ }
42
+ return e;
43
+ })), o = V(() => k.value[t.value] || null), P = V(() => {
44
+ if (!o.value) return null;
45
+ const e = o.value.url || o.value;
46
+ return typeof e == "string" ? e.toLowerCase().endsWith(".pdf") ? "pdf" : "image" : o.value.type || "image";
47
+ });
48
+ y(
49
+ () => d.modelValue,
50
+ (e) => {
51
+ v.value = e, e && k.value.length > 0 && (t.value = d.startIndex, C());
52
+ }
53
+ ), y(
54
+ () => d.startIndex,
55
+ (e) => {
56
+ t.value = e, C();
57
+ }
58
+ ), y(v, (e) => {
59
+ F("update:modelValue", e), e || B();
60
+ }), y(t, () => {
61
+ s.value = 1, c.value = 0, C();
62
+ });
63
+ const C = () => {
64
+ const e = o.value;
65
+ e && (P.value === "pdf" ? u.value = e.url || e : u.value = null);
66
+ }, E = (e) => {
67
+ c.value = e.numPages || 0;
68
+ }, R = () => {
69
+ console.log("PDF rendered successfully");
70
+ }, I = () => {
71
+ t.value > 0 && t.value--;
72
+ }, N = () => {
73
+ t.value < k.value.length - 1 && t.value++;
74
+ }, B = () => {
75
+ v.value = !1, u.value = null, s.value = 1, c.value = 0, F("close");
76
+ };
77
+ return (e, l) => {
78
+ const g = b("van-icon"), S = b("van-image"), r = b("van-button"), T = b("van-popup");
79
+ return f(), $(T, {
80
+ show: v.value,
81
+ "onUpdate:show": l[2] || (l[2] = (h) => v.value = h),
82
+ position: "bottom",
83
+ style: { height: "100vh" }
84
+ }, {
85
+ default: m(() => {
86
+ var h, L;
87
+ return [
88
+ a("div", q, [
89
+ a("div", G, [
90
+ a("div", H, _(((h = o.value) == null ? void 0 : h.name) || "文件预览"), 1),
91
+ n(g, {
92
+ name: "cross",
93
+ size: "20",
94
+ onClick: B
95
+ })
96
+ ]),
97
+ a("div", J, [
98
+ P.value === "image" ? (f(), x("div", K, [
99
+ n(S, {
100
+ src: (L = o.value) == null ? void 0 : L.url,
101
+ fit: "contain",
102
+ class: "preview-image"
103
+ }, null, 8, ["src"]),
104
+ a("div", M, [
105
+ n(r, {
106
+ size: "small",
107
+ disabled: t.value <= 0,
108
+ onClick: I
109
+ }, {
110
+ default: m(() => [...l[3] || (l[3] = [
111
+ w("上一个", -1)
112
+ ])]),
113
+ _: 1
114
+ }, 8, ["disabled"]),
115
+ a("span", Q, _(t.value + 1) + " / " + _(i.files.length), 1),
116
+ n(r, {
117
+ size: "small",
118
+ disabled: t.value >= i.files.length - 1,
119
+ onClick: N
120
+ }, {
121
+ default: m(() => [...l[4] || (l[4] = [
122
+ w("下一个", -1)
123
+ ])]),
124
+ _: 1
125
+ }, 8, ["disabled"])
126
+ ])
127
+ ])) : P.value === "pdf" ? (f(), x("div", X, [
128
+ u.value ? (f(), $(j(O), {
129
+ key: 0,
130
+ source: u.value,
131
+ page: s.value,
132
+ class: "pdf-embed-preview",
133
+ onRendered: R,
134
+ onLoaded: E
135
+ }, null, 8, ["source", "page"])) : (f(), x("div", Y, "请选择PDF文件")),
136
+ a("div", Z, [
137
+ n(r, {
138
+ size: "small",
139
+ disabled: s.value <= 1,
140
+ onClick: l[0] || (l[0] = (W) => s.value--)
141
+ }, {
142
+ default: m(() => [...l[5] || (l[5] = [
143
+ w("上一页", -1)
144
+ ])]),
145
+ _: 1
146
+ }, 8, ["disabled"]),
147
+ a("span", ee, "第 " + _(s.value) + " / " + _(c.value || "?") + " 页", 1),
148
+ n(r, {
149
+ size: "small",
150
+ disabled: !u.value || s.value >= c.value,
151
+ onClick: l[1] || (l[1] = (W) => s.value++)
152
+ }, {
153
+ default: m(() => [...l[6] || (l[6] = [
154
+ w("下一页", -1)
155
+ ])]),
156
+ _: 1
157
+ }, 8, ["disabled"])
158
+ ])
159
+ ])) : A("", !0),
160
+ a("div", le, [
161
+ n(r, {
162
+ disabled: t.value <= 0,
163
+ onClick: I,
164
+ icon: "arrow-left",
165
+ type: "primary",
166
+ round: ""
167
+ }, null, 8, ["disabled"]),
168
+ n(r, {
169
+ disabled: t.value >= i.files.length - 1,
170
+ onClick: N,
171
+ icon: "arrow",
172
+ type: "primary",
173
+ round: ""
174
+ }, null, 8, ["disabled"])
175
+ ])
176
+ ])
177
+ ])
178
+ ];
179
+ }),
180
+ _: 1
181
+ }, 8, ["show"]);
182
+ };
183
+ }
184
+ }), z = /* @__PURE__ */ U(te, [["__scopeId", "data-v-1ad2c749"]]);
185
+ z.install = (i) => {
186
+ i.component(z.name || "VtkPreview", z);
187
+ };
188
+ export {
189
+ z as Preview,
190
+ z as default
191
+ };
192
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sources":["../../packages/preview/index.vue","../../packages/preview/index.js"],"sourcesContent":["<template>\r\n\t<van-popup v-model:show=\"showPopup\" position=\"bottom\" :style=\"{ height: '100vh' }\">\r\n\t\t<div class=\"file-preview-container\">\r\n\t\t\t<div class=\"file-header\">\r\n\t\t\t\t<div class=\"file-title\">{{ currentFile?.name || \"文件预览\" }}</div>\r\n\t\t\t\t<van-icon name=\"cross\" size=\"20\" @click=\"handleClose\" />\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"file-content\">\r\n\t\t\t\t<div v-if=\"currentType === 'image'\" class=\"image-preview\">\r\n\t\t\t\t\t<van-image :src=\"currentFile?.url\" fit=\"contain\" class=\"preview-image\" />\r\n\t\t\t\t\t<div class=\"image-footer\">\r\n\t\t\t\t\t\t<van-button size=\"small\" :disabled=\"currentIndex <= 0\" @click=\"prevFile\">上一个</van-button>\r\n\t\t\t\t\t\t<span class=\"file-info\">{{ currentIndex + 1 }} / {{ files.length }}</span>\r\n\t\t\t\t\t\t<van-button size=\"small\" :disabled=\"currentIndex >= files.length - 1\" @click=\"nextFile\">下一个</van-button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div v-else-if=\"currentType === 'pdf'\" class=\"pdf-preview\">\r\n\t\t\t\t\t<VuePdfEmbed v-if=\"pdfSource\" :source=\"pdfSource\" :page=\"currentPage\" class=\"pdf-embed-preview\" @rendered=\"handlePdfRendered\" @loaded=\"handlePdfLoaded\" />\r\n\t\t\t\t\t<div v-else class=\"pdf-placeholder\">请选择PDF文件</div>\r\n\t\t\t\t\t<div class=\"pdf-footer\">\r\n\t\t\t\t\t\t<van-button size=\"small\" :disabled=\"currentPage <= 1\" @click=\"currentPage--\">上一页</van-button>\r\n\t\t\t\t\t\t<span class=\"page-info\">第 {{ currentPage }} / {{ totalPages || \"?\" }} 页</span>\r\n\t\t\t\t\t\t<van-button size=\"small\" :disabled=\"!pdfSource || currentPage >= totalPages\" @click=\"currentPage++\">下一页</van-button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div class=\"footer\">\r\n\t\t\t\t\t<van-button :disabled=\"currentIndex <= 0\" @click=\"prevFile\" icon=\"arrow-left\" type=\"primary\" round />\r\n\t\t\t\t\t<van-button :disabled=\"currentIndex >= files.length - 1\" @click=\"nextFile\" icon=\"arrow\" type=\"primary\" round />\r\n\t\t\t\t\t<!-- <van-button size=\"small\" :disabled=\"currentIndex <= 0\" @click=\"prevFile\">上一个</van-button>\r\n <span class=\"file-info\">{{ currentIndex + 1 }} / {{ files.length }}</span>\r\n <van-button size=\"small\" :disabled=\"currentIndex >= files.length - 1\" @click=\"nextFile\">下一个</van-button> -->\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</van-popup>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n\tname: \"VtkPreview\",\r\n});\r\nimport { ref, watch, computed } from \"vue\";\r\nimport VuePdfEmbed from \"vue-pdf-embed\";\r\n\r\nconst props = defineProps({\r\n\tmodelValue: {\r\n\t\ttype: Boolean,\r\n\t\tdefault: false,\r\n\t},\r\n\tfiles: {\r\n\t\ttype: Array,\r\n\t\tdefault: () => [],\r\n\t},\r\n\tstartIndex: {\r\n\t\ttype: Number,\r\n\t\tdefault: 0,\r\n\t},\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\", \"close\"]);\r\n\r\nconst showPopup = ref(props.modelValue);\r\nconst currentIndex = ref(props.startIndex);\r\nconst currentPage = ref(1);\r\nconst pdfSource = ref(null);\r\nconst totalPages = ref(0);\r\n\r\nconst normalizedFiles = computed(() => {\r\n\treturn props.files.map((file, index) => {\r\n\t\tif (typeof file === \"string\") {\r\n\t\t\tconst isPdf = file.toLowerCase().endsWith(\".pdf\");\r\n\t\t\treturn {\r\n\t\t\t\tname: isPdf ? `文档${index + 1}.pdf` : `图片${index + 1}`,\r\n\t\t\t\turl: file,\r\n\t\t\t\ttype: isPdf ? \"pdf\" : \"image\",\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn file;\r\n\t});\r\n});\r\n\r\nconst currentFile = computed(() => {\r\n\treturn normalizedFiles.value[currentIndex.value] || null;\r\n});\r\n\r\nconst currentType = computed(() => {\r\n\tif (!currentFile.value) return null;\r\n\tconst url = currentFile.value.url || currentFile.value;\r\n\tif (typeof url === \"string\") {\r\n\t\treturn url.toLowerCase().endsWith(\".pdf\") ? \"pdf\" : \"image\";\r\n\t}\r\n\treturn currentFile.value.type || \"image\";\r\n});\r\n\r\nwatch(\r\n\t() => props.modelValue,\r\n\t(val) => {\r\n\t\tshowPopup.value = val;\r\n\t\tif (val && normalizedFiles.value.length > 0) {\r\n\t\t\tcurrentIndex.value = props.startIndex;\r\n\t\t\tupdatePreview();\r\n\t\t}\r\n\t},\r\n);\r\n\r\nwatch(\r\n\t() => props.startIndex,\r\n\t(val) => {\r\n\t\tcurrentIndex.value = val;\r\n\t\tupdatePreview();\r\n\t},\r\n);\r\n\r\nwatch(showPopup, (val) => {\r\n\temit(\"update:modelValue\", val);\r\n\tif (!val) {\r\n\t\thandleClose();\r\n\t}\r\n});\r\n\r\nwatch(currentIndex, () => {\r\n\tcurrentPage.value = 1;\r\n\ttotalPages.value = 0;\r\n\tupdatePreview();\r\n});\r\n\r\nconst updatePreview = () => {\r\n\tconst file = currentFile.value;\r\n\tif (!file) return;\r\n\r\n\tif (currentType.value === \"pdf\") {\r\n\t\tpdfSource.value = file.url || file;\r\n\t} else {\r\n\t\tpdfSource.value = null;\r\n\t}\r\n};\r\n\r\nconst handlePdfLoaded = (pdf) => {\r\n\ttotalPages.value = pdf.numPages || 0;\r\n};\r\n\r\nconst handlePdfRendered = () => {\r\n\tconsole.log(\"PDF rendered successfully\");\r\n};\r\n\r\nconst prevFile = () => {\r\n\tif (currentIndex.value > 0) {\r\n\t\tcurrentIndex.value--;\r\n\t}\r\n};\r\n\r\nconst nextFile = () => {\r\n\tif (currentIndex.value < normalizedFiles.value.length - 1) {\r\n\t\tcurrentIndex.value++;\r\n\t}\r\n};\r\n\r\nconst handleClose = () => {\r\n\tshowPopup.value = false;\r\n\tpdfSource.value = null;\r\n\tcurrentPage.value = 1;\r\n\ttotalPages.value = 0;\r\n\temit(\"close\");\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.file-preview-container {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\theight: 100%;\r\n\tbackground-color: #fff;\r\n\tborder-radius: 8px;\r\n\toverflow: hidden;\r\n}\r\n\r\n.file-header {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: space-between;\r\n\tpadding: 12px 16px;\r\n\tborder-bottom: 1px solid #ebedf0;\r\n\tbackground-color: #f7f8fa;\r\n}\r\n\r\n.file-title {\r\n\tfont-size: 16px;\r\n\tfont-weight: 600;\r\n\tcolor: #323233;\r\n}\r\n\r\n.file-content {\r\n\tflex: 1;\r\n\toverflow: hidden;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n.image-preview {\r\n\tflex: 1;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\toverflow: hidden;\r\n}\r\n\r\n.preview-image {\r\n\tflex: 1;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n}\r\n\r\n.image-footer {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tgap: 16px;\r\n\tpadding: 12px 16px;\r\n\tborder-top: 1px solid #ebedf0;\r\n\tbackground-color: #fff;\r\n}\r\n\r\n.file-info {\r\n\tfont-size: 14px;\r\n\tcolor: #646566;\r\n\tmin-width: 80px;\r\n\ttext-align: center;\r\n}\r\n\r\n.pdf-preview {\r\n\tflex: 1;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\toverflow: hidden;\r\n}\r\n\r\n.pdf-embed-preview {\r\n\tflex: 1;\r\n\tmax-width: 100%;\r\n\toverflow-y: auto;\r\n\tpadding: 16px;\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\talign-items: flex-start;\r\n\tbackground-color: #f5f5f5;\r\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.pdf-placeholder {\r\n\tflex: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tcolor: #969799;\r\n\tfont-size: 14px;\r\n}\r\n\r\n.pdf-footer {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tgap: 16px;\r\n\tpadding: 12px 16px;\r\n\tborder-top: 1px solid #ebedf0;\r\n\tbackground-color: #fff;\r\n}\r\n\r\n.page-info {\r\n\tfont-size: 14px;\r\n\tcolor: #646566;\r\n\tmin-width: 80px;\r\n\ttext-align: center;\r\n}\r\n.footer {\r\n\tposition: fixed;\r\n\ttop: 40%;\r\n\twidth: 100%;\r\n\t.van-button {\r\n\t}\r\n\t.van-button:nth-child(2) {\r\n\t\tfloat: right;\r\n\t}\r\n}\r\n</style>\r\n","/**\r\n * Preview 组件单独导出入口\r\n * 支持按需引入\r\n */\r\nimport Preview from './index.vue'\r\n\r\n// 为组件添加 install 方法,支持 app.use() 方式注册\r\nPreview.install = (app) => {\r\n app.component(Preview.name || 'VtkPreview', Preview)\r\n}\r\n\r\nexport default Preview\r\nexport { Preview }\r\n"],"names":["props","__props","emit","__emit","showPopup","ref","currentIndex","currentPage","pdfSource","totalPages","normalizedFiles","computed","file","index","isPdf","currentFile","currentType","url","watch","val","updatePreview","handleClose","handlePdfLoaded","pdf","handlePdfRendered","prevFile","nextFile","_createBlock","_component_van_popup","$event","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_toDisplayString","_a","_createVNode","_component_van_icon","_hoisted_4","_openBlock","_createElementBlock","_hoisted_5","_component_van_image","_b","_hoisted_6","_component_van_button","_cache","_hoisted_7","_hoisted_8","_unref","VuePdfEmbed","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","Preview","app"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const l=require("vue"),v=Object.assign({name:"VtkArea"},{__name:"index",props:{modelValue:{type:[String,Object,Array],default:""},defaultAreaCode:{type:String,default:"33"},valueType:{type:String,default:"code",validator:u=>["code","codes","object"].includes(u)},separator:{type:String,default:"/"},title:{type:String,default:"请选择所在地区"},placeholder:{type:String,default:"请选择所在地区"},maxLevel:{type:Number,default:12},displayMode:{type:String,default:"full",validator:u=>["full","last"].includes(u)}},emits:["update:modelValue","change","finish"],setup(u,{expose:V,emit:N}){const t=u,m=N,i=l.ref(!1),f=l.ref(""),h=l.ref([]),s=l.ref(""),g=l.ref(!1),c=l.ref([]),L={text:"areaName",value:"areaCode",children:"children"};l.watch(()=>t.modelValue,e=>{e||(s.value="",f.value="",c.value=[])},{immediate:!0});const y=()=>{i.value=!0,h.value.length===0&&b()},b=async()=>{if(!g.value){g.value=!0;try{const e=t.defaultAreaCode,a=await Request.getForm(`dict/area/show/${e}`);if(a.data){const o={areaCode:a.data.areaCode,areaName:a.data.areaName,areaLeve:a.data.areaLeve,children:a.data.areaLeve<t.maxLevel?[]:void 0};h.value=[o]}}catch(e){console.error("加载初始地区失败:",e)}finally{g.value=!1}}},k=async e=>{if(!e._loading){e._loading=!0;try{const a=await Request.getForm(`dict/area/next/${e.areaCode}`);a.data&&a.data.length>0?(a.data.forEach(o=>{o.areaLeve<t.maxLevel&&(o.children=[])}),e.children=a.data):delete e.children}catch(a){console.error("加载下级地区失败:",a)}finally{e._loading=!1}}},w=({value:e,selectedOptions:a,tabIndex:o})=>{const n=a[o];n&&n.areaLeve<t.maxLevel&&Array.isArray(n.children)&&n.children.length===0&&k(n),m("change",{value:e,selectedOptions:a,tabIndex:o})},A=({selectedOptions:e})=>{var o,n,p,d,C;t.displayMode==="last"?s.value=((o=e[e.length-1])==null?void 0:o.areaName)||"":s.value=e.map(r=>r.areaName).join(t.separator),c.value=e.map(r=>({areaCode:r.areaCode,areaName:r.areaName,areaLeve:r.areaLeve}));let a;switch(t.valueType){case"code":a=((n=e[e.length-1])==null?void 0:n.areaCode)||"";break;case"codes":a=e.map(r=>r.areaCode);break;case"object":a={codes:e.map(r=>r.areaCode),names:e.map(r=>r.areaName),fullName:e.map(r=>r.areaName).join(t.separator),lastCode:((p=e[e.length-1])==null?void 0:p.areaCode)||"",lastLevel:(d=e[e.length-1])==null?void 0:d.areaLeve,options:c.value};break;default:a=((C=e[e.length-1])==null?void 0:C.areaCode)||""}m("update:modelValue",a),m("finish",{selectedOptions:e,value:a}),i.value=!1};return V({getSelectedData:()=>c.value,getDisplayValue:()=>s.value,reset:()=>{s.value="",f.value="",c.value=[],m("update:modelValue",t.valueType==="codes"?[]:t.valueType==="object"?null:"")},open:()=>{y()},close:()=>{i.value=!1}}),(e,a)=>{const o=l.resolveComponent("van-field"),n=l.resolveComponent("van-cascader"),p=l.resolveComponent("van-popup");return l.openBlock(),l.createElementBlock(l.Fragment,null,[l.createVNode(o,l.mergeProps({modelValue:s.value,"onUpdate:modelValue":a[0]||(a[0]=d=>s.value=d),"is-link":"",readonly:""},e.$attrs,{placeholder:u.placeholder,onClick:y}),null,16,["modelValue","placeholder"]),l.createVNode(p,{show:i.value,"onUpdate:show":a[3]||(a[3]=d=>i.value=d),round:"",position:"bottom"},{default:l.withCtx(()=>[l.createVNode(n,{modelValue:f.value,"onUpdate:modelValue":a[1]||(a[1]=d=>f.value=d),title:u.title,options:h.value,"field-names":L,onClose:a[2]||(a[2]=d=>i.value=!1),onFinish:A,onChange:w},null,8,["modelValue","title","options"])]),_:1},8,["show"])],64)}}});v.install=u=>{u.component(v.name||"VtkArea",v)};exports.Area=v;exports.default=v;
2
+ //# sourceMappingURL=Area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Area.js","sources":["../../packages/Area/index.vue","../../packages/Area/index.js"],"sourcesContent":["<template>\r\n\t<van-field v-model=\"displayValue\" is-link readonly v-bind=\"$attrs\" :placeholder=\"placeholder\" @click=\"handleClick\" />\r\n\t<van-popup v-model:show=\"show\" round position=\"bottom\">\r\n\t\t<van-cascader v-model=\"cascaderValue\" :title=\"title\" :options=\"options\" :field-names=\"fieldNames\" @close=\"show = false\" @finish=\"onFinish\" @change=\"onChange\" />\r\n\t</van-popup>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n\tname: \"VtkArea\",\r\n});\r\nimport { ref, watch } from \"vue\";\r\n\r\nconst props = defineProps({\r\n\t// 绑定值,根据 valueType 返回不同类型\r\n\tmodelValue: {\r\n\t\ttype: [String, Object, Array],\r\n\t\tdefault: \"\",\r\n\t},\r\n\t// 默认地区编码,用于初始化加载\r\n\tdefaultAreaCode: {\r\n\t\ttype: String,\r\n\t\tdefault: \"33\",\r\n\t},\r\n\t// 返回值类型: 'code' 返回最后一级areaCode, 'codes' 返回所有级别areaCode数组, 'object' 返回完整对象信息\r\n\tvalueType: {\r\n\t\ttype: String,\r\n\t\tdefault: \"code\",\r\n\t\tvalidator: (val) => [\"code\", \"codes\", \"object\"].includes(val),\r\n\t},\r\n\t// 显示分隔符\r\n\tseparator: {\r\n\t\ttype: String,\r\n\t\tdefault: \"/\",\r\n\t},\r\n\t// 弹窗标题\r\n\ttitle: {\r\n\t\ttype: String,\r\n\t\tdefault: \"请选择所在地区\",\r\n\t},\r\n\t// 占位文本\r\n\tplaceholder: {\r\n\t\ttype: String,\r\n\t\tdefault: \"请选择所在地区\",\r\n\t},\r\n\t// 最大层级限制,达到该层级后不再加载下级\r\n\tmaxLevel: {\r\n\t\ttype: Number,\r\n\t\tdefault: 12,\r\n\t},\r\n\t// 显示模式: 'full' 显示完整路径, 'last' 只显示最后一级\r\n\tdisplayMode: {\r\n\t\ttype: String,\r\n\t\tdefault: \"full\",\r\n\t\tvalidator: (val) => [\"full\", \"last\"].includes(val),\r\n\t},\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\", \"change\", \"finish\"]);\r\n\r\nconst show = ref(false); //弹窗显示隐藏\r\nconst cascaderValue = ref(\"\"); //级联选择器绑定值\r\nconst options = ref([]); //级联选择器选项\r\nconst displayValue = ref(\"\"); //显示值\r\nconst loading = ref(false); //加载状态\r\n// 存储完整的选中信息\r\nconst selectedData = ref([]);\r\n\r\nconst fieldNames = {\r\n\ttext: \"areaName\",\r\n\tvalue: \"areaCode\",\r\n\tchildren: \"children\",\r\n};\r\n\r\n// 监听 modelValue 变化,用于回显\r\nwatch(\r\n\t() => props.modelValue,\r\n\t(val) => {\r\n\t\tif (!val) {\r\n\t\t\tdisplayValue.value = \"\";\r\n\t\t\tcascaderValue.value = \"\";\r\n\t\t\tselectedData.value = [];\r\n\t\t}\r\n\t},\r\n\t{ immediate: true },\r\n);\r\n\r\nconst handleClick = () => {\r\n\tshow.value = true;\r\n\tif (options.value.length === 0) {\r\n\t\tloadInitialArea();\r\n\t}\r\n};\r\n\r\n// 加载初始地区\r\nconst loadInitialArea = async () => {\r\n\tif (loading.value) return;\r\n\tloading.value = true;\r\n\ttry {\r\n\t\tconst areaCode = props.defaultAreaCode;\r\n\t\tconst res = await Request.getForm(`dict/area/show/${areaCode}`);\r\n\t\tif (res.data) {\r\n\t\t\tconst rootArea = {\r\n\t\t\t\tareaCode: res.data.areaCode,\r\n\t\t\t\tareaName: res.data.areaName,\r\n\t\t\t\tareaLeve: res.data.areaLeve,\r\n\t\t\t\tchildren: res.data.areaLeve < props.maxLevel ? [] : undefined,\r\n\t\t\t};\r\n\t\t\toptions.value = [rootArea];\r\n\t\t}\r\n\t} catch (error) {\r\n\t\tconsole.error(\"加载初始地区失败:\", error);\r\n\t} finally {\r\n\t\tloading.value = false;\r\n\t}\r\n};\r\n\r\n// 加载下级地区\r\nconst loadChildren = async (item) => {\r\n\tif (item._loading) return;\r\n\titem._loading = true;\r\n\ttry {\r\n\t\tconst res = await Request.getForm(`dict/area/next/${item.areaCode}`);\r\n\t\tif (res.data && res.data.length > 0) {\r\n\t\t\tres.data.forEach((it) => {\r\n\t\t\t\t// 根据 maxLevel 判断是否还有下级\r\n\t\t\t\tif (it.areaLeve < props.maxLevel) {\r\n\t\t\t\t\tit.children = [];\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\titem.children = res.data;\r\n\t\t} else {\r\n\t\t\t// 没有下级数据,移除 children 属性使其成为叶子节点\r\n\t\t\tdelete item.children;\r\n\t\t}\r\n\t} catch (error) {\r\n\t\tconsole.error(\"加载下级地区失败:\", error);\r\n\t} finally {\r\n\t\titem._loading = false;\r\n\t}\r\n};\r\n\r\n// 选项变化时加载下级\r\nconst onChange = ({ value, selectedOptions, tabIndex }) => {\r\n\tconst currentItem = selectedOptions[tabIndex];\r\n\tif (currentItem && currentItem.areaLeve < props.maxLevel && Array.isArray(currentItem.children) && currentItem.children.length === 0) {\r\n\t\tloadChildren(currentItem);\r\n\t}\r\n\temit(\"change\", { value, selectedOptions, tabIndex });\r\n};\r\n\r\n// 完成选择\r\nconst onFinish = ({ selectedOptions }) => {\r\n\t// 根据 displayMode 决定显示值\r\n\tif (props.displayMode === \"last\") {\r\n\t\t// 只显示最后一级\r\n\t\tdisplayValue.value = selectedOptions[selectedOptions.length - 1]?.areaName || \"\";\r\n\t} else {\r\n\t\t// 显示完整路径(默认)\r\n\t\tdisplayValue.value = selectedOptions.map((option) => option.areaName).join(props.separator);\r\n\t}\r\n\r\n\t// 存储完整选中数据\r\n\tselectedData.value = selectedOptions.map((option) => ({\r\n\t\tareaCode: option.areaCode,\r\n\t\tareaName: option.areaName,\r\n\t\tareaLeve: option.areaLeve,\r\n\t}));\r\n\r\n\t// 根据 valueType 返回不同格式的值\r\n\tlet emitValue;\r\n\tswitch (props.valueType) {\r\n\t\tcase \"code\":\r\n\t\t\t// 返回最后一级的 areaCode\r\n\t\t\temitValue = selectedOptions[selectedOptions.length - 1]?.areaCode || \"\";\r\n\t\t\tbreak;\r\n\t\tcase \"codes\":\r\n\t\t\t// 返回所有级别的 areaCode 数组\r\n\t\t\temitValue = selectedOptions.map((option) => option.areaCode);\r\n\t\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\t\t// 返回完整对象信息\r\n\t\t\temitValue = {\r\n\t\t\t\tcodes: selectedOptions.map((option) => option.areaCode),\r\n\t\t\t\tnames: selectedOptions.map((option) => option.areaName),\r\n\t\t\t\tfullName: selectedOptions.map((option) => option.areaName).join(props.separator),\r\n\t\t\t\tlastCode: selectedOptions[selectedOptions.length - 1]?.areaCode || \"\",\r\n\t\t\t\tlastLevel: selectedOptions[selectedOptions.length - 1]?.areaLeve,\r\n\t\t\t\toptions: selectedData.value,\r\n\t\t\t};\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\temitValue = selectedOptions[selectedOptions.length - 1]?.areaCode || \"\";\r\n\t}\r\n\r\n\temit(\"update:modelValue\", emitValue);\r\n\temit(\"finish\", { selectedOptions, value: emitValue });\r\n\tshow.value = false;\r\n};\r\n\r\n// 暴露方法供外部调用\r\ndefineExpose({\r\n\t// 获取当前选中的完整数据\r\n\tgetSelectedData: () => selectedData.value,\r\n\t// 获取显示值\r\n\tgetDisplayValue: () => displayValue.value,\r\n\t// 重置选择\r\n\treset: () => {\r\n\t\tdisplayValue.value = \"\";\r\n\t\tcascaderValue.value = \"\";\r\n\t\tselectedData.value = [];\r\n\t\temit(\"update:modelValue\", props.valueType === \"codes\" ? [] : props.valueType === \"object\" ? null : \"\");\r\n\t},\r\n\t// 打开选择器\r\n\topen: () => {\r\n\t\thandleClick();\r\n\t},\r\n\t// 关闭选择器\r\n\tclose: () => {\r\n\t\tshow.value = false;\r\n\t},\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped></style>\r\n","/**\r\n * Area 组件单独导出入口\r\n * 支持按需引入\r\n */\r\nimport Area from './index.vue'\r\n\r\n// 为组件添加 install 方法,支持 app.use() 方式注册\r\nArea.install = (app) => {\r\n app.component(Area.name || 'VtkArea', Area)\r\n}\r\n\r\nexport default Area\r\nexport { Area }\r\n"],"names":["props","__props","emit","__emit","show","ref","cascaderValue","options","displayValue","loading","selectedData","fieldNames","watch","val","handleClick","loadInitialArea","areaCode","res","rootArea","error","loadChildren","item","it","onChange","value","selectedOptions","tabIndex","currentItem","onFinish","_a","option","emitValue","_b","_c","_d","_e","__expose","_createVNode","_component_van_field","_mergeProps","$event","$attrs","_component_van_popup","_component_van_cascader","Area","app"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ [data-v-3482e335] .van-radio{margin-right:12px}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),v=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),g=Object.assign({name:"VtkRadio"},{__name:"index",props:{modelValue:{type:[String,Number,Object],default:""},options:{type:[Array,String],default:()=>[]},valueType:{type:String,default:"string",validator:r=>["string","object"].includes(r)}},emits:["update:modelValue","change"],setup(r,{emit:m}){const o=r,s=m,d=e.computed(()=>Array.isArray(o.options)?o.options:typeof o.options=="string"&&o.options?o.options.split("/").filter(Boolean).map(t=>{const[n,i]=t.split(":");return{text:i||n,value:n}}):[]),c=e.computed({get:()=>{const t=o.modelValue;return t==null?"":o.valueType==="object"&&t&&typeof t=="object"?String(t.value??""):String(t)},set:t=>{var u;let n=t;typeof(o.valueType==="object"?(u=o.modelValue)==null?void 0:u.value:o.modelValue)=="number"&&!isNaN(Number(t))&&(n=Number(t)),o.valueType==="object"&&(n=d.value.find(p=>String(p.value)===String(t))||null),s("update:modelValue",n),s("change",n)}});return(t,n)=>{const i=e.resolveComponent("van-radio"),u=e.resolveComponent("van-radio-group"),p=e.resolveComponent("van-field");return e.openBlock(),e.createBlock(p,e.normalizeProps(e.guardReactiveProps(t.$attrs)),{input:e.withCtx(()=>[e.createVNode(u,{modelValue:c.value,"onUpdate:modelValue":n[0]||(n[0]=a=>c.value=a),direction:"horizontal"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,a=>(e.openBlock(),e.createBlock(i,{key:String(a.value),name:String(a.value)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.text),1)]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"])]),_:1},16)}}}),l=v._export_sfc(g,[["__scopeId","data-v-3482e335"]]);l.install=r=>{r.component(l.name||"VtkRadio",l)};exports.Radio=l;exports.default=l;
2
+ //# sourceMappingURL=Radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","sources":["../../packages/Radio/index.vue","../../packages/Radio/index.js"],"sourcesContent":["<template>\r\n\t<van-field v-bind=\"$attrs\">\r\n\t\t<template #input>\r\n\t\t\t<van-radio-group v-model=\"internalValue\" direction=\"horizontal\">\r\n\t\t\t\t<van-radio v-for=\"item in parsedOptions\" :key=\"String(item.value)\" :name=\"String(item.value)\">\r\n\t\t\t\t\t{{ item.text }}\r\n\t\t\t\t</van-radio>\r\n\t\t\t</van-radio-group>\r\n\t\t</template>\r\n\t</van-field>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n\tname: \"VtkRadio\",\r\n});\r\nimport { computed } from \"vue\";\r\n\r\nconst props = defineProps({\r\n\t// 绑定值\r\n\tmodelValue: {\r\n\t\ttype: [String, Number, Object],\r\n\t\tdefault: \"\",\r\n\t},\r\n\t// 选项数据:支持数组 [{value, text}] 或 字符串 '1:选项1/2:选项2'\r\n\toptions: {\r\n\t\ttype: [Array, String],\r\n\t\tdefault: () => [],\r\n\t},\r\n\t// 返回值类型: 'string' (基本类型), 'object' (完整对象)\r\n\tvalueType: {\r\n\t\ttype: String,\r\n\t\tdefault: \"string\",\r\n\t\tvalidator: (val) => [\"string\", \"object\"].includes(val),\r\n\t},\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\r\n\r\n// 解析选项\r\nconst parsedOptions = computed(() => {\r\n\tif (Array.isArray(props.options)) {\r\n\t\treturn props.options;\r\n\t}\r\n\tif (typeof props.options === \"string\" && props.options) {\r\n\t\treturn props.options\r\n\t\t\t.split(\"/\")\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.map((item) => {\r\n\t\t\t\tconst [value, text] = item.split(\":\");\r\n\t\t\t\treturn {\r\n\t\t\t\t\ttext: text || value,\r\n\t\t\t\t\tvalue: value,\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t}\r\n\treturn [];\r\n});\r\n\r\n// 使用可写计算属性处理 v-model 绑定\r\nconst internalValue = computed({\r\n\tget: () => {\r\n\t\tconst val = props.modelValue;\r\n\t\tif (val === undefined || val === null) return \"\";\r\n\r\n\t\t// 如果是对象类型,提取其中的 value\r\n\t\tif (props.valueType === \"object\" && val && typeof val === \"object\") {\r\n\t\t\treturn String(val.value ?? \"\");\r\n\t\t}\r\n\t\treturn String(val);\r\n\t},\r\n\tset: (newValue) => {\r\n\t\tlet emitValue = newValue;\r\n\r\n\t\t// 处理原始数据类型逻辑(如果父组件传入的是数字,尝试转回数字)\r\n\t\tconst originalValue = props.valueType === \"object\" ? props.modelValue?.value : props.modelValue;\r\n\t\tif (typeof originalValue === \"number\" && !isNaN(Number(newValue))) {\r\n\t\t\temitValue = Number(newValue);\r\n\t\t}\r\n\r\n\t\tif (props.valueType === \"object\") {\r\n\t\t\t// 找回完整对象\r\n\t\t\temitValue = parsedOptions.value.find((opt) => String(opt.value) === String(newValue)) || null;\r\n\t\t}\r\n\r\n\t\temit(\"update:modelValue\", emitValue);\r\n\t\temit(\"change\", emitValue);\r\n\t},\r\n});\r\n</script>\r\n\r\n<style scoped>\r\n:deep(.van-radio) {\r\n\tmargin-right: 12px;\r\n}\r\n</style>\r\n","/**\r\n * Radio 组件单独导出入口\r\n * 支持按需引入\r\n */\r\nimport Radio from './index.vue'\r\n\r\n// 为组件添加 install 方法,支持 app.use() 方式注册\r\nRadio.install = (app) => {\r\n app.component(Radio.name || 'VtkRadio', Radio)\r\n}\r\n\r\nexport default Radio\r\nexport { Radio }\r\n"],"names":["props","__props","emit","__emit","parsedOptions","computed","item","value","text","internalValue","val","newValue","emitValue","_a","opt","_openBlock","_createBlock","_component_van_field","$attrs","_createVNode","_component_van_radio_group","$event","_createElementBlock","_Fragment","_renderList","_component_van_radio","_createTextVNode","_toDisplayString","Radio","app"],"mappings":"ieAkBA,MAAMA,EAAQC,EAmBRC,EAAOC,EAGPC,EAAgBC,EAAAA,SAAS,IAC1B,MAAM,QAAQL,EAAM,OAAO,EACvBA,EAAM,QAEV,OAAOA,EAAM,SAAY,UAAYA,EAAM,QACvCA,EAAM,QACX,MAAM,GAAG,EACT,OAAO,OAAO,EACd,IAAKM,GAAS,CACd,KAAM,CAACC,EAAOC,CAAI,EAAIF,EAAK,MAAM,GAAG,EACpC,MAAO,CACN,KAAME,GAAQD,EACd,MAAOA,CACZ,CACG,CAAC,EAEI,EACP,EAGKE,EAAgBJ,EAAAA,SAAS,CAC9B,IAAK,IAAM,CACV,MAAMK,EAAMV,EAAM,WAClB,OAAyBU,GAAQ,KAAa,GAG1CV,EAAM,YAAc,UAAYU,GAAO,OAAOA,GAAQ,SAClD,OAAOA,EAAI,OAAS,EAAE,EAEvB,OAAOA,CAAG,CAClB,EACA,IAAMC,GAAa,OAClB,IAAIC,EAAYD,EAIZ,OADkBX,EAAM,YAAc,UAAWa,EAAAb,EAAM,aAAN,YAAAa,EAAkB,MAAQb,EAAM,aACxD,UAAY,CAAC,MAAM,OAAOW,CAAQ,CAAC,IAC/DC,EAAY,OAAOD,CAAQ,GAGxBX,EAAM,YAAc,WAEvBY,EAAYR,EAAc,MAAM,KAAMU,GAAQ,OAAOA,EAAI,KAAK,IAAM,OAAOH,CAAQ,CAAC,GAAK,MAG1FT,EAAK,oBAAqBU,CAAS,EACnCV,EAAK,SAAUU,CAAS,CACzB,CACD,CAAC,kIAvFA,OAAAG,EAAAA,UAAA,EAAAC,EAAAA,YAQYC,wCAROC,EAAAA,MAAM,CAAA,EAAA,CACb,gBACV,IAIkB,CAJlBC,EAAAA,YAIkBC,EAAA,YAJQX,EAAA,2CAAAA,EAAa,MAAAY,GAAE,UAAU,iCACvC,IAA6B,kBAAxCC,EAAAA,mBAEYC,EAAAA,SAAA,KAAAC,EAAAA,WAFcpB,EAAA,MAARE,kBAAlBU,EAAAA,YAEYS,EAAA,CAF8B,IAAK,OAAOnB,EAAK,KAAK,EAAI,KAAM,OAAOA,EAAK,KAAK,sBAC1F,IAAe,CAAZoB,EAAAA,gBAAAC,EAAAA,gBAAArB,EAAK,IAAI,EAAA,CAAA,6HCEjBsB,EAAM,QAAWC,GAAQ,CACvBA,EAAI,UAAUD,EAAM,MAAQ,WAAYA,CAAK,CAC/C"}
@@ -0,0 +1 @@
1
+ [data-v-3ed9d102] .van-uploader__preview-image,[data-v-3ed9d102] .van-uploader__upload{border-radius:4px}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const u=require("vue"),l=require("vant"),_=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),V=Object.assign({name:"VtkUploader",inheritAttrs:!1},{__name:"index",props:{modelValue:{type:[String,Array],default:()=>[]},valueType:{type:String,default:"array",validator:o=>["string","array"].includes(o)},maxSize:{type:Number,default:10*1024*1024},accept:{type:String,default:"image/*"},uploadMethod:{type:Function,required:!0}},emits:["update:modelValue","change","success","error"],setup(o,{expose:y,emit:h}){const i=o,m=h,n=u.ref([]),v=e=>{if(!e)return[];let t=[];return typeof e=="string"?t=e.split(",").filter(s=>s.trim()):Array.isArray(e)&&(t=e.filter(s=>s)),t.map(s=>({url:s,status:"done",message:""}))},f=()=>n.value.filter(e=>e.status==="done"&&e.url).map(e=>e.url),x=e=>i.valueType==="string"?e.join(","):e,g=()=>{const e=f(),t=x(e);m("update:modelValue",t),m("change",t)};u.watch(()=>i.modelValue,e=>{const t=f().join(","),s=Array.isArray(e)?e.join(","):e||"";t!==s&&(n.value=v(e))},{immediate:!0});const T=e=>{const t=Array.isArray(e)?e:[e];for(const s of t)if(s.size>i.maxSize){const a=(i.maxSize/1024/1024).toFixed(1);return l.showToast(`文件大小不能超过${a}MB`),!1}return!0},A=async e=>{try{return await i.uploadMethod(e)}catch(t){return{success:!1,message:t.message||"上传失败"}}},S=async e=>{const t=Array.isArray(e)?e:[e];t.length>1&&l.showLoadingToast({message:`正在上传 0/${t.length}`,forbidClick:!0,duration:0});let s=0,a=0;for(let p=0;p<t.length;p++){const r=t[p];r.status="uploading",r.message="上传中...",t.length>1&&l.showLoadingToast({message:`正在上传 ${p+1}/${t.length}`,forbidClick:!0,duration:0});const c=await A(r);c.success?(r.status="done",r.message="",r.url=c.url,s++,m("success",{file:r,url:c.url})):(r.status="failed",r.message=c.message,a++,m("error",{file:r,message:c.message}))}l.closeToast(),t.length>1?a===0?l.showToast(`${s}个文件上传成功`):l.showToast(`${s}个成功,${a}个失败`):a>0&&l.showToast(t[0].message||"上传失败"),g()},U=()=>{setTimeout(()=>{g()},0)};return y({getUrls:f,clear:()=>{n.value=[],g()},getFileList:()=>n.value}),(e,t)=>{const s=u.resolveComponent("van-uploader");return u.openBlock(),u.createBlock(s,u.mergeProps({modelValue:n.value,"onUpdate:modelValue":t[0]||(t[0]=a=>n.value=a)},e.$attrs,{"max-size":o.maxSize,accept:o.accept,"before-read":T,"after-read":S,onDelete:U}),null,16,["modelValue","max-size","accept"])}}}),d=_._export_sfc(V,[["__scopeId","data-v-3ed9d102"]]);d.install=o=>{o.component(d.name||"VtkUploader",d)};exports.Uploader=d;exports.default=d;
2
+ //# sourceMappingURL=Uploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Uploader.js","sources":["../../packages/Uploader/index.vue","../../packages/Uploader/index.js"],"sourcesContent":["<template>\r\n\t<van-uploader v-model=\"fileList\" v-bind=\"$attrs\" :max-size=\"maxSize\" :accept=\"accept\" :before-read=\"beforeRead\" :after-read=\"afterRead\" @delete=\"onDelete\" />\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n\tname: \"VtkUploader\",\r\n\tinheritAttrs: false,\r\n});\r\nimport { ref, watch } from \"vue\";\r\nimport { showToast, showLoadingToast, closeToast } from \"vant\";\r\n\r\nconst props = defineProps({\r\n\t/** 绑定值,支持字符串或数组 */\r\n\tmodelValue: {\r\n\t\ttype: [String, Array],\r\n\t\tdefault: () => [],\r\n\t},\r\n\t/** 返回值类型:'string' 返回逗号分隔的字符串,'array' 返回数组 */\r\n\tvalueType: {\r\n\t\ttype: String,\r\n\t\tdefault: \"array\",\r\n\t\tvalidator: (val) => [\"string\", \"array\"].includes(val),\r\n\t},\r\n\t/** 单个文件最大大小(字节),默认10MB */\r\n\tmaxSize: {\r\n\t\ttype: Number,\r\n\t\tdefault: 10 * 1024 * 1024,\r\n\t},\r\n\t/** 接受的文件类型 */\r\n\taccept: {\r\n\t\ttype: String,\r\n\t\tdefault: \"image/*\",\r\n\t},\r\n\t/** 自定义上传方法(必填) */\r\n\tuploadMethod: {\r\n\t\ttype: Function,\r\n\t\trequired: true,\r\n\t},\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\", \"change\", \"success\", \"error\"]);\r\n\r\n// 文件列表\r\nconst fileList = ref([]);\r\n\r\n// 解析初始值\r\nconst parseModelValue = (value) => {\r\n\tif (!value) return [];\r\n\r\n\tlet urls = [];\r\n\tif (typeof value === \"string\") {\r\n\t\turls = value.split(\",\").filter((url) => url.trim());\r\n\t} else if (Array.isArray(value)) {\r\n\t\turls = value.filter((url) => url);\r\n\t}\r\n\r\n\treturn urls.map((url) => ({\r\n\t\turl,\r\n\t\tstatus: \"done\",\r\n\t\tmessage: \"\",\r\n\t}));\r\n};\r\n\r\n// 获取已上传的URL列表\r\nconst getUploadedUrls = () => {\r\n\treturn fileList.value.filter((file) => file.status === \"done\" && file.url).map((file) => file.url);\r\n};\r\n\r\n// 格式化输出值\r\nconst formatOutput = (urls) => {\r\n\tif (props.valueType === \"string\") {\r\n\t\treturn urls.join(\",\");\r\n\t}\r\n\treturn urls;\r\n};\r\n\r\n// 触发更新\r\nconst emitValue = () => {\r\n\tconst urls = getUploadedUrls();\r\n\tconst output = formatOutput(urls);\r\n\temit(\"update:modelValue\", output);\r\n\temit(\"change\", output);\r\n};\r\n\r\n// 监听外部值变化\r\nwatch(\r\n\t() => props.modelValue,\r\n\t(newVal) => {\r\n\t\tconst currentUrls = getUploadedUrls().join(\",\");\r\n\t\tconst newUrls = Array.isArray(newVal) ? newVal.join(\",\") : newVal || \"\";\r\n\r\n\t\t// 只有外部值确实改变时才更新\r\n\t\tif (currentUrls !== newUrls) {\r\n\t\t\tfileList.value = parseModelValue(newVal);\r\n\t\t}\r\n\t},\r\n\t{ immediate: true },\r\n);\r\n\r\n// 上传前校验\r\nconst beforeRead = (file) => {\r\n\tconst files = Array.isArray(file) ? file : [file];\r\n\r\n\tfor (const f of files) {\r\n\t\t// 文件大小校验\r\n\t\tif (f.size > props.maxSize) {\r\n\t\t\tconst maxSizeMB = (props.maxSize / 1024 / 1024).toFixed(1);\r\n\t\t\tshowToast(`文件大小不能超过${maxSizeMB}MB`);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\treturn true;\r\n};\r\n\r\n// 上传文件\r\nconst uploadFile = async (file) => {\r\n\ttry {\r\n\t\tconst result = await props.uploadMethod(file);\r\n\t\treturn result;\r\n\t} catch (error) {\r\n\t\treturn { success: false, message: error.message || \"上传失败\" };\r\n\t}\r\n};\r\n\r\n// 文件读取完成后处理\r\nconst afterRead = async (file) => {\r\n\tconst files = Array.isArray(file) ? file : [file];\r\n\r\n\t// 显示上传中提示\r\n\tif (files.length > 1) {\r\n\t\tshowLoadingToast({\r\n\t\t\tmessage: `正在上传 0/${files.length}`,\r\n\t\t\tforbidClick: true,\r\n\t\t\tduration: 0,\r\n\t\t});\r\n\t}\r\n\r\n\tlet successCount = 0;\r\n\tlet failCount = 0;\r\n\r\n\t// 逐个上传\r\n\tfor (let i = 0; i < files.length; i++) {\r\n\t\tconst fileItem = files[i];\r\n\t\tfileItem.status = \"uploading\";\r\n\t\tfileItem.message = \"上传中...\";\r\n\r\n\t\t// 更新进度提示\r\n\t\tif (files.length > 1) {\r\n\t\t\tshowLoadingToast({\r\n\t\t\t\tmessage: `正在上传 ${i + 1}/${files.length}`,\r\n\t\t\t\tforbidClick: true,\r\n\t\t\t\tduration: 0,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst result = await uploadFile(fileItem);\r\n\r\n\t\tif (result.success) {\r\n\t\t\tfileItem.status = \"done\";\r\n\t\t\tfileItem.message = \"\";\r\n\t\t\tfileItem.url = result.url;\r\n\t\t\tsuccessCount++;\r\n\t\t\temit(\"success\", { file: fileItem, url: result.url });\r\n\t\t} else {\r\n\t\t\tfileItem.status = \"failed\";\r\n\t\t\tfileItem.message = result.message;\r\n\t\t\tfailCount++;\r\n\t\t\temit(\"error\", { file: fileItem, message: result.message });\r\n\t\t}\r\n\t}\r\n\r\n\tcloseToast();\r\n\r\n\t// 显示上传结果\r\n\tif (files.length > 1) {\r\n\t\tif (failCount === 0) {\r\n\t\t\tshowToast(`${successCount}个文件上传成功`);\r\n\t\t} else {\r\n\t\t\tshowToast(`${successCount}个成功,${failCount}个失败`);\r\n\t\t}\r\n\t} else if (failCount > 0) {\r\n\t\tshowToast(files[0].message || \"上传失败\");\r\n\t}\r\n\r\n\t// 触发值更新\r\n\temitValue();\r\n};\r\n\r\n// 删除文件\r\nconst onDelete = () => {\r\n\t// 下一个tick再触发,确保fileList已更新\r\n\tsetTimeout(() => {\r\n\t\temitValue();\r\n\t}, 0);\r\n};\r\n\r\n// 暴露方法给父组件\r\ndefineExpose({\r\n\t/** 获取已上传的URL列表 */\r\n\tgetUrls: getUploadedUrls,\r\n\t/** 清空文件列表 */\r\n\tclear: () => {\r\n\t\tfileList.value = [];\r\n\t\temitValue();\r\n\t},\r\n\t/** 获取文件列表 */\r\n\tgetFileList: () => fileList.value,\r\n});\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n:deep(.van-uploader__preview-image) {\r\n\tborder-radius: 4px;\r\n}\r\n\r\n:deep(.van-uploader__upload) {\r\n\tborder-radius: 4px;\r\n}\r\n</style>\r\n","/**\r\n * Uploader 组件单独导出入口\r\n * 支持按需引入\r\n */\r\nimport Uploader from './index.vue'\r\n\r\n// 为组件添加 install 方法,支持 app.use() 方式注册\r\nUploader.install = (app) => {\r\n app.component(Uploader.name || 'VtkUploader', Uploader)\r\n}\r\n\r\nexport default Uploader\r\nexport { Uploader }\r\n"],"names":["props","__props","emit","__emit","fileList","ref","parseModelValue","value","urls","url","getUploadedUrls","file","formatOutput","emitValue","output","watch","newVal","currentUrls","newUrls","beforeRead","files","f","maxSizeMB","showToast","uploadFile","error","afterRead","showLoadingToast","successCount","failCount","i","fileItem","result","closeToast","onDelete","__expose","_openBlock","_createBlock","_component_van_uploader","_mergeProps","$event","$attrs","Uploader","app"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=(t,o)=>{const c=t.__vccOpts||t;for(const[r,s]of o)c[r]=s;return c};exports._export_sfc=e;
2
+ //# sourceMappingURL=_plugin-vue_export-helper-BHFhmbuH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_plugin-vue_export-helper-BHFhmbuH.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ [data-v-eb64e8a9] .van-checkbox{margin-bottom:8px;margin-right:12px}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),v=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),y=Object.assign({name:"VtkCheckbox"},{__name:"index",props:{modelValue:{type:[String,Array,Object],default:()=>[]},options:{type:[Array,String],default:()=>[]},valueType:{type:String,default:"array",validator:n=>["string","array","object"].includes(n)},separator:{type:String,default:","}},emits:["update:modelValue","change"],setup(n,{emit:c}){const a=n,s=c,i=e.computed(()=>Array.isArray(a.options)?a.options:typeof a.options=="string"&&a.options?a.options.split("/").filter(Boolean).map(r=>{const[t,o]=r.split(":");return{text:o||t,value:t}}):[]),p=e.computed({get:()=>{const r=a.modelValue;if(!r)return[];let t=[];return a.valueType==="string"?t=typeof r=="string"?r.split(a.separator).filter(Boolean):[]:a.valueType==="object"?t=Array.isArray(r)?r.map(o=>(o==null?void 0:o.value)??o):[]:t=Array.isArray(r)?r:[],t.map(String)},set:r=>{let t;a.valueType==="string"?t=r.join(a.separator):a.valueType==="object"?t=i.value.filter(o=>r.includes(String(o.value))):t=r.map(o=>isNaN(Number(o))?o:Array.isArray(a.modelValue)&&typeof a.modelValue[0]=="number"?Number(o):o),s("update:modelValue",t),s("change",t)}});return(r,t)=>{const o=e.resolveComponent("van-checkbox"),d=e.resolveComponent("van-checkbox-group"),m=e.resolveComponent("van-field");return e.openBlock(),e.createBlock(m,e.normalizeProps(e.guardReactiveProps(r.$attrs)),{input:e.withCtx(()=>[e.createVNode(d,{modelValue:p.value,"onUpdate:modelValue":t[0]||(t[0]=l=>p.value=l),direction:"horizontal"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,l=>(e.openBlock(),e.createBlock(o,{key:String(l.value),name:String(l.value),shape:"square"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.text),1)]),_:2},1032,["name"]))),128))]),_:1},8,["modelValue"])]),_:1},16)}}}),u=v._export_sfc(y,[["__scopeId","data-v-eb64e8a9"]]);u.install=n=>{n.component(u.name||"VtkCheckbox",u)};exports.Checkbox=u;exports.default=u;
2
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkbox.js","sources":["../../packages/checkbox/index.vue","../../packages/checkbox/index.js"],"sourcesContent":["<template>\r\n <van-field v-bind=\"$attrs\">\r\n <template #input>\r\n <van-checkbox-group v-model=\"internalValue\" direction=\"horizontal\">\r\n <van-checkbox v-for=\"item in parsedOptions\" :key=\"String(item.value)\" :name=\"String(item.value)\" shape=\"square\">\r\n {{ item.text }}\r\n </van-checkbox>\r\n </van-checkbox-group>\r\n </template>\r\n </van-field>\r\n</template>\r\n\r\n<script setup>\r\n import { computed } from 'vue'\r\n\r\n defineOptions({\r\n name: 'VtkCheckbox'\r\n })\r\n\r\n const props = defineProps({\r\n // 绑定值\r\n modelValue: {\r\n type: [String, Array, Object],\r\n default: () => [],\r\n },\r\n // 选项数据:支持数组 [{value, text}] 或 字符串 '1:选项1/2:选项2'\r\n options: {\r\n type: [Array, String],\r\n default: () => [],\r\n },\r\n // 返回值类型: 'string' (逗号分隔), 'array' (值数组), 'object' (对象数组)\r\n valueType: {\r\n type: String,\r\n default: 'array',\r\n validator: (val) => ['string', 'array', 'object'].includes(val),\r\n },\r\n // 当 valueType 为 string 时的分隔符\r\n separator: {\r\n type: String,\r\n default: ',',\r\n },\r\n })\r\n\r\n const emit = defineEmits(['update:modelValue', 'change'])\r\n\r\n // 解析选项\r\n const parsedOptions = computed(() => {\r\n if (Array.isArray(props.options)) {\r\n return props.options\r\n }\r\n if (typeof props.options === 'string' && props.options) {\r\n return props.options\r\n .split('/')\r\n .filter(Boolean)\r\n .map((item) => {\r\n const [value, text] = item.split(':')\r\n return {\r\n text: text || value,\r\n value: value,\r\n }\r\n })\r\n }\r\n return []\r\n })\r\n\r\n // 使用可写计算属性处理 v-model 绑定\r\n const internalValue = computed({\r\n get: () => {\r\n const val = props.modelValue\r\n if (!val) return []\r\n\r\n let arr = []\r\n if (props.valueType === 'string') {\r\n arr = typeof val === 'string' ? val.split(props.separator).filter(Boolean) : []\r\n } else if (props.valueType === 'object') {\r\n arr = Array.isArray(val) ? val.map((item) => item?.value ?? item) : []\r\n } else {\r\n arr = Array.isArray(val) ? val : []\r\n }\r\n // 统一转为字符串,确保与 van-checkbox 的 name 匹配\r\n return arr.map(String)\r\n },\r\n set: (newValues) => {\r\n let emitValue\r\n if (props.valueType === 'string') {\r\n emitValue = newValues.join(props.separator)\r\n } else if (props.valueType === 'object') {\r\n // 从解析后的选项中过滤出完整的对象\r\n emitValue = parsedOptions.value.filter((opt) => newValues.includes(String(opt.value)))\r\n } else {\r\n // 如果原始数据是数字,则尝试转回数字,否则保持字符串\r\n emitValue = newValues.map((val) => {\r\n return isNaN(Number(val)) ? val : Array.isArray(props.modelValue) && typeof props.modelValue[0] === 'number' ? Number(val) : val\r\n })\r\n }\r\n\r\n emit('update:modelValue', emitValue)\r\n emit('change', emitValue)\r\n },\r\n })\r\n</script>\r\n\r\n<style scoped>\r\n :deep(.van-checkbox) {\r\n margin-bottom: 8px;\r\n margin-right: 12px;\r\n }\r\n</style>\r\n","/**\r\n * Checkbox 组件单独导出入口\r\n * 支持按需引入\r\n */\r\nimport Checkbox from './index.vue'\r\n\r\n// 为组件添加 install 方法,支持 app.use() 方式注册\r\nCheckbox.install = (app) => {\r\n app.component(Checkbox.name || 'VtkCheckbox', Checkbox)\r\n}\r\n\r\nexport default Checkbox\r\nexport { Checkbox }\r\n"],"names":["props","__props","emit","__emit","parsedOptions","computed","item","value","text","internalValue","val","arr","newValues","emitValue","opt","_openBlock","_createBlock","_component_van_field","$attrs","_createVNode","_component_van_checkbox_group","$event","_createElementBlock","_Fragment","_renderList","_component_van_checkbox","_createTextVNode","_toDisplayString","Checkbox","app"],"mappings":"khBAmBE,MAAMA,EAAQC,EAwBRC,EAAOC,EAGPC,EAAgBC,EAAAA,SAAS,IACzB,MAAM,QAAQL,EAAM,OAAO,EACtBA,EAAM,QAEX,OAAOA,EAAM,SAAY,UAAYA,EAAM,QACtCA,EAAM,QACV,MAAM,GAAG,EACT,OAAO,OAAO,EACd,IAAKM,GAAS,CACb,KAAM,CAACC,EAAOC,CAAI,EAAIF,EAAK,MAAM,GAAG,EACpC,MAAO,CACL,KAAME,GAAQD,EACd,MAAOA,CACnB,CACQ,CAAC,EAEE,CAAA,CACR,EAGKE,EAAgBJ,EAAAA,SAAS,CAC7B,IAAK,IAAM,CACT,MAAMK,EAAMV,EAAM,WAClB,GAAI,CAACU,EAAK,MAAO,CAAA,EAEjB,IAAIC,EAAM,CAAA,EACV,OAAIX,EAAM,YAAc,SACtBW,EAAM,OAAOD,GAAQ,SAAWA,EAAI,MAAMV,EAAM,SAAS,EAAE,OAAO,OAAO,EAAI,CAAA,EACpEA,EAAM,YAAc,SAC7BW,EAAM,MAAM,QAAQD,CAAG,EAAIA,EAAI,IAAKJ,IAASA,GAAA,YAAAA,EAAM,QAASA,CAAI,EAAI,CAAA,EAEpEK,EAAM,MAAM,QAAQD,CAAG,EAAIA,EAAM,CAAA,EAG5BC,EAAI,IAAI,MAAM,CACvB,EACA,IAAMC,GAAc,CAClB,IAAIC,EACAb,EAAM,YAAc,SACtBa,EAAYD,EAAU,KAAKZ,EAAM,SAAS,EACjCA,EAAM,YAAc,SAE7Ba,EAAYT,EAAc,MAAM,OAAQU,GAAQF,EAAU,SAAS,OAAOE,EAAI,KAAK,CAAC,CAAC,EAGrFD,EAAYD,EAAU,IAAKF,GAClB,MAAM,OAAOA,CAAG,CAAC,EAAIA,EAAM,MAAM,QAAQV,EAAM,UAAU,GAAK,OAAOA,EAAM,WAAW,CAAC,GAAM,SAAW,OAAOU,CAAG,EAAIA,CAC9H,EAGHR,EAAK,oBAAqBW,CAAS,EACnCX,EAAK,SAAUW,CAAS,CAC1B,CACJ,CAAG,wIAlGD,OAAAE,EAAAA,UAAA,EAAAC,EAAAA,YAQYC,wCAROC,EAAAA,MAAM,CAAA,EAAA,CACZ,gBACT,IAIqB,CAJrBC,EAAAA,YAIqBC,EAAA,YAJQX,EAAA,2CAAAA,EAAa,MAAAY,GAAE,UAAU,iCACtC,IAA6B,kBAA3CC,EAAAA,mBAEeC,EAAAA,SAAA,KAAAC,EAAAA,WAFcpB,EAAA,MAARE,kBAArBU,EAAAA,YAEeS,EAAA,CAF8B,IAAK,OAAOnB,EAAK,KAAK,EAAI,KAAM,OAAOA,EAAK,KAAK,EAAG,MAAM,6BACrG,IAAe,CAAZoB,EAAAA,gBAAAC,EAAAA,gBAAArB,EAAK,IAAI,EAAA,CAAA,6HCEtBsB,EAAS,QAAWC,GAAQ,CAC1BA,EAAI,UAAUD,EAAS,MAAQ,cAAeA,CAAQ,CACxD"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("./checkbox.js"),o=require("./Area.js"),i=require("./Radio.js"),a=require("./Uploader.js"),s=require("./preview.js"),c=[r.Checkbox,o.Area,i.Radio,a.Uploader,s.Preview],t=l=>{c.forEach(e=>{e.install?l.use(e):e.name&&l.component(e.name,e)})},d={install:t,Checkbox:r.Checkbox,Area:o.Area,Radio:i.Radio,Uploader:a.Uploader,Preview:s.Preview},n="1.0.0";exports.Checkbox=r.Checkbox;exports.Area=o.Area;exports.Radio=i.Radio;exports.Uploader=a.Uploader;exports.Preview=s.Preview;exports.default=d;exports.install=t;exports.version=n;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/index.js"],"sourcesContent":["/**\r\n * Vant-VTK 组件库全量导出入口\r\n * 支持全量引入和按需引入\r\n */\r\nimport Checkbox from '../packages/checkbox/index.js'\r\nimport Area from '../packages/Area/index.js'\r\nimport Radio from '../packages/Radio/index.js'\r\nimport Uploader from '../packages/Uploader/index.js'\r\nimport Preview from '../packages/preview/index.js'\r\n\r\n\r\n\r\n// 所有组件列表\r\nconst components = [\r\n Checkbox,\r\n Area,\r\n Radio,\r\n Uploader,\r\n Preview\r\n]\r\n\r\n// 全量注册方法\r\nconst install = (app) => {\r\n components.forEach(component => {\r\n if (component.install) {\r\n app.use(component)\r\n } else if (component.name) {\r\n app.component(component.name, component)\r\n }\r\n })\r\n}\r\n\r\n// 默认导出 - 支持 app.use(VantVtk) 全量注册\r\nexport default {\r\n install,\r\n // 也导出所有组件,方便直接访问\r\n Checkbox,\r\n Area,\r\n Radio,\r\n Uploader,\r\n Preview\r\n}\r\n\r\n// 具名导出 - 支持按需引入\r\nexport {\r\n install,\r\n Checkbox,\r\n Area,\r\n Radio,\r\n Uploader,\r\n Preview\r\n}\r\n\r\n// 导出版本号\r\nexport const version = '1.0.0'\r\n"],"names":["components","Checkbox","Area","Radio","Uploader","Preview","install","app","component","index","version"],"mappings":"iPAaMA,EAAa,CACjBC,EAAAA,SACAC,EAAAA,KACAC,EAAAA,MACAC,EAAAA,SACAC,EAAAA,OACF,EAGMC,EAAWC,GAAQ,CACvBP,EAAW,QAAQQ,GAAa,CAC1BA,EAAU,QACZD,EAAI,IAAIC,CAAS,EACRA,EAAU,MACnBD,EAAI,UAAUC,EAAU,KAAMA,CAAS,CAE3C,CAAC,CACH,EAGAC,EAAe,CACb,QAAAH,EAEF,SAAEL,EAAAA,SACF,KAAEC,EAAAA,KACF,MAAEC,EAAAA,MACF,SAAEC,EAAAA,SACF,QAAEC,EAAAA,OACF,EAaaK,EAAU"}
@@ -0,0 +1 @@
1
+ .file-preview-container[data-v-1ad2c749]{display:flex;flex-direction:column;height:100%;background-color:#fff;border-radius:8px;overflow:hidden}.file-header[data-v-1ad2c749]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #ebedf0;background-color:#f7f8fa}.file-title[data-v-1ad2c749]{font-size:16px;font-weight:600;color:#323233}.file-content[data-v-1ad2c749]{flex:1;overflow:hidden;display:flex;flex-direction:column}.image-preview[data-v-1ad2c749]{flex:1;display:flex;flex-direction:column;overflow:hidden}.preview-image[data-v-1ad2c749]{flex:1;width:100%;height:100%}.image-footer[data-v-1ad2c749]{display:flex;align-items:center;justify-content:center;gap:16px;padding:12px 16px;border-top:1px solid #ebedf0;background-color:#fff}.file-info[data-v-1ad2c749]{font-size:14px;color:#646566;min-width:80px;text-align:center}.pdf-preview[data-v-1ad2c749]{flex:1;display:flex;flex-direction:column;overflow:hidden}.pdf-embed-preview[data-v-1ad2c749]{flex:1;max-width:100%;overflow-y:auto;padding:16px;display:flex;justify-content:center;align-items:flex-start;background-color:#f5f5f5;box-shadow:0 2px 8px #0000001a}.pdf-placeholder[data-v-1ad2c749]{flex:1;display:flex;align-items:center;justify-content:center;color:#969799;font-size:14px}.pdf-footer[data-v-1ad2c749]{display:flex;align-items:center;justify-content:center;gap:16px;padding:12px 16px;border-top:1px solid #ebedf0;background-color:#fff}.page-info[data-v-1ad2c749]{font-size:14px;color:#646566;min-width:80px;text-align:center}.footer[data-v-1ad2c749]{position:fixed;top:40%;width:100%}.footer .van-button[data-v-1ad2c749]:nth-child(2){float:right}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),B=require("vue-pdf-embed"),S=require("./_plugin-vue_export-helper-BHFhmbuH.cjs"),D={class:"file-preview-container"},z={class:"file-header"},F={class:"file-title"},I={class:"file-content"},T={key:0,class:"image-preview"},L={class:"image-footer"},$={class:"file-info"},q={key:1,class:"pdf-preview"},j={key:1,class:"pdf-placeholder"},M={class:"pdf-footer"},O={class:"page-info"},R={class:"footer"},W=Object.assign({name:"VtkPreview"},{__name:"index",props:{modelValue:{type:Boolean,default:!1},files:{type:Array,default:()=>[]},startIndex:{type:Number,default:0}},emits:["update:modelValue","close"],setup(s,{emit:N}){const d=s,V=N,u=e.ref(d.modelValue),o=e.ref(d.startIndex),a=e.ref(1),r=e.ref(null),c=e.ref(0),f=e.computed(()=>d.files.map((t,l)=>{if(typeof t=="string"){const p=t.toLowerCase().endsWith(".pdf");return{name:p?`文档${l+1}.pdf`:`图片${l+1}`,url:t,type:p?"pdf":"image"}}return t})),n=e.computed(()=>f.value[o.value]||null),_=e.computed(()=>{if(!n.value)return null;const t=n.value.url||n.value;return typeof t=="string"?t.toLowerCase().endsWith(".pdf")?"pdf":"image":n.value.type||"image"});e.watch(()=>d.modelValue,t=>{u.value=t,t&&f.value.length>0&&(o.value=d.startIndex,g())}),e.watch(()=>d.startIndex,t=>{o.value=t,g()}),e.watch(u,t=>{V("update:modelValue",t),t||y()}),e.watch(o,()=>{a.value=1,c.value=0,g()});const g=()=>{const t=n.value;t&&(_.value==="pdf"?r.value=t.url||t:r.value=null)},b=t=>{c.value=t.numPages||0},C=()=>{console.log("PDF rendered successfully")},h=()=>{o.value>0&&o.value--},w=()=>{o.value<f.value.length-1&&o.value++},y=()=>{u.value=!1,r.value=null,a.value=1,c.value=0,V("close")};return(t,l)=>{const p=e.resolveComponent("van-icon"),x=e.resolveComponent("van-image"),i=e.resolveComponent("van-button"),P=e.resolveComponent("van-popup");return e.openBlock(),e.createBlock(P,{show:u.value,"onUpdate:show":l[2]||(l[2]=m=>u.value=m),position:"bottom",style:{height:"100vh"}},{default:e.withCtx(()=>{var m,k;return[e.createElementVNode("div",D,[e.createElementVNode("div",z,[e.createElementVNode("div",F,e.toDisplayString(((m=n.value)==null?void 0:m.name)||"文件预览"),1),e.createVNode(p,{name:"cross",size:"20",onClick:y})]),e.createElementVNode("div",I,[_.value==="image"?(e.openBlock(),e.createElementBlock("div",T,[e.createVNode(x,{src:(k=n.value)==null?void 0:k.url,fit:"contain",class:"preview-image"},null,8,["src"]),e.createElementVNode("div",L,[e.createVNode(i,{size:"small",disabled:o.value<=0,onClick:h},{default:e.withCtx(()=>[...l[3]||(l[3]=[e.createTextVNode("上一个",-1)])]),_:1},8,["disabled"]),e.createElementVNode("span",$,e.toDisplayString(o.value+1)+" / "+e.toDisplayString(s.files.length),1),e.createVNode(i,{size:"small",disabled:o.value>=s.files.length-1,onClick:w},{default:e.withCtx(()=>[...l[4]||(l[4]=[e.createTextVNode("下一个",-1)])]),_:1},8,["disabled"])])])):_.value==="pdf"?(e.openBlock(),e.createElementBlock("div",q,[r.value?(e.openBlock(),e.createBlock(e.unref(B),{key:0,source:r.value,page:a.value,class:"pdf-embed-preview",onRendered:C,onLoaded:b},null,8,["source","page"])):(e.openBlock(),e.createElementBlock("div",j,"请选择PDF文件")),e.createElementVNode("div",M,[e.createVNode(i,{size:"small",disabled:a.value<=1,onClick:l[0]||(l[0]=E=>a.value--)},{default:e.withCtx(()=>[...l[5]||(l[5]=[e.createTextVNode("上一页",-1)])]),_:1},8,["disabled"]),e.createElementVNode("span",O,"第 "+e.toDisplayString(a.value)+" / "+e.toDisplayString(c.value||"?")+" 页",1),e.createVNode(i,{size:"small",disabled:!r.value||a.value>=c.value,onClick:l[1]||(l[1]=E=>a.value++)},{default:e.withCtx(()=>[...l[6]||(l[6]=[e.createTextVNode("下一页",-1)])]),_:1},8,["disabled"])])])):e.createCommentVNode("",!0),e.createElementVNode("div",R,[e.createVNode(i,{disabled:o.value<=0,onClick:h,icon:"arrow-left",type:"primary",round:""},null,8,["disabled"]),e.createVNode(i,{disabled:o.value>=s.files.length-1,onClick:w,icon:"arrow",type:"primary",round:""},null,8,["disabled"])])])])]}),_:1},8,["show"])}}}),v=S._export_sfc(W,[["__scopeId","data-v-1ad2c749"]]);v.install=s=>{s.component(v.name||"VtkPreview",v)};exports.Preview=v;exports.default=v;
2
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sources":["../../packages/preview/index.vue","../../packages/preview/index.js"],"sourcesContent":["<template>\r\n\t<van-popup v-model:show=\"showPopup\" position=\"bottom\" :style=\"{ height: '100vh' }\">\r\n\t\t<div class=\"file-preview-container\">\r\n\t\t\t<div class=\"file-header\">\r\n\t\t\t\t<div class=\"file-title\">{{ currentFile?.name || \"文件预览\" }}</div>\r\n\t\t\t\t<van-icon name=\"cross\" size=\"20\" @click=\"handleClose\" />\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"file-content\">\r\n\t\t\t\t<div v-if=\"currentType === 'image'\" class=\"image-preview\">\r\n\t\t\t\t\t<van-image :src=\"currentFile?.url\" fit=\"contain\" class=\"preview-image\" />\r\n\t\t\t\t\t<div class=\"image-footer\">\r\n\t\t\t\t\t\t<van-button size=\"small\" :disabled=\"currentIndex <= 0\" @click=\"prevFile\">上一个</van-button>\r\n\t\t\t\t\t\t<span class=\"file-info\">{{ currentIndex + 1 }} / {{ files.length }}</span>\r\n\t\t\t\t\t\t<van-button size=\"small\" :disabled=\"currentIndex >= files.length - 1\" @click=\"nextFile\">下一个</van-button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div v-else-if=\"currentType === 'pdf'\" class=\"pdf-preview\">\r\n\t\t\t\t\t<VuePdfEmbed v-if=\"pdfSource\" :source=\"pdfSource\" :page=\"currentPage\" class=\"pdf-embed-preview\" @rendered=\"handlePdfRendered\" @loaded=\"handlePdfLoaded\" />\r\n\t\t\t\t\t<div v-else class=\"pdf-placeholder\">请选择PDF文件</div>\r\n\t\t\t\t\t<div class=\"pdf-footer\">\r\n\t\t\t\t\t\t<van-button size=\"small\" :disabled=\"currentPage <= 1\" @click=\"currentPage--\">上一页</van-button>\r\n\t\t\t\t\t\t<span class=\"page-info\">第 {{ currentPage }} / {{ totalPages || \"?\" }} 页</span>\r\n\t\t\t\t\t\t<van-button size=\"small\" :disabled=\"!pdfSource || currentPage >= totalPages\" @click=\"currentPage++\">下一页</van-button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div class=\"footer\">\r\n\t\t\t\t\t<van-button :disabled=\"currentIndex <= 0\" @click=\"prevFile\" icon=\"arrow-left\" type=\"primary\" round />\r\n\t\t\t\t\t<van-button :disabled=\"currentIndex >= files.length - 1\" @click=\"nextFile\" icon=\"arrow\" type=\"primary\" round />\r\n\t\t\t\t\t<!-- <van-button size=\"small\" :disabled=\"currentIndex <= 0\" @click=\"prevFile\">上一个</van-button>\r\n <span class=\"file-info\">{{ currentIndex + 1 }} / {{ files.length }}</span>\r\n <van-button size=\"small\" :disabled=\"currentIndex >= files.length - 1\" @click=\"nextFile\">下一个</van-button> -->\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</van-popup>\r\n</template>\r\n\r\n<script setup>\r\ndefineOptions({\r\n\tname: \"VtkPreview\",\r\n});\r\nimport { ref, watch, computed } from \"vue\";\r\nimport VuePdfEmbed from \"vue-pdf-embed\";\r\n\r\nconst props = defineProps({\r\n\tmodelValue: {\r\n\t\ttype: Boolean,\r\n\t\tdefault: false,\r\n\t},\r\n\tfiles: {\r\n\t\ttype: Array,\r\n\t\tdefault: () => [],\r\n\t},\r\n\tstartIndex: {\r\n\t\ttype: Number,\r\n\t\tdefault: 0,\r\n\t},\r\n});\r\n\r\nconst emit = defineEmits([\"update:modelValue\", \"close\"]);\r\n\r\nconst showPopup = ref(props.modelValue);\r\nconst currentIndex = ref(props.startIndex);\r\nconst currentPage = ref(1);\r\nconst pdfSource = ref(null);\r\nconst totalPages = ref(0);\r\n\r\nconst normalizedFiles = computed(() => {\r\n\treturn props.files.map((file, index) => {\r\n\t\tif (typeof file === \"string\") {\r\n\t\t\tconst isPdf = file.toLowerCase().endsWith(\".pdf\");\r\n\t\t\treturn {\r\n\t\t\t\tname: isPdf ? `文档${index + 1}.pdf` : `图片${index + 1}`,\r\n\t\t\t\turl: file,\r\n\t\t\t\ttype: isPdf ? \"pdf\" : \"image\",\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn file;\r\n\t});\r\n});\r\n\r\nconst currentFile = computed(() => {\r\n\treturn normalizedFiles.value[currentIndex.value] || null;\r\n});\r\n\r\nconst currentType = computed(() => {\r\n\tif (!currentFile.value) return null;\r\n\tconst url = currentFile.value.url || currentFile.value;\r\n\tif (typeof url === \"string\") {\r\n\t\treturn url.toLowerCase().endsWith(\".pdf\") ? \"pdf\" : \"image\";\r\n\t}\r\n\treturn currentFile.value.type || \"image\";\r\n});\r\n\r\nwatch(\r\n\t() => props.modelValue,\r\n\t(val) => {\r\n\t\tshowPopup.value = val;\r\n\t\tif (val && normalizedFiles.value.length > 0) {\r\n\t\t\tcurrentIndex.value = props.startIndex;\r\n\t\t\tupdatePreview();\r\n\t\t}\r\n\t},\r\n);\r\n\r\nwatch(\r\n\t() => props.startIndex,\r\n\t(val) => {\r\n\t\tcurrentIndex.value = val;\r\n\t\tupdatePreview();\r\n\t},\r\n);\r\n\r\nwatch(showPopup, (val) => {\r\n\temit(\"update:modelValue\", val);\r\n\tif (!val) {\r\n\t\thandleClose();\r\n\t}\r\n});\r\n\r\nwatch(currentIndex, () => {\r\n\tcurrentPage.value = 1;\r\n\ttotalPages.value = 0;\r\n\tupdatePreview();\r\n});\r\n\r\nconst updatePreview = () => {\r\n\tconst file = currentFile.value;\r\n\tif (!file) return;\r\n\r\n\tif (currentType.value === \"pdf\") {\r\n\t\tpdfSource.value = file.url || file;\r\n\t} else {\r\n\t\tpdfSource.value = null;\r\n\t}\r\n};\r\n\r\nconst handlePdfLoaded = (pdf) => {\r\n\ttotalPages.value = pdf.numPages || 0;\r\n};\r\n\r\nconst handlePdfRendered = () => {\r\n\tconsole.log(\"PDF rendered successfully\");\r\n};\r\n\r\nconst prevFile = () => {\r\n\tif (currentIndex.value > 0) {\r\n\t\tcurrentIndex.value--;\r\n\t}\r\n};\r\n\r\nconst nextFile = () => {\r\n\tif (currentIndex.value < normalizedFiles.value.length - 1) {\r\n\t\tcurrentIndex.value++;\r\n\t}\r\n};\r\n\r\nconst handleClose = () => {\r\n\tshowPopup.value = false;\r\n\tpdfSource.value = null;\r\n\tcurrentPage.value = 1;\r\n\ttotalPages.value = 0;\r\n\temit(\"close\");\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.file-preview-container {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\theight: 100%;\r\n\tbackground-color: #fff;\r\n\tborder-radius: 8px;\r\n\toverflow: hidden;\r\n}\r\n\r\n.file-header {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: space-between;\r\n\tpadding: 12px 16px;\r\n\tborder-bottom: 1px solid #ebedf0;\r\n\tbackground-color: #f7f8fa;\r\n}\r\n\r\n.file-title {\r\n\tfont-size: 16px;\r\n\tfont-weight: 600;\r\n\tcolor: #323233;\r\n}\r\n\r\n.file-content {\r\n\tflex: 1;\r\n\toverflow: hidden;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n.image-preview {\r\n\tflex: 1;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\toverflow: hidden;\r\n}\r\n\r\n.preview-image {\r\n\tflex: 1;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n}\r\n\r\n.image-footer {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tgap: 16px;\r\n\tpadding: 12px 16px;\r\n\tborder-top: 1px solid #ebedf0;\r\n\tbackground-color: #fff;\r\n}\r\n\r\n.file-info {\r\n\tfont-size: 14px;\r\n\tcolor: #646566;\r\n\tmin-width: 80px;\r\n\ttext-align: center;\r\n}\r\n\r\n.pdf-preview {\r\n\tflex: 1;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\toverflow: hidden;\r\n}\r\n\r\n.pdf-embed-preview {\r\n\tflex: 1;\r\n\tmax-width: 100%;\r\n\toverflow-y: auto;\r\n\tpadding: 16px;\r\n\tdisplay: flex;\r\n\tjustify-content: center;\r\n\talign-items: flex-start;\r\n\tbackground-color: #f5f5f5;\r\n\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.pdf-placeholder {\r\n\tflex: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tcolor: #969799;\r\n\tfont-size: 14px;\r\n}\r\n\r\n.pdf-footer {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tgap: 16px;\r\n\tpadding: 12px 16px;\r\n\tborder-top: 1px solid #ebedf0;\r\n\tbackground-color: #fff;\r\n}\r\n\r\n.page-info {\r\n\tfont-size: 14px;\r\n\tcolor: #646566;\r\n\tmin-width: 80px;\r\n\ttext-align: center;\r\n}\r\n.footer {\r\n\tposition: fixed;\r\n\ttop: 40%;\r\n\twidth: 100%;\r\n\t.van-button {\r\n\t}\r\n\t.van-button:nth-child(2) {\r\n\t\tfloat: right;\r\n\t}\r\n}\r\n</style>\r\n","/**\r\n * Preview 组件单独导出入口\r\n * 支持按需引入\r\n */\r\nimport Preview from './index.vue'\r\n\r\n// 为组件添加 install 方法,支持 app.use() 方式注册\r\nPreview.install = (app) => {\r\n app.component(Preview.name || 'VtkPreview', Preview)\r\n}\r\n\r\nexport default Preview\r\nexport { Preview }\r\n"],"names":["props","__props","emit","__emit","showPopup","ref","currentIndex","currentPage","pdfSource","totalPages","normalizedFiles","computed","file","index","isPdf","currentFile","currentType","url","watch","val","updatePreview","handleClose","handlePdfLoaded","pdf","handlePdfRendered","prevFile","nextFile","_createBlock","_component_van_popup","$event","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_toDisplayString","_a","_createVNode","_component_van_icon","_hoisted_4","_openBlock","_createElementBlock","_hoisted_5","_component_van_image","_b","_hoisted_6","_component_van_button","_cache","_hoisted_7","_hoisted_8","_unref","VuePdfEmbed","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","Preview","app"],"mappings":"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"}
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- [data-v-eb64e8a9] .van-checkbox{margin-bottom:8px;margin-right:12px}[data-v-3482e335] .van-radio{margin-right:12px}[data-v-2ccc0da3] .van-uploader__preview-image,[data-v-2ccc0da3] .van-uploader__upload{border-radius:4px}.file-preview-container[data-v-1ad2c749]{display:flex;flex-direction:column;height:100%;background-color:#fff;border-radius:8px;overflow:hidden}.file-header[data-v-1ad2c749]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #ebedf0;background-color:#f7f8fa}.file-title[data-v-1ad2c749]{font-size:16px;font-weight:600;color:#323233}.file-content[data-v-1ad2c749]{flex:1;overflow:hidden;display:flex;flex-direction:column}.image-preview[data-v-1ad2c749]{flex:1;display:flex;flex-direction:column;overflow:hidden}.preview-image[data-v-1ad2c749]{flex:1;width:100%;height:100%}.image-footer[data-v-1ad2c749]{display:flex;align-items:center;justify-content:center;gap:16px;padding:12px 16px;border-top:1px solid #ebedf0;background-color:#fff}.file-info[data-v-1ad2c749]{font-size:14px;color:#646566;min-width:80px;text-align:center}.pdf-preview[data-v-1ad2c749]{flex:1;display:flex;flex-direction:column;overflow:hidden}.pdf-embed-preview[data-v-1ad2c749]{flex:1;max-width:100%;overflow-y:auto;padding:16px;display:flex;justify-content:center;align-items:flex-start;background-color:#f5f5f5;box-shadow:0 2px 8px #0000001a}.pdf-placeholder[data-v-1ad2c749]{flex:1;display:flex;align-items:center;justify-content:center;color:#969799;font-size:14px}.pdf-footer[data-v-1ad2c749]{display:flex;align-items:center;justify-content:center;gap:16px;padding:12px 16px;border-top:1px solid #ebedf0;background-color:#fff}.page-info[data-v-1ad2c749]{font-size:14px;color:#646566;min-width:80px;text-align:center}.footer[data-v-1ad2c749]{position:fixed;top:40%;width:100%}.footer .van-button[data-v-1ad2c749]:nth-child(2){float:right}
1
+ [data-v-eb64e8a9] .van-checkbox{margin-bottom:8px;margin-right:12px}[data-v-3482e335] .van-radio{margin-right:12px}[data-v-620ae5d0] .van-uploader__preview-image,[data-v-620ae5d0] .van-uploader__upload{border-radius:4px}.file-preview-container[data-v-1ad2c749]{display:flex;flex-direction:column;height:100%;background-color:#fff;border-radius:8px;overflow:hidden}.file-header[data-v-1ad2c749]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #ebedf0;background-color:#f7f8fa}.file-title[data-v-1ad2c749]{font-size:16px;font-weight:600;color:#323233}.file-content[data-v-1ad2c749]{flex:1;overflow:hidden;display:flex;flex-direction:column}.image-preview[data-v-1ad2c749]{flex:1;display:flex;flex-direction:column;overflow:hidden}.preview-image[data-v-1ad2c749]{flex:1;width:100%;height:100%}.image-footer[data-v-1ad2c749]{display:flex;align-items:center;justify-content:center;gap:16px;padding:12px 16px;border-top:1px solid #ebedf0;background-color:#fff}.file-info[data-v-1ad2c749]{font-size:14px;color:#646566;min-width:80px;text-align:center}.pdf-preview[data-v-1ad2c749]{flex:1;display:flex;flex-direction:column;overflow:hidden}.pdf-embed-preview[data-v-1ad2c749]{flex:1;max-width:100%;overflow-y:auto;padding:16px;display:flex;justify-content:center;align-items:flex-start;background-color:#f5f5f5;box-shadow:0 2px 8px #0000001a}.pdf-placeholder[data-v-1ad2c749]{flex:1;display:flex;align-items:center;justify-content:center;color:#969799;font-size:14px}.pdf-footer[data-v-1ad2c749]{display:flex;align-items:center;justify-content:center;gap:16px;padding:12px 16px;border-top:1px solid #ebedf0;background-color:#fff}.page-info[data-v-1ad2c749]{font-size:14px;color:#646566;min-width:80px;text-align:center}.footer[data-v-1ad2c749]{position:fixed;top:40%;width:100%}.footer .van-button[data-v-1ad2c749]:nth-child(2){float:right}