smart-admin-web 10.12.1 → 10.13.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 (50) hide show
  1. package/dist/api/index.d.ts +28 -1
  2. package/dist/api/index.js +65 -38
  3. package/dist/api/index.js.map +1 -1
  4. package/dist/api/schema.d.ts +769 -3
  5. package/dist/assets/icons/ph-subset.json.js +1 -1
  6. package/dist/composables/useModule.js +35 -27
  7. package/dist/composables/useModule.js.map +1 -1
  8. package/dist/index.js +250 -249
  9. package/dist/layouts/AppHeader.vue.js +1 -1
  10. package/dist/layouts/AppHeader2.vue.js +306 -292
  11. package/dist/layouts/AppHeader2.vue.js.map +1 -1
  12. package/dist/lib/runtime.js +1 -1
  13. package/dist/locales/en-US.d.ts +49 -1
  14. package/dist/locales/en-US.js +50 -2
  15. package/dist/locales/en-US.js.map +1 -1
  16. package/dist/locales/zh-CN.d.ts +49 -1
  17. package/dist/locales/zh-CN.js +50 -2
  18. package/dist/locales/zh-CN.js.map +1 -1
  19. package/dist/router/index.js +18 -13
  20. package/dist/router/index.js.map +1 -1
  21. package/dist/router/viewRegistry.js +1 -1
  22. package/dist/router/viewRegistry.js.map +1 -1
  23. package/dist/stores/user.d.ts +6 -1
  24. package/dist/stores/user.js.map +1 -1
  25. package/dist/style.css +1 -1
  26. package/dist/types/api.d.ts +59 -0
  27. package/dist/types/api.js.map +1 -1
  28. package/dist/views/dashboard/ShortcutPicker.vue.d.ts +16 -0
  29. package/dist/views/dashboard/ShortcutPicker.vue.js +8 -0
  30. package/dist/views/dashboard/ShortcutPicker.vue.js.map +1 -0
  31. package/dist/views/dashboard/ShortcutPicker2.vue.js +86 -0
  32. package/dist/views/dashboard/ShortcutPicker2.vue.js.map +1 -0
  33. package/dist/views/dashboard/biz.vue.js +2 -2
  34. package/dist/views/dashboard/biz2.vue.js +265 -93
  35. package/dist/views/dashboard/biz2.vue.js.map +1 -1
  36. package/dist/views/dashboard/onlineDuration.d.ts +5 -0
  37. package/dist/views/dashboard/onlineDuration.js +8 -0
  38. package/dist/views/dashboard/onlineDuration.js.map +1 -0
  39. package/dist/views/dashboard/shortcutGroups.d.ts +18 -0
  40. package/dist/views/dashboard/shortcutGroups.js +19 -0
  41. package/dist/views/dashboard/shortcutGroups.js.map +1 -0
  42. package/dist/views/system/tenant/index.vue.d.ts +3 -0
  43. package/dist/views/system/tenant/index.vue.js +8 -0
  44. package/dist/views/system/tenant/index.vue.js.map +1 -0
  45. package/dist/views/system/tenant/index2.vue.js +366 -0
  46. package/dist/views/system/tenant/index2.vue.js.map +1 -0
  47. package/dist/views/system/user/index.vue.js +2 -2
  48. package/dist/views/system/user/index2.vue.js +281 -211
  49. package/dist/views/system/user/index2.vue.js.map +1 -1
  50. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { components } from './schema';
