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.
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
package/dist/api/index.js CHANGED
@@ -1,71 +1,71 @@
1
1
  var b = Object.defineProperty;
2
- var P = (e, t, i) => t in e ? b(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i;
3
- var y = (e, t, i) => P(e, typeof t != "symbol" ? t + "" : t, i);
2
+ var f = (e, t, i) => t in e ? b(e, t, { enumerable: !0, configurable: !0, writable: !0, value: i }) : e[t] = i;
3
+ var v = (e, t, i) => f(e, typeof t != "symbol" ? t + "" : t, i);
4
4
  import { client as s, LONG_TIMEOUT_MS as u } from "./client.js";
5
- import { runtime as f } from "../lib/runtime.js";
6
- class l extends Error {
7
- constructor(i, o, n, d) {
8
- super(d ?? o ?? `Error ${i}`);
9
- y(this, "code");
10
- y(this, "msgKey");
11
- y(this, "args");
5
+ import { runtime as P } from "../lib/runtime.js";
6
+ class y extends Error {
7
+ constructor(i, o, n, r) {
8
+ super(r ?? o ?? `Error ${i}`);
9
+ v(this, "code");
10
+ v(this, "msgKey");
11
+ v(this, "args");
12
12
  this.name = "ApiError", this.code = i, this.msgKey = o, this.args = n;
13
13
  }
14
14
  }
15
15
  function a(e) {
16
16
  const { data: t, error: i, response: o } = e;
17
17
  if (i != null) {
18
- const d = i;
19
- if (typeof d.code == "number")
20
- throw new l(d.code, d.msgKey, d.args, d.message);
21
- const h = i;
22
- throw new l(
18
+ const r = i;
19
+ if (typeof r.code == "number")
20
+ throw new y(r.code, r.msgKey, r.args, r.message);
21
+ const p = i;
22
+ throw new y(
23
23
  o.status,
24
24
  void 0,
25
25
  void 0,
26
- h.title ?? h.detail ?? o.statusText
26
+ p.title ?? p.detail ?? o.statusText
27
27
  );
28
28
  }
29
29
  const n = t ?? {};
30
30
  if (typeof n.code == "number" && n.code !== 0)
31
- throw new l(n.code, n.msgKey, n.args, n.message);
31
+ throw new y(n.code, n.msgKey, n.args, n.message);
32
32
  return n.data;
33
33
  }
34
34
  function U(e, t, i) {
35
35
  const o = s.request;
36
36
  return o(e, t, i === void 0 ? void 0 : { body: i }).then((n) => a(n));
37
37
  }
38
- const r = (e) => ({
38
+ const d = (e) => ({
39
39
  Current: e.page,
40
40
  Size: e.pageSize
41
41
  }), x = (e) => ({
42
- ...r(e),
42
+ ...d(e),
43
43
  Keyword: e.keyword,
44
44
  Number: e.number,
45
45
  Name: e.name,
46
46
  SortField: e.sortField,
47
47
  SortOrder: e.sortOrder
48
48
  }), S = (e) => !e || e.length !== 2 ? { start: void 0, end: void 0 } : { start: e[0] || void 0, end: e[1] ? `${e[1]} 23:59:59` : void 0 };
49
- function p(e) {
49
+ function h(e) {
50
50
  const t = a(e);
51
51
  return { items: t.items, total: t.total };
52
52
  }
53
- async function m(e) {
53
+ async function c(e) {
54
54
  const { data: t, error: i, response: o } = e;
55
55
  if (!o.ok) {
56
- const h = i ?? {};
57
- throw typeof h.code == "number" ? new l(h.code, h.msgKey, h.args, h.message) : new l(o.status, void 0, void 0, o.statusText);
56
+ const p = i ?? {};
57
+ throw typeof p.code == "number" ? new y(p.code, p.msgKey, p.args, p.message) : new y(o.status, void 0, void 0, o.statusText);
58
58
  }
59
- const n = t, d = o.headers.get("content-type") ?? "";
60
- if (d.includes("spreadsheet") || d.includes("octet-stream")) return n;
61
- if (d.includes("json") || d.includes("text/plain")) {
62
- const h = JSON.parse(await n.text());
63
- if (typeof h.code == "number" && h.code !== 0)
64
- throw new l(h.code, h.msgKey, h.args, h.message);
59
+ const n = t, r = o.headers.get("content-type") ?? "";
60
+ if (r.includes("spreadsheet") || r.includes("octet-stream")) return n;
61
+ if (r.includes("json") || r.includes("text/plain")) {
62
+ const p = JSON.parse(await n.text());
63
+ if (typeof p.code == "number" && p.code !== 0)
64
+ throw new y(p.code, p.msgKey, p.args, p.message);
65
65
  } else if (new Uint8Array(await n.slice(0, 1).arrayBuffer())[0] === 123) {
66
- const c = JSON.parse(await n.text());
67
- if (typeof c.code == "number" && c.code !== 0)
68
- throw new l(c.code, c.msgKey, c.args, c.message);
66
+ const l = JSON.parse(await n.text());
67
+ if (typeof l.code == "number" && l.code !== 0)
68
+ throw new y(l.code, l.msgKey, l.args, l.message);
69
69
  }
70
70
  return n;
71
71
  }
@@ -127,7 +127,7 @@ function T(e) {
127
127
  };
128
128
  });
129
129
  }
130
- const C = {
130
+ const k = {
131
131
  login: (e) => s.POST("/api/v1/auth/login", { body: e }).then((t) => a(t)),
132
132
  logout: () => s.POST("/api/v1/auth/logout", {}).then((e) => a(e)),
133
133
  captcha: () => s.GET("/api/v1/auth/captcha", {}).then((e) => a(e)),
@@ -152,13 +152,13 @@ const C = {
152
152
  list: () => s.GET("/api/v1/sys/mfa/high-sensitivity", {}).then((e) => a(e)),
153
153
  add: (e) => s.POST("/api/v1/sys/mfa/high-sensitivity", { body: e }).then((t) => a(t)),
154
154
  remove: (e) => s.DELETE("/api/v1/sys/mfa/high-sensitivity/{id}", { params: { path: { id: e } } }).then((t) => a(t))
155
- }, D = {
155
+ }, C = {
156
156
  /** 登录页可用的外部登录方式(启用的);空数组 = 不显 SSO 区。 */
157
157
  providers: () => s.GET("/api/v1/auth/external/providers", {}).then((e) => a(e)),
158
158
  /** 管理端全量列表(含已禁用);系统配置「第三方登录」Tab。 */
159
159
  providersAll: () => s.GET("/api/v1/auth/external/providers/all", {}).then((e) => a(e)),
160
160
  /** 发起某 provider 登录的 URL(顶层浏览器导航,不走 fetch —— 后端 302 跳 IdP)。 */
161
- authorizeUrl: (e) => `${f.apiBase}/api/v1/auth/external/${encodeURIComponent(e)}/authorize`,
161
+ authorizeUrl: (e) => `${P.apiBase}/api/v1/auth/external/${encodeURIComponent(e)}/authorize`,
162
162
  /** 一次性票据换令牌(登录回调后);票据无效/过期/已用抛 40014。 */
163
163
  exchange: (e) => s.POST("/api/v1/auth/external/exchange", { body: { ticket: e } }).then((t) => a(t)),
164
164
  /** 认领未绑定 SSO 的 pending-link(账密登录后);票据无效 40014,已被他人绑 40017。 */
@@ -177,7 +177,7 @@ const C = {
177
177
  removeProvider: (e) => s.DELETE("/api/v1/sys/external-auth/providers/{code}", { params: { path: { code: e } } }).then((t) => a(t)),
178
178
  /** 连接测试:用表单里的值,机密留空取已保存的;不落库,失败原因在 checks 里。 */
179
179
  testProvider: (e) => s.POST("/api/v1/sys/external-auth/providers/test", { body: e }).then((t) => a(t))
180
- }, k = {
180
+ }, D = {
181
181
  /** 工作台首页统计([ActiveSession]:任何登录用户可取,无需权限码)。 */
182
182
  summary: () => s.GET("/api/v1/dashboard/summary", {}).then((e) => a(e))
183
183
  }, L = {
@@ -214,7 +214,7 @@ const C = {
214
214
  // sortField/sortOrder:SmartTable 排序;后端按实体列白名单校验(非法忽略回退默认),见 PagedListExtensions.OrderBySafe。
215
215
  params: {
216
216
  query: {
217
- ...r(e),
217
+ ...d(e),
218
218
  Account: e.account,
219
219
  Name: e.name,
220
220
  OrgId: e.orgId,
@@ -223,16 +223,16 @@ const C = {
223
223
  SortOrder: e.sortOrder
224
224
  }
225
225
  }
226
- }).then((t) => p(t)),
226
+ }).then((t) => h(t)),
227
227
  /**
228
228
  * 选择器数据源(仅启用用户,只回 id / 姓名 / 账号):不占用户页权限码,没有「用户-查询」的角色也能选人。
229
229
  * keyword 同时匹配姓名与账号;范围同 page。人员选择器一律走它,不走 page。
230
230
  */
231
231
  options: (e) => s.GET("/api/v1/sys/user/options", {
232
232
  params: {
233
- query: { ...r(e), Keyword: e.keyword, OrgId: e.orgId }
233
+ query: { ...d(e), Keyword: e.keyword, OrgId: e.orgId }
234
234
  }
235
- }).then((t) => p(t)),
235
+ }).then((t) => h(t)),
236
236
  /** 用户详情(含 roleIds,编辑回显 + 提交时原样带回避免清空角色)。 */
237
237
  detail: (e) => s.GET("/api/v1/sys/user/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
238
238
  /** 新增用户;返回新 Id + 实际生效的初始口令(留空 password 时后端随机生成,不接住就没人知道这个号的密码)。 */
@@ -259,17 +259,17 @@ const C = {
259
259
  menuGrantPage: (e) => s.GET("/api/v1/sys/user/menu-grants/page", {
260
260
  params: {
261
261
  query: {
262
- ...r(e),
262
+ ...d(e),
263
263
  User: e.user,
264
264
  Grantor: e.grantor,
265
265
  Effect: e.effect,
266
266
  Status: e.status
267
267
  }
268
268
  }
269
- }).then((t) => p(t)),
269
+ }).then((t) => h(t)),
270
270
  // ── 导入 / 导出 ──
271
271
  /** 下载用户导入模板(xlsx)。[ActiveSession],无需独立权限码。 */
272
- importTemplate: () => s.GET("/api/v1/sys/user/import/template", { parseAs: "blob" }).then((e) => m(e)),
272
+ importTemplate: () => s.GET("/api/v1/sys/user/import/template", { parseAs: "blob" }).then((e) => c(e)),
273
273
  /**
274
274
  * 上传 xlsx 预览校验。multipart:`file` + 可选 `mapping`(JSON 字符串:表头→列 Key)。
275
275
  * bodySerializer 建 FormData(与 fileApi.upload 同型)。
@@ -295,7 +295,7 @@ const C = {
295
295
  timeout: u,
296
296
  body: { rows: T(e) },
297
297
  parseAs: "blob"
298
- }).then((t) => m(t)),
298
+ }).then((t) => c(t)),
299
299
  /** 按策略提交导入(部分提交:有错行跳过;服务端重校验,不信任前端 Errors)。 */
300
300
  importCommit: (e, t = 0) => s.POST("/api/v1/sys/user/import/commit", {
301
301
  timeout: u,
@@ -320,7 +320,7 @@ const C = {
320
320
  }
321
321
  },
322
322
  parseAs: "blob"
323
- }).then((t) => m(t))
323
+ }).then((t) => c(t))
324
324
  }, R = {
325
325
  /** 全部机构(平铺,按 Sort、Id 排序)。前端 buildTree 拼树。下拉 / 树表复用。 */
326
326
  list: () => s.GET("/api/v1/sys/org/list", {}).then((e) => a(e)),
@@ -331,28 +331,28 @@ const C = {
331
331
  remove: (e) => s.DELETE("/api/v1/sys/org/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
332
332
  /** 复制机构子树(整支克隆挂到源节点同级),返回新根 Id。 */
333
333
  copy: (e, t) => s.POST("/api/v1/sys/org/{id}/copy", { params: { path: { id: e } }, body: t }).then((i) => a(i))
334
- }, K = {
334
+ }, F = {
335
335
  /** 职位分页;搜索键 name → PascalCase Name;sortField/sortOrder → 后端安全排序。下拉(拉大页)/ SmartTable 复用。 */
336
336
  page: (e) => s.GET("/api/v1/sys/position/page", {
337
337
  params: {
338
338
  query: {
339
- ...r(e),
339
+ ...d(e),
340
340
  Name: e.name,
341
341
  SortField: e.sortField,
342
342
  SortOrder: e.sortOrder
343
343
  }
344
344
  }
345
- }).then((t) => p(t)),
345
+ }).then((t) => h(t)),
346
346
  /** 选择器数据源(全部职位,按排序,只回 id / name):不占职位页权限码。 */
347
347
  options: () => s.GET("/api/v1/sys/position/options", {}).then((e) => a(e)),
348
348
  add: (e) => s.POST("/api/v1/sys/position/add", { body: e }).then((t) => a(t)),
349
349
  update: (e, t) => s.PUT("/api/v1/sys/position/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
350
350
  remove: (e) => s.DELETE("/api/v1/sys/position/{id}", { params: { path: { id: e } } }).then((t) => a(t))
351
- }, F = {
351
+ }, K = {
352
352
  /** 角色分页;搜索键 name → PascalCase Name。列表用 + 用户/授权页拉一大页当下拉源。 */
353
353
  page: (e) => s.GET("/api/v1/sys/role/page", {
354
- params: { query: { ...r(e), Name: e.name } }
355
- }).then((t) => p(t)),
354
+ params: { query: { ...d(e), Name: e.name } }
355
+ }).then((t) => h(t)),
356
356
  /** 选择器数据源(仅启用角色,按排序,只回 id / name):不占角色页权限码。 */
357
357
  options: () => s.GET("/api/v1/sys/role/options", {}).then((e) => a(e)),
358
358
  add: (e) => s.POST("/api/v1/sys/role/add", { body: e }).then((t) => a(t)),
@@ -382,7 +382,7 @@ const C = {
382
382
  page: (e) => s.GET("/api/v1/sys/config/page", {
383
383
  params: {
384
384
  query: {
385
- ...r(e),
385
+ ...d(e),
386
386
  ConfigKey: e.configKey,
387
387
  Name: e.name,
388
388
  GroupCode: e.groupCode,
@@ -390,7 +390,7 @@ const C = {
390
390
  ExcludedKeys: e.excludedKeys
391
391
  }
392
392
  }
393
- }).then((t) => p(t)),
393
+ }).then((t) => h(t)),
394
394
  add: (e) => s.POST("/api/v1/sys/config", { body: e }).then((t) => a(t)),
395
395
  update: (e, t) => s.PUT("/api/v1/sys/config/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
396
396
  remove: (e) => s.DELETE("/api/v1/sys/config/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -430,7 +430,7 @@ const C = {
430
430
  (e) => a(e)
431
431
  )
432
432
  };
433
- function v(e) {
433
+ function m(e) {
434
434
  const { start: t, end: i } = S(e);
435
435
  return { StartTime: t, EndTime: i };
436
436
  }
@@ -439,28 +439,28 @@ const M = {
439
439
  loginPage: (e) => s.GET("/api/v1/sys/log/login/page", {
440
440
  params: {
441
441
  query: {
442
- ...r(e),
442
+ ...d(e),
443
443
  Account: e.account,
444
444
  Success: e.success,
445
- ...v(e.createTime)
445
+ ...m(e.createTime)
446
446
  }
447
447
  }
448
- }).then((t) => p(t)),
448
+ }).then((t) => h(t)),
449
449
  /** 清空登录日志(硬删,不可恢复)。 */
450
450
  loginClear: () => s.DELETE("/api/v1/sys/log/login", {}).then((e) => a(e)),
451
451
  /** 操作日志分页;操作名模糊 + 成败 + 操作人(精确)+ 接口路径(模糊)+ 时间范围——审计要能答"谁在什么时候干了什么"。 */
452
452
  opPage: (e) => s.GET("/api/v1/sys/log/op/page", {
453
453
  params: {
454
454
  query: {
455
- ...r(e),
455
+ ...d(e),
456
456
  Title: e.title,
457
457
  Success: e.success,
458
458
  OperatorId: e.operatorId,
459
459
  Path: e.path,
460
- ...v(e.createTime)
460
+ ...m(e.createTime)
461
461
  }
462
462
  }
463
- }).then((t) => p(t)),
463
+ }).then((t) => h(t)),
464
464
  /** 清空操作日志(硬删,不可恢复)。 */
