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
@@ -1,21 +1,21 @@
1
- const s = {};
1
+ const o = {};
2
2
  function t(e) {
3
- const o = e.lastIndexOf("/views/");
4
- return (o >= 0 ? e.slice(o + 7) : e.replace(/^\.?\/+/, "")).replace(/\.vue$/, "");
3
+ const s = e.lastIndexOf("/views/");
4
+ return (s >= 0 ? e.slice(s + 7) : e.replace(/^\.?\/+/, "")).replace(/\.vue$/, "");
5
5
  }
6
6
  function n(e) {
7
- for (const [o, i] of Object.entries(e)) s[t(o)] = i;
7
+ for (const [s, i] of Object.entries(e)) o[t(s)] = i;
8
8
  }
9
9
  function m(e) {
10
- return s[e];
10
+ return o[e];
11
11
  }
12
12
  function r() {
13
- return Object.keys(s).toSorted();
13
+ return Object.keys(o).toSorted();
14
14
  }
15
15
  function v() {
16
- return Object.entries(s).filter(([e]) => e.endsWith("/detail"));
16
+ return Object.entries(o).filter(([e]) => e.endsWith("/detail"));
17
17
  }
18
- n(/* @__PURE__ */ Object.assign({ "../views/dashboard/ShortcutPicker.vue": () => import("../views/dashboard/ShortcutPicker.vue.js"), "../views/dashboard/biz.vue": () => import("../views/dashboard/biz.vue.js"), "../views/dashboard/workbench.vue": () => import("../views/dashboard/workbench.vue.js"), "../views/embed/iframe.vue": () => import("../views/embed/iframe.vue.js"), "../views/error/404.vue": () => import("../views/error/404.vue.js"), "../views/error/BootError.vue": () => import("../views/error/BootError.vue.js"), "../views/error/MissingRoute.vue": () => import("../views/error/MissingRoute.vue.js"), "../views/login/LoginForm.vue": () => import("../views/login/LoginForm.vue.js"), "../views/login/components/LoginDesk.vue": () => import("../views/login/components/LoginDesk.vue.js"), "../views/login/components/LoginHeroPanel.vue": () => import("../views/login/components/LoginHeroPanel.vue.js"), "../views/login/index.vue": () => import("../views/login/index.vue.js"), "../views/mfa/index.vue": () => import("../views/mfa/index.vue.js"), "../views/module/index.vue": () => import("../views/module/index.vue.js"), "../views/oauth/callback.vue": () => import("../views/oauth/callback.vue.js"), "../views/personal/bindings.vue": () => import("../views/personal/bindings.vue.js"), "../views/personal/notice.vue": () => import("../views/personal/notice.vue.js"), "../views/personal/password.vue": () => import("../views/personal/password.vue.js"), "../views/personal/profile.vue": () => import("../views/personal/profile.vue.js"), "../views/personal/security.vue": () => import("../views/personal/security.vue.js"), "../views/personal/sessions.vue": () => import("../views/personal/sessions.vue.js"), "../views/system/ai-model/components/ProviderCard.vue": () => import("../views/system/ai-model/components/ProviderCard.vue.js"), "../views/system/ai-model/components/ProviderForm.vue": () => import("../views/system/ai-model/components/ProviderForm.vue.js"), "../views/system/ai-model/index.vue": () => import("../views/system/ai-model/index.vue.js"), "../views/system/ai-usage/index.vue": () => import("../views/system/ai-usage/index.vue.js"), "../views/system/api-docs/index.vue": () => import("../views/system/api-docs/index.vue.js"), "../views/system/cache/index.vue": () => import("../views/system/cache/index.vue.js"), "../views/system/config/components/AdminMock.vue": () => import("../views/system/config/components/AdminMock.vue.js"), "../views/system/config/components/AdvancedSection.vue": () => import("../views/system/config/components/AdvancedSection.vue.js"), "../views/system/config/components/BrandSection.vue": () => import("../views/system/config/components/BrandSection.vue.js"), "../views/system/config/components/CfgGroup.vue": () => import("../views/system/config/components/CfgGroup.vue.js"), "../views/system/config/components/CfgRow.vue": () => import("../views/system/config/components/CfgRow.vue.js"), "../views/system/config/components/CfgSegment.vue": () => import("../views/system/config/components/CfgSegment.vue.js"), "../views/system/config/components/ConfigFormModal.vue": () => import("../views/system/config/components/ConfigFormModal.vue.js"), "../views/system/config/components/JobSection.vue": () => import("../views/system/config/components/JobSection.vue.js"), "../views/system/config/components/LoginMock.vue": () => import("../views/system/config/components/LoginMock.vue.js"), "../views/system/config/components/LogoCropper.vue": () => import("../views/system/config/components/LogoCropper.vue.js"), "../views/system/config/components/LogoEditor.vue": () => import("../views/system/config/components/LogoEditor.vue.js"), "../views/system/config/components/ProviderSheet.vue": () => import("../views/system/config/components/ProviderSheet.vue.js"), "../views/system/config/components/ScaleToFit.vue": () => import("../views/system/config/components/ScaleToFit.vue.js"), "../views/system/config/components/SectionLayout.vue": () => import("../views/system/config/components/SectionLayout.vue.js"), "../views/system/config/components/SecuritySection.vue": () => import("../views/system/config/components/SecuritySection.vue.js"), "../views/system/config/components/SensitiveSection.vue": () => import("../views/system/config/components/SensitiveSection.vue.js"), "../views/system/config/components/SigninSection.vue": () => import("../views/system/config/components/SigninSection.vue.js"), "../views/system/config/components/UploadSection.vue": () => import("../views/system/config/components/UploadSection.vue.js"), "../views/system/config/components/WatermarkSection.vue": () => import("../views/system/config/components/WatermarkSection.vue.js"), "../views/system/config/index.vue": () => import("../views/system/config/index.vue.js"), "../views/system/dict/index.vue": () => import("../views/system/dict/index.vue.js"), "../views/system/file/index.vue": () => import("../views/system/file/index.vue.js"), "../views/system/job-log/components/AttemptTable.vue": () => import("../views/system/job-log/components/AttemptTable.vue.js"), "../views/system/job-log/index.vue": () => import("../views/system/job-log/index.vue.js"), "../views/system/job-monitor/index.vue": () => import("../views/system/job-monitor/index.vue.js"), "../views/system/job/index.vue": () => import("../views/system/job/index.vue.js"), "../views/system/log/exception/index.vue": () => import("../views/system/log/exception/index.vue.js"), "../views/system/log/login/index.vue": () => import("../views/system/log/login/index.vue.js"), "../views/system/log/op/index.vue": () => import("../views/system/log/op/index.vue.js"), "../views/system/menu/components/ButtonManager.vue": () => import("../views/system/menu/components/ButtonManager.vue.js"), "../views/system/menu/components/MenuFormModal.vue": () => import("../views/system/menu/components/MenuFormModal.vue.js"), "../views/system/menu/index.vue": () => import("../views/system/menu/index.vue.js"), "../views/system/module/index.vue": () => import("../views/system/module/index.vue.js"), "../views/system/monitor/index.vue": () => import("../views/system/monitor/index.vue.js"), "../views/system/notice/index.vue": () => import("../views/system/notice/index.vue.js"), "../views/system/org/index.vue": () => import("../views/system/org/index.vue.js"), "../views/system/position/index.vue": () => import("../views/system/position/index.vue.js"), "../views/system/recycle/index.vue": () => import("../views/system/recycle/index.vue.js"), "../views/system/role/components/GrantMenuSheet.vue": () => import("../views/system/role/components/GrantMenuSheet.vue.js"), "../views/system/role/components/GrantMenuTable.vue": () => import("../views/system/role/components/GrantMenuTable.vue.js"), "../views/system/role/components/MatchText.vue": () => import("../views/system/role/components/MatchText.vue.js"), "../views/system/role/index.vue": () => import("../views/system/role/index.vue.js"), "../views/system/session/index.vue": () => import("../views/system/session/index.vue.js"), "../views/system/user/components/ResetPasswordModal.vue": () => import("../views/system/user/components/ResetPasswordModal.vue.js"), "../views/system/user/components/UserFormModal.vue": () => import("../views/system/user/components/UserFormModal.vue.js"), "../views/system/user/components/UserGrantEffectiveTable.vue": () => import("../views/system/user/components/UserGrantEffectiveTable.vue.js"), "../views/system/user/components/UserGrantMenuSheet.vue": () => import("../views/system/user/components/UserGrantMenuSheet.vue.js"), "../views/system/user/components/UserGrantMenuTable.vue": () => import("../views/system/user/components/UserGrantMenuTable.vue.js"), "../views/system/user/components/UserGrantNodeRow.vue": () => import("../views/system/user/components/UserGrantNodeRow.vue.js"), "../views/system/user/components/UserGrantOverviewDrawer.vue": () => import("../views/system/user/components/UserGrantOverviewDrawer.vue.js"), "../views/system/user/index.vue": () => import("../views/system/user/index.vue.js") }));
18
+ n(/* @__PURE__ */ Object.assign({ "../views/dashboard/ShortcutPicker.vue": () => import("../views/dashboard/ShortcutPicker.vue.js"), "../views/dashboard/biz.vue": () => import("../views/dashboard/biz.vue.js"), "../views/dashboard/workbench.vue": () => import("../views/dashboard/workbench.vue.js"), "../views/embed/iframe.vue": () => import("../views/embed/iframe.vue.js"), "../views/error/404.vue": () => import("../views/error/404.vue.js"), "../views/error/BootError.vue": () => import("../views/error/BootError.vue.js"), "../views/error/MissingRoute.vue": () => import("../views/error/MissingRoute.vue.js"), "../views/login/LoginForm.vue": () => import("../views/login/LoginForm.vue.js"), "../views/login/components/LoginDesk.vue": () => import("../views/login/components/LoginDesk.vue.js"), "../views/login/components/LoginHeroPanel.vue": () => import("../views/login/components/LoginHeroPanel.vue.js"), "../views/login/index.vue": () => import("../views/login/index.vue.js"), "../views/mfa/index.vue": () => import("../views/mfa/index.vue.js"), "../views/module/index.vue": () => import("../views/module/index.vue.js"), "../views/oauth/callback.vue": () => import("../views/oauth/callback.vue.js"), "../views/personal/bindings.vue": () => import("../views/personal/bindings.vue.js"), "../views/personal/notice.vue": () => import("../views/personal/notice.vue.js"), "../views/personal/password.vue": () => import("../views/personal/password.vue.js"), "../views/personal/profile.vue": () => import("../views/personal/profile.vue.js"), "../views/personal/security.vue": () => import("../views/personal/security.vue.js"), "../views/personal/sessions.vue": () => import("../views/personal/sessions.vue.js"), "../views/system/ai-model/components/ProviderCard.vue": () => import("../views/system/ai-model/components/ProviderCard.vue.js"), "../views/system/ai-model/components/ProviderForm.vue": () => import("../views/system/ai-model/components/ProviderForm.vue.js"), "../views/system/ai-model/index.vue": () => import("../views/system/ai-model/index.vue.js"), "../views/system/ai-usage/index.vue": () => import("../views/system/ai-usage/index.vue.js"), "../views/system/api-docs/index.vue": () => import("../views/system/api-docs/index.vue.js"), "../views/system/cache/index.vue": () => import("../views/system/cache/index.vue.js"), "../views/system/config/components/AdminMock.vue": () => import("../views/system/config/components/AdminMock.vue.js"), "../views/system/config/components/AdvancedSection.vue": () => import("../views/system/config/components/AdvancedSection.vue.js"), "../views/system/config/components/BrandSection.vue": () => import("../views/system/config/components/BrandSection.vue.js"), "../views/system/config/components/CfgGroup.vue": () => import("../views/system/config/components/CfgGroup.vue.js"), "../views/system/config/components/CfgRow.vue": () => import("../views/system/config/components/CfgRow.vue.js"), "../views/system/config/components/CfgSegment.vue": () => import("../views/system/config/components/CfgSegment.vue.js"), "../views/system/config/components/ConfigFormModal.vue": () => import("../views/system/config/components/ConfigFormModal.vue.js"), "../views/system/config/components/JobSection.vue": () => import("../views/system/config/components/JobSection.vue.js"), "../views/system/config/components/LoginMock.vue": () => import("../views/system/config/components/LoginMock.vue.js"), "../views/system/config/components/LogoCropper.vue": () => import("../views/system/config/components/LogoCropper.vue.js"), "../views/system/config/components/LogoEditor.vue": () => import("../views/system/config/components/LogoEditor.vue.js"), "../views/system/config/components/ProviderSheet.vue": () => import("../views/system/config/components/ProviderSheet.vue.js"), "../views/system/config/components/ScaleToFit.vue": () => import("../views/system/config/components/ScaleToFit.vue.js"), "../views/system/config/components/SectionLayout.vue": () => import("../views/system/config/components/SectionLayout.vue.js"), "../views/system/config/components/SecuritySection.vue": () => import("../views/system/config/components/SecuritySection.vue.js"), "../views/system/config/components/SensitiveSection.vue": () => import("../views/system/config/components/SensitiveSection.vue.js"), "../views/system/config/components/SigninSection.vue": () => import("../views/system/config/components/SigninSection.vue.js"), "../views/system/config/components/UploadSection.vue": () => import("../views/system/config/components/UploadSection.vue.js"), "../views/system/config/components/WatermarkSection.vue": () => import("../views/system/config/components/WatermarkSection.vue.js"), "../views/system/config/index.vue": () => import("../views/system/config/index.vue.js"), "../views/system/dict/index.vue": () => import("../views/system/dict/index.vue.js"), "../views/system/file-path/components/PathForm.vue": () => import("../views/system/file-path/components/PathForm.vue.js"), "../views/system/file-path/components/PathTab.vue": () => import("../views/system/file-path/components/PathTab.vue.js"), "../views/system/file-path/components/ServerForm.vue": () => import("../views/system/file-path/components/ServerForm.vue.js"), "../views/system/file-path/components/ServerTab.vue": () => import("../views/system/file-path/components/ServerTab.vue.js"), "../views/system/file-path/index.vue": () => import("../views/system/file-path/index.vue.js"), "../views/system/file/index.vue": () => import("../views/system/file/index.vue.js"), "../views/system/job-log/components/AttemptTable.vue": () => import("../views/system/job-log/components/AttemptTable.vue.js"), "../views/system/job-log/index.vue": () => import("../views/system/job-log/index.vue.js"), "../views/system/job-monitor/index.vue": () => import("../views/system/job-monitor/index.vue.js"), "../views/system/job/index.vue": () => import("../views/system/job/index.vue.js"), "../views/system/log/exception/index.vue": () => import("../views/system/log/exception/index.vue.js"), "../views/system/log/login/index.vue": () => import("../views/system/log/login/index.vue.js"), "../views/system/log/op/index.vue": () => import("../views/system/log/op/index.vue.js"), "../views/system/menu/components/ButtonManager.vue": () => import("../views/system/menu/components/ButtonManager.vue.js"), "../views/system/menu/components/MenuFormModal.vue": () => import("../views/system/menu/components/MenuFormModal.vue.js"), "../views/system/menu/index.vue": () => import("../views/system/menu/index.vue.js"), "../views/system/module/index.vue": () => import("../views/system/module/index.vue.js"), "../views/system/monitor/index.vue": () => import("../views/system/monitor/index.vue.js"), "../views/system/notice/index.vue": () => import("../views/system/notice/index.vue.js"), "../views/system/org/index.vue": () => import("../views/system/org/index.vue.js"), "../views/system/position/index.vue": () => import("../views/system/position/index.vue.js"), "../views/system/recycle/index.vue": () => import("../views/system/recycle/index.vue.js"), "../views/system/role/components/GrantMenuSheet.vue": () => import("../views/system/role/components/GrantMenuSheet.vue.js"), "../views/system/role/components/GrantMenuTable.vue": () => import("../views/system/role/components/GrantMenuTable.vue.js"), "../views/system/role/components/MatchText.vue": () => import("../views/system/role/components/MatchText.vue.js"), "../views/system/role/index.vue": () => import("../views/system/role/index.vue.js"), "../views/system/session/index.vue": () => import("../views/system/session/index.vue.js"), "../views/system/user/components/ResetPasswordModal.vue": () => import("../views/system/user/components/ResetPasswordModal.vue.js"), "../views/system/user/components/UserFormModal.vue": () => import("../views/system/user/components/UserFormModal.vue.js"), "../views/system/user/components/UserGrantEffectiveTable.vue": () => import("../views/system/user/components/UserGrantEffectiveTable.vue.js"), "../views/system/user/components/UserGrantMenuSheet.vue": () => import("../views/system/user/components/UserGrantMenuSheet.vue.js"), "../views/system/user/components/UserGrantMenuTable.vue": () => import("../views/system/user/components/UserGrantMenuTable.vue.js"), "../views/system/user/components/UserGrantNodeRow.vue": () => import("../views/system/user/components/UserGrantNodeRow.vue.js"), "../views/system/user/components/UserGrantOverviewDrawer.vue": () => import("../views/system/user/components/UserGrantOverviewDrawer.vue.js"), "../views/system/user/index.vue": () => import("../views/system/user/index.vue.js") }));
19
19
  export {
20
20
  v as detailViews,
21
21
  m as getView,
@@ -1 +1 @@
1
- {"version":3,"file":"viewRegistry.js","sources":["../../src/router/viewRegistry.ts"],"sourcesContent":["import type { Component } from 'vue'\n\n/** 页面懒加载器:import.meta.glob 的每个值就是一个。 */\nexport type ViewLoader = () => Promise<Component | { default: Component }>\n\n// 页面表:key 即菜单 component 字段的取值(如 system/user/index)。内核内置页在本模块加载时登记,\n// 消费方与插件经 registerViews 并入;同名覆盖,谁后注册谁生效(createSmartAdmin 里插件在前、应用最后)。\n// 每个 loader 引用稳定(glob 每文件一个函数),namedPage 靠它判断 keep-alive 缓存要不要失效。\nconst views: Record<string, ViewLoader> = {}\n\n/** glob 键 → 页面 key:取最后一个 `/views/` 之后、去掉 .vue(`./views/system/user/index.vue` → `system/user/index`)。 */\nexport function normalizeViewKey(path: string): string {\n const i = path.lastIndexOf('/views/')\n const rel = i >= 0 ? path.slice(i + '/views/'.length) : path.replace(/^\\.?\\/+/, '')\n return rel.replace(/\\.vue$/, '')\n}\n\n/** 并入一批页面(键可以是 glob 原始路径,也可以是已规范化的 key)。 */\nexport function registerViews(map: Record<string, ViewLoader>): void {\n for (const [key, loader] of Object.entries(map)) views[normalizeViewKey(key)] = loader\n}\n\nexport function getView(key: string): ViewLoader | undefined {\n return views[key]\n}\n\nexport function hasView(key: string): boolean {\n return key in views\n}\n\n/**\n * 菜单 component 字段的全部合法取值,供菜单管理表单的「组件路径」下拉:\n * 手敲错一个字符时 buildRoutesForModule 会保留路径并落到 MissingRoute 诊断页;下拉仍是第一道防线。\n */\nexport function viewComponentPaths(): string[] {\n return Object.keys(views).toSorted()\n}\n\n/** 约定式详情页:key 以 `/detail` 结尾的页面(views/<模块>/detail.vue)。 */\nexport function detailViews(): Array<[key: string, loader: ViewLoader]> {\n return Object.entries(views).filter(([k]) => k.endsWith('/detail'))\n}\n\n// 内核内置页\nregisterViews(import.meta.glob('../views/**/*.vue') as Record<string, ViewLoader>)\n"],"names":["views","normalizeViewKey","path","i","registerViews","map","key","loader","getView","viewComponentPaths","detailViews","k"],"mappings":"AAQA,MAAMA,IAAoC,CAAA;AAGnC,SAASC,EAAiBC,GAAsB;AACrD,QAAMC,IAAID,EAAK,YAAY,SAAS;AAEpC,UADYC,KAAK,IAAID,EAAK,MAAMC,IAAI,CAAgB,IAAID,EAAK,QAAQ,WAAW,EAAE,GACvE,QAAQ,UAAU,EAAE;AACjC;AAGO,SAASE,EAAcC,GAAuC;AACnE,aAAW,CAACC,GAAKC,CAAM,KAAK,OAAO,QAAQF,CAAG,EAAG,CAAAL,EAAMC,EAAiBK,CAAG,CAAC,IAAIC;AAClF;AAEO,SAASC,EAAQF,GAAqC;AAC3D,SAAON,EAAMM,CAAG;AAClB;AAUO,SAASG,IAA+B;AAC7C,SAAO,OAAO,KAAKT,CAAK,EAAE,SAAA;AAC5B;AAGO,SAASU,IAAwD;AACtE,SAAO,OAAO,QAAQV,CAAK,EAAE,OAAO,CAAC,CAACW,CAAC,MAAMA,EAAE,SAAS,SAAS,CAAC;AACpE;AAGAP,44PAAiF;"}
1
+ {"version":3,"file":"viewRegistry.js","sources":["../../src/router/viewRegistry.ts"],"sourcesContent":["import type { Component } from 'vue'\n\n/** 页面懒加载器:import.meta.glob 的每个值就是一个。 */\nexport type ViewLoader = () => Promise<Component | { default: Component }>\n\n// 页面表:key 即菜单 component 字段的取值(如 system/user/index)。内核内置页在本模块加载时登记,\n// 消费方与插件经 registerViews 并入;同名覆盖,谁后注册谁生效(createSmartAdmin 里插件在前、应用最后)。\n// 每个 loader 引用稳定(glob 每文件一个函数),namedPage 靠它判断 keep-alive 缓存要不要失效。\nconst views: Record<string, ViewLoader> = {}\n\n/** glob 键 → 页面 key:取最后一个 `/views/` 之后、去掉 .vue(`./views/system/user/index.vue` → `system/user/index`)。 */\nexport function normalizeViewKey(path: string): string {\n const i = path.lastIndexOf('/views/')\n const rel = i >= 0 ? path.slice(i + '/views/'.length) : path.replace(/^\\.?\\/+/, '')\n return rel.replace(/\\.vue$/, '')\n}\n\n/** 并入一批页面(键可以是 glob 原始路径,也可以是已规范化的 key)。 */\nexport function registerViews(map: Record<string, ViewLoader>): void {\n for (const [key, loader] of Object.entries(map)) views[normalizeViewKey(key)] = loader\n}\n\nexport function getView(key: string): ViewLoader | undefined {\n return views[key]\n}\n\nexport function hasView(key: string): boolean {\n return key in views\n}\n\n/**\n * 菜单 component 字段的全部合法取值,供菜单管理表单的「组件路径」下拉:\n * 手敲错一个字符时 buildRoutesForModule 会保留路径并落到 MissingRoute 诊断页;下拉仍是第一道防线。\n */\nexport function viewComponentPaths(): string[] {\n return Object.keys(views).toSorted()\n}\n\n/** 约定式详情页:key 以 `/detail` 结尾的页面(views/<模块>/detail.vue)。 */\nexport function detailViews(): Array<[key: string, loader: ViewLoader]> {\n return Object.entries(views).filter(([k]) => k.endsWith('/detail'))\n}\n\n// 内核内置页\nregisterViews(import.meta.glob('../views/**/*.vue') as Record<string, ViewLoader>)\n"],"names":["views","normalizeViewKey","path","i","registerViews","map","key","loader","getView","viewComponentPaths","detailViews","k"],"mappings":"AAQA,MAAMA,IAAoC,CAAA;AAGnC,SAASC,EAAiBC,GAAsB;AACrD,QAAMC,IAAID,EAAK,YAAY,SAAS;AAEpC,UADYC,KAAK,IAAID,EAAK,MAAMC,IAAI,CAAgB,IAAID,EAAK,QAAQ,WAAW,EAAE,GACvE,QAAQ,UAAU,EAAE;AACjC;AAGO,SAASE,EAAcC,GAAuC;AACnE,aAAW,CAACC,GAAKC,CAAM,KAAK,OAAO,QAAQF,CAAG,EAAG,CAAAL,EAAMC,EAAiBK,CAAG,CAAC,IAAIC;AAClF;AAEO,SAASC,EAAQF,GAAqC;AAC3D,SAAON,EAAMM,CAAG;AAClB;AAUO,SAASG,IAA+B;AAC7C,SAAO,OAAO,KAAKT,CAAK,EAAE,SAAA;AAC5B;AAGO,SAASU,IAAwD;AACtE,SAAO,OAAO,QAAQV,CAAK,EAAE,OAAO,CAAC,CAACW,CAAC,MAAMA,EAAE,SAAS,SAAS,CAAC;AACpE;AAGAP,29QAAiF;"}