2
- import { AddUserInput, AddUserOutput, AiProviderAddInput, AiProviderPreset, AiProviderUpdateInput, AiProviderView, AiTestResult, AiUsageGroupBy, AiUsageSummary, AiUsageTrendPoint, ChunkInitOutput, ConfigInput, CronPreviewOutput, DashboardSummary, DataScopeType, DictItem, DictItemInput, DictTypeInput, DuplicateStrategy, FileUploadOutput, ImportCommitResult, ImportPreview, ImportRow, JobDashboard, JobHandlersOutput, JobInput, LoginOutput, ModuleInput, ModuleRow, MyModulesOutput, MySessionItem, NoticeMineItem, NoticePublishInput, OnlineSessionItem, OrgInput, PermissionRouteItem, PositionInput, RoleInput, ServerInfoOutput, SysAiUsageLog, SysConfig, SysDictItem, SysDictType, SysExceptionLog, SysFile, SysJob, SysJobLog, SysLoginLog, SysNotice, SysOpLog, SysOrg, SysPosition, SysRole, SysRoleDataScope, UpdateUserInput, UserDetail, UserItem, UserProfile } from '../types/api';
2
+ import { AddUserInput, AddUserOutput, AiProviderAddInput, AiProviderPreset, AiProviderUpdateInput, AiProviderView, AiTestResult, AiUsageGroupBy, AiUsageSummary, AiUsageTrendPoint, ChunkInitOutput, ConfigInput, CronPreviewOutput, DashboardSummary, DataScopeType, DictItem, DictItemInput, DictTypeInput, DuplicateStrategy, FileUploadOutput, ImportCommitResult, ImportPreview, ImportRow, JobDashboard, JobHandlersOutput, JobInput, LastLoginInfo, LoginOutput, ModuleInput, ModuleRow, MyModulesOutput, MySessionItem, NoticeMineItem, NoticePublishInput, OnlineSessionItem, OrgInput, PermissionRouteItem, PositionInput, RoleInput, ServerInfoOutput, SysAiUsageLog, SysConfig, SysDictItem, SysDictType, SysExceptionLog, SysFile, SysJob, SysJobLog, SysLoginLog, SysNotice, SysOpLog, SysOrg, SysPosition, SysRole, SysRoleDataScope, SysTenant, TenantCreateInput, TenantInput, UpdateUserInput, UserDetail, UserItem, UserProfile, UserShortcutItem, WorkbenchTodoSummary } from '../types/api';
3
3
  import { MenuInput, MenuNode, MenuTreeNode } from '../types/menu';
4
4
  /** 业务错误(含后端 code / msgKey);视图 catch 后经 translateError 展示。 */
5
5
  export declare class ApiError extends Error {
@@ -255,6 +255,18 @@ export declare const personalApi: {
255
255
  }) => Promise<boolean>;
256
256
  /** 当前用户权限码集合(= 规范化路由);喂给 authStore.permissionCodes 驱动 v-auth。超管返回空集。 */
257
257
  permissions: () => Promise<string[]>;
258
+ /** 上一次成功登录的信息(排除本次);首次登录返回 null。 */
259
+ lastLogin: () => Promise<LastLoginInfo | null>;
260
+ /** 工作台待办摘要;内核默认恒空,消费方接入真实审批/工单系统后有数据。 */
261
+ workbenchTodo: () => Promise<WorkbenchTodoSummary>;
262
+ /** 工作台快捷方式(置顶优先 + 高频自动补位,已按此排好序)。 */
263
+ shortcuts: () => Promise<UserShortcutItem[]>;
264
+ /** 置顶一个快捷方式(幂等)。 */
265
+ pinShortcut: (menuPath: string) => Promise<boolean>;
266
+ /** 取消置顶(幂等)。 */
267
+ unpinShortcut: (menuPath: string) => Promise<boolean>;
268
+ /** 记一次快捷方式访问(高频自动补位用);失败静默,不是用户能感知的操作。 */
269
+ recordShortcutVisit: (menuPath: string) => Promise<boolean>;
258
270
  };
259
271
  export declare const userApi: {
260
272
  /** 归一后端 PagedList<UserItem>({current,size,total,items}) → SmartTable fetcher 契约的 {items,total}。 */
@@ -720,4 +732,19 @@ export declare const aiUsageApi: {
720
732
  total: number;
721
733
  }>;
722
734
  };
735
+ export declare const tenantApi: {
736
+ page: (params: {
737
+ page: number;
738
+ pageSize: number;
739
+ name?: string;
740
+ sortField?: string;
741
+ sortOrder?: string;
742
+ }) => Promise<{
743
+ items: SysTenant[];
744
+ total: number;
745
+ }>;
746
+ add: (body: TenantCreateInput) => Promise<number>;
747
+ update: (id: number, body: TenantInput) => Promise<boolean>;
748
+ remove: (id: number) => Promise<boolean>;
749
+ };
723
750
  export {};
package/dist/api/index.js CHANGED
@@ -4,8 +4,8 @@ var y = (e, t, i) => P(e, typeof t != "symbol" ? t + "" : t, i);
4
4
  import { client as s, LONG_TIMEOUT_MS as l } from "./client.js";
5
5
  import { runtime as S } from "../lib/runtime.js";