465
465
  opClear: () => s.DELETE("/api/v1/sys/log/op", {}).then((e) => a(e)),
466
466
  /**
@@ -475,23 +475,23 @@ const M = {
475
475
  Success: e.success,
476
476
  OperatorId: e.operatorId,
477
477
  Path: e.path,
478
- ...v(e.createTime),
478
+ ...m(e.createTime),
479
479
  columns: e.columns
480
480
  }
481
481
  },
482
482
  parseAs: "blob"
483
- }).then((t) => m(t)),
483
+ }).then((t) => c(t)),
484
484
  /** 异常日志分页;接口路径模糊 + 异常类型模糊 + 时间范围。 */
485
485
  exceptionPage: (e) => s.GET("/api/v1/sys/log/exception/page", {
486
486
  params: {
487
487
  query: {
488
- ...r(e),
488
+ ...d(e),
489
489
  Path: e.path,
490
490
  ExceptionType: e.exceptionType,
491
- ...v(e.createTime)
491
+ ...m(e.createTime)
492
492
  }
493
493
  }
494
- }).then((t) => p(t)),
494
+ }).then((t) => h(t)),
495
495
  /** 清空异常日志(硬删,不可恢复)。 */
496
496
  exceptionClear: () => s.DELETE("/api/v1/sys/log/exception", {}).then((e) => a(e))
