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.
- package/dist/api/index.d.ts +163 -0
- package/dist/api/index.js +195 -108
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.d.ts +1465 -109
- package/dist/assets/icons/ph-subset.json.js +1 -1
- package/dist/components/FilePathUpload/index.vue.d.ts +35 -0
- package/dist/components/FilePathUpload/index.vue.js +47 -0
- package/dist/components/FilePathUpload/index.vue.js.map +1 -0
- package/dist/components/FilePathUpload/index2.vue.js +5 -0
- package/dist/components/FilePathUpload/index2.vue.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +302 -294
- package/dist/index.js.map +1 -1
- package/dist/lib/runtime.js +1 -1
- package/dist/locales/en-US.d.ts +141 -0
- package/dist/locales/en-US.js +136 -0
- package/dist/locales/en-US.js.map +1 -1
- package/dist/locales/kernelMenuTitles.js +10 -0
- package/dist/locales/kernelMenuTitles.js.map +1 -1
- package/dist/locales/zh-CN.d.ts +141 -0
- package/dist/locales/zh-CN.js +136 -0
- package/dist/locales/zh-CN.js.map +1 -1
- package/dist/router/viewRegistry.js +8 -8
- package/dist/router/viewRegistry.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/utils/error.js +22 -18
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/filePathUpload.d.ts +14 -0
- package/dist/utils/filePathUpload.js +84 -0
- package/dist/utils/filePathUpload.js.map +1 -0
- package/dist/views/system/file-path/access.d.ts +15 -0
- package/dist/views/system/file-path/access.js +49 -0
- package/dist/views/system/file-path/access.js.map +1 -0
- package/dist/views/system/file-path/components/PathForm.vue.d.ts +18 -0
- package/dist/views/system/file-path/components/PathForm.vue.js +8 -0
- package/dist/views/system/file-path/components/PathForm.vue.js.map +1 -0
- package/dist/views/system/file-path/components/PathForm2.vue.js +529 -0
- package/dist/views/system/file-path/components/PathForm2.vue.js.map +1 -0
- package/dist/views/system/file-path/components/PathTab.vue.d.ts +3 -0
- package/dist/views/system/file-path/components/PathTab.vue.js +8 -0
- package/dist/views/system/file-path/components/PathTab.vue.js.map +1 -0
- package/dist/views/system/file-path/components/PathTab2.vue.js +226 -0
- package/dist/views/system/file-path/components/PathTab2.vue.js.map +1 -0
- package/dist/views/system/file-path/components/ServerForm.vue.d.ts +20 -0
- package/dist/views/system/file-path/components/ServerForm.vue.js +8 -0
- package/dist/views/system/file-path/components/ServerForm.vue.js.map +1 -0
- package/dist/views/system/file-path/components/ServerForm2.vue.js +328 -0
- package/dist/views/system/file-path/components/ServerForm2.vue.js.map +1 -0
- package/dist/views/system/file-path/components/ServerTab.vue.d.ts +7 -0
- package/dist/views/system/file-path/components/ServerTab.vue.js +8 -0
- package/dist/views/system/file-path/components/ServerTab.vue.js.map +1 -0
- package/dist/views/system/file-path/components/ServerTab2.vue.js +181 -0
- package/dist/views/system/file-path/components/ServerTab2.vue.js.map +1 -0
- package/dist/views/system/file-path/index.vue.d.ts +3 -0
- package/dist/views/system/file-path/index.vue.js +8 -0
- package/dist/views/system/file-path/index.vue.js.map +1 -0
- package/dist/views/system/file-path/index2.vue.js +61 -0
- package/dist/views/system/file-path/index2.vue.js.map +1 -0
- package/dist/views/system/file-path/rules.d.ts +61 -0
- package/dist/views/system/file-path/rules.js +53 -0
- package/dist/views/system/file-path/rules.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
const
|
|
1
|
+
const o = {};
|
|
2
2
|
function t(e) {
|
|
3
|
-
const
|
|
4
|
-
return (
|
|
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 [
|
|
7
|
+
for (const [s, i] of Object.entries(e)) o[t(s)] = i;
|
|
8
8
|
}
|
|
9
9
|
function m(e) {
|
|
10
|
-
return
|
|
10
|
+
return o[e];
|
|
11
11
|
}
|
|
12
12
|
function r() {
|
|
13
|
-
return Object.keys(
|
|
13
|
+
return Object.keys(o).toSorted();
|
|
14
14
|
}
|
|
15
15
|
function v() {
|
|
16
|
-
return Object.entries(
|
|
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,
|
|
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;"}
|