6
6
  class u extends Error {
7
- constructor(i, o, n, p) {
8
- super(p ?? o ?? `Error ${i}`);
7
+ constructor(i, o, n, d) {
8
+ super(d ?? o ?? `Error ${i}`);
9
9
  y(this, "code");
10
10
  y(this, "msgKey");
11
11
  y(this, "args");
@@ -15,9 +15,9 @@ class u extends Error {
15
15
  function a(e) {
16
16
  const { data: t, error: i, response: o } = e;
17
17
  if (i != null) {
18
- const p = i;
19
- if (typeof p.code == "number")
20
- throw new u(p.code, p.msgKey, p.args, p.message);
18
+ const d = i;
19
+ if (typeof d.code == "number")
20
+ throw new u(d.code, d.msgKey, d.args, d.message);
21
21
  const h = i;
22
22
  throw new u(
23
23
  o.status,
@@ -46,7 +46,7 @@ const r = (e) => ({
46
46
  SortField: e.sortField,
47
47
  SortOrder: e.sortOrder
48
48
  }), f = (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 d(e) {
49
+ function p(e) {
50
50
  const t = a(e);
51
51
  return { items: t.items, total: t.total };
52
52
  }
@@ -56,9 +56,9 @@ async function m(e) {
56
56
  const h = i ?? {};
57
57
  throw typeof h.code == "number" ? new u(h.code, h.msgKey, h.args, h.message) : new u(o.status, void 0, void 0, o.statusText);
58
58
  }
59
- const n = t, p = o.headers.get("content-type") ?? "";
60
- if (p.includes("spreadsheet") || p.includes("octet-stream")) return n;
61
- if (p.includes("json") || p.includes("text/plain")) {
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
62
  const h = JSON.parse(await n.text());
63
63
  if (typeof h.code == "number" && h.code !== 0)
64
64
  throw new u(h.code, h.msgKey, h.args, h.message);
@@ -185,7 +185,19 @@ const C = {
185
185
  kickSession: (e) => s.DELETE("/api/v1/personal/sessions/{sessionId}", { params: { path: { sessionId: e } } }).then((t) => a(t)),
186
186
  updatePassword: (e) => s.PUT("/api/v1/personal/password", { body: e }).then((t) => a(t)),
187
187
  /** 当前用户权限码集合(= 规范化路由);喂给 authStore.permissionCodes 驱动 v-auth。超管返回空集。 */
188
- permissions: () => s.GET("/api/v1/personal/permissions", {}).then((e) => a(e))
188
+ permissions: () => s.GET("/api/v1/personal/permissions", {}).then((e) => a(e)),
189
+ /** 上一次成功登录的信息(排除本次);首次登录返回 null。 */
190
+ lastLogin: () => s.GET("/api/v1/personal/last-login", {}).then((e) => a(e)),
191
+ /** 工作台待办摘要;内核默认恒空,消费方接入真实审批/工单系统后有数据。 */
192
+ workbenchTodo: () => s.GET("/api/v1/personal/workbench/todo", {}).then((e) => a(e)),
193
+ /** 工作台快捷方式(置顶优先 + 高频自动补位,已按此排好序)。 */
194
+ shortcuts: () => s.GET("/api/v1/personal/shortcuts", {}).then((e) => a(e)),
195
+ /** 置顶一个快捷方式(幂等)。 */
196
+ pinShortcut: (e) => s.PUT("/api/v1/personal/shortcuts/pin", { body: { menuPath: e } }).then((t) => a(t)),
197
+ /** 取消置顶(幂等)。 */
198
+ unpinShortcut: (e) => s.PUT("/api/v1/personal/shortcuts/unpin", { body: { menuPath: e } }).then((t) => a(t)),
199
+ /** 记一次快捷方式访问(高频自动补位用);失败静默,不是用户能感知的操作。 */
200
+ recordShortcutVisit: (e) => s.POST("/api/v1/personal/shortcuts/visit", { body: { menuPath: e } }).then((t) => a(t))
189
201
  }, N = {
190
202
  /** 归一后端 PagedList<UserItem>({current,size,total,items}) → SmartTable fetcher 契约的 {items,total}。 */
191
203
  page: (e) => s.GET("/api/v1/sys/user/page", {
@@ -203,7 +215,7 @@ const C = {
203
215
  SortOrder: e.sortOrder
204
216
  }
205
217
  }
206
- }).then((t) => d(t)),
218
+ }).then((t) => p(t)),
207
219
  /** 用户详情(含 roleIds,编辑回显 + 提交时原样带回避免清空角色)。 */
208
220
  detail: (e) => s.GET("/api/v1/sys/user/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
209
221
  /** 新增用户;返回新 Id + 实际生效的初始口令(留空 password 时后端随机生成,不接住就没人知道这个号的密码)。 */
@@ -292,7 +304,7 @@ const C = {
292
304
  SortOrder: e.sortOrder
293
305
  }
294
306
  }
295
- }).then((t) => d(t)),
307
+ }).then((t) => p(t)),
296
308
  add: (e) => s.POST("/api/v1/sys/position/add", { body: e }).then((t) => a(t)),
297
309
  update: (e, t) => s.PUT("/api/v1/sys/position/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
298
310
  remove: (e) => s.DELETE("/api/v1/sys/position/{id}", { params: { path: { id: e } } }).then((t) => a(t))
@@ -300,7 +312,7 @@ const C = {
300
312
  /** 角色分页;搜索键 name → PascalCase Name。列表用 + 用户/授权页拉一大页当下拉源。 */
301
313
  page: (e) => s.GET("/api/v1/sys/role/page", {
302
314
  params: { query: { ...r(e), Name: e.name } }
303
- }).then((t) => d(t)),
315
+ }).then((t) => p(t)),
304
316
  add: (e) => s.POST("/api/v1/sys/role/add", { body: e }).then((t) => a(t)),
305
317
  update: (e, t) => s.PUT("/api/v1/sys/role/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
306
318
  remove: (e) => s.DELETE("/api/v1/sys/role/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -335,7 +347,7 @@ const C = {
335
347
  ExcludedGroupCodes: e.excludedGroupCodes
336
348
  }
337
349
  }
338
- }).then((t) => d(t)),
350
+ }).then((t) => p(t)),
339
351
  add: (e) => s.POST("/api/v1/sys/config", { body: e }).then((t) => a(t)),