497
497
  }, B = {
@@ -521,8 +521,8 @@ const M = {
521
521
  }, V = {
522
522
  /** 字典类型分页;搜索键 code/name → PascalCase Code/Name 查询参。 */
523
523
  typePage: (e) => s.GET("/api/v1/sys/dict/type/page", {
524
- params: { query: { ...r(e), Code: e.code, Name: e.name } }
525
- }).then((t) => p(t)),
524
+ params: { query: { ...d(e), Code: e.code, Name: e.name } }
525
+ }).then((t) => h(t)),
526
526
  typeAdd: (e) => s.POST("/api/v1/sys/dict/type", { body: e }).then((t) => a(t)),
527
527
  typeUpdate: (e, t) => s.PUT("/api/v1/sys/dict/type/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
528
528
  typeRemove: (e) => s.DELETE("/api/v1/sys/dict/type/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -540,8 +540,8 @@ const M = {
540
540
  }, _ = {
541
541
  /** 文件分页;搜索键 originalName → 后端 FileName 模糊过滤。 */
542
542
  page: (e) => s.GET("/api/v1/sys/file/page", {
543
- params: { query: { ...r(e), FileName: e.originalName } }
544
- }).then((t) => p(t)),
543
+ params: { query: { ...d(e), FileName: e.originalName } }
544
+ }).then((t) => h(t)),
545
545
  /** 上传单个文件:bodySerializer 建 FormData(字段名 file),openapi-fetch 对 FormData 不注入 json header,浏览器自动补 boundary(client.ts 无需改)。 */
