smart-admin-web 10.26.0 → 10.27.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.
Files changed (62) hide show
  1. package/dist/api/index.d.ts +163 -0
  2. package/dist/api/index.js +195 -108
  3. package/dist/api/index.js.map +1 -1
  4. package/dist/api/schema.d.ts +1465 -109
  5. package/dist/assets/icons/ph-subset.json.js +1 -1
  6. package/dist/components/FilePathUpload/index.vue.d.ts +35 -0
  7. package/dist/components/FilePathUpload/index.vue.js +47 -0
  8. package/dist/components/FilePathUpload/index.vue.js.map +1 -0
  9. package/dist/components/FilePathUpload/index2.vue.js +5 -0
  10. package/dist/components/FilePathUpload/index2.vue.js.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js +302 -294
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/runtime.js +1 -1
  15. package/dist/locales/en-US.d.ts +141 -0
  16. package/dist/locales/en-US.js +136 -0
  17. package/dist/locales/en-US.js.map +1 -1
  18. package/dist/locales/kernelMenuTitles.js +10 -0
  19. package/dist/locales/kernelMenuTitles.js.map +1 -1
  20. package/dist/locales/zh-CN.d.ts +141 -0
  21. package/dist/locales/zh-CN.js +136 -0
  22. package/dist/locales/zh-CN.js.map +1 -1
  23. package/dist/router/viewRegistry.js +8 -8
  24. package/dist/router/viewRegistry.js.map +1 -1
  25. package/dist/style.css +1 -1
  26. package/dist/utils/error.js +22 -18
  27. package/dist/utils/error.js.map +1 -1
  28. package/dist/utils/filePathUpload.d.ts +14 -0
  29. package/dist/utils/filePathUpload.js +84 -0
  30. package/dist/utils/filePathUpload.js.map +1 -0
  31. package/dist/views/system/file-path/access.d.ts +15 -0
  32. package/dist/views/system/file-path/access.js +49 -0
  33. package/dist/views/system/file-path/access.js.map +1 -0
  34. package/dist/views/system/file-path/components/PathForm.vue.d.ts +18 -0
  35. package/dist/views/system/file-path/components/PathForm.vue.js +8 -0
  36. package/dist/views/system/file-path/components/PathForm.vue.js.map +1 -0
  37. package/dist/views/system/file-path/components/PathForm2.vue.js +529 -0
  38. package/dist/views/system/file-path/components/PathForm2.vue.js.map +1 -0
  39. package/dist/views/system/file-path/components/PathTab.vue.d.ts +3 -0
  40. package/dist/views/system/file-path/components/PathTab.vue.js +8 -0
  41. package/dist/views/system/file-path/components/PathTab.vue.js.map +1 -0
  42. package/dist/views/system/file-path/components/PathTab2.vue.js +226 -0
  43. package/dist/views/system/file-path/components/PathTab2.vue.js.map +1 -0
  44. package/dist/views/system/file-path/components/ServerForm.vue.d.ts +20 -0
  45. package/dist/views/system/file-path/components/ServerForm.vue.js +8 -0
  46. package/dist/views/system/file-path/components/ServerForm.vue.js.map +1 -0
  47. package/dist/views/system/file-path/components/ServerForm2.vue.js +328 -0
  48. package/dist/views/system/file-path/components/ServerForm2.vue.js.map +1 -0
  49. package/dist/views/system/file-path/components/ServerTab.vue.d.ts +7 -0
  50. package/dist/views/system/file-path/components/ServerTab.vue.js +8 -0
  51. package/dist/views/system/file-path/components/ServerTab.vue.js.map +1 -0
  52. package/dist/views/system/file-path/components/ServerTab2.vue.js +181 -0
  53. package/dist/views/system/file-path/components/ServerTab2.vue.js.map +1 -0
  54. package/dist/views/system/file-path/index.vue.d.ts +3 -0
  55. package/dist/views/system/file-path/index.vue.js +8 -0
  56. package/dist/views/system/file-path/index.vue.js.map +1 -0
  57. package/dist/views/system/file-path/index2.vue.js +61 -0
  58. package/dist/views/system/file-path/index2.vue.js.map +1 -0
  59. package/dist/views/system/file-path/rules.d.ts +61 -0
  60. package/dist/views/system/file-path/rules.js +53 -0
  61. package/dist/views/system/file-path/rules.js.map +1 -0
  62. 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,8 @@
1
+ import o from "./PathTab2.vue.js";
2
+ /* empty css */
3
+ import t from "../../../../_virtual/_plugin-vue_export-helper.js";
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-43cce28c"]]);
5
+ export {
6
+ m as default
7
+ };
8
+ //# sourceMappingURL=PathTab.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathTab.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}