340
352
  update: (e, t) => s.PUT("/api/v1/sys/config/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
341
353
  remove: (e) => s.DELETE("/api/v1/sys/config/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -378,7 +390,7 @@ const B = {
378
390
  ...v(e.createTime)
379
391
  }
380
392
  }
381
- }).then((t) => d(t)),
393
+ }).then((t) => p(t)),
382
394
  /** 清空登录日志(硬删,不可恢复)。 */
383
395
  loginClear: () => s.DELETE("/api/v1/sys/log/login", {}).then((e) => a(e)),
384
396
  /** 操作日志分页;操作名模糊 + 成败 + 操作人(精确)+ 接口路径(模糊)+ 时间范围——审计要能答"谁在什么时候干了什么"。 */
@@ -393,7 +405,7 @@ const B = {
393
405
  ...v(e.createTime)
394
406
  }
395
407
  }
396
- }).then((t) => d(t)),
408
+ }).then((t) => p(t)),
397
409
  /** 清空操作日志(硬删,不可恢复)。 */
398
410
  opClear: () => s.DELETE("/api/v1/sys/log/op", {}).then((e) => a(e)),
399
411
  /**
@@ -424,7 +436,7 @@ const B = {
424
436
  ...v(e.createTime)
425
437
  }
426
438
  }
427
- }).then((t) => d(t)),
439
+ }).then((t) => p(t)),
428
440
  /** 清空异常日志(硬删,不可恢复)。 */
429
441
  exceptionClear: () => s.DELETE("/api/v1/sys/log/exception", {}).then((e) => a(e))
430
442
  }, M = {
@@ -451,11 +463,11 @@ const B = {
451
463
  enabled: i.enabled ?? !0
452
464
  }))
453
465
  )
454
- }, _ = {
466
+ }, V = {
455
467
  /** 字典类型分页;搜索键 code/name → PascalCase Code/Name 查询参。 */
456
468
  typePage: (e) => s.GET("/api/v1/sys/dict/type/page", {
457
469
  params: { query: { ...r(e), Code: e.code, Name: e.name } }
458
- }).then((t) => d(t)),
470
+ }).then((t) => p(t)),
459
471
  typeAdd: (e) => s.POST("/api/v1/sys/dict/type", { body: e }).then((t) => a(t)),