546
546
  upload: (e) => s.POST("/api/v1/sys/file/upload", {
547
547
  timeout: u,
@@ -558,7 +558,7 @@ const M = {
558
558
  parseAs: "blob"
559
559
  }).then((t) => {
560
560
  if (!t.response.ok)
561
- throw new l(t.response.status, void 0, void 0, t.response.statusText);
561
+ throw new y(t.response.status, void 0, void 0, t.response.statusText);
562
562
  return t.data;
563
563
  }),
564
564
  remove: (e) => s.DELETE("/api/v1/sys/file/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -572,50 +572,134 @@ const M = {
572
572
  timeout: u,
573
573
  body: { uploadId: e, index: t, chunk: i },
574
574
  bodySerializer: (o) => {
575
- const n = o, d = new FormData();
576
- return d.append("uploadId", n.uploadId), d.append("index", String(n.index)), d.append("chunk", n.chunk), d;
575
+ const n = o, r = new FormData();
576
+ return r.append("uploadId", n.uploadId), r.append("index", String(n.index)), r.append("chunk", n.chunk), r;
577
577
  }
578
578
  }).then((o) => a(o)),
579
579
  /** 完成:触发服务端合并 + 哈希校验 + 三道关 + 落库。 */
580
580
  chunkComplete: (e) => s.POST("/api/v1/sys/file/chunk/complete", { timeout: u, body: e }).then((t) => a(t))
