smart-admin-web 10.26.0 → 10.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.d.ts +163 -0
- package/dist/api/index.js +195 -108
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.d.ts +1465 -109
- package/dist/assets/icons/ph-subset.json.js +1 -1
- package/dist/components/FilePathUpload/index.vue.d.ts +35 -0
- package/dist/components/FilePathUpload/index.vue.js +47 -0
- package/dist/components/FilePathUpload/index.vue.js.map +1 -0
- package/dist/components/FilePathUpload/index2.vue.js +5 -0
- package/dist/components/FilePathUpload/index2.vue.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +302 -294
- package/dist/index.js.map +1 -1
- package/dist/lib/runtime.js +1 -1
- package/dist/locales/en-US.d.ts +141 -0
- package/dist/locales/en-US.js +136 -0
- package/dist/locales/en-US.js.map +1 -1
- package/dist/locales/kernelMenuTitles.js +10 -0
- package/dist/locales/kernelMenuTitles.js.map +1 -1
- package/dist/locales/zh-CN.d.ts +141 -0
- package/dist/locales/zh-CN.js +136 -0
- package/dist/locales/zh-CN.js.map +1 -1
- package/dist/router/viewRegistry.js +8 -8
- package/dist/router/viewRegistry.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/utils/error.js +22 -18
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/filePathUpload.d.ts +14 -0
- package/dist/utils/filePathUpload.js +84 -0
- package/dist/utils/filePathUpload.js.map +1 -0
- package/dist/views/system/file-path/access.d.ts +15 -0
- package/dist/views/system/file-path/access.js +49 -0
- package/dist/views/system/file-path/access.js.map +1 -0
- package/dist/views/system/file-path/components/PathForm.vue.d.ts +18 -0
- package/dist/views/system/file-path/components/PathForm.vue.js +8 -0
- package/dist/views/system/file-path/components/PathForm.vue.js.map +1 -0
- package/dist/views/system/file-path/components/PathForm2.vue.js +529 -0
- package/dist/views/system/file-path/components/PathForm2.vue.js.map +1 -0
- package/dist/views/system/file-path/components/PathTab.vue.d.ts +3 -0
- package/dist/views/system/file-path/components/PathTab.vue.js +8 -0
- package/dist/views/system/file-path/components/PathTab.vue.js.map +1 -0
- package/dist/views/system/file-path/components/PathTab2.vue.js +226 -0
- package/dist/views/system/file-path/components/PathTab2.vue.js.map +1 -0
- package/dist/views/system/file-path/components/ServerForm.vue.d.ts +20 -0
- package/dist/views/system/file-path/components/ServerForm.vue.js +8 -0
- package/dist/views/system/file-path/components/ServerForm.vue.js.map +1 -0
- package/dist/views/system/file-path/components/ServerForm2.vue.js +328 -0
- package/dist/views/system/file-path/components/ServerForm2.vue.js.map +1 -0
- package/dist/views/system/file-path/components/ServerTab.vue.d.ts +7 -0
- package/dist/views/system/file-path/components/ServerTab.vue.js +8 -0
- package/dist/views/system/file-path/components/ServerTab.vue.js.map +1 -0
- package/dist/views/system/file-path/components/ServerTab2.vue.js +181 -0
- package/dist/views/system/file-path/components/ServerTab2.vue.js.map +1 -0
- package/dist/views/system/file-path/index.vue.d.ts +3 -0
- package/dist/views/system/file-path/index.vue.js +8 -0
- package/dist/views/system/file-path/index.vue.js.map +1 -0
- package/dist/views/system/file-path/index2.vue.js +61 -0
- package/dist/views/system/file-path/index2.vue.js.map +1 -0
- package/dist/views/system/file-path/rules.d.ts +61 -0
- package/dist/views/system/file-path/rules.js +53 -0
- package/dist/views/system/file-path/rules.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
import { defineComponent as te, useModel as ne, ref as b, computed as p, reactive as oe, watch as F, resolveDirective as re, openBlock as f, createBlock as w, unref as e, withCtx as o, createTextVNode as m, toDisplayString as s, createCommentVNode as v, createVNode as n, mergeProps as ie, createElementBlock as R, createElementVNode as P, Fragment as de, withDirectives as se, normalizeClass as ue, mergeModels as j } from "vue";
|
|
2
|
+
import { useMessage as fe, NAlert as q, NForm as me, NFormItem as d, NSpace as h, NInput as g, NSelect as A, NRadioGroup as pe, NRadioButton as D, NSwitch as L, NInputNumber as ve, NButton as he } from "naive-ui";
|
|
3
|
+
import { useMediaQuery as ce } from "@vueuse/core";
|
|
4
|
+
import { useI18n as be } from "vue-i18n";
|
|
5
|
+
import we from "../../../../components/AppIcon.vue.js";
|
|
6
|
+
import Pe from "../../../../components/FormContainer/index.vue.js";
|
|
7
|
+
/* empty css */
|
|
8
|
+
import $ from "../../../../components/RoleSelect/index.vue.js";
|
|
9
|
+
import { fileServerApi as ge, filePathApi as E } from "../../../../api/index.js";
|
|
10
|
+
import { translateError as M } from "../../../../utils/error.js";
|
|
11
|
+
import { reasonText as ye } from "../access.js";
|
|
12
|
+
import { folderPreview as xe, exampleFileName as Re, NAMING_RULE_LABEL_KEYS as Ie, overwriteRisk as ke, NamingRule as S, ConflictMode as I, normalizeExtensions as V, CODE_PATTERN as Ne } from "../rules.js";
|
|
13
|
+
const ze = {
|
|
14
|
+
key: 0,
|
|
15
|
+
class: "hint"
|
|
16
|
+
}, Oe = {
|
|
17
|
+
key: 0,
|
|
18
|
+
class: "hint"
|
|
19
|
+
}, _e = { class: "mono" }, Ee = { class: "hint" }, Me = { class: "mono" }, Se = { class: "hint" }, Ce = { class: "hint" }, Ge = /* @__PURE__ */ te({
|
|
20
|
+
__name: "PathForm",
|
|
21
|
+
props: /* @__PURE__ */ j({
|
|
22
|
+
editing: {}
|
|
23
|
+
}, {
|
|
24
|
+
show: { type: Boolean, default: !1 },
|
|
25
|
+
showModifiers: {}
|
|
26
|
+
}),
|
|
27
|
+
emits: /* @__PURE__ */ j(["saved"], ["update:show"]),
|
|
28
|
+
setup(c, { emit: H }) {
|
|
29
|
+
const k = ne(c, "show"), N = c, G = H, { t } = be(), y = fe(), C = b(null), W = ce("(max-width: 640px)"), Y = p(
|
|
30
|
+
() => W.value ? { labelPlacement: "top", labelWidth: void 0 } : { labelPlacement: "left", labelWidth: 120 }
|
|
31
|
+
), U = () => ({
|
|
32
|
+
code: "",
|
|
33
|
+
name: "",
|
|
34
|
+
serverId: null,
|
|
35
|
+
folder: "",
|
|
36
|
+
namingRule: S.YearMonthOriginal,
|
|
37
|
+
onConflict: I.Reject,
|
|
38
|
+
readOnly: !1,
|
|
39
|
+
allowedExtensions: "",
|
|
40
|
+
maxSizeMb: null,
|
|
41
|
+
uploadRoleIds: [],
|
|
42
|
+
downloadRoleIds: [],
|
|
43
|
+
enabled: !0,
|
|
44
|
+
remark: ""
|
|
45
|
+
}), l = oe(U()), z = b([]), O = b(!1);
|
|
46
|
+
async function K() {
|
|
47
|
+
O.value = !0;
|
|
48
|
+
try {
|
|
49
|
+
z.value = await ge.options();
|
|
50
|
+
} catch (i) {
|
|
51
|
+
y.error(M(i));
|
|
52
|
+
} finally {
|
|
53
|
+
O.value = !1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const Q = p(
|
|
57
|
+
() => z.value.map((i) => ({
|
|
58
|
+
label: i.enabled ? i.name : `${i.name} (${t("common.disabled")})`,
|
|
59
|
+
value: Number(i.id),
|
|
60
|
+
disabled: !i.enabled
|
|
61
|
+
}))
|
|
62
|
+
), B = p(
|
|
63
|
+
() => {
|
|
64
|
+
var i;
|
|
65
|
+
return ((i = z.value.find((a) => Number(a.id) === l.serverId)) == null ? void 0 : i.rootPath) ?? "";
|
|
66
|
+
}
|
|
67
|
+
), T = p(() => B.value ? xe(B.value, l.folder) : ""), J = p(() => Re(l.namingRule, /* @__PURE__ */ new Date())), X = p(
|
|
68
|
+
() => Object.entries(Ie).map(([i, a]) => ({
|
|
69
|
+
label: t(a),
|
|
70
|
+
value: Number(i)
|
|
71
|
+
}))
|
|
72
|
+
), Z = p(() => ke(l)), ee = {
|
|
73
|
+
code: {
|
|
74
|
+
validator: (i, a) => Ne.test(a) || new Error(t("filePath.path.codeInvalid")),
|
|
75
|
+
trigger: ["input", "blur"]
|
|
76
|
+
},
|
|
77
|
+
name: {
|
|
78
|
+
required: !0,
|
|
79
|
+
whitespace: !0,
|
|
80
|
+
message: () => t("filePath.path.nameRequired"),
|
|
81
|
+
trigger: ["input", "blur"]
|
|
82
|
+
},
|
|
83
|
+
serverId: {
|
|
84
|
+
required: !0,
|
|
85
|
+
type: "number",
|
|
86
|
+
message: () => t("filePath.path.serverRequired"),
|
|
87
|
+
trigger: ["change", "blur"]
|
|
88
|
+
},
|
|
89
|
+
allowedExtensions: {
|
|
90
|
+
validator: () => {
|
|
91
|
+
if (l.readOnly) return !0;
|
|
92
|
+
const i = V(l.allowedExtensions);
|
|
93
|
+
return i === null ? new Error(t("filePath.path.extensionsInvalid")) : i !== "" || new Error(t("filePath.path.extensionsRequired"));
|
|
94
|
+
},
|
|
95
|
+
trigger: ["input", "blur"]
|
|
96
|
+
},
|
|
97
|
+
maxSizeMb: {
|
|
98
|
+
validator: () => l.readOnly || (l.maxSizeMb ?? 0) > 0 || new Error(t("filePath.path.maxSizeRequired")),
|
|
99
|
+
trigger: ["change", "blur"]
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
F(k, (i) => {
|
|
103
|
+
if (!i) return;
|
|
104
|
+
u.value = null, K();
|
|
105
|
+
const a = N.editing;
|
|
106
|
+
Object.assign(
|
|
107
|
+
l,
|
|
108
|
+
a ? {
|
|
109
|
+
code: a.code,
|
|
110
|
+
name: a.name,
|
|
111
|
+
serverId: Number(a.serverId),
|
|
112
|
+
folder: a.folder ?? "",
|
|
113
|
+
namingRule: a.namingRule,
|
|
114
|
+
onConflict: a.onConflict,
|
|
115
|
+
readOnly: a.readOnly,
|
|
116
|
+
allowedExtensions: a.allowedExtensions ?? "",
|
|
117
|
+
maxSizeMb: a.maxSizeMb == null ? null : Number(a.maxSizeMb),
|
|
118
|
+
uploadRoleIds: a.uploadRoleIds.map(Number),
|
|
119
|
+
downloadRoleIds: a.downloadRoleIds.map(Number),
|
|
120
|
+
enabled: a.enabled,
|
|
121
|
+
remark: a.remark ?? ""
|
|
122
|
+
} : U()
|
|
123
|
+
);
|
|
124
|
+
});
|
|
125
|
+
const _ = b(!1), u = b(null);
|
|
126
|
+
F(
|
|
127
|
+
() => [l.serverId, l.folder, l.readOnly],
|
|
128
|
+
() => {
|
|
129
|
+
u.value = null;
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
async function le() {
|
|
133
|
+
if (l.serverId !== null) {
|
|
134
|
+
_.value = !0, u.value = null;
|
|
135
|
+
try {
|
|
136
|
+
u.value = await E.test({
|
|
137
|
+
serverId: l.serverId,
|
|
138
|
+
folder: l.folder.trim() || null,
|
|
139
|
+
readOnly: l.readOnly
|
|
140
|
+
});
|
|
141
|
+
} catch (i) {
|
|
142
|
+
y.error(M(i));
|
|
143
|
+
} finally {
|
|
144
|
+
_.value = !1;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async function ae() {
|
|
149
|
+
var x;
|
|
150
|
+
await ((x = C.value) == null ? void 0 : x.validate());
|
|
151
|
+
const i = l.serverId;
|
|
152
|
+
if (i === null) return !1;
|
|
153
|
+
const a = {
|
|
154
|
+
name: l.name.trim(),
|
|
155
|
+
serverId: i,
|
|
156
|
+
folder: l.folder.trim() || null,
|
|
157
|
+
namingRule: l.namingRule,
|
|
158
|
+
// 同名处理只对业务指定路径有意义,其余命名规则不会撞名
|
|
159
|
+
onConflict: l.namingRule === S.BusinessPath ? l.onConflict : I.Reject,
|
|
160
|
+
readOnly: l.readOnly,
|
|
161
|
+
allowedExtensions: l.readOnly ? null : V(l.allowedExtensions),
|
|
162
|
+
maxSizeMb: l.readOnly ? null : l.maxSizeMb,
|
|
163
|
+
uploadRoleIds: l.uploadRoleIds,
|
|
164
|
+
downloadRoleIds: l.downloadRoleIds,
|
|
165
|
+
enabled: l.enabled,
|
|
166
|
+
remark: l.remark.trim() || null
|
|
167
|
+
};
|
|
168
|
+
try {
|
|
169
|
+
N.editing === null ? await E.add({ ...a, code: l.code.trim() }) : await E.update(Number(N.editing.id), a), y.success(t("filePath.saved")), G("saved");
|
|
170
|
+
} catch (r) {
|
|
171
|
+
return y.error(M(r)), !1;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return (i, a) => {
|
|
175
|
+
const x = re("auth");
|
|
176
|
+
return f(), w(Pe, {
|
|
177
|
+
show: k.value,
|
|
178
|
+
"onUpdate:show": a[13] || (a[13] = (r) => k.value = r),
|
|
179
|
+
variant: "drawer",
|
|
180
|
+
width: 640,
|
|
181
|
+
title: c.editing === null ? e(t)("filePath.path.addTitle") : e(t)("filePath.path.editTitle"),
|
|
182
|
+
"on-confirm": ae,
|
|
183
|
+
"confirm-text": e(t)("common.save")
|
|
184
|
+
}, {
|
|
185
|
+
default: o(() => [
|
|
186
|
+
c.editing ? (f(), w(e(q), {
|
|
187
|
+
key: 0,
|
|
188
|
+
type: "info",
|
|
189
|
+
bordered: !1,
|
|
190
|
+
class: "tip"
|
|
191
|
+
}, {
|
|
192
|
+
default: o(() => [
|
|
193
|
+
m(s(e(t)("filePath.path.moveTip")), 1)
|
|
194
|
+
]),
|
|
195
|
+
_: 1
|
|
196
|
+
})) : v("", !0),
|
|
197
|
+
n(e(me), ie({
|
|
198
|
+
ref_key: "formRef",
|
|
199
|
+
ref: C,
|
|
200
|
+
model: l,
|
|
201
|
+
rules: ee
|
|
202
|
+
}, Y.value), {
|
|
203
|
+
default: o(() => [
|
|
204
|
+
n(e(d), {
|
|
205
|
+
label: e(t)("filePath.path.code"),
|
|
206
|
+
path: "code"
|
|
207
|
+
}, {
|
|
208
|
+
default: o(() => [
|
|
209
|
+
n(e(h), {
|
|
210
|
+
vertical: "",
|
|
211
|
+
size: 2,
|
|
212
|
+
style: { width: "100%" }
|
|
213
|
+
}, {
|
|
214
|
+
default: o(() => [
|
|
215
|
+
n(e(g), {
|
|
216
|
+
value: l.code,
|
|
217
|
+
"onUpdate:value": a[0] || (a[0] = (r) => l.code = r),
|
|
218
|
+
maxlength: "64",
|
|
219
|
+
disabled: c.editing !== null,
|
|
220
|
+
placeholder: e(t)("filePath.path.codePlaceholder")
|
|
221
|
+
}, null, 8, ["value", "disabled", "placeholder"]),
|
|
222
|
+
c.editing ? (f(), R("span", ze, s(e(t)("filePath.path.codeImmutableHint")), 1)) : v("", !0)
|
|
223
|
+
]),
|
|
224
|
+
_: 1
|
|
225
|
+
})
|
|
226
|
+
]),
|
|
227
|
+
_: 1
|
|
228
|
+
}, 8, ["label"]),
|
|
229
|
+
n(e(d), {
|
|
230
|
+
label: e(t)("filePath.path.name"),
|
|
231
|
+
path: "name"
|
|
232
|
+
}, {
|
|
233
|
+
default: o(() => [
|
|
234
|
+
n(e(g), {
|
|
235
|
+
value: l.name,
|
|
236
|
+
"onUpdate:value": a[1] || (a[1] = (r) => l.name = r),
|
|
237
|
+
maxlength: "64",
|
|
238
|
+
placeholder: e(t)("filePath.path.name")
|
|
239
|
+
}, null, 8, ["value", "placeholder"])
|
|
240
|
+
]),
|
|
241
|
+
_: 1
|
|
242
|
+
}, 8, ["label"]),
|
|
243
|
+
n(e(d), {
|
|
244
|
+
label: e(t)("filePath.path.server"),
|
|
245
|
+
path: "serverId"
|
|
246
|
+
}, {
|
|
247
|
+
default: o(() => [
|
|
248
|
+
n(e(A), {
|
|
249
|
+
value: l.serverId,
|
|
250
|
+
"onUpdate:value": a[2] || (a[2] = (r) => l.serverId = r),
|
|
251
|
+
options: Q.value,
|
|
252
|
+
loading: O.value,
|
|
253
|
+
filterable: "",
|
|
254
|
+
placeholder: e(t)("filePath.path.serverPlaceholder")
|
|
255
|
+
}, null, 8, ["value", "options", "loading", "placeholder"])
|
|
256
|
+
]),
|
|
257
|
+
_: 1
|
|
258
|
+
}, 8, ["label"]),
|
|
259
|
+
n(e(d), {
|
|
260
|
+
label: e(t)("filePath.path.folder")
|
|
261
|
+
}, {
|
|
262
|
+
default: o(() => [
|
|
263
|
+
n(e(h), {
|
|
264
|
+
vertical: "",
|
|
265
|
+
size: 2,
|
|
266
|
+
style: { width: "100%" }
|
|
267
|
+
}, {
|
|
268
|
+
default: o(() => [
|
|
269
|
+
n(e(g), {
|
|
270
|
+
value: l.folder,
|
|
271
|
+
"onUpdate:value": a[3] || (a[3] = (r) => l.folder = r),
|
|
272
|
+
maxlength: "260",
|
|
273
|
+
placeholder: e(t)("filePath.path.folderPlaceholder")
|
|
274
|
+
}, null, 8, ["value", "placeholder"]),
|
|
275
|
+
T.value ? (f(), R("span", Oe, [
|
|
276
|
+
m(s(e(t)("filePath.path.fullFolder")) + " ", 1),
|
|
277
|
+
P("code", _e, s(T.value), 1)
|
|
278
|
+
])) : v("", !0)
|
|
279
|
+
]),
|
|
280
|
+
_: 1
|
|
281
|
+
})
|
|
282
|
+
]),
|
|
283
|
+
_: 1
|
|
284
|
+
}, 8, ["label"]),
|
|
285
|
+
n(e(d), {
|
|
286
|
+
label: e(t)("filePath.path.namingRule")
|
|
287
|
+
}, {
|
|
288
|
+
default: o(() => [
|
|
289
|
+
n(e(h), {
|
|
290
|
+
vertical: "",
|
|
291
|
+
size: 2,
|
|
292
|
+
style: { width: "100%" }
|
|
293
|
+
}, {
|
|
294
|
+
default: o(() => [
|
|
295
|
+
n(e(A), {
|
|
296
|
+
value: l.namingRule,
|
|
297
|
+
"onUpdate:value": a[4] || (a[4] = (r) => l.namingRule = r),
|
|
298
|
+
options: X.value
|
|
299
|
+
}, null, 8, ["value", "options"]),
|
|
300
|
+
P("span", Ee, [
|
|
301
|
+
m(s(e(t)("filePath.path.example")) + " ", 1),
|
|
302
|
+
P("code", Me, s(J.value), 1)
|
|
303
|
+
])
|
|
304
|
+
]),
|
|
305
|
+
_: 1
|
|
306
|
+
})
|
|
307
|
+
]),
|
|
308
|
+
_: 1
|
|
309
|
+
}, 8, ["label"]),
|
|
310
|
+
l.namingRule === e(S).BusinessPath ? (f(), w(e(d), {
|
|
311
|
+
key: 0,
|
|
312
|
+
label: e(t)("filePath.path.onConflict")
|
|
313
|
+
}, {
|
|
314
|
+
default: o(() => [
|
|
315
|
+
n(e(h), {
|
|
316
|
+
vertical: "",
|
|
317
|
+
size: 6,
|
|
318
|
+
style: { width: "100%" }
|
|
319
|
+
}, {
|
|
320
|
+
default: o(() => [
|
|
321
|
+
n(e(pe), {
|
|
322
|
+
value: l.onConflict,
|
|
323
|
+
"onUpdate:value": a[5] || (a[5] = (r) => l.onConflict = r)
|
|
324
|
+
}, {
|
|
325
|
+
default: o(() => [
|
|
326
|
+
n(e(D), {
|
|
327
|
+
value: e(I).Reject
|
|
328
|
+
}, {
|
|
329
|
+
default: o(() => [
|
|
330
|
+
m(s(e(t)("filePath.onConflict.reject")), 1)
|
|
331
|
+
]),
|
|
332
|
+
_: 1
|
|
333
|
+
}, 8, ["value"]),
|
|
334
|
+
n(e(D), {
|
|
335
|
+
value: e(I).Overwrite
|
|
336
|
+
}, {
|
|
337
|
+
default: o(() => [
|
|
338
|
+
m(s(e(t)("filePath.onConflict.overwrite")), 1)
|
|
339
|
+
]),
|
|
340
|
+
_: 1
|
|
341
|
+
}, 8, ["value"])
|
|
342
|
+
]),
|
|
343
|
+
_: 1
|
|
344
|
+
}, 8, ["value"]),
|
|
345
|
+
Z.value ? (f(), w(e(q), {
|
|
346
|
+
key: 0,
|
|
347
|
+
type: "warning",
|
|
348
|
+
bordered: !1
|
|
349
|
+
}, {
|
|
350
|
+
default: o(() => [
|
|
351
|
+
m(s(e(t)("filePath.path.overwriteRisk")), 1)
|
|
352
|
+
]),
|
|
353
|
+
_: 1
|
|
354
|
+
})) : v("", !0)
|
|
355
|
+
]),
|
|
356
|
+
_: 1
|
|
357
|
+
})
|
|
358
|
+
]),
|
|
359
|
+
_: 1
|
|
360
|
+
}, 8, ["label"])) : v("", !0),
|
|
361
|
+
n(e(d), {
|
|
362
|
+
label: e(t)("filePath.path.readOnly")
|
|
363
|
+
}, {
|
|
364
|
+
default: o(() => [
|
|
365
|
+
n(e(h), {
|
|
366
|
+
vertical: "",
|
|
367
|
+
size: 2,
|
|
368
|
+
style: { width: "100%" }
|
|
369
|
+
}, {
|
|
370
|
+
default: o(() => [
|
|
371
|
+
n(e(L), {
|
|
372
|
+
value: l.readOnly,
|
|
373
|
+
"onUpdate:value": a[6] || (a[6] = (r) => l.readOnly = r)
|
|
374
|
+
}, null, 8, ["value"]),
|
|
375
|
+
P("span", Se, s(e(t)("filePath.path.readOnlyHint")), 1)
|
|
376
|
+
]),
|
|
377
|
+
_: 1
|
|
378
|
+
})
|
|
379
|
+
]),
|
|
380
|
+
_: 1
|
|
381
|
+
}, 8, ["label"]),
|
|
382
|
+
l.readOnly ? v("", !0) : (f(), R(de, { key: 1 }, [
|
|
383
|
+
n(e(d), {
|
|
384
|
+
label: e(t)("filePath.path.extensions"),
|
|
385
|
+
path: "allowedExtensions"
|
|
386
|
+
}, {
|
|
387
|
+
default: o(() => [
|
|
388
|
+
n(e(h), {
|
|
389
|
+
vertical: "",
|
|
390
|
+
size: 2,
|
|
391
|
+
style: { width: "100%" }
|
|
392
|
+
}, {
|
|
393
|
+
default: o(() => [
|
|
394
|
+
n(e(g), {
|
|
395
|
+
value: l.allowedExtensions,
|
|
396
|
+
"onUpdate:value": a[7] || (a[7] = (r) => l.allowedExtensions = r),
|
|
397
|
+
maxlength: "500",
|
|
398
|
+
placeholder: e(t)("filePath.path.extensionsPlaceholder")
|
|
399
|
+
}, null, 8, ["value", "placeholder"]),
|
|
400
|
+
P("span", Ce, s(e(t)("filePath.path.extensionsHint")), 1)
|
|
401
|
+
]),
|
|
402
|
+
_: 1
|
|
403
|
+
})
|
|
404
|
+
]),
|
|
405
|
+
_: 1
|
|
406
|
+
}, 8, ["label"]),
|
|
407
|
+
n(e(d), {
|
|
408
|
+
label: e(t)("filePath.path.maxSize"),
|
|
409
|
+
path: "maxSizeMb"
|
|
410
|
+
}, {
|
|
411
|
+
default: o(() => [
|
|
412
|
+
n(e(ve), {
|
|
413
|
+
value: l.maxSizeMb,
|
|
414
|
+
"onUpdate:value": a[8] || (a[8] = (r) => l.maxSizeMb = r),
|
|
415
|
+
min: 1,
|
|
416
|
+
precision: 0,
|
|
417
|
+
style: { width: "200px" }
|
|
418
|
+
}, {
|
|
419
|
+
suffix: o(() => [...a[14] || (a[14] = [
|
|
420
|
+
m("MB", -1)
|
|
421
|
+
])]),
|
|
422
|
+
_: 1
|
|
423
|
+
}, 8, ["value"])
|
|
424
|
+
]),
|
|
425
|
+
_: 1
|
|
426
|
+
}, 8, ["label"])
|
|
427
|
+
], 64)),
|
|
428
|
+
n(e(d), {
|
|
429
|
+
label: e(t)("filePath.path.uploadRoles")
|
|
430
|
+
}, {
|
|
431
|
+
default: o(() => [
|
|
432
|
+
n($, {
|
|
433
|
+
value: l.uploadRoleIds,
|
|
434
|
+
"onUpdate:value": a[9] || (a[9] = (r) => l.uploadRoleIds = r),
|
|
435
|
+
multiple: "",
|
|
436
|
+
placeholder: e(t)("filePath.path.rolesPlaceholder")
|
|
437
|
+
}, null, 8, ["value", "placeholder"])
|
|
438
|
+
]),
|
|
439
|
+
_: 1
|
|
440
|
+
}, 8, ["label"]),
|
|
441
|
+
n(e(d), {
|
|
442
|
+
label: e(t)("filePath.path.downloadRoles")
|
|
443
|
+
}, {
|
|
444
|
+
default: o(() => [
|
|
445
|
+
n($, {
|
|
446
|
+
value: l.downloadRoleIds,
|
|
447
|
+
"onUpdate:value": a[10] || (a[10] = (r) => l.downloadRoleIds = r),
|
|
448
|
+
multiple: "",
|
|
449
|
+
placeholder: e(t)("filePath.path.rolesPlaceholder")
|
|
450
|
+
}, null, 8, ["value", "placeholder"])
|
|
451
|
+
]),
|
|
452
|
+
_: 1
|
|
453
|
+
}, 8, ["label"]),
|
|
454
|
+
n(e(d), {
|
|
455
|
+
label: e(t)("filePath.test.action")
|
|
456
|
+
}, {
|
|
457
|
+
default: o(() => [
|
|
458
|
+
n(e(h), {
|
|
459
|
+
size: 12,
|
|
460
|
+
align: "center"
|
|
461
|
+
}, {
|
|
462
|
+
default: o(() => [
|
|
463
|
+
se((f(), w(e(he), {
|
|
464
|
+
size: "small",
|
|
465
|
+
loading: _.value,
|
|
466
|
+
disabled: l.serverId === null,
|
|
467
|
+
onClick: le
|
|
468
|
+
}, {
|
|
469
|
+
default: o(() => [
|
|
470
|
+
m(s(e(t)("filePath.test.action")), 1)
|
|
471
|
+
]),
|
|
472
|
+
_: 1
|
|
473
|
+
}, 8, ["loading", "disabled"])), [
|
|
474
|
+
[x, "POST:/api/v1/sys/file-path/test"]
|
|
475
|
+
]),
|
|
476
|
+
u.value ? (f(), R("span", {
|
|
477
|
+
key: 0,
|
|
478
|
+
class: ue(["test-result", u.value.ok ? "ok" : "fail"])
|
|
479
|
+
}, [
|
|
480
|
+
n(we, {
|
|
481
|
+
icon: u.value.ok ? "ph:check-circle" : "ph:x-circle",
|
|
482
|
+
size: 16
|
|
483
|
+
}, null, 8, ["icon"]),
|
|
484
|
+
m(" " + s(u.value.ok ? e(t)("filePath.test.ok", { ms: u.value.latencyMs }) : e(t)("filePath.test.failed", { reason: e(ye)(u.value.reason) })), 1)
|
|
485
|
+
], 2)) : v("", !0)
|
|
486
|
+
]),
|
|
487
|
+
_: 1
|
|
488
|
+
})
|
|
489
|
+
]),
|
|
490
|
+
_: 1
|
|
491
|
+
}, 8, ["label"]),
|
|
492
|
+
n(e(d), {
|
|
493
|
+
label: e(t)("common.enabled")
|
|
494
|
+
}, {
|
|
495
|
+
default: o(() => [
|
|
496
|
+
n(e(L), {
|
|
497
|
+
value: l.enabled,
|
|
498
|
+
"onUpdate:value": a[11] || (a[11] = (r) => l.enabled = r)
|
|
499
|
+
}, null, 8, ["value"])
|
|
500
|
+
]),
|
|
501
|
+
_: 1
|
|
502
|
+
}, 8, ["label"]),
|
|
503
|
+
n(e(d), {
|
|
504
|
+
label: e(t)("filePath.remark")
|
|
505
|
+
}, {
|
|
506
|
+
default: o(() => [
|
|
507
|
+
n(e(g), {
|
|
508
|
+
value: l.remark,
|
|
509
|
+
"onUpdate:value": a[12] || (a[12] = (r) => l.remark = r),
|
|
510
|
+
type: "textarea",
|
|
511
|
+
maxlength: "512",
|
|
512
|
+
autosize: { minRows: 2 }
|
|
513
|
+
}, null, 8, ["value"])
|
|
514
|
+
]),
|
|
515
|
+
_: 1
|
|
516
|
+
}, 8, ["label"])
|
|
517
|
+
]),
|
|
518
|
+
_: 1
|
|
519
|
+
}, 16, ["model"])
|
|
520
|
+
]),
|
|
521
|
+
_: 1
|
|
522
|
+
}, 8, ["show", "title", "confirm-text"]);
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
export {
|
|
527
|
+
Ge as default
|
|
528
|
+
};
|
|
529
|
+
//# sourceMappingURL=PathForm2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathForm2.vue.js","sources":["../../../../../src/views/system/file-path/components/PathForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 文件路径新增/编辑抽屉。show/editing 走 v-model + prop(null = 新增),与 AI 厂商的 ProviderForm 同一协议。\n// 编码保存后不能改(业务拿它引用文件路径),所以编辑态只读。\nimport { computed, reactive, ref, watch } from 'vue'\nimport {\n NAlert,\n NButton,\n NForm,\n NFormItem,\n NInput,\n NInputNumber,\n NRadioButton,\n NRadioGroup,\n NSelect,\n NSpace,\n NSwitch,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useMediaQuery } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport RoleSelect from '#/components/RoleSelect/index.vue'\nimport {\n fileServerApi,\n filePathApi,\n type FileAccessTestResult,\n type FilePathView,\n type FileServerOption,\n} from '#/api'\nimport { translateError } from '#/utils/error'\nimport { reasonText } from '../access'\nimport {\n CODE_PATTERN,\n ConflictMode,\n NAMING_RULE_LABEL_KEYS,\n NamingRule,\n exampleFileName,\n folderPreview,\n normalizeExtensions,\n overwriteRisk,\n} from '../rules'\n\nconst show = defineModel<boolean>('show', { default: false })\nconst props = defineProps<{ editing: FilePathView | null }>()\nconst emit = defineEmits<{ (e: 'saved'): void }>()\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst formRef = ref<FormInst | null>(null)\n\n// 窄屏标签放上方,底部抽屉里横排标签太挤\nconst narrowForm = useMediaQuery('(max-width: 640px)')\nconst formLayout = computed(() =>\n narrowForm.value\n ? { labelPlacement: 'top' as const, labelWidth: undefined }\n : { labelPlacement: 'left' as const, labelWidth: 120 },\n)\n\ninterface PathFormState {\n code: string\n name: string\n /** 未选时为 null:空串会被 n-select 当成「选中了一个不存在的选项」而不显示占位符。 */\n serverId: number | null\n folder: string\n namingRule: number\n onConflict: number\n readOnly: boolean\n allowedExtensions: string\n maxSizeMb: number | null\n uploadRoleIds: number[]\n downloadRoleIds: number[]\n enabled: boolean\n remark: string\n}\nconst blank = (): PathFormState => ({\n code: '',\n name: '',\n serverId: null,\n folder: '',\n namingRule: NamingRule.YearMonthOriginal,\n onConflict: ConflictMode.Reject,\n readOnly: false,\n allowedExtensions: '',\n maxSizeMb: null,\n uploadRoleIds: [],\n downloadRoleIds: [],\n enabled: true,\n remark: '',\n})\nconst form = reactive<PathFormState>(blank())\n\n// ── 文件服务器下拉:用 options(挂在文件路径的查询权限上),不用 page(那是文件服务器页签的权限) ──\nconst servers = ref<FileServerOption[]>([])\nconst serversLoading = ref(false)\nasync function loadServers() {\n serversLoading.value = true\n try {\n servers.value = await fileServerApi.options()\n } catch (e) {\n message.error(translateError(e))\n } finally {\n serversLoading.value = false\n }\n}\n// 已停用的服务器不能新选,但当前行已选的那个仍要显示出名字\nconst serverOptions = computed(() =>\n servers.value.map(s => ({\n label: s.enabled ? s.name : `${s.name} (${t('common.disabled')})`,\n value: Number(s.id),\n disabled: !s.enabled,\n })),\n)\nconst rootPath = computed(\n () => servers.value.find(s => Number(s.id) === form.serverId)?.rootPath ?? '',\n)\nconst preview = computed(() => (rootPath.value ? folderPreview(rootPath.value, form.folder) : ''))\nconst example = computed(() => exampleFileName(form.namingRule, new Date()))\n\nconst namingOptions = computed(() =>\n Object.entries(NAMING_RULE_LABEL_KEYS).map(([value, key]) => ({\n label: t(key),\n value: Number(value),\n })),\n)\n\nconst showOverwriteRisk = computed(() => overwriteRisk(form))\n\nconst rules: FormRules = {\n code: {\n validator: (_r, v: string) => CODE_PATTERN.test(v) || new Error(t('filePath.path.codeInvalid')),\n trigger: ['input', 'blur'],\n },\n name: {\n required: true,\n whitespace: true,\n message: () => t('filePath.path.nameRequired'),\n trigger: ['input', 'blur'],\n },\n serverId: {\n required: true,\n type: 'number',\n message: () => t('filePath.path.serverRequired'),\n trigger: ['change', 'blur'],\n },\n allowedExtensions: {\n validator: () => {\n if (form.readOnly) return true\n const normalized = normalizeExtensions(form.allowedExtensions)\n if (normalized === null) return new Error(t('filePath.path.extensionsInvalid'))\n return normalized !== '' || new Error(t('filePath.path.extensionsRequired'))\n },\n trigger: ['input', 'blur'],\n },\n maxSizeMb: {\n validator: () =>\n form.readOnly || (form.maxSizeMb ?? 0) > 0 || new Error(t('filePath.path.maxSizeRequired')),\n trigger: ['change', 'blur'],\n },\n}\n\n// 回填/重置:组件随父页常驻,每次打开都按 editing 重置,并重新拉服务器下拉(别的页签可能刚改过)。\nwatch(show, v => {\n if (!v) return\n testResult.value = null\n void loadServers()\n const e = props.editing\n Object.assign(\n form,\n e\n ? {\n code: e.code,\n name: e.name,\n serverId: Number(e.serverId),\n folder: e.folder ?? '',\n namingRule: e.namingRule,\n onConflict: e.onConflict,\n readOnly: e.readOnly,\n allowedExtensions: e.allowedExtensions ?? '',\n maxSizeMb: e.maxSizeMb == null ? null : Number(e.maxSizeMb),\n uploadRoleIds: e.uploadRoleIds.map(Number),\n downloadRoleIds: e.downloadRoleIds.map(Number),\n enabled: e.enabled,\n remark: e.remark ?? '',\n }\n : blank(),\n )\n})\n\n// ── 测试连接:用弹窗里当前选的服务器、子文件夹和读写方式,结果在返回体里(ok=false 不代表接口失败) ──\nconst testing = ref(false)\nconst testResult = ref<FileAccessTestResult | null>(null)\nwatch(\n () => [form.serverId, form.folder, form.readOnly],\n () => {\n testResult.value = null\n },\n)\nasync function onTest() {\n if (form.serverId === null) return\n testing.value = true\n testResult.value = null\n try {\n testResult.value = await filePathApi.test({\n serverId: form.serverId,\n folder: form.folder.trim() || null,\n readOnly: form.readOnly,\n })\n } catch (e) {\n message.error(translateError(e))\n } finally {\n testing.value = false\n }\n}\n\nasync function save() {\n await formRef.value?.validate()\n const serverId = form.serverId\n if (serverId === null) return false\n const body = {\n name: form.name.trim(),\n serverId,\n folder: form.folder.trim() || null,\n namingRule: form.namingRule,\n // 同名处理只对业务指定路径有意义,其余命名规则不会撞名\n onConflict: form.namingRule === NamingRule.BusinessPath ? form.onConflict : ConflictMode.Reject,\n readOnly: form.readOnly,\n allowedExtensions: form.readOnly ? null : normalizeExtensions(form.allowedExtensions),\n maxSizeMb: form.readOnly ? null : form.maxSizeMb,\n uploadRoleIds: form.uploadRoleIds,\n downloadRoleIds: form.downloadRoleIds,\n enabled: form.enabled,\n remark: form.remark.trim() || null,\n }\n try {\n if (props.editing === null) await filePathApi.add({ ...body, code: form.code.trim() })\n else await filePathApi.update(Number(props.editing.id), body)\n message.success(t('filePath.saved'))\n emit('saved')\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n</script>\n\n<template>\n <FormContainer\n v-model:show=\"show\"\n variant=\"drawer\"\n :width=\"640\"\n :title=\"editing === null ? t('filePath.path.addTitle') : t('filePath.path.editTitle')\"\n :on-confirm=\"save\"\n :confirm-text=\"t('common.save')\"\n >\n <n-alert v-if=\"editing\" type=\"info\" :bordered=\"false\" class=\"tip\">\n {{ t('filePath.path.moveTip') }}\n </n-alert>\n <n-form ref=\"formRef\" :model=\"form\" :rules=\"rules\" v-bind=\"formLayout\">\n <n-form-item :label=\"t('filePath.path.code')\" path=\"code\">\n <n-space vertical :size=\"2\" style=\"width: 100%\">\n <n-input\n v-model:value=\"form.code\"\n maxlength=\"64\"\n :disabled=\"editing !== null\"\n :placeholder=\"t('filePath.path.codePlaceholder')\"\n />\n <span v-if=\"editing\" class=\"hint\">{{ t('filePath.path.codeImmutableHint') }}</span>\n </n-space>\n </n-form-item>\n <n-form-item :label=\"t('filePath.path.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" maxlength=\"64\" :placeholder=\"t('filePath.path.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('filePath.path.server')\" path=\"serverId\">\n <n-select\n v-model:value=\"form.serverId\"\n :options=\"serverOptions\"\n :loading=\"serversLoading\"\n filterable\n :placeholder=\"t('filePath.path.serverPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('filePath.path.folder')\">\n <n-space vertical :size=\"2\" style=\"width: 100%\">\n <n-input\n v-model:value=\"form.folder\"\n maxlength=\"260\"\n :placeholder=\"t('filePath.path.folderPlaceholder')\"\n />\n <span v-if=\"preview\" class=\"hint\">\n {{ t('filePath.path.fullFolder') }}\n <code class=\"mono\">{{ preview }}</code>\n </span>\n </n-space>\n </n-form-item>\n <n-form-item :label=\"t('filePath.path.namingRule')\">\n <n-space vertical :size=\"2\" style=\"width: 100%\">\n <n-select v-model:value=\"form.namingRule\" :options=\"namingOptions\" />\n <span class=\"hint\">\n {{ t('filePath.path.example') }}\n <code class=\"mono\">{{ example }}</code>\n </span>\n </n-space>\n </n-form-item>\n <n-form-item\n v-if=\"form.namingRule === NamingRule.BusinessPath\"\n :label=\"t('filePath.path.onConflict')\"\n >\n <n-space vertical :size=\"6\" style=\"width: 100%\">\n <n-radio-group v-model:value=\"form.onConflict\">\n <n-radio-button :value=\"ConflictMode.Reject\">\n {{ t('filePath.onConflict.reject') }}\n </n-radio-button>\n <n-radio-button :value=\"ConflictMode.Overwrite\">\n {{ t('filePath.onConflict.overwrite') }}\n </n-radio-button>\n </n-radio-group>\n <n-alert v-if=\"showOverwriteRisk\" type=\"warning\" :bordered=\"false\">\n {{ t('filePath.path.overwriteRisk') }}\n </n-alert>\n </n-space>\n </n-form-item>\n <n-form-item :label=\"t('filePath.path.readOnly')\">\n <n-space vertical :size=\"2\" style=\"width: 100%\">\n <n-switch v-model:value=\"form.readOnly\" />\n <span class=\"hint\">{{ t('filePath.path.readOnlyHint') }}</span>\n </n-space>\n </n-form-item>\n <template v-if=\"!form.readOnly\">\n <n-form-item :label=\"t('filePath.path.extensions')\" path=\"allowedExtensions\">\n <n-space vertical :size=\"2\" style=\"width: 100%\">\n <n-input\n v-model:value=\"form.allowedExtensions\"\n maxlength=\"500\"\n :placeholder=\"t('filePath.path.extensionsPlaceholder')\"\n />\n <span class=\"hint\">{{ t('filePath.path.extensionsHint') }}</span>\n </n-space>\n </n-form-item>\n <n-form-item :label=\"t('filePath.path.maxSize')\" path=\"maxSizeMb\">\n <n-input-number\n v-model:value=\"form.maxSizeMb\"\n :min=\"1\"\n :precision=\"0\"\n style=\"width: 200px\"\n >\n <template #suffix>MB</template>\n </n-input-number>\n </n-form-item>\n </template>\n <n-form-item :label=\"t('filePath.path.uploadRoles')\">\n <RoleSelect\n v-model:value=\"form.uploadRoleIds\"\n multiple\n :placeholder=\"t('filePath.path.rolesPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('filePath.path.downloadRoles')\">\n <RoleSelect\n v-model:value=\"form.downloadRoleIds\"\n multiple\n :placeholder=\"t('filePath.path.rolesPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('filePath.test.action')\">\n <n-space :size=\"12\" align=\"center\">\n <n-button\n v-auth=\"'POST:/api/v1/sys/file-path/test'\"\n size=\"small\"\n :loading=\"testing\"\n :disabled=\"form.serverId === null\"\n @click=\"onTest\"\n >\n {{ t('filePath.test.action') }}\n </n-button>\n <span v-if=\"testResult\" class=\"test-result\" :class=\"testResult.ok ? 'ok' : 'fail'\">\n <AppIcon :icon=\"testResult.ok ? 'ph:check-circle' : 'ph:x-circle'\" :size=\"16\" />\n {{\n testResult.ok\n ? t('filePath.test.ok', { ms: testResult.latencyMs })\n : t('filePath.test.failed', { reason: reasonText(testResult.reason) })\n }}\n </span>\n </n-space>\n </n-form-item>\n <n-form-item :label=\"t('common.enabled')\">\n <n-switch v-model:value=\"form.enabled\" />\n </n-form-item>\n <n-form-item :label=\"t('filePath.remark')\">\n <n-input\n v-model:value=\"form.remark\"\n type=\"textarea\"\n maxlength=\"512\"\n :autosize=\"{ minRows: 2 }\"\n />\n </n-form-item>\n </n-form>\n </FormContainer>\n</template>\n\n<style scoped>\n.tip {\n margin-bottom: 12px;\n}\n.hint {\n font-size: 13px;\n color: var(--text-3);\n}\n.mono {\n font-family: var(--font-mono);\n font-size: 13px;\n word-break: break-all;\n}\n.test-result {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n}\n.test-result.ok {\n color: var(--ok);\n}\n.test-result.fail {\n color: var(--err);\n}\n</style>\n"],"names":["show","_useModel","__props","props","emit","__emit","useI18n","message","useMessage","formRef","ref","narrowForm","useMediaQuery","formLayout","computed","blank","NamingRule","ConflictMode","form","reactive","servers","serversLoading","loadServers","fileServerApi","e","translateError","serverOptions","s","rootPath","_a","preview","folderPreview","example","exampleFileName","namingOptions","NAMING_RULE_LABEL_KEYS","value","key","showOverwriteRisk","overwriteRisk","rules","_r","v","CODE_PATTERN","normalized","normalizeExtensions","watch","testResult","testing","onTest","filePathApi","save","serverId","body","_createBlock","FormContainer","$event","_unref","NAlert","_createVNode","_mergeProps","NFormItem","NSpace","NInput","_cache","_createElementBlock","_hoisted_1","_toDisplayString","NSelect","_openBlock","_hoisted_2","_createTextVNode","_createElementVNode","_hoisted_3","_hoisted_4","_hoisted_5","NRadioGroup","NRadioButton","NSwitch","_hoisted_6","_Fragment","_hoisted_7","NInputNumber","RoleSelect","NButton","_normalizeClass","AppIcon","reasonText"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathTab.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|