460
472
  typeUpdate: (e, t) => s.PUT("/api/v1/sys/dict/type/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
461
473
  typeRemove: (e) => s.DELETE("/api/v1/sys/dict/type/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -470,11 +482,11 @@ const B = {
470
482
  itemRemove: (e) => s.DELETE("/api/v1/sys/dict/item/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
471
483
  /** 批量删除字典项。 */
472
484
  itemBatchRemove: (e) => s.POST("/api/v1/sys/dict/item/batch-delete", { body: { ids: e } }).then((t) => a(t))
473
- }, H = {
485
+ }, _ = {
474
486
  /** 文件分页;搜索键 originalName → 后端 FileName 模糊过滤。 */
475
487
  page: (e) => s.GET("/api/v1/sys/file/page", {
476
488
  params: { query: { ...r(e), FileName: e.originalName } }
477
- }).then((t) => d(t)),
489
+ }).then((t) => p(t)),
478
490
  /** 上传单个文件:bodySerializer 建 FormData(字段名 file),openapi-fetch 对 FormData 不注入 json header,浏览器自动补 boundary(client.ts 无需改)。 */
479
491
  upload: (e) => s.POST("/api/v1/sys/file/upload", {
480
492
  timeout: l,
@@ -505,30 +517,30 @@ const B = {
505
517
  timeout: l,
506
518
  body: { uploadId: e, index: t, chunk: i },
507
519
  bodySerializer: (o) => {
508
- const n = o, p = new FormData();
509
- return p.append("uploadId", n.uploadId), p.append("index", String(n.index)), p.append("chunk", n.chunk), p;
520
+ const n = o, d = new FormData();
521
+ return d.append("uploadId", n.uploadId), d.append("index", String(n.index)), d.append("chunk", n.chunk), d;
510
522
  }
511
523
  }).then((o) => a(o)),
512
524
  /** 完成:触发服务端合并 + 哈希校验 + 三道关 + 落库。 */
513
525
  chunkComplete: (e) => s.POST("/api/v1/sys/file/chunk/complete", { timeout: l, body: e }).then((t) => a(t))
514
- }, Q = {
526
+ }, H = {
515
527
  /** 在线会话分页(只读)。后端仅支持按 UserId 过滤,这里不带业务搜索。 */
516
- online: (e) => s.GET("/api/v1/sys/session/online", { params: { query: r(e) } }).then((t) => d(t)),
528
+ online: (e) => s.GET("/api/v1/sys/session/online", { params: { query: r(e) } }).then((t) => p(t)),
517
529
  /** 强制下线:按 sessionId 踢会话。 */
518
530
  kick: (e) => s.DELETE("/api/v1/sys/session/{sessionId}", { params: { path: { sessionId: e } } }).then((t) => a(t))
519
- }, V = {
531
+ }, Q = {
520
532
  // ── 管理端 ──
521
533
  /** 管理端分页(全量);搜索键 title/type → PascalCase 查询参。 */
522
534
  page: (e) => s.GET("/api/v1/sys/notice/page", {
523
535
  params: { query: { ...r(e), Title: e.title, Type: e.type } }
524
- }).then((t) => d(t)),
536
+ }).then((t) => p(t)),
525
537
  publish: (e) => s.POST("/api/v1/sys/notice", { body: e }).then((t) => a(t)),
526
538
  remove: (e) => s.DELETE("/api/v1/sys/notice/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
527
539
  // ── 用户端(任何登录用户) ──
528
540
  /** 我的通知分页(含已读标记);onlyUnread 供"未读"页签用。 */
529
541
  mine: (e) => s.GET("/api/v1/sys/notice/mine", {
530
542
  params: { query: { ...r(e), OnlyUnread: e.onlyUnread } }
531
- }).then((t) => d(t)),
543
+ }).then((t) => p(t)),
532
544
  /** 当前用户未读通知数(顶栏角标轮询)。 */
533
545
  unreadCount: () => s.GET("/api/v1/sys/notice/unread-count", {}).then((e) => a(e)),
534
546
  markRead: (e) => s.PUT("/api/v1/sys/notice/{id}/read", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -553,7 +565,7 @@ const B = {
553
565
  SortOrder: e.sortOrder
554
566
  }
555
567
  }
556
- }).then((t) => d(t)),
568
+ }).then((t) => p(t)),
557
569
  add: (e) => s.POST("/api/v1/sys/job", { body: e }).then((t) => a(t)),