581
581
  }, H = {
582
+ /** 文件服务器分页;keyword 模糊匹配名称或根路径。 */
583
+ page: (e) => s.GET("/api/v1/sys/file-server/page", {
584
+ params: {
585
+ query: { ...d(e), Keyword: e.keyword, Enabled: e.enabled }
586
+ }
587
+ }).then((t) => h(t)),
588
+ get: (e) => s.GET("/api/v1/sys/file-server/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
589
+ add: (e) => s.POST("/api/v1/sys/file-server/add", { body: e }).then((t) => a(t)),
590
+ update: (e, t) => s.PUT("/api/v1/sys/file-server/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
591
+ remove: (e) => s.DELETE("/api/v1/sys/file-server/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
592
+ /** 测试连接:用表单里当前填的值,不要求先保存;失败原因在返回体里,不抛异常。 */
593
+ test: (e) => s.POST("/api/v1/sys/file-server/test", { body: e }).then((t) => a(t)),
594
+ /** 一批文件服务器的在线状态;不缓存,每次现连。 */
595
+ status: (e) => s.GET("/api/v1/sys/file-server/status", { params: { query: { ids: e } } }).then((t) => a(t)),
596
+ /** 下拉选项(配文件路径时选服务器)。 */
597
+ options: () => s.GET("/api/v1/sys/file-server/options", {}).then((e) => a(e))
598
+ }, Q = {
599
+ /** 文件路径分页;keyword 模糊匹配编码或名称。 */
600
+ page: (e) => s.GET("/api/v1/sys/file-path/page", {
601
+ params: {
602
+ query: {
603
+ ...d(e),
604
+ Keyword: e.keyword,
605
+ ServerId: e.serverId,
606
+ Enabled: e.enabled
607
+ }
608
+ }
609
+ }).then((t) => h(t)),
610
+ get: (e) => s.GET("/api/v1/sys/file-path/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
611
+ add: (e) => s.POST("/api/v1/sys/file-path/add", { body: e }).then((t) => a(t)),
612
+ /** 编码是业务引用它的键,保存后不能改,所以更新入参里没有 code。 */
613
+ update: (e, t) => s.PUT("/api/v1/sys/file-path/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
614
+ remove: (e) => s.DELETE("/api/v1/sys/file-path/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
615
+ /** 测试连接:用弹窗里当前选的服务器、子文件夹和读写方式,不要求先保存。 */
616
+ test: (e) => s.POST("/api/v1/sys/file-path/test", { body: e }).then((t) => a(t)),
617
+ /** 一批文件路径的在线状态;不缓存,每次现连。 */
618
+ status: (e) => s.GET("/api/v1/sys/file-path/status", { params: { query: { ids: e } } }).then((t) => a(t)),
619
+ /** 配置页的环境信息:白名单根目录,以及当前平台能不能用账号连接共享。 */
620
+ environment: () => s.GET("/api/v1/sys/file-path/environment", {}).then((e) => a(e))
621
+ }, W = {
622
+ /** 单文件上传:返回相对文件夹的路径,业务存它、之后凭它下载。subPath 仅「业务指定路径」命名规则用。 */
623
+ upload: (e, t, i, o) => s.POST("/api/v1/sys/file-path/upload/{code}", {
624
+ timeout: u,
625
+ signal: o,
626
+ params: { path: { code: e } },
627
+ body: { file: t, subPath: i },
628
+ bodySerializer: (n) => {
629
+ const r = n, p = new FormData();
630
+ return p.append("file", r.file), r.subPath && p.append("subPath", r.subPath), p;
631
+ }
632
+ }).then((n) => a(n)),
633
+ /** 分片初始化:服务端按声明的文件名、大小拦规则,通过才建暂存会话,分片大小与片数以它返回的为准。 */
634
+ chunkInit: (e, t, i) => s.POST("/api/v1/sys/file-path/upload/{code}/chunk/init", {
635
+ signal: i,
636
+ params: { path: { code: e } },
637
+ body: { ...t, subPath: t.subPath ?? null }
638
+ }).then((o) => a(o)),
639
+ /** 上传一个分片(multipart:uploadId + index + chunk),同 upload 用 bodySerializer 建 FormData。 */
640
+ chunk: (e, t, i, o, n) => s.POST("/api/v1/sys/file-path/upload/{code}/chunk", {
641
+ timeout: u,
642
+ signal: n,
643
+ params: { path: { code: e } },
644
+ body: { uploadId: t, index: i, chunk: o },
645
+ bodySerializer: (r) => {
646
+ const p = r, l = new FormData();
647
+ return l.append("uploadId", p.uploadId), l.append("index", String(p.index)), l.append("chunk", p.chunk), l;
648
+ }
649
+ }).then((r) => {
650
+ a(r);
651
+ }),
652
+ /** 完成:服务端合并、按实际大小和当前规则再校验、核对哈希后写入。 */
653
+ chunkComplete: (e, t, i) => s.POST("/api/v1/sys/file-path/upload/{code}/chunk/complete", {
654
+ timeout: u,
655
+ signal: i,
656
+ params: { path: { code: e } },
657
+ body: { uploadId: t }
658
+ }).then((o) => a(o)),
659
+ /** 下载:parseAs blob 取原始字节;业务失败服务端回 200 + 信封,unwrapDownload 会辨出来抛 ApiError。 */
660
+ download: (e, t, i) => s.GET("/api/v1/sys/file-path/download/{code}", {
661
+ timeout: u,
662
+ params: { path: { code: e }, query: { path: t, name: i } },
663
+ parseAs: "blob"
664
+ }).then((o) => c(o))
665
+ }, X = {
582
666
  /** 在线会话分页(只读)。后端仅支持按 UserId 过滤,这里不带业务搜索。 */
583
- online: (e) => s.GET("/api/v1/sys/session/online", { params: { query: r(e) } }).then((t) => p(t)),
667
+ online: (e) => s.GET("/api/v1/sys/session/online", { params: { query: d(e) } }).then((t) => h(t)),
584
668
  /** 强制下线:按 sessionId 踢会话。 */
585
669
  kick: (e) => s.DELETE("/api/v1/sys/session/{sessionId}", { params: { path: { sessionId: e } } }).then((t) => a(t))
586
- }, Q = {
670
+ }, Y = {
587
671
  // ── 管理端 ──
588
672
  /** 管理端分页(全量);搜索键 title/type → PascalCase 查询参。 */
589
673
  page: (e) => s.GET("/api/v1/sys/notice/page", {
590
- params: { query: { ...r(e), Title: e.title, Type: e.type } }
591
- }).then((t) => p(t)),
674
+ params: { query: { ...d(e), Title: e.title, Type: e.type } }
675
+ }).then((t) => h(t)),
592
676
  publish: (e) => s.POST("/api/v1/sys/notice", { body: e }).then((t) => a(t)),
593
677
  remove: (e) => s.DELETE("/api/v1/sys/notice/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
594
678
  // ── 用户端(任何登录用户) ──
595
679
  /** 我的通知分页(含已读标记);onlyUnread 供"未读"页签用,types 供铃铛页签用。 */
596
680
  mine: (e) => s.GET("/api/v1/sys/notice/mine", {
597
681
  params: {
598
- query: { ...r(e), OnlyUnread: e.onlyUnread, Types: e.types }
682
+ query: { ...d(e), OnlyUnread: e.onlyUnread, Types: e.types }
599
683
  }
600
- }).then((t) => p(t)),
684
+ }).then((t) => h(t)),
601
685
  /** 当前用户未读通知数(顶栏角标轮询);带 types 只数这几种类型。 */
602
686
  unreadCount: (e) => s.GET("/api/v1/sys/notice/unread-count", { params: { query: { Types: e } } }).then((t) => a(t)),
603
687
  markRead: (e) => s.PUT("/api/v1/sys/notice/{id}/read", { params: { path: { id: e } } }).then((t) => a(t)),
604
688
  /** 全部标为已读;带 types 只标这几种类型。 */
605
689
  markAllRead: (e) => s.PUT("/api/v1/sys/notice/read-all", { params: { query: { Types: e } } }).then((t) => a(t))
606
- }, W = {
690
+ }, Z = {
607
691
  tree: () => s.GET("/api/v1/sys/menu/tree", {}).then((e) => a(e)),
608
692
  /** 可授权路由清单(后端 EndpointDataSource 实时算出,含消费方自建控制器);喂菜单表单「权限码」下拉,免手敲。 */
609
693
  routes: () => s.GET("/api/v1/sys/menu/routes", {}).then((e) => a(e)),
610
694
  add: (e) => s.POST("/api/v1/sys/menu/add", { body: e }).then((t) => a(t)),
611
695
  update: (e, t) => s.PUT("/api/v1/sys/menu/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
612
696
  remove: (e) => s.DELETE("/api/v1/sys/menu/{id}", { params: { path: { id: e } } }).then((t) => a(t))
613
- }, X = {
697
+ }, ee = {
614
698
  /** 任务分页;搜索键 name/status/handlerKind → PascalCase 查询参。行含全列,编辑表单直接用行数据。 */
615
699
  page: (e) => s.GET("/api/v1/sys/job/page", {
616
700
  params: {
617
701
  query: {
618
- ...r(e),
702
+ ...d(e),
619
703
  Name: e.name,
620
704
  Status: e.status,
621
705
  HandlerKind: e.handlerKind,
@@ -623,7 +707,7 @@ const M = {
623
707
  SortOrder: e.sortOrder
624
708
  }
625
709
  }
626
- }).then((t) => p(t)),
710
+ }).then((t) => h(t)),
627
711
  add: (e) => s.POST("/api/v1/sys/job", { body: e }).then((t) => a(t)),
628
712
  update: (e, t) => s.PUT("/api/v1/sys/job/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
629
713
  remove: (e) => s.DELETE("/api/v1/sys/job/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -646,7 +730,7 @@ const M = {
646
730
  return s.GET("/api/v1/sys/job/log/page", {
647
731
  params: {
648
732
  query: {
649
- ...r(e),
733
+ ...d(e),
650
734
  JobId: e.jobId,
651
735
  RunStatus: e.runStatus,
652
736
  FireInstanceId: e.fireInstanceId,
@@ -654,7 +738,7 @@ const M = {
654
738
  StartTo: (i = e.startRange) != null && i[1] ? `${e.startRange[1]} 23:59:59` : void 0
655
739
  }
656
740
  }
657
- }).then((o) => p(o));
741
+ }).then((o) => h(o));
658
742
  },
659
743
  /** 终止一次执行(跨节点写终止旗标,目标节点最迟 KillPollSeconds 后停)。 */
660
744
  kill: (e) => s.POST("/api/v1/sys/job/log/{id}/kill", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -662,23 +746,23 @@ const M = {
662
746
  logClear: (e) => s.POST("/api/v1/sys/job/log/clear", { body: e }).then((t) => a(t)),
663
747
  /** 监控仪表盘(今日成败/在飞/趋势/即将执行/集群节点)。 */
664
748
  dashboard: () => s.GET("/api/v1/sys/job/dashboard", {}).then((e) => a(e))
665
- }, Y = {
749
+ }, te = {
666
750
  page: (e) => (t) => s.GET("/api/v1/sys/recycle/{type}/page", {
667
- params: { path: { type: e }, query: r(t) }
668
- }).then((i) => p(i)),
751
+ params: { path: { type: e }, query: d(t) }
752
+ }).then((i) => h(i)),
669
753
  restore: (e, t) => s.POST("/api/v1/sys/recycle/{type}/{id}/restore", { params: { path: { type: e, id: t } } }).then((i) => a(i)),
670
754
  purge: (e, t) => s.DELETE("/api/v1/sys/recycle/{type}/{id}", { params: { path: { type: e, id: t } } }).then((i) => a(i))
671
- }, Z = {
755
+ }, se = {
672
756
  /** 厂商分页(含模型清单);搜索键 keyword/enabled → PascalCase 查询参。 */
673
757
  page: (e) => s.GET("/api/v1/sys/ai/provider/page", {
674
758
  params: {
675
759
  query: {
676
- ...r(e),
760
+ ...d(e),
677
761
  Keyword: e.keyword,
678
762
  Enabled: e.enabled
679
763
  }
680
764
  }
681
- }).then((t) => p(t)),
765
+ }).then((t) => h(t)),
682
766
  get: (e) => s.GET("/api/v1/sys/ai/provider/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
683
767
  /** 厂商预置清单(协议/BaseUrl/鉴权方式/起步模型),新增抽屉选预设用。 */
684
768
  presets: () => s.GET("/api/v1/sys/ai/provider/presets", {}).then((e) => a(e)),
@@ -690,7 +774,7 @@ const M = {
690
774
  remove: (e) => s.DELETE("/api/v1/sys/ai/provider/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
691
775
  /** 测试连接:用库里当前配置发一条最小对话;失败原因在返回体里,不抛异常。 */
692
776
  test: (e) => s.POST("/api/v1/sys/ai/provider/{id}/test", { params: { path: { id: e } } }).then((t) => a(t))
693
- }, ee = {
777
+ }, ae = {
694
778
  /** 区间总计 + 按维度分组聚合(groupBy 切换四个 Tab 共用这一个接口)。 */
695
779
  summary: (e) => s.GET("/api/v1/sys/ai/usage/summary", {
696
780
  params: {
@@ -722,7 +806,7 @@ const M = {
722
806
  page: (e) => s.GET("/api/v1/sys/ai/usage/page", {
723
807
  params: {
724
808
  query: {
725
- ...r(e),
809
+ ...d(e),
726
810
  From: e.from,
727
811
  To: e.to,
728
812
  ProviderCode: e.providerCode,
@@ -732,44 +816,47 @@ const M = {
732
816
  Success: e.success
733
817
  }
734
818
  }
735
- }).then((t) => p(t))
819
+ }).then((t) => h(t))
736
820
  };
737
821
  export {
738
- l as ApiError,
739
- Z as aiProviderApi,
740
- ee as aiUsageApi,
741
- C as authApi,
822
+ y as ApiError,
823
+ se as aiProviderApi,
824
+ ae as aiUsageApi,
825
+ k as authApi,
742
826
  $ as cacheApi,
743
827
  U as callApi,
744
828
  z as configApi,
745
- k as dashboardApi,
829
+ D as dashboardApi,
746
830
  S as dayRange,
747
831
  V as dictAdminApi,
748
832
  J as dictApi,
749
- D as externalAuthApi,
833
+ C as externalAuthApi,
750
834
  _ as fileApi,
835
+ Q as filePathApi,
836
+ W as filePathFileApi,
837
+ H as fileServerApi,
751
838
  I as highSensApi,
752
- X as jobApi,
839
+ ee as jobApi,
753
840
  x as listQuery,
754
841
  M as logApi,
755
- W as menuApi,
842
+ Z as menuApi,
756
843
  q as mfaApi,
757
844
  j as moduleApi,
758
845
  B as monitorApi,
759
846
  O as normalizeCommit,
760
847
  g as normalizePreview,
761
- Q as noticeApi,
848
+ Y as noticeApi,
762
849
  R as orgApi,
763
- r as pageParams,
850
+ d as pageParams,
764
851
  L as personalApi,
765
- K as positionApi,
766
- Y as recycleApi,
767
- F as roleApi,
768
- H as sessionApi,
769
- p as toPage,
852
+ F as positionApi,
853
+ te as recycleApi,
854
+ K as roleApi,
855
+ X as sessionApi,
856
+ h as toPage,
770
857
  T as toWireRows,
771
858
  a as unwrap,
772
- m as unwrapDownload,
859
+ c as unwrapDownload,
773
860
  N as userApi
774
861
  };
775
862
  //# sourceMappingURL=index.js.map