558
570
  update: (e, t) => s.PUT("/api/v1/sys/job/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
559
571
  remove: (e) => s.DELETE("/api/v1/sys/job/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -584,7 +596,7 @@ const B = {
584
596
  StartTo: (i = e.startRange) != null && i[1] ? `${e.startRange[1]} 23:59:59` : void 0
585
597
  }
586
598
  }
587
- }).then((o) => d(o));
599
+ }).then((o) => p(o));
588
600
  },
589
601
  /** 终止一次执行(跨节点写终止旗标,目标节点最迟 KillPollSeconds 后停)。 */
590
602
  kill: (e) => s.POST("/api/v1/sys/job/log/{id}/kill", { params: { path: { id: e } } }).then((t) => a(t)),
@@ -595,7 +607,7 @@ const B = {
595
607
  }, Y = {
596
608
  page: (e) => (t) => s.GET("/api/v1/sys/recycle/{type}/page", {
597
609
  params: { path: { type: e }, query: r(t) }
598
- }).then((i) => d(i)),
610
+ }).then((i) => p(i)),
599
611
  restore: (e, t) => s.POST("/api/v1/sys/recycle/{type}/{id}/restore", { params: { path: { type: e, id: t } } }).then((i) => a(i)),
600
612
  purge: (e, t) => s.DELETE("/api/v1/sys/recycle/{type}/{id}", { params: { path: { type: e, id: t } } }).then((i) => a(i))
601
613
  }, Z = {
@@ -608,7 +620,7 @@ const B = {
608
620
  Enabled: e.enabled
609
621
  }
610
622
  }
611
- }).then((t) => d(t)),
623
+ }).then((t) => p(t)),
612
624
  get: (e) => s.GET("/api/v1/sys/ai/provider/{id}", { params: { path: { id: e } } }).then((t) => a(t)),
613
625
  /** 厂商预置清单(协议/BaseUrl/鉴权方式/起步模型),新增抽屉选预设用。 */
614
626
  presets: () => s.GET("/api/v1/sys/ai/provider/presets", {}).then((e) => a(e)),
@@ -662,7 +674,21 @@ const B = {
662
674
  Success: e.success
663
675
  }
664
676
  }
665
- }).then((t) => d(t))
677
+ }).then((t) => p(t))
678
+ }, te = {
679
+ page: (e) => s.GET("/api/v1/sys/tenant/page", {
680
+ params: {
681
+ query: {
682
+ ...r(e),
683
+ Name: e.name,
684
+ SortField: e.sortField,
685
+ SortOrder: e.sortOrder
686
+ }
687
+ }
688
+ }).then((t) => p(t)),
689
+ add: (e) => s.POST("/api/v1/sys/tenant/add", { body: e }).then((t) => a(t)),
690
+ update: (e, t) => s.PUT("/api/v1/sys/tenant/{id}", { params: { path: { id: e } }, body: t }).then((i) => a(i)),
691
+ remove: (e) => s.DELETE("/api/v1/sys/tenant/{id}", { params: { path: { id: e } } }).then((t) => a(t))
666
692
  };
667
693
  export {
668
694
  u as ApiError,
@@ -674,10 +700,10 @@ export {
674
700
  z as configApi,
675
701
  k as dashboardApi,
676
702
  f as dayRange,
677
- _ as dictAdminApi,
703
+ V as dictAdminApi,
678
704
  J as dictApi,
679
705
  D as externalAuthApi,
680
- H as fileApi,
706
+ _ as fileApi,
681
707
  q as highSensApi,
682
708
  X as jobApi,
683
709
  x as listQuery,
@@ -688,15 +714,16 @@ export {
688
714
  M as monitorApi,
689
715
  O as normalizeCommit,
690
716
  g as normalizePreview,
691
- V as noticeApi,
717
+ Q as noticeApi,
692
718
  R as orgApi,
693
719
  r as pageParams,
694
720
  L as personalApi,
695
721
  F as positionApi,
696
722
  Y as recycleApi,
697
723
  K as roleApi,
698
- Q as sessionApi,
699
- d as toPage,
724
+ H as sessionApi,
725
+ te as tenantApi,
726
+ p as toPage,
700
727
  T as toWireRows,
701
728
  a as unwrap,
702
729
  m as unwrapDownload,