smart-admin-web 10.5.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/LICENSE +201 -0
- package/README.md +78 -0
- package/dist/App.vue.d.ts +3 -0
- package/dist/App.vue.js +54 -0
- package/dist/App.vue.js.map +1 -0
- package/dist/App2.vue.js +5 -0
- package/dist/App2.vue.js.map +1 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
- package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
- package/dist/api/client.d.ts +29 -0
- package/dist/api/client.js +139 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/index.d.ts +672 -0
- package/dist/api/index.js +638 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/reauthGate.d.ts +16 -0
- package/dist/api/reauthGate.js +21 -0
- package/dist/api/reauthGate.js.map +1 -0
- package/dist/api/schema.d.ts +10230 -0
- package/dist/assets/icons/ph-subset.json.js +16 -0
- package/dist/assets/icons/ph-subset.json.js.map +1 -0
- package/dist/assets/oauth/dingtalk.svg.js +5 -0
- package/dist/assets/oauth/dingtalk.svg.js.map +1 -0
- package/dist/assets/oauth/gitee.svg.js +5 -0
- package/dist/assets/oauth/gitee.svg.js.map +1 -0
- package/dist/assets/oauth/github.svg.js +5 -0
- package/dist/assets/oauth/github.svg.js.map +1 -0
- package/dist/assets/oauth/qq.svg.js +5 -0
- package/dist/assets/oauth/qq.svg.js.map +1 -0
- package/dist/assets/oauth/wechat.svg.js +5 -0
- package/dist/assets/oauth/wechat.svg.js.map +1 -0
- package/dist/assets/oauth/wecom.svg.js +5 -0
- package/dist/assets/oauth/wecom.svg.js.map +1 -0
- package/dist/assets/svg/star.svg.js +6 -0
- package/dist/assets/svg/star.svg.js.map +1 -0
- package/dist/components/ApiSelect/index.vue.d.ts +22 -0
- package/dist/components/ApiSelect/index.vue.js +50 -0
- package/dist/components/ApiSelect/index.vue.js.map +1 -0
- package/dist/components/ApiSelect/index2.vue.js +5 -0
- package/dist/components/ApiSelect/index2.vue.js.map +1 -0
- package/dist/components/AppIcon.vue.d.ts +7 -0
- package/dist/components/AppIcon.vue.js +33 -0
- package/dist/components/AppIcon.vue.js.map +1 -0
- package/dist/components/AppIcon2.vue.js +5 -0
- package/dist/components/AppIcon2.vue.js.map +1 -0
- package/dist/components/Chart/BarChart.vue.d.ts +13 -0
- package/dist/components/Chart/BarChart.vue.js +27 -0
- package/dist/components/Chart/BarChart.vue.js.map +1 -0
- package/dist/components/Chart/BarChart2.vue.js +5 -0
- package/dist/components/Chart/BarChart2.vue.js.map +1 -0
- package/dist/components/Chart/LineChart.vue.d.ts +15 -0
- package/dist/components/Chart/LineChart.vue.js +33 -0
- package/dist/components/Chart/LineChart.vue.js.map +1 -0
- package/dist/components/Chart/LineChart2.vue.js +5 -0
- package/dist/components/Chart/LineChart2.vue.js.map +1 -0
- package/dist/components/Chart/PieChart.vue.d.ts +14 -0
- package/dist/components/Chart/PieChart.vue.js +31 -0
- package/dist/components/Chart/PieChart.vue.js.map +1 -0
- package/dist/components/Chart/PieChart2.vue.js +5 -0
- package/dist/components/Chart/PieChart2.vue.js.map +1 -0
- package/dist/components/Chart/echarts.d.ts +57 -0
- package/dist/components/Chart/echarts.js +47 -0
- package/dist/components/Chart/echarts.js.map +1 -0
- package/dist/components/Chart/index.vue.d.ts +12 -0
- package/dist/components/Chart/index.vue.js +8 -0
- package/dist/components/Chart/index.vue.js.map +1 -0
- package/dist/components/Chart/index2.vue.js +27 -0
- package/dist/components/Chart/index2.vue.js.map +1 -0
- package/dist/components/CodeBlock/index.vue.d.ts +17 -0
- package/dist/components/CodeBlock/index.vue.js +8 -0
- package/dist/components/CodeBlock/index.vue.js.map +1 -0
- package/dist/components/CodeBlock/index2.vue.js +48 -0
- package/dist/components/CodeBlock/index2.vue.js.map +1 -0
- package/dist/components/CronEditor/index.vue.d.ts +15 -0
- package/dist/components/CronEditor/index.vue.js +8 -0
- package/dist/components/CronEditor/index.vue.js.map +1 -0
- package/dist/components/CronEditor/index2.vue.js +528 -0
- package/dist/components/CronEditor/index2.vue.js.map +1 -0
- package/dist/components/DetailPage/index.vue.d.ts +26 -0
- package/dist/components/DetailPage/index.vue.js +8 -0
- package/dist/components/DetailPage/index.vue.js.map +1 -0
- package/dist/components/DetailPage/index2.vue.js +51 -0
- package/dist/components/DetailPage/index2.vue.js.map +1 -0
- package/dist/components/DictCheckbox/index.vue.d.ts +6 -0
- package/dist/components/DictCheckbox/index.vue.js +43 -0
- package/dist/components/DictCheckbox/index.vue.js.map +1 -0
- package/dist/components/DictCheckbox/index2.vue.js +5 -0
- package/dist/components/DictCheckbox/index2.vue.js.map +1 -0
- package/dist/components/DictRadio/index.vue.d.ts +6 -0
- package/dist/components/DictRadio/index.vue.js +38 -0
- package/dist/components/DictRadio/index.vue.js.map +1 -0
- package/dist/components/DictRadio/index2.vue.js +5 -0
- package/dist/components/DictRadio/index2.vue.js.map +1 -0
- package/dist/components/DictSelect/index.vue.d.ts +6 -0
- package/dist/components/DictSelect/index.vue.js +37 -0
- package/dist/components/DictSelect/index.vue.js.map +1 -0
- package/dist/components/DictSelect/index2.vue.js +5 -0
- package/dist/components/DictSelect/index2.vue.js.map +1 -0
- package/dist/components/DictTag/index.vue.d.ts +10 -0
- package/dist/components/DictTag/index.vue.js +48 -0
- package/dist/components/DictTag/index.vue.js.map +1 -0
- package/dist/components/DictTag/index2.vue.js +5 -0
- package/dist/components/DictTag/index2.vue.js.map +1 -0
- package/dist/components/ErrorBoundary/index.vue.d.ts +13 -0
- package/dist/components/ErrorBoundary/index.vue.js +8 -0
- package/dist/components/ErrorBoundary/index.vue.js.map +1 -0
- package/dist/components/ErrorBoundary/index2.vue.js +61 -0
- package/dist/components/ErrorBoundary/index2.vue.js.map +1 -0
- package/dist/components/ExportColumnsModal/index.vue.d.ts +19 -0
- package/dist/components/ExportColumnsModal/index.vue.js +8 -0
- package/dist/components/ExportColumnsModal/index.vue.js.map +1 -0
- package/dist/components/ExportColumnsModal/index2.vue.js +121 -0
- package/dist/components/ExportColumnsModal/index2.vue.js.map +1 -0
- package/dist/components/FileUpload/index.vue.d.ts +24 -0
- package/dist/components/FileUpload/index.vue.js +42 -0
- package/dist/components/FileUpload/index.vue.js.map +1 -0
- package/dist/components/FileUpload/index2.vue.js +5 -0
- package/dist/components/FileUpload/index2.vue.js.map +1 -0
- package/dist/components/FormContainer/index.vue.d.ts +51 -0
- package/dist/components/FormContainer/index.vue.js +160 -0
- package/dist/components/FormContainer/index.vue.js.map +1 -0
- package/dist/components/FormContainer/index3.vue.js +6 -0
- package/dist/components/FormContainer/index3.vue.js.map +1 -0
- package/dist/components/IconPicker/index.vue.d.ts +18 -0
- package/dist/components/IconPicker/index.vue.js +43 -0
- package/dist/components/IconPicker/index.vue.js.map +1 -0
- package/dist/components/IconPicker/index2.vue.js +5 -0
- package/dist/components/IconPicker/index2.vue.js.map +1 -0
- package/dist/components/ImportWizard/index.vue.d.ts +39 -0
- package/dist/components/ImportWizard/index.vue.js +8 -0
- package/dist/components/ImportWizard/index.vue.js.map +1 -0
- package/dist/components/ImportWizard/index2.vue.js +634 -0
- package/dist/components/ImportWizard/index2.vue.js.map +1 -0
- package/dist/components/JsonEditor/index.vue.d.ts +12 -0
- package/dist/components/JsonEditor/index.vue.js +87 -0
- package/dist/components/JsonEditor/index.vue.js.map +1 -0
- package/dist/components/JsonEditor/index2.vue.js +5 -0
- package/dist/components/JsonEditor/index2.vue.js.map +1 -0
- package/dist/components/MarkdownEditor/MarkdownView.vue.d.ts +6 -0
- package/dist/components/MarkdownEditor/MarkdownView.vue.js +33 -0
- package/dist/components/MarkdownEditor/MarkdownView.vue.js.map +1 -0
- package/dist/components/MarkdownEditor/MarkdownView2.vue.js +5 -0
- package/dist/components/MarkdownEditor/MarkdownView2.vue.js.map +1 -0
- package/dist/components/MarkdownEditor/index.vue.d.ts +10 -0
- package/dist/components/MarkdownEditor/index.vue.js +35 -0
- package/dist/components/MarkdownEditor/index.vue.js.map +1 -0
- package/dist/components/MarkdownEditor/index2.vue.js +5 -0
- package/dist/components/MarkdownEditor/index2.vue.js.map +1 -0
- package/dist/components/MenuSearch.vue.d.ts +10 -0
- package/dist/components/MenuSearch.vue.js +8 -0
- package/dist/components/MenuSearch.vue.js.map +1 -0
- package/dist/components/MenuSearch2.vue.js +121 -0
- package/dist/components/MenuSearch2.vue.js.map +1 -0
- package/dist/components/OrgTreeSelect/index.vue.d.ts +6 -0
- package/dist/components/OrgTreeSelect/index.vue.js +42 -0
- package/dist/components/OrgTreeSelect/index.vue.js.map +1 -0
- package/dist/components/OrgTreeSelect/index2.vue.js +5 -0
- package/dist/components/OrgTreeSelect/index2.vue.js.map +1 -0
- package/dist/components/PasswordStrength/index.vue.d.ts +6 -0
- package/dist/components/PasswordStrength/index.vue.js +8 -0
- package/dist/components/PasswordStrength/index.vue.js.map +1 -0
- package/dist/components/PasswordStrength/index2.vue.js +91 -0
- package/dist/components/PasswordStrength/index2.vue.js.map +1 -0
- package/dist/components/ReauthModal.vue.d.ts +3 -0
- package/dist/components/ReauthModal.vue.js +8 -0
- package/dist/components/ReauthModal.vue.js.map +1 -0
- package/dist/components/ReauthModal2.vue.js +139 -0
- package/dist/components/ReauthModal2.vue.js.map +1 -0
- package/dist/components/RoleSelect/index.vue.d.ts +8 -0
- package/dist/components/RoleSelect/index.vue.js +26 -0
- package/dist/components/RoleSelect/index.vue.js.map +1 -0
- package/dist/components/RoleSelect/index2.vue.js +5 -0
- package/dist/components/RoleSelect/index2.vue.js.map +1 -0
- package/dist/components/SelectTable/index.vue.d.ts +76 -0
- package/dist/components/SelectTable/index.vue.js +8 -0
- package/dist/components/SelectTable/index.vue.js.map +1 -0
- package/dist/components/SelectTable/index2.vue.js +256 -0
- package/dist/components/SelectTable/index2.vue.js.map +1 -0
- package/dist/components/SmartLogo.vue.d.ts +8 -0
- package/dist/components/SmartLogo.vue.js +8 -0
- package/dist/components/SmartLogo.vue.js.map +1 -0
- package/dist/components/SmartLogo2.vue.js +74 -0
- package/dist/components/SmartLogo2.vue.js.map +1 -0
- package/dist/components/StatusSwitch/index.vue.d.ts +21 -0
- package/dist/components/StatusSwitch/index.vue.js +45 -0
- package/dist/components/StatusSwitch/index.vue.js.map +1 -0
- package/dist/components/StatusSwitch/index2.vue.js +5 -0
- package/dist/components/StatusSwitch/index2.vue.js.map +1 -0
- package/dist/components/TableZoomButton/index.vue.d.ts +13 -0
- package/dist/components/TableZoomButton/index.vue.js +42 -0
- package/dist/components/TableZoomButton/index.vue.js.map +1 -0
- package/dist/components/TableZoomButton/index2.vue.js +5 -0
- package/dist/components/TableZoomButton/index2.vue.js.map +1 -0
- package/dist/components/UserPicker/index.vue.d.ts +13 -0
- package/dist/components/UserPicker/index.vue.js +8 -0
- package/dist/components/UserPicker/index.vue.js.map +1 -0
- package/dist/components/UserPicker/index2.vue.js +214 -0
- package/dist/components/UserPicker/index2.vue.js.map +1 -0
- package/dist/components/UserSelect/index.vue.d.ts +9 -0
- package/dist/components/UserSelect/index.vue.js +32 -0
- package/dist/components/UserSelect/index.vue.js.map +1 -0
- package/dist/components/UserSelect/index2.vue.js +5 -0
- package/dist/components/UserSelect/index2.vue.js.map +1 -0
- package/dist/components/oauth/BrandIcon.vue.d.ts +12 -0
- package/dist/components/oauth/BrandIcon.vue.js +8 -0
- package/dist/components/oauth/BrandIcon.vue.js.map +1 -0
- package/dist/components/oauth/BrandIcon2.vue.js +95 -0
- package/dist/components/oauth/BrandIcon2.vue.js.map +1 -0
- package/dist/composables/authMenuRoute.d.ts +32 -0
- package/dist/composables/authMenuRoute.js +37 -0
- package/dist/composables/authMenuRoute.js.map +1 -0
- package/dist/composables/clearClientCache.d.ts +10 -0
- package/dist/composables/clearClientCache.js +17 -0
- package/dist/composables/clearClientCache.js.map +1 -0
- package/dist/composables/useAuthMenu.d.ts +3 -0
- package/dist/composables/useAuthMenu.js +61 -0
- package/dist/composables/useAuthMenu.js.map +1 -0
- package/dist/composables/useBatchDelete.d.ts +18 -0
- package/dist/composables/useBatchDelete.js +21 -0
- package/dist/composables/useBatchDelete.js.map +1 -0
- package/dist/composables/useCompactScreen.d.ts +12 -0
- package/dist/composables/useCompactScreen.js +17 -0
- package/dist/composables/useCompactScreen.js.map +1 -0
- package/dist/composables/useConfirm.d.ts +18 -0
- package/dist/composables/useConfirm.js +61 -0
- package/dist/composables/useConfirm.js.map +1 -0
- package/dist/composables/useFullscreenToggle.d.ts +11 -0
- package/dist/composables/useFullscreenToggle.js +64 -0
- package/dist/composables/useFullscreenToggle.js.map +1 -0
- package/dist/composables/useHeaderTools.d.ts +31 -0
- package/dist/composables/useHeaderTools.js +15 -0
- package/dist/composables/useHeaderTools.js.map +1 -0
- package/dist/composables/useLayoutMenu.d.ts +17 -0
- package/dist/composables/useLayoutMenu.js +93 -0
- package/dist/composables/useLayoutMenu.js.map +1 -0
- package/dist/composables/useMenuBadge.d.ts +11 -0
- package/dist/composables/useMenuBadge.js +17 -0
- package/dist/composables/useMenuBadge.js.map +1 -0
- package/dist/composables/useMenuFlat.d.ts +8 -0
- package/dist/composables/useMenuFlat.js +29 -0
- package/dist/composables/useMenuFlat.js.map +1 -0
- package/dist/composables/useModule.d.ts +16 -0
- package/dist/composables/useModule.js +44 -0
- package/dist/composables/useModule.js.map +1 -0
- package/dist/composables/useNoticeAction.d.ts +8 -0
- package/dist/composables/useNoticeAction.js +79 -0
- package/dist/composables/useNoticeAction.js.map +1 -0
- package/dist/composables/usePageTitle.d.ts +1 -0
- package/dist/composables/usePageTitle.js +20 -0
- package/dist/composables/usePageTitle.js.map +1 -0
- package/dist/composables/useRealtime.d.ts +31 -0
- package/dist/composables/useRealtime.js +59 -0
- package/dist/composables/useRealtime.js.map +1 -0
- package/dist/composables/useSite.d.ts +24 -0
- package/dist/composables/useSite.js +27 -0
- package/dist/composables/useSite.js.map +1 -0
- package/dist/composables/useTabTitle.d.ts +1 -0
- package/dist/composables/useTabTitle.js +10 -0
- package/dist/composables/useTabTitle.js.map +1 -0
- package/dist/composables/useTableRowSort.d.ts +20 -0
- package/dist/composables/useTableRowSort.js +59 -0
- package/dist/composables/useTableRowSort.js.map +1 -0
- package/dist/composables/useTableZoom.d.ts +5 -0
- package/dist/composables/useTableZoom.js +30 -0
- package/dist/composables/useTableZoom.js.map +1 -0
- package/dist/composables/useTheme.d.ts +13 -0
- package/dist/composables/useTheme.js +30 -0
- package/dist/composables/useTheme.js.map +1 -0
- package/dist/composables/useVisualViewportHeight.d.ts +3 -0
- package/dist/composables/useVisualViewportHeight.js +16 -0
- package/dist/composables/useVisualViewportHeight.js.map +1 -0
- package/dist/createSmartAdmin.d.ts +56 -0
- package/dist/createSmartAdmin.js +76 -0
- package/dist/createSmartAdmin.js.map +1 -0
- package/dist/directives/auth.d.ts +16 -0
- package/dist/directives/auth.js +19 -0
- package/dist/directives/auth.js.map +1 -0
- package/dist/env.d.ts +10 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.js +273 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts/AppHeader.vue.d.ts +12 -0
- package/dist/layouts/AppHeader.vue.js +8 -0
- package/dist/layouts/AppHeader.vue.js.map +1 -0
- package/dist/layouts/AppHeader2.vue.js +352 -0
- package/dist/layouts/AppHeader2.vue.js.map +1 -0
- package/dist/layouts/LayoutModeCards.vue.d.ts +3 -0
- package/dist/layouts/LayoutModeCards.vue.js +8 -0
- package/dist/layouts/LayoutModeCards.vue.js.map +1 -0
- package/dist/layouts/LayoutModeCards2.vue.js +67 -0
- package/dist/layouts/LayoutModeCards2.vue.js.map +1 -0
- package/dist/layouts/NoticeBell.vue.d.ts +3 -0
- package/dist/layouts/NoticeBell.vue.js +8 -0
- package/dist/layouts/NoticeBell.vue.js.map +1 -0
- package/dist/layouts/NoticeBell2.vue.js +292 -0
- package/dist/layouts/NoticeBell2.vue.js.map +1 -0
- package/dist/layouts/PersonalLayout.vue.d.ts +3 -0
- package/dist/layouts/PersonalLayout.vue.js +8 -0
- package/dist/layouts/PersonalLayout.vue.js.map +1 -0
- package/dist/layouts/PersonalLayout2.vue.js +65 -0
- package/dist/layouts/PersonalLayout2.vue.js.map +1 -0
- package/dist/layouts/SettingRow.vue.d.ts +16 -0
- package/dist/layouts/SettingRow.vue.js +8 -0
- package/dist/layouts/SettingRow.vue.js.map +1 -0
- package/dist/layouts/SettingRow2.vue.js +23 -0
- package/dist/layouts/SettingRow2.vue.js.map +1 -0
- package/dist/layouts/SettingsDrawer.vue.d.ts +10 -0
- package/dist/layouts/SettingsDrawer.vue.js +8 -0
- package/dist/layouts/SettingsDrawer.vue.js.map +1 -0
- package/dist/layouts/SettingsDrawer2.vue.js +380 -0
- package/dist/layouts/SettingsDrawer2.vue.js.map +1 -0
- package/dist/layouts/TabsBar.vue.d.ts +3 -0
- package/dist/layouts/TabsBar.vue.js +8 -0
- package/dist/layouts/TabsBar.vue.js.map +1 -0
- package/dist/layouts/TabsBar2.vue.js +132 -0
- package/dist/layouts/TabsBar2.vue.js.map +1 -0
- package/dist/layouts/components/SideNav.vue.d.ts +15 -0
- package/dist/layouts/components/SideNav.vue.js +8 -0
- package/dist/layouts/components/SideNav.vue.js.map +1 -0
- package/dist/layouts/components/SideNav2.vue.js +49 -0
- package/dist/layouts/components/SideNav2.vue.js.map +1 -0
- package/dist/layouts/default.vue.d.ts +3 -0
- package/dist/layouts/default.vue.js +8 -0
- package/dist/layouts/default.vue.js.map +1 -0
- package/dist/layouts/default2.vue.js +213 -0
- package/dist/layouts/default2.vue.js.map +1 -0
- package/dist/lib/chunkReload.d.ts +9 -0
- package/dist/lib/chunkReload.js +24 -0
- package/dist/lib/chunkReload.js.map +1 -0
- package/dist/lib/icons.d.ts +2 -0
- package/dist/lib/icons.js +39 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/loadingBar.d.ts +7 -0
- package/dist/lib/loadingBar.js +18 -0
- package/dist/lib/loadingBar.js.map +1 -0
- package/dist/lib/markdown.d.ts +8 -0
- package/dist/lib/markdown.js +16 -0
- package/dist/lib/markdown.js.map +1 -0
- package/dist/lib/markdownLinks.d.ts +26 -0
- package/dist/lib/markdownLinks.js +21 -0
- package/dist/lib/markdownLinks.js.map +1 -0
- package/dist/lib/noticeActions.d.ts +13 -0
- package/dist/lib/noticeActions.js +16 -0
- package/dist/lib/noticeActions.js.map +1 -0
- package/dist/lib/runtime.d.ts +21 -0
- package/dist/lib/runtime.js +13 -0
- package/dist/lib/runtime.js.map +1 -0
- package/dist/locales/en-US.d.ts +1358 -0
- package/dist/locales/en-US.js +1362 -0
- package/dist/locales/en-US.js.map +1 -0
- package/dist/locales/index.d.ts +30 -0
- package/dist/locales/index.js +46 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/menuTitle.d.ts +8 -0
- package/dist/locales/menuTitle.js +19 -0
- package/dist/locales/menuTitle.js.map +1 -0
- package/dist/locales/zh-CN.d.ts +1358 -0
- package/dist/locales/zh-CN.js +1368 -0
- package/dist/locales/zh-CN.js.map +1 -0
- package/dist/router/bootFailure.d.ts +8 -0
- package/dist/router/bootFailure.js +11 -0
- package/dist/router/bootFailure.js.map +1 -0
- package/dist/router/detailRoutes.d.ts +2 -0
- package/dist/router/detailRoutes.js +19 -0
- package/dist/router/detailRoutes.js.map +1 -0
- package/dist/router/index.d.ts +3 -0
- package/dist/router/index.js +58 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/namedPage.d.ts +13 -0
- package/dist/router/namedPage.js +12 -0
- package/dist/router/namedPage.js.map +1 -0
- package/dist/router/routes.d.ts +2 -0
- package/dist/router/routes.js +121 -0
- package/dist/router/routes.js.map +1 -0
- package/dist/router/viewRegistry.d.ts +18 -0
- package/dist/router/viewRegistry.js +26 -0
- package/dist/router/viewRegistry.js.map +1 -0
- package/dist/stores/app.d.ts +83 -0
- package/dist/stores/app.js +82 -0
- package/dist/stores/app.js.map +1 -0
- package/dist/stores/auth.d.ts +106 -0
- package/dist/stores/auth.js +59 -0
- package/dist/stores/auth.js.map +1 -0
- package/dist/stores/dict.d.ts +11 -0
- package/dist/stores/dict.js +36 -0
- package/dist/stores/dict.js.map +1 -0
- package/dist/stores/tabs.d.ts +53 -0
- package/dist/stores/tabs.js +88 -0
- package/dist/stores/tabs.js.map +1 -0
- package/dist/stores/user.d.ts +64 -0
- package/dist/stores/user.js +64 -0
- package/dist/stores/user.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/theme/accents.d.ts +2 -0
- package/dist/theme/accents.js +5 -0
- package/dist/theme/accents.js.map +1 -0
- package/dist/theme/mix.d.ts +26 -0
- package/dist/theme/mix.js +43 -0
- package/dist/theme/mix.js.map +1 -0
- package/dist/theme/naive-theme.d.ts +9 -0
- package/dist/theme/naive-theme.js +89 -0
- package/dist/theme/naive-theme.js.map +1 -0
- package/dist/types/api.d.ts +714 -0
- package/dist/types/api.js +15 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/menu.d.ts +67 -0
- package/dist/types/menu.js +26 -0
- package/dist/types/menu.js.map +1 -0
- package/dist/utils/chunkUpload.d.ts +6 -0
- package/dist/utils/chunkUpload.js +35 -0
- package/dist/utils/chunkUpload.js.map +1 -0
- package/dist/utils/download.d.ts +8 -0
- package/dist/utils/download.js +8 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/error.d.ts +14 -0
- package/dist/utils/error.js +50 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/format.d.ts +20 -0
- package/dist/utils/format.js +19 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/importDup.d.ts +17 -0
- package/dist/utils/importDup.js +18 -0
- package/dist/utils/importDup.js.map +1 -0
- package/dist/utils/oauthBrand.d.ts +100 -0
- package/dist/utils/oauthBrand.js +97 -0
- package/dist/utils/oauthBrand.js.map +1 -0
- package/dist/utils/tree.d.ts +33 -0
- package/dist/utils/tree.js +47 -0
- package/dist/utils/tree.js.map +1 -0
- package/dist/utils/ua.d.ts +7 -0
- package/dist/utils/ua.js +33 -0
- package/dist/utils/ua.js.map +1 -0
- package/dist/utils/url.d.ts +16 -0
- package/dist/utils/url.js +13 -0
- package/dist/utils/url.js.map +1 -0
- package/dist/views/dashboard/biz.vue.d.ts +3 -0
- package/dist/views/dashboard/biz.vue.js +8 -0
- package/dist/views/dashboard/biz.vue.js.map +1 -0
- package/dist/views/dashboard/biz2.vue.js +136 -0
- package/dist/views/dashboard/biz2.vue.js.map +1 -0
- package/dist/views/dashboard/workbench.vue.d.ts +3 -0
- package/dist/views/dashboard/workbench.vue.js +8 -0
- package/dist/views/dashboard/workbench.vue.js.map +1 -0
- package/dist/views/dashboard/workbench2.vue.js +195 -0
- package/dist/views/dashboard/workbench2.vue.js.map +1 -0
- package/dist/views/embed/iframe.vue.d.ts +3 -0
- package/dist/views/embed/iframe.vue.js +8 -0
- package/dist/views/embed/iframe.vue.js.map +1 -0
- package/dist/views/embed/iframe2.vue.js +21 -0
- package/dist/views/embed/iframe2.vue.js.map +1 -0
- package/dist/views/error/404.vue.d.ts +3 -0
- package/dist/views/error/404.vue.js +8 -0
- package/dist/views/error/404.vue.js.map +1 -0
- package/dist/views/error/4042.vue.js +31 -0
- package/dist/views/error/4042.vue.js.map +1 -0
- package/dist/views/error/BootError.vue.d.ts +3 -0
- package/dist/views/error/BootError.vue.js +8 -0
- package/dist/views/error/BootError.vue.js.map +1 -0
- package/dist/views/error/BootError2.vue.js +57 -0
- package/dist/views/error/BootError2.vue.js.map +1 -0
- package/dist/views/error/MissingRoute.vue.d.ts +3 -0
- package/dist/views/error/MissingRoute.vue.js +8 -0
- package/dist/views/error/MissingRoute.vue.js.map +1 -0
- package/dist/views/error/MissingRoute2.vue.js +23 -0
- package/dist/views/error/MissingRoute2.vue.js.map +1 -0
- package/dist/views/login/LoginForm.vue.d.ts +12 -0
- package/dist/views/login/LoginForm.vue.js +8 -0
- package/dist/views/login/LoginForm.vue.js.map +1 -0
- package/dist/views/login/LoginForm2.vue.js +642 -0
- package/dist/views/login/LoginForm2.vue.js.map +1 -0
- package/dist/views/login/index.vue.d.ts +3 -0
- package/dist/views/login/index.vue.js +8 -0
- package/dist/views/login/index.vue.js.map +1 -0
- package/dist/views/login/index2.vue.js +79 -0
- package/dist/views/login/index2.vue.js.map +1 -0
- package/dist/views/login/skins/AuroraGlass.vue.d.ts +3 -0
- package/dist/views/login/skins/AuroraGlass.vue.js +8 -0
- package/dist/views/login/skins/AuroraGlass.vue.js.map +1 -0
- package/dist/views/login/skins/AuroraGlass2.vue.js +80 -0
- package/dist/views/login/skins/AuroraGlass2.vue.js.map +1 -0
- package/dist/views/login/skins/SplitPanel.vue.d.ts +3 -0
- package/dist/views/login/skins/SplitPanel.vue.js +8 -0
- package/dist/views/login/skins/SplitPanel.vue.js.map +1 -0
- package/dist/views/login/skins/SplitPanel2.vue.js +85 -0
- package/dist/views/login/skins/SplitPanel2.vue.js.map +1 -0
- package/dist/views/login/skins/Spotlight.vue.d.ts +3 -0
- package/dist/views/login/skins/Spotlight.vue.js +8 -0
- package/dist/views/login/skins/Spotlight.vue.js.map +1 -0
- package/dist/views/login/skins/Spotlight2.vue.js +36 -0
- package/dist/views/login/skins/Spotlight2.vue.js.map +1 -0
- package/dist/views/login/skins.d.ts +8 -0
- package/dist/views/login/skins.js +13 -0
- package/dist/views/login/skins.js.map +1 -0
- package/dist/views/mfa/bindComplete.d.ts +7 -0
- package/dist/views/mfa/bindComplete.js +8 -0
- package/dist/views/mfa/bindComplete.js.map +1 -0
- package/dist/views/mfa/index.vue.d.ts +3 -0
- package/dist/views/mfa/index.vue.js +8 -0
- package/dist/views/mfa/index.vue.js.map +1 -0
- package/dist/views/mfa/index2.vue.js +425 -0
- package/dist/views/mfa/index2.vue.js.map +1 -0
- package/dist/views/module/index.vue.d.ts +3 -0
- package/dist/views/module/index.vue.js +8 -0
- package/dist/views/module/index.vue.js.map +1 -0
- package/dist/views/module/index2.vue.js +142 -0
- package/dist/views/module/index2.vue.js.map +1 -0
- package/dist/views/oauth/callback.vue.d.ts +3 -0
- package/dist/views/oauth/callback.vue.js +8 -0
- package/dist/views/oauth/callback.vue.js.map +1 -0
- package/dist/views/oauth/callback2.vue.js +86 -0
- package/dist/views/oauth/callback2.vue.js.map +1 -0
- package/dist/views/personal/bindings.vue.d.ts +3 -0
- package/dist/views/personal/bindings.vue.js +8 -0
- package/dist/views/personal/bindings.vue.js.map +1 -0
- package/dist/views/personal/bindings2.vue.js +220 -0
- package/dist/views/personal/bindings2.vue.js.map +1 -0
- package/dist/views/personal/notice.vue.d.ts +3 -0
- package/dist/views/personal/notice.vue.js +5 -0
- package/dist/views/personal/notice.vue.js.map +1 -0
- package/dist/views/personal/notice2.vue.js +163 -0
- package/dist/views/personal/notice2.vue.js.map +1 -0
- package/dist/views/personal/password.vue.d.ts +3 -0
- package/dist/views/personal/password.vue.js +5 -0
- package/dist/views/personal/password.vue.js.map +1 -0
- package/dist/views/personal/password2.vue.js +147 -0
- package/dist/views/personal/password2.vue.js.map +1 -0
- package/dist/views/personal/profile.vue.d.ts +3 -0
- package/dist/views/personal/profile.vue.js +8 -0
- package/dist/views/personal/profile.vue.js.map +1 -0
- package/dist/views/personal/profile2.vue.js +264 -0
- package/dist/views/personal/profile2.vue.js.map +1 -0
- package/dist/views/personal/security.vue.d.ts +3 -0
- package/dist/views/personal/security.vue.js +8 -0
- package/dist/views/personal/security.vue.js.map +1 -0
- package/dist/views/personal/security2.vue.js +82 -0
- package/dist/views/personal/security2.vue.js.map +1 -0
- package/dist/views/personal/sessions.vue.d.ts +3 -0
- package/dist/views/personal/sessions.vue.js +8 -0
- package/dist/views/personal/sessions.vue.js.map +1 -0
- package/dist/views/personal/sessions2.vue.js +101 -0
- package/dist/views/personal/sessions2.vue.js.map +1 -0
- package/dist/views/system/cache/index.vue.d.ts +3 -0
- package/dist/views/system/cache/index.vue.js +8 -0
- package/dist/views/system/cache/index.vue.js.map +1 -0
- package/dist/views/system/cache/index2.vue.js +113 -0
- package/dist/views/system/cache/index2.vue.js.map +1 -0
- package/dist/views/system/config/components/ConfigFormModal.vue.d.ts +16 -0
- package/dist/views/system/config/components/ConfigFormModal.vue.js +5 -0
- package/dist/views/system/config/components/ConfigFormModal.vue.js.map +1 -0
- package/dist/views/system/config/components/ConfigFormModal2.vue.js +177 -0
- package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -0
- package/dist/views/system/config/components/ExternalAuthConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/ExternalAuthConfig.vue.js +8 -0
- package/dist/views/system/config/components/ExternalAuthConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/ExternalAuthConfig2.vue.js +218 -0
- package/dist/views/system/config/components/ExternalAuthConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/GroupExtraConfig.vue.d.ts +9 -0
- package/dist/views/system/config/components/GroupExtraConfig.vue.js +8 -0
- package/dist/views/system/config/components/GroupExtraConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/GroupExtraConfig2.vue.js +108 -0
- package/dist/views/system/config/components/GroupExtraConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/HighSensConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/HighSensConfig.vue.js +5 -0
- package/dist/views/system/config/components/HighSensConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/HighSensConfig2.vue.js +134 -0
- package/dist/views/system/config/components/HighSensConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/JobConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/JobConfig.vue.js +5 -0
- package/dist/views/system/config/components/JobConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/JobConfig2.vue.js +116 -0
- package/dist/views/system/config/components/JobConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/OtherConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/OtherConfig.vue.js +5 -0
- package/dist/views/system/config/components/OtherConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/OtherConfig2.vue.js +121 -0
- package/dist/views/system/config/components/OtherConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/SecurityConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/SecurityConfig.vue.js +8 -0
- package/dist/views/system/config/components/SecurityConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/SecurityConfig2.vue.js +456 -0
- package/dist/views/system/config/components/SecurityConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/SysBaseConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/SysBaseConfig.vue.js +5 -0
- package/dist/views/system/config/components/SysBaseConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/SysBaseConfig2.vue.js +107 -0
- package/dist/views/system/config/components/SysBaseConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/UploadConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/UploadConfig.vue.js +5 -0
- package/dist/views/system/config/components/UploadConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/UploadConfig2.vue.js +135 -0
- package/dist/views/system/config/components/UploadConfig2.vue.js.map +1 -0
- package/dist/views/system/config/groups.d.ts +9 -0
- package/dist/views/system/config/groups.js +18 -0
- package/dist/views/system/config/groups.js.map +1 -0
- package/dist/views/system/config/index.vue.d.ts +3 -0
- package/dist/views/system/config/index.vue.js +5 -0
- package/dist/views/system/config/index.vue.js.map +1 -0
- package/dist/views/system/config/index2.vue.js +127 -0
- package/dist/views/system/config/index2.vue.js.map +1 -0
- package/dist/views/system/dict/index.vue.d.ts +3 -0
- package/dist/views/system/dict/index.vue.js +8 -0
- package/dist/views/system/dict/index.vue.js.map +1 -0
- package/dist/views/system/dict/index2.vue.js +560 -0
- package/dist/views/system/dict/index2.vue.js.map +1 -0
- package/dist/views/system/file/index.vue.d.ts +3 -0
- package/dist/views/system/file/index.vue.js +5 -0
- package/dist/views/system/file/index.vue.js.map +1 -0
- package/dist/views/system/file/index2.vue.js +186 -0
- package/dist/views/system/file/index2.vue.js.map +1 -0
- package/dist/views/system/job/index.vue.d.ts +3 -0
- package/dist/views/system/job/index.vue.js +8 -0
- package/dist/views/system/job/index.vue.js.map +1 -0
- package/dist/views/system/job/index2.vue.js +1167 -0
- package/dist/views/system/job/index2.vue.js.map +1 -0
- package/dist/views/system/job-log/index.vue.d.ts +3 -0
- package/dist/views/system/job-log/index.vue.js +8 -0
- package/dist/views/system/job-log/index.vue.js.map +1 -0
- package/dist/views/system/job-log/index2.vue.js +411 -0
- package/dist/views/system/job-log/index2.vue.js.map +1 -0
- package/dist/views/system/job-monitor/index.vue.d.ts +3 -0
- package/dist/views/system/job-monitor/index.vue.js +8 -0
- package/dist/views/system/job-monitor/index.vue.js.map +1 -0
- package/dist/views/system/job-monitor/index2.vue.js +253 -0
- package/dist/views/system/job-monitor/index2.vue.js.map +1 -0
- package/dist/views/system/log/exception/index.vue.d.ts +3 -0
- package/dist/views/system/log/exception/index.vue.js +8 -0
- package/dist/views/system/log/exception/index.vue.js.map +1 -0
- package/dist/views/system/log/exception/index2.vue.js +216 -0
- package/dist/views/system/log/exception/index2.vue.js.map +1 -0
- package/dist/views/system/log/login/index.vue.d.ts +3 -0
- package/dist/views/system/log/login/index.vue.js +5 -0
- package/dist/views/system/log/login/index.vue.js.map +1 -0
- package/dist/views/system/log/login/index2.vue.js +113 -0
- package/dist/views/system/log/login/index2.vue.js.map +1 -0
- package/dist/views/system/log/op/index.vue.d.ts +3 -0
- package/dist/views/system/log/op/index.vue.js +8 -0
- package/dist/views/system/log/op/index.vue.js.map +1 -0
- package/dist/views/system/log/op/index2.vue.js +332 -0
- package/dist/views/system/log/op/index2.vue.js.map +1 -0
- package/dist/views/system/menu/components/ButtonManager.vue.d.ts +21 -0
- package/dist/views/system/menu/components/ButtonManager.vue.js +8 -0
- package/dist/views/system/menu/components/ButtonManager.vue.js.map +1 -0
- package/dist/views/system/menu/components/ButtonManager2.vue.js +498 -0
- package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -0
- package/dist/views/system/menu/components/MenuFormModal.vue.d.ts +22 -0
- package/dist/views/system/menu/components/MenuFormModal.vue.js +8 -0
- package/dist/views/system/menu/components/MenuFormModal.vue.js.map +1 -0
- package/dist/views/system/menu/components/MenuFormModal2.vue.js +259 -0
- package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -0
- package/dist/views/system/menu/index.vue.d.ts +3 -0
- package/dist/views/system/menu/index.vue.js +8 -0
- package/dist/views/system/menu/index.vue.js.map +1 -0
- package/dist/views/system/menu/index2.vue.js +391 -0
- package/dist/views/system/menu/index2.vue.js.map +1 -0
- package/dist/views/system/module/index.vue.d.ts +3 -0
- package/dist/views/system/module/index.vue.js +8 -0
- package/dist/views/system/module/index.vue.js.map +1 -0
- package/dist/views/system/module/index2.vue.js +344 -0
- package/dist/views/system/module/index2.vue.js.map +1 -0
- package/dist/views/system/monitor/index.vue.d.ts +3 -0
- package/dist/views/system/monitor/index.vue.js +8 -0
- package/dist/views/system/monitor/index.vue.js.map +1 -0
- package/dist/views/system/monitor/index2.vue.js +184 -0
- package/dist/views/system/monitor/index2.vue.js.map +1 -0
- package/dist/views/system/notice/index.vue.d.ts +3 -0
- package/dist/views/system/notice/index.vue.js +8 -0
- package/dist/views/system/notice/index.vue.js.map +1 -0
- package/dist/views/system/notice/index2.vue.js +401 -0
- package/dist/views/system/notice/index2.vue.js.map +1 -0
- package/dist/views/system/org/index.vue.d.ts +3 -0
- package/dist/views/system/org/index.vue.js +8 -0
- package/dist/views/system/org/index.vue.js.map +1 -0
- package/dist/views/system/org/index2.vue.js +397 -0
- package/dist/views/system/org/index2.vue.js.map +1 -0
- package/dist/views/system/position/index.vue.d.ts +3 -0
- package/dist/views/system/position/index.vue.js +5 -0
- package/dist/views/system/position/index.vue.js.map +1 -0
- package/dist/views/system/position/index2.vue.js +211 -0
- package/dist/views/system/position/index2.vue.js.map +1 -0
- package/dist/views/system/recycle/index.vue.d.ts +3 -0
- package/dist/views/system/recycle/index.vue.js +8 -0
- package/dist/views/system/recycle/index.vue.js.map +1 -0
- package/dist/views/system/recycle/index2.vue.js +121 -0
- package/dist/views/system/recycle/index2.vue.js.map +1 -0
- package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +18 -0
- package/dist/views/system/role/components/GrantMenuTable.vue.js +8 -0
- package/dist/views/system/role/components/GrantMenuTable.vue.js.map +1 -0
- package/dist/views/system/role/components/GrantMenuTable2.vue.js +212 -0
- package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -0
- package/dist/views/system/role/components/grantMenuGroups.d.ts +31 -0
- package/dist/views/system/role/components/grantMenuGroups.js +76 -0
- package/dist/views/system/role/components/grantMenuGroups.js.map +1 -0
- package/dist/views/system/role/index.vue.d.ts +3 -0
- package/dist/views/system/role/index.vue.js +5 -0
- package/dist/views/system/role/index.vue.js.map +1 -0
- package/dist/views/system/role/index2.vue.js +476 -0
- package/dist/views/system/role/index2.vue.js.map +1 -0
- package/dist/views/system/session/index.vue.d.ts +3 -0
- package/dist/views/system/session/index.vue.js +5 -0
- package/dist/views/system/session/index.vue.js.map +1 -0
- package/dist/views/system/session/index2.vue.js +80 -0
- package/dist/views/system/session/index2.vue.js.map +1 -0
- package/dist/views/system/user/components/ResetPasswordModal.vue.d.ts +10 -0
- package/dist/views/system/user/components/ResetPasswordModal.vue.js +8 -0
- package/dist/views/system/user/components/ResetPasswordModal.vue.js.map +1 -0
- package/dist/views/system/user/components/ResetPasswordModal2.vue.js +111 -0
- package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -0
- package/dist/views/system/user/components/UserFormModal.vue.d.ts +30 -0
- package/dist/views/system/user/components/UserFormModal.vue.js +8 -0
- package/dist/views/system/user/components/UserFormModal.vue.js.map +1 -0
- package/dist/views/system/user/components/UserFormModal2.vue.js +415 -0
- package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -0
- package/dist/views/system/user/index.vue.d.ts +3 -0
- package/dist/views/system/user/index.vue.js +8 -0
- package/dist/views/system/user/index.vue.js.map +1 -0
- package/dist/views/system/user/index2.vue.js +427 -0
- package/dist/views/system/user/index2.vue.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauthBrand.js","sources":["../../src/utils/oauthBrand.ts"],"sourcesContent":["// 外部登录品牌 UI 纯逻辑:可被 vitest 直接驱动,不依赖浏览器。\n// 契约见 docs/adr/0007-external-login-brand-ui-and-providers.md。\nimport { t } from '#/locales'\n\n/** 登录页最多平铺的品牌圆钮数;超出进「…」菜单。 */\nexport const SSO_VISIBLE_MAX = 4\n\n/** 预置精修品牌标的 provider code(大小写不敏感)。 */\nexport const BRAND_CODES = ['github', 'wechat', 'wecom', 'dingtalk', 'gitee', 'qq'] as const\nexport type BrandCode = (typeof BRAND_CODES)[number]\n\nconst BRAND_SET = new Set<string>(BRAND_CODES)\n\n/**\n * 登录页临时展示全部品牌圆标(图标验收用)。\n * true:铺全 6 个,不做 N=4 溢出;false:恢复仅后端 enabled providers。\n * 图标验收时在本地把 false 改成 true,验收完改回来,不要带着 true 提交。\n */\nexport const PREVIEW_ALL_SSO_BRANDS = false\n\n/**\n * 内置品牌显示名。走 i18n 而非硬编码中文常量表 —— 硬编码在英文界面下会露出「微信/企业微信/钉钉」。\n * 调用方须在 computed 里取值,切语言才会重算。\n */\nexport function brandDisplayName(code: BrandCode): string {\n return t(`oauth.brand.${code}`)\n}\n\n/** 图标预览用的假 provider 列表(与后端是否启用无关)。 */\nexport function previewAllBrandProviders(): SsoProviderLike[] {\n return BRAND_CODES.map(code => ({ code, displayName: brandDisplayName(code) }))\n}\n\n/**\n * 配置页卡片上给出「按账号自动关联」开关的 provider。只有企业微信的外部标识是企业统一分配的账号(userid),\n * 钉钉 / 微信 / GitHub 的标识是 unionid 或数字 id,按账号名对不上本地账号;\n * 自定义 provider 真要开(如 sub 就是工号的 OIDC),到「其他配置」加 sys.externalauth.{code}.linkByAccount。\n */\nexport const LINK_BY_ACCOUNT_CODES: readonly string[] = ['wecom']\n\n/** 配置页一行:内置品牌全展示;registered=后端已装包/已配密钥。 */\nexport type ConfigProviderRow = {\n code: string\n displayName: string\n icon?: string | null\n registered: boolean\n enabled: boolean\n /** 未绑定的外部身份按账号名关联同名本地账号(sys.externalauth.{code}.linkByAccount) */\n linkByAccount: boolean\n}\n\n/**\n * 配置页列表 = 预置品牌(全量) + 其它已注册 code(如 oidc-demo)。\n * 未注册项 registered=false、两个开关强制 false(未部署的方式开了也没用)。\n */\nexport function buildConfigProviderRows(\n registered: readonly {\n code: string\n displayName: string\n icon?: string | null\n enabled: boolean\n linkByAccount?: boolean\n }[],\n): ConfigProviderRow[] {\n const byCode = new Map(registered.map(p => [p.code, p]))\n const rows: ConfigProviderRow[] = []\n const seen = new Set<string>()\n\n for (const code of BRAND_CODES) {\n seen.add(code)\n const r = byCode.get(code)\n rows.push({\n code,\n displayName: r?.displayName || brandDisplayName(code),\n icon: r?.icon ?? null,\n registered: !!r,\n enabled: r ? r.enabled : false,\n linkByAccount: r?.linkByAccount ?? false,\n })\n }\n for (const p of registered) {\n if (seen.has(p.code)) continue\n seen.add(p.code)\n rows.push({\n code: p.code,\n displayName: p.displayName,\n icon: p.icon,\n registered: true,\n enabled: p.enabled,\n linkByAccount: p.linkByAccount ?? false,\n })\n }\n return rows\n}\n\nexport type SsoProviderLike = {\n code: string\n displayName: string\n icon?: string | null\n}\n\nexport type BindingLike = {\n provider: string\n displayName?: string | null\n boundAt: string\n}\n\nexport type IconResolve =\n | { kind: 'brand'; code: BrandCode }\n | { kind: 'iconify'; name: string }\n | { kind: 'letter'; letter: string }\n\nexport type BindingRow = {\n code: string\n displayName: string\n icon?: string | null\n /** false = 运营已关但仍有绑定 */\n enabled: boolean\n binding?: BindingLike\n}\n\n/** 是否为可渲染的 Iconify 名称;拒绝 URL / data URI。 */\nexport function isIconifyName(icon: string | null | undefined): boolean {\n if (icon == null) return false\n const s = icon.trim()\n if (!s) return false\n if (/^https?:\\/\\//i.test(s) || s.startsWith('//') || /^data:/i.test(s)) return false\n // collection:name(离线 Iconify 常见形态)\n return /^[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9._-]*$/i.test(s)\n}\n\nexport function isBrandCode(code: string | null | undefined): code is BrandCode {\n return !!code && BRAND_SET.has(code.toLowerCase())\n}\n\n/** brand map → Iconify 名 → 首字母。 */\nexport function resolveProviderIcon(code: string, icon?: string | null): IconResolve {\n const c = (code ?? '').trim().toLowerCase()\n if (isBrandCode(c)) return { kind: 'brand', code: c }\n if (isIconifyName(icon)) return { kind: 'iconify', name: icon!.trim() }\n const letter = (code ?? '?').trim().charAt(0).toUpperCase() || '?'\n return { kind: 'letter', letter }\n}\n\nconst WECOM_AUTO_LOGIN_KEY = 'smart.sso.wecomAutoLogin'\n\n/**\n * 在企业微信客户端里打开登录页时,是否直接发起企业微信登录(客户端内走网页授权,静默、不用点)。\n * 企业微信的 UA 带 wxwork(同时也带微信的 MicroMessenger,不能拿它判断)。\n * 每个浏览器会话只返回一次 true:登录失败或主动退出后再回到登录页就停下,让人自己选登录方式,不会来回跳。\n */\nexport function claimWeComAutoLogin(opts: {\n userAgent: string\n providers: readonly { code: string }[]\n storage: Pick<Storage, 'getItem' | 'setItem'>\n}): boolean {\n if (!/wxwork/i.test(opts.userAgent)) return false\n if (!opts.providers.some(p => p.code === 'wecom')) return false\n try {\n if (opts.storage.getItem(WECOM_AUTO_LOGIN_KEY)) return false\n opts.storage.setItem(WECOM_AUTO_LOGIN_KEY, '1')\n return true\n } catch {\n // 存储不可用时记不住「已经跳过一次」,宁可不自动跳\n return false\n }\n}\n\n/** 严格保序切分:前 max 平铺,其余进溢出。 */\nexport function splitLoginProviders<T>(\n providers: readonly T[],\n maxVisible = SSO_VISIBLE_MAX,\n): {\n visible: T[]\n overflow: T[]\n} {\n const list = providers.slice()\n if (list.length <= maxVisible) return { visible: list, overflow: [] }\n return { visible: list.slice(0, maxVisible), overflow: list.slice(maxVisible) }\n}\n\n/**\n * 绑定页行:已启用 providers(API 序) ∪ 仅存在于 bindings 的已停用项(接在后面)。\n * 不做 N=4 截断。\n */\nexport function mergeBindingRows(\n providers: readonly SsoProviderLike[],\n bindings: readonly BindingLike[],\n): BindingRow[] {\n const bindByProvider = new Map<string, BindingLike>()\n for (const b of bindings) bindByProvider.set(b.provider, b)\n\n const rows: BindingRow[] = []\n const seen = new Set<string>()\n\n for (const p of providers) {\n seen.add(p.code)\n rows.push({\n code: p.code,\n displayName: p.displayName,\n icon: p.icon,\n enabled: true,\n binding: bindByProvider.get(p.code),\n })\n }\n\n for (const b of bindings) {\n if (seen.has(b.provider)) continue\n rows.push({\n code: b.provider,\n displayName: (b.displayName && b.displayName.trim()) || b.provider,\n icon: null,\n enabled: false,\n binding: b,\n })\n }\n\n return rows\n}\n"],"names":["SSO_VISIBLE_MAX","BRAND_CODES","BRAND_SET","PREVIEW_ALL_SSO_BRANDS","brandDisplayName","code","t","previewAllBrandProviders","LINK_BY_ACCOUNT_CODES","buildConfigProviderRows","registered","byCode","p","rows","seen","r","isIconifyName","icon","s","isBrandCode","resolveProviderIcon","c","WECOM_AUTO_LOGIN_KEY","claimWeComAutoLogin","opts","splitLoginProviders","providers","maxVisible","list","mergeBindingRows","bindings","bindByProvider","b"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** 平铺列表 → 树。按 parentId 挂到父的 children;根 = parentId 不在集合内(含 0)。
|
|
2
|
+
* 原序保留(输入通常已按 sort、id 排好);孤儿(父不存在)兜底当根,不丢数据。
|
|
3
|
+
* 两个消费点:OrgTreeSelect、机构管理页。 */
|
|
4
|
+
export type Tree<T> = T & {
|
|
5
|
+
children?: Tree<T>[];
|
|
6
|
+
};
|
|
7
|
+
export declare function buildTree<T extends {
|
|
8
|
+
id: number;
|
|
9
|
+
parentId: number;
|
|
10
|
+
}>(flat: T[]): Tree<T>[];
|
|
11
|
+
/**
|
|
12
|
+
* 按谓词剪枝:命中的节点保留(连同它的整棵子树——搜到一个目录,自然想看它下面有什么),
|
|
13
|
+
* 未命中但有后代命中的节点作为**祖先链**保留(否则命中的节点在树里无处安放,只剩一堆没有上下文的叶子)。
|
|
14
|
+
*
|
|
15
|
+
* 命中节点返回的是**原对象引用**(零拷贝);只有"仅因后代命中而保留"的祖先才是浅拷贝(children 换成剪过的分支)。
|
|
16
|
+
* 因此在搜索态下,直接往行对象上写值(`r.enabled = v`)对这些祖先行不会回写到源树 ——
|
|
17
|
+
* 调用方要么改从源树写,要么变更后重拉(机构页选了后者,与它其余所有变更的做法一致)。
|
|
18
|
+
*
|
|
19
|
+
* 两个消费点:菜单管理页、机构管理页。
|
|
20
|
+
*/
|
|
21
|
+
export declare function filterTree<T extends {
|
|
22
|
+
children?: T[];
|
|
23
|
+
}>(nodes: T[], match: (node: T) => boolean): T[];
|
|
24
|
+
/** 收集树中所有"可展开"节点(有子节点)的 id —— 受控展开时用它播种"全部展开"。 */
|
|
25
|
+
export declare function expandableIds<T extends {
|
|
26
|
+
id: number;
|
|
27
|
+
children?: T[];
|
|
28
|
+
}>(nodes: T[]): number[];
|
|
29
|
+
/** 收集 rootId 及其全部后代 id(平铺数组上按 parentId 迭代到不动点)。编辑机构选上级时剪自身子树防成环。 */
|
|
30
|
+
export declare function collectSubtreeIds<T extends {
|
|
31
|
+
id: number;
|
|
32
|
+
parentId: number;
|
|
33
|
+
}>(flat: T[], rootId: number): Set<number>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
function c(s) {
|
|
2
|
+
const o = /* @__PURE__ */ new Map();
|
|
3
|
+
for (const e of s) o.set(e.id, { ...e });
|
|
4
|
+
const n = [];
|
|
5
|
+
for (const e of s) {
|
|
6
|
+
const t = o.get(e.id), i = o.get(e.parentId);
|
|
7
|
+
i ? (i.children ?? (i.children = [])).push(t) : n.push(t);
|
|
8
|
+
}
|
|
9
|
+
return n;
|
|
10
|
+
}
|
|
11
|
+
function r(s, o) {
|
|
12
|
+
const n = [];
|
|
13
|
+
for (const e of s) {
|
|
14
|
+
if (o(e)) {
|
|
15
|
+
n.push(e);
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const t = r(e.children ?? [], o);
|
|
19
|
+
t.length && n.push({ ...e, children: t });
|
|
20
|
+
}
|
|
21
|
+
return n;
|
|
22
|
+
}
|
|
23
|
+
function d(s) {
|
|
24
|
+
const o = [], n = (e) => {
|
|
25
|
+
var t;
|
|
26
|
+
for (const i of e)
|
|
27
|
+
(t = i.children) != null && t.length && (o.push(i.id), n(i.children));
|
|
28
|
+
};
|
|
29
|
+
return n(s), o;
|
|
30
|
+
}
|
|
31
|
+
function f(s, o) {
|
|
32
|
+
const n = /* @__PURE__ */ new Set([o]);
|
|
33
|
+
let e = !0;
|
|
34
|
+
for (; e; ) {
|
|
35
|
+
e = !1;
|
|
36
|
+
for (const t of s)
|
|
37
|
+
!n.has(t.id) && n.has(t.parentId) && (n.add(t.id), e = !0);
|
|
38
|
+
}
|
|
39
|
+
return n;
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
c as buildTree,
|
|
43
|
+
f as collectSubtreeIds,
|
|
44
|
+
d as expandableIds,
|
|
45
|
+
r as filterTree
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sources":["../../src/utils/tree.ts"],"sourcesContent":["/** 平铺列表 → 树。按 parentId 挂到父的 children;根 = parentId 不在集合内(含 0)。\n * 原序保留(输入通常已按 sort、id 排好);孤儿(父不存在)兜底当根,不丢数据。\n * 两个消费点:OrgTreeSelect、机构管理页。 */\nexport type Tree<T> = T & { children?: Tree<T>[] }\n\nexport function buildTree<T extends { id: number; parentId: number }>(flat: T[]): Tree<T>[] {\n const map = new Map<number, Tree<T>>()\n for (const item of flat) map.set(item.id, { ...item })\n const roots: Tree<T>[] = []\n for (const item of flat) {\n const node = map.get(item.id)!\n const parent = map.get(item.parentId)\n if (parent) (parent.children ??= []).push(node)\n else roots.push(node)\n }\n return roots\n}\n\n/**\n * 按谓词剪枝:命中的节点保留(连同它的整棵子树——搜到一个目录,自然想看它下面有什么),\n * 未命中但有后代命中的节点作为**祖先链**保留(否则命中的节点在树里无处安放,只剩一堆没有上下文的叶子)。\n *\n * 命中节点返回的是**原对象引用**(零拷贝);只有\"仅因后代命中而保留\"的祖先才是浅拷贝(children 换成剪过的分支)。\n * 因此在搜索态下,直接往行对象上写值(`r.enabled = v`)对这些祖先行不会回写到源树 ——\n * 调用方要么改从源树写,要么变更后重拉(机构页选了后者,与它其余所有变更的做法一致)。\n *\n * 两个消费点:菜单管理页、机构管理页。\n */\nexport function filterTree<T extends { children?: T[] }>(\n nodes: T[],\n match: (node: T) => boolean,\n): T[] {\n const out: T[] = []\n for (const node of nodes) {\n if (match(node)) {\n out.push(node)\n continue\n }\n const kids = filterTree(node.children ?? [], match)\n if (kids.length) out.push({ ...node, children: kids })\n }\n return out\n}\n\n/** 收集树中所有\"可展开\"节点(有子节点)的 id —— 受控展开时用它播种\"全部展开\"。 */\nexport function expandableIds<T extends { id: number; children?: T[] }>(nodes: T[]): number[] {\n const ids: number[] = []\n const walk = (list: T[]) => {\n for (const n of list) {\n if (n.children?.length) {\n ids.push(n.id)\n walk(n.children)\n }\n }\n }\n walk(nodes)\n return ids\n}\n\n/** 收集 rootId 及其全部后代 id(平铺数组上按 parentId 迭代到不动点)。编辑机构选上级时剪自身子树防成环。 */\nexport function collectSubtreeIds<T extends { id: number; parentId: number }>(\n flat: T[],\n rootId: number,\n): Set<number> {\n const ids = new Set<number>([rootId])\n let grew = true\n while (grew) {\n grew = false\n for (const item of flat) {\n if (!ids.has(item.id) && ids.has(item.parentId)) {\n ids.add(item.id)\n grew = true\n }\n }\n }\n return ids\n}\n"],"names":["buildTree","flat","map","item","roots","node","parent","filterTree","nodes","match","out","kids","expandableIds","ids","walk","list","_a","n","collectSubtreeIds","rootId","grew"],"mappings":"AAKO,SAASA,EAAsDC,GAAsB;AAC1F,QAAMC,wBAAU,IAAA;AAChB,aAAWC,KAAQF,EAAM,CAAAC,EAAI,IAAIC,EAAK,IAAI,EAAE,GAAGA,GAAM;AACrD,QAAMC,IAAmB,CAAA;AACzB,aAAWD,KAAQF,GAAM;AACvB,UAAMI,IAAOH,EAAI,IAAIC,EAAK,EAAE,GACtBG,IAASJ,EAAI,IAAIC,EAAK,QAAQ;AACpC,IAAIG,KAASA,EAAO,aAAPA,EAAO,WAAa,CAAA,IAAI,KAAKD,CAAI,IACzCD,EAAM,KAAKC,CAAI;AAAA,EACtB;AACA,SAAOD;AACT;AAYO,SAASG,EACdC,GACAC,GACK;AACL,QAAMC,IAAW,CAAA;AACjB,aAAWL,KAAQG,GAAO;AACxB,QAAIC,EAAMJ,CAAI,GAAG;AACf,MAAAK,EAAI,KAAKL,CAAI;AACb;AAAA,IACF;AACA,UAAMM,IAAOJ,EAAWF,EAAK,YAAY,CAAA,GAAII,CAAK;AAClD,IAAIE,EAAK,UAAQD,EAAI,KAAK,EAAE,GAAGL,GAAM,UAAUM,GAAM;AAAA,EACvD;AACA,SAAOD;AACT;AAGO,SAASE,EAAwDJ,GAAsB;AAC5F,QAAMK,IAAgB,CAAA,GAChBC,IAAO,CAACC,MAAc;AA1CvB,QAAAC;AA2CH,eAAWC,KAAKF;AACd,OAAIC,IAAAC,EAAE,aAAF,QAAAD,EAAY,WACdH,EAAI,KAAKI,EAAE,EAAE,GACbH,EAAKG,EAAE,QAAQ;AAAA,EAGrB;AACA,SAAAH,EAAKN,CAAK,GACHK;AACT;AAGO,SAASK,EACdjB,GACAkB,GACa;AACb,QAAMN,IAAM,oBAAI,IAAY,CAACM,CAAM,CAAC;AACpC,MAAIC,IAAO;AACX,SAAOA,KAAM;AACX,IAAAA,IAAO;AACP,eAAWjB,KAAQF;AACjB,MAAI,CAACY,EAAI,IAAIV,EAAK,EAAE,KAAKU,EAAI,IAAIV,EAAK,QAAQ,MAC5CU,EAAI,IAAIV,EAAK,EAAE,GACfiB,IAAO;AAAA,EAGb;AACA,SAAOP;AACT;"}
|
package/dist/utils/ua.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const s = [
|
|
2
|
+
[/Edg(?:e|A|iOS)?\//, "Edge"],
|
|
3
|
+
[/OPR\/|Opera/, "Opera"],
|
|
4
|
+
[/Firefox\/|FxiOS/, "Firefox"],
|
|
5
|
+
[/Chrome\/|CriOS/, "Chrome"],
|
|
6
|
+
[/Safari\//, "Safari"],
|
|
7
|
+
[/MSIE |Trident\//, "IE"]
|
|
8
|
+
], t = [
|
|
9
|
+
[/Windows NT 10/, "Windows 10/11"],
|
|
10
|
+
[/Windows NT 6\.3/, "Windows 8.1"],
|
|
11
|
+
[/Windows NT 6\.[12]/, "Windows 7/8"],
|
|
12
|
+
[/Windows/, "Windows"],
|
|
13
|
+
[/iPhone|iPad|iPod/, "iOS"],
|
|
14
|
+
[/Mac OS X|Macintosh/, "macOS"],
|
|
15
|
+
[/Android/, "Android"],
|
|
16
|
+
[/Linux/, "Linux"]
|
|
17
|
+
];
|
|
18
|
+
function e(o, r) {
|
|
19
|
+
for (const [i, n] of r) if (i.test(o)) return n;
|
|
20
|
+
return "";
|
|
21
|
+
}
|
|
22
|
+
function d(o) {
|
|
23
|
+
return o ? { browser: e(o, s), os: e(o, t) } : { browser: "", os: "" };
|
|
24
|
+
}
|
|
25
|
+
function S(o) {
|
|
26
|
+
const { browser: r, os: i } = d(o), n = [r, i].filter(Boolean);
|
|
27
|
+
return n.length ? n.join(" · ") : o || "—";
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
d as parseUserAgent,
|
|
31
|
+
S as uaSummary
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=ua.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ua.js","sources":["../../src/utils/ua.ts"],"sourcesContent":["// User-Agent 轻量解析:原始 UA 串 → 浏览器 / 操作系统摘要,供日志/会话列表展示。\n// ponytail: 正则启发式,只认主流浏览器+系统,够后台\"一眼分辨设备\"用;要精确设备指纹再引 ua-parser-js。\n// 刻意放前端——后端内核只存原始 UA、不引解析依赖(核心包只依赖 SqlSugar + Microsoft.*)。\n\n/** 顺序敏感:Edge 含 Chrome 标记、Opera 含 Chrome 标记,故派生浏览器要排在 Chrome 前。 */\nconst BROWSERS: [RegExp, string][] = [\n [/Edg(?:e|A|iOS)?\\//, 'Edge'],\n [/OPR\\/|Opera/, 'Opera'],\n [/Firefox\\/|FxiOS/, 'Firefox'],\n [/Chrome\\/|CriOS/, 'Chrome'],\n [/Safari\\//, 'Safari'],\n [/MSIE |Trident\\//, 'IE'],\n]\n\nconst SYSTEMS: [RegExp, string][] = [\n [/Windows NT 10/, 'Windows 10/11'],\n [/Windows NT 6\\.3/, 'Windows 8.1'],\n [/Windows NT 6\\.[12]/, 'Windows 7/8'],\n [/Windows/, 'Windows'],\n [/iPhone|iPad|iPod/, 'iOS'],\n [/Mac OS X|Macintosh/, 'macOS'],\n [/Android/, 'Android'],\n [/Linux/, 'Linux'],\n]\n\nfunction match(ua: string, table: [RegExp, string][]): string {\n for (const [re, name] of table) if (re.test(ua)) return name\n return ''\n}\n\n/** 解析 UA。空串/未知返回空字段,由调用方决定占位符。 */\nexport function parseUserAgent(ua?: string | null): { browser: string; os: string } {\n if (!ua) return { browser: '', os: '' }\n return { browser: match(ua, BROWSERS), os: match(ua, SYSTEMS) }\n}\n\n/** 单行摘要,如 \"Chrome · Windows 10/11\";全未识别回落原始串,再空则 \"—\"。 */\nexport function uaSummary(ua?: string | null): string {\n const { browser, os } = parseUserAgent(ua)\n const parts = [browser, os].filter(Boolean)\n return parts.length ? parts.join(' · ') : ua || '—'\n}\n"],"names":["BROWSERS","SYSTEMS","match","ua","table","re","name","parseUserAgent","uaSummary","browser","os","parts"],"mappings":"AAKA,MAAMA,IAA+B;AAAA,EACnC,CAAC,qBAAqB,MAAM;AAAA,EAC5B,CAAC,eAAe,OAAO;AAAA,EACvB,CAAC,mBAAmB,SAAS;AAAA,EAC7B,CAAC,kBAAkB,QAAQ;AAAA,EAC3B,CAAC,YAAY,QAAQ;AAAA,EACrB,CAAC,mBAAmB,IAAI;AAC1B,GAEMC,IAA8B;AAAA,EAClC,CAAC,iBAAiB,eAAe;AAAA,EACjC,CAAC,mBAAmB,aAAa;AAAA,EACjC,CAAC,sBAAsB,aAAa;AAAA,EACpC,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,oBAAoB,KAAK;AAAA,EAC1B,CAAC,sBAAsB,OAAO;AAAA,EAC9B,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,SAAS,OAAO;AACnB;AAEA,SAASC,EAAMC,GAAYC,GAAmC;AAC5D,aAAW,CAACC,GAAIC,CAAI,KAAKF,OAAWC,EAAG,KAAKF,CAAE,EAAG,QAAOG;AACxD,SAAO;AACT;AAGO,SAASC,EAAeJ,GAAqD;AAClF,SAAKA,IACE,EAAE,SAASD,EAAMC,GAAIH,CAAQ,GAAG,IAAIE,EAAMC,GAAIF,CAAO,EAAA,IAD5C,EAAE,SAAS,IAAI,IAAI,GAAA;AAErC;AAGO,SAASO,EAAUL,GAA4B;AACpD,QAAM,EAAE,SAAAM,GAAS,IAAAC,MAAOH,EAAeJ,CAAE,GACnCQ,IAAQ,CAACF,GAASC,CAAE,EAAE,OAAO,OAAO;AAC1C,SAAOC,EAAM,SAASA,EAAM,KAAK,KAAK,IAAIR,KAAM;AAClD;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 是否 http(s) 绝对 URL。外链/iframe 菜单的约定判据:
|
|
3
|
+
* - 外链菜单:节点 path 为 URL(component 空)→ 点击 window.open,不建路由。
|
|
4
|
+
* - 内嵌 iframe 菜单:节点 component 为 URL(path 为内部路径)→ 注册通用 iframe 视图,URL 进 meta.iframeSrc。
|
|
5
|
+
*/
|
|
6
|
+
export declare function isHttpUrl(s: string | undefined | null): boolean;
|
|
7
|
+
/** 整屏页路由前缀:这类路由注册在布局壳之外,占满整个窗口(车间大屏看板等)。 */
|
|
8
|
+
export declare const FULLSCREEN_PATH_PREFIX = "/fullscreen/";
|
|
9
|
+
/**
|
|
10
|
+
* 是否「站内整屏页」菜单:节点 path 以 {@link FULLSCREEN_PATH_PREFIX} 开头、component 空。
|
|
11
|
+
*
|
|
12
|
+
* 与外链菜单同样走 `window.open` 新标签打开,但目标是站内静态路由而不是外部 URL——
|
|
13
|
+
* 大屏看板挂在墙上,必须整屏无侧栏无标签栏,塞进布局壳里就没意义了;
|
|
14
|
+
* 又不能像外链那样写死 `http://host/...`,那会把部署域名钉死在菜单数据里。
|
|
15
|
+
*/
|
|
16
|
+
export declare function isFullscreenPath(s: string | undefined | null): boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function r(t) {
|
|
2
|
+
return !!t && /^https?:\/\//i.test(t);
|
|
3
|
+
}
|
|
4
|
+
const n = "/fullscreen/";
|
|
5
|
+
function e(t) {
|
|
6
|
+
return !!t && t.startsWith(n);
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
n as FULLSCREEN_PATH_PREFIX,
|
|
10
|
+
e as isFullscreenPath,
|
|
11
|
+
r as isHttpUrl
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sources":["../../src/utils/url.ts"],"sourcesContent":["/**\n * 是否 http(s) 绝对 URL。外链/iframe 菜单的约定判据:\n * - 外链菜单:节点 path 为 URL(component 空)→ 点击 window.open,不建路由。\n * - 内嵌 iframe 菜单:节点 component 为 URL(path 为内部路径)→ 注册通用 iframe 视图,URL 进 meta.iframeSrc。\n */\nexport function isHttpUrl(s: string | undefined | null): boolean {\n return !!s && /^https?:\\/\\//i.test(s)\n}\n\n/** 整屏页路由前缀:这类路由注册在布局壳之外,占满整个窗口(车间大屏看板等)。 */\nexport const FULLSCREEN_PATH_PREFIX = '/fullscreen/'\n\n/**\n * 是否「站内整屏页」菜单:节点 path 以 {@link FULLSCREEN_PATH_PREFIX} 开头、component 空。\n *\n * 与外链菜单同样走 `window.open` 新标签打开,但目标是站内静态路由而不是外部 URL——\n * 大屏看板挂在墙上,必须整屏无侧栏无标签栏,塞进布局壳里就没意义了;\n * 又不能像外链那样写死 `http://host/...`,那会把部署域名钉死在菜单数据里。\n */\nexport function isFullscreenPath(s: string | undefined | null): boolean {\n return !!s && s.startsWith(FULLSCREEN_PATH_PREFIX)\n}\n"],"names":["isHttpUrl","s","FULLSCREEN_PATH_PREFIX","isFullscreenPath"],"mappings":"AAKO,SAASA,EAAUC,GAAuC;AAC/D,SAAO,CAAC,CAACA,KAAK,gBAAgB,KAAKA,CAAC;AACtC;AAGO,MAAMC,IAAyB;AAS/B,SAASC,EAAiBF,GAAuC;AACtE,SAAO,CAAC,CAACA,KAAKA,EAAE,WAAWC,CAAsB;AACnD;"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"biz.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { defineComponent as B, computed as b, ref as T, onMounted as V, openBlock as o, createElementBlock as u, createElementVNode as s, normalizeStyle as $, createVNode as d, unref as e, toDisplayString as a, withCtx as r, Fragment as z, renderList as N, createBlock as p, createTextVNode as _, createCommentVNode as E } from "vue";
|
|
2
|
+
import { NCard as g, NButton as w, NEmpty as C, NList as L, NListItem as R } from "naive-ui";
|
|
3
|
+
import { Icon as D } from "@iconify/vue";
|
|
4
|
+
import { useI18n as M } from "vue-i18n";
|
|
5
|
+
import { useRoute as F, useRouter as G } from "vue-router";
|
|
6
|
+
import { useUserStore as U } from "../../stores/user.js";
|
|
7
|
+
import { useAuthStore as j } from "../../stores/auth.js";
|
|
8
|
+
import { useAppStore as H } from "../../stores/app.js";
|
|
9
|
+
import { btnGrad as J } from "../../theme/mix.js";
|
|
10
|
+
import { noticeApi as K } from "../../api/index.js";
|
|
11
|
+
import O from "../../components/AppIcon.vue.js";
|
|
12
|
+
import { fmtDateTime as P } from "../../utils/format.js";
|
|
13
|
+
const Q = { class: "view" }, W = { class: "banner" }, X = { class: "hi" }, Y = { class: "tip" }, Z = {
|
|
14
|
+
key: 0,
|
|
15
|
+
class: "quick"
|
|
16
|
+
}, ee = { class: "notice-title" }, te = {
|
|
17
|
+
key: 0,
|
|
18
|
+
class: "dot"
|
|
19
|
+
}, oe = { class: "notice-time" }, _e = /* @__PURE__ */ B({
|
|
20
|
+
__name: "biz",
|
|
21
|
+
setup(ie) {
|
|
22
|
+
const { t: c } = M(), v = U(), S = j(), x = H(), I = F(), f = G(), q = b(() => ({ background: J(x.accent) }));
|
|
23
|
+
function k(m) {
|
|
24
|
+
var l;
|
|
25
|
+
const i = [];
|
|
26
|
+
for (const n of m)
|
|
27
|
+
n.visible && ((l = n.children) != null && l.length ? i.push(...k(n.children)) : n.path && i.push(n));
|
|
28
|
+
return i;
|
|
29
|
+
}
|
|
30
|
+
const y = b(() => k(S.menuTree).filter((m) => m.path !== I.path)), h = T([]);
|
|
31
|
+
return V(async () => {
|
|
32
|
+
try {
|
|
33
|
+
h.value = (await K.mine({ page: 1, pageSize: 5 })).items;
|
|
34
|
+
} catch {
|
|
35
|
+
}
|
|
36
|
+
}), (m, i) => {
|
|
37
|
+
var l, n;
|
|
38
|
+
return o(), u("div", Q, [
|
|
39
|
+
s("div", W, [
|
|
40
|
+
s("div", {
|
|
41
|
+
class: "avatar",
|
|
42
|
+
style: $(q.value)
|
|
43
|
+
}, [
|
|
44
|
+
d(e(D), {
|
|
45
|
+
icon: "ph:user",
|
|
46
|
+
width: 26,
|
|
47
|
+
color: "#fff"
|
|
48
|
+
})
|
|
49
|
+
], 4),
|
|
50
|
+
s("div", null, [
|
|
51
|
+
s("div", X, a(e(c)("biz.welcome", { name: ((l = e(v).userInfo) == null ? void 0 : l.name) ?? ((n = e(v).userInfo) == null ? void 0 : n.account) ?? "" })), 1),
|
|
52
|
+
s("div", Y, a(e(c)("biz.subtitle")), 1)
|
|
53
|
+
])
|
|
54
|
+
]),
|
|
55
|
+
d(e(g), {
|
|
56
|
+
title: e(c)("biz.quick"),
|
|
57
|
+
bordered: !0
|
|
58
|
+
}, {
|
|
59
|
+
default: r(() => [
|
|
60
|
+
y.value.length ? (o(), u("div", Z, [
|
|
61
|
+
(o(!0), u(z, null, N(y.value, (t) => (o(), p(e(w), {
|
|
62
|
+
key: t.id,
|
|
63
|
+
secondary: "",
|
|
64
|
+
onClick: (A) => e(f).push(t.path)
|
|
65
|
+
}, {
|
|
66
|
+
icon: r(() => [
|
|
67
|
+
d(O, {
|
|
68
|
+
icon: t.icon || "ph:squares-four",
|
|
69
|
+
size: 16
|
|
70
|
+
}, null, 8, ["icon"])
|
|
71
|
+
]),
|
|
72
|
+
default: r(() => [
|
|
73
|
+
_(" " + a(t.title), 1)
|
|
74
|
+
]),
|
|
75
|
+
_: 2
|
|
76
|
+
}, 1032, ["onClick"]))), 128))
|
|
77
|
+
])) : (o(), p(e(C), {
|
|
78
|
+
key: 1,
|
|
79
|
+
description: e(c)("biz.noMenus")
|
|
80
|
+
}, null, 8, ["description"]))
|
|
81
|
+
]),
|
|
82
|
+
_: 1
|
|
83
|
+
}, 8, ["title"]),
|
|
84
|
+
d(e(g), {
|
|
85
|
+
title: e(c)("biz.notices"),
|
|
86
|
+
bordered: !0
|
|
87
|
+
}, {
|
|
88
|
+
"header-extra": r(() => [
|
|
89
|
+
d(e(w), {
|
|
90
|
+
text: "",
|
|
91
|
+
type: "primary",
|
|
92
|
+
onClick: i[0] || (i[0] = (t) => e(f).push("/personal/notice"))
|
|
93
|
+
}, {
|
|
94
|
+
default: r(() => [
|
|
95
|
+
_(a(e(c)("biz.viewAll")), 1)
|
|
96
|
+
]),
|
|
97
|
+
_: 1
|
|
98
|
+
})
|
|
99
|
+
]),
|
|
100
|
+
default: r(() => [
|
|
101
|
+
h.value.length ? (o(), p(e(L), {
|
|
102
|
+
key: 0,
|
|
103
|
+
"show-divider": !1
|
|
104
|
+
}, {
|
|
105
|
+
default: r(() => [
|
|
106
|
+
(o(!0), u(z, null, N(h.value, (t) => (o(), p(e(R), {
|
|
107
|
+
key: t.id
|
|
108
|
+
}, {
|
|
109
|
+
default: r(() => [
|
|
110
|
+
s("div", {
|
|
111
|
+
class: "notice-row",
|
|
112
|
+
onClick: i[1] || (i[1] = (A) => e(f).push("/personal/notice"))
|
|
113
|
+
}, [
|
|
114
|
+
s("span", ee, [
|
|
115
|
+
t.isRead ? E("", !0) : (o(), u("span", te)),
|
|
116
|
+
_(" " + a(t.title), 1)
|
|
117
|
+
]),
|
|
118
|
+
s("span", oe, a(e(P)(t.publishTime, { seconds: !1 })), 1)
|
|
119
|
+
])
|
|
120
|
+
]),
|
|
121
|
+
_: 2
|
|
122
|
+
}, 1024))), 128))
|
|
123
|
+
]),
|
|
124
|
+
_: 1
|
|
125
|
+
})) : (o(), p(e(C), { key: 1 }))
|
|
126
|
+
]),
|
|
127
|
+
_: 1
|
|
128
|
+
}, 8, ["title"])
|
|
129
|
+
]);
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
export {
|
|
134
|
+
_e as default
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=biz2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"biz2.vue.js","sources":["../../../src/views/dashboard/biz.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 业务系统的工作台。每个应用一个首页组件——这里和 dashboard/workbench.vue 是两个独立页面,\n// 由各自应用的「工作台」菜单(component 字段)指向,切应用即换首页。\n// 全部真数据拼装:欢迎卡(user store)+ 快捷入口(当前应用菜单树的可见叶子)+ 我的通知(notice/mine)。\n// 应用要换成自己的业务统计,在自己的 views/ 下放同 key(dashboard/biz)的页面覆盖本页;别造写死的假数字。\nimport { computed, onMounted, ref } from 'vue'\nimport { NCard, NButton, NList, NListItem, NEmpty } from 'naive-ui'\nimport { Icon } from '@iconify/vue'\nimport { useI18n } from 'vue-i18n'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useUserStore } from '#/stores/user'\nimport { useAuthStore } from '#/stores/auth'\nimport { useAppStore } from '#/stores/app'\nimport { btnGrad } from '#/theme/mix'\nimport { noticeApi } from '#/api'\nimport type { NoticeMineItem } from '#/types/api'\nimport type { MenuNode } from '#/types/menu'\nimport AppIcon from '#/components/AppIcon.vue'\nimport { fmtDateTime } from '#/utils/format'\n\nconst { t } = useI18n()\nconst user = useUserStore()\nconst auth = useAuthStore()\nconst app = useAppStore()\nconst route = useRoute()\nconst router = useRouter()\n\nconst avatarStyle = computed(() => ({ background: btnGrad(app.accent) }))\n\n/** 当前应用菜单树的可见叶子(带 path)= 快捷入口;排除本页自身。 */\nfunction leaves(tree: MenuNode[]): MenuNode[] {\n const out: MenuNode[] = []\n for (const n of tree) {\n if (!n.visible) continue\n if (n.children?.length) out.push(...leaves(n.children))\n else if (n.path) out.push(n)\n }\n return out\n}\nconst quick = computed(() => leaves(auth.menuTree).filter(n => n.path !== route.path))\n\nconst notices = ref<NoticeMineItem[]>([])\nonMounted(async () => {\n try {\n notices.value = (await noticeApi.mine({ page: 1, pageSize: 5 })).items\n } catch {\n // 首页不因一张卡挂了糊用户一脸红(同 workbench):通知取不到就空态,其余照常可用。\n }\n})\n</script>\n\n<template>\n <div class=\"view\">\n <!-- 欢迎横幅(与 workbench 同语法:btnGrad 头像 + 主副标题) -->\n <div class=\"banner\">\n <div class=\"avatar\" :style=\"avatarStyle\">\n <Icon icon=\"ph:user\" :width=\"26\" color=\"#fff\" />\n </div>\n <div>\n <div class=\"hi\">\n {{ t('biz.welcome', { name: user.userInfo?.name ?? user.userInfo?.account ?? '' }) }}\n </div>\n <div class=\"tip\">{{ t('biz.subtitle') }}</div>\n </div>\n </div>\n\n <n-card :title=\"t('biz.quick')\" :bordered=\"true\">\n <div v-if=\"quick.length\" class=\"quick\">\n <n-button v-for=\"m in quick\" :key=\"m.id\" secondary @click=\"router.push(m.path!)\">\n <template #icon><AppIcon :icon=\"m.icon || 'ph:squares-four'\" :size=\"16\" /></template>\n {{ m.title }}\n </n-button>\n </div>\n <n-empty v-else :description=\"t('biz.noMenus')\" />\n </n-card>\n\n <n-card :title=\"t('biz.notices')\" :bordered=\"true\">\n <template #header-extra>\n <n-button text type=\"primary\" @click=\"router.push('/personal/notice')\">\n {{ t('biz.viewAll') }}\n </n-button>\n </template>\n <n-list v-if=\"notices.length\" :show-divider=\"false\">\n <n-list-item v-for=\"n in notices\" :key=\"n.id\">\n <div class=\"notice-row\" @click=\"router.push('/personal/notice')\">\n <span class=\"notice-title\">\n <span v-if=\"!n.isRead\" class=\"dot\" />\n {{ n.title }}\n </span>\n <span class=\"notice-time\">{{ fmtDateTime(n.publishTime, { seconds: false }) }}</span>\n </div>\n </n-list-item>\n </n-list>\n <n-empty v-else />\n </n-card>\n </div>\n</template>\n\n<style scoped>\n.view {\n display: flex;\n flex-direction: column;\n gap: var(--gap-card);\n}\n.banner {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 24px;\n border-radius: var(--radius-lg);\n background: var(--color-primary-light);\n}\n.avatar {\n width: 52px;\n height: 52px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.hi {\n font-size: var(--font-size-lg);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.tip {\n color: var(--color-text-secondary);\n margin-top: 4px;\n}\n.quick {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n.notice-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n cursor: pointer;\n}\n.notice-title {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--color-text-primary);\n}\n.dot {\n flex-shrink: 0;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--color-primary);\n}\n.notice-time {\n flex-shrink: 0;\n color: var(--color-text-secondary);\n font-size: 12px;\n}\n</style>\n"],"names":["t","useI18n","user","useUserStore","auth","useAuthStore","app","useAppStore","route","useRoute","router","useRouter","avatarStyle","computed","btnGrad","leaves","tree","out","_a","quick","n","notices","ref","onMounted","noticeApi","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","_unref","Icon","_hoisted_3","_toDisplayString","_hoisted_4","NCard","_hoisted_5","_Fragment","_renderList","m","_createBlock","NButton","AppIcon","NEmpty","_cache","$event","NList","NListItem","_hoisted_6","_hoisted_7","_hoisted_8"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { defineComponent as I, computed as v, ref as b, onMounted as L, openBlock as s, createElementBlock as _, createElementVNode as n, normalizeStyle as w, createVNode as l, unref as e, toDisplayString as h, withCtx as u, Fragment as $, renderList as E, createBlock as d } from "vue";
|
|
2
|
+
import { NGrid as g, NGi as f, NCard as k, NSkeleton as y } from "naive-ui";
|
|
3
|
+
import { Icon as x } from "@iconify/vue";
|
|
4
|
+
import { useI18n as T } from "vue-i18n";
|
|
5
|
+
import { useUserStore as U } from "../../stores/user.js";
|
|
6
|
+
import { useAppStore as V } from "../../stores/app.js";
|
|
7
|
+
import { btnGrad as z } from "../../theme/mix.js";
|
|
8
|
+
import { dashboardApi as F } from "../../api/index.js";
|
|
9
|
+
import M from "../../components/Chart/LineChart.vue.js";
|
|
10
|
+
import j from "../../components/Chart/PieChart.vue.js";
|
|
11
|
+
const q = { class: "view" }, H = { class: "banner" }, J = { class: "hi" }, K = { class: "tip" }, O = { class: "stat" }, P = { class: "stat-body" }, Q = {
|
|
12
|
+
key: 1,
|
|
13
|
+
class: "stat-val tabular"
|
|
14
|
+
}, R = { class: "stat-label" }, le = /* @__PURE__ */ I({
|
|
15
|
+
__name: "workbench",
|
|
16
|
+
setup(W) {
|
|
17
|
+
const { t: r } = T(), S = U(), N = V(), A = v(() => ({ background: z(N.accent) })), o = b(null), m = b(!0);
|
|
18
|
+
L(async () => {
|
|
19
|
+
try {
|
|
20
|
+
o.value = await F.summary();
|
|
21
|
+
} catch {
|
|
22
|
+
} finally {
|
|
23
|
+
m.value = !1;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
function p(t) {
|
|
27
|
+
return t === void 0 ? "—" : t;
|
|
28
|
+
}
|
|
29
|
+
const B = v(() => {
|
|
30
|
+
var t, a, c, i;
|
|
31
|
+
return [
|
|
32
|
+
{
|
|
33
|
+
key: "roles",
|
|
34
|
+
icon: "ph:shield-duotone",
|
|
35
|
+
value: p((t = o.value) == null ? void 0 : t.roles),
|
|
36
|
+
color: "var(--color-primary)"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: "users",
|
|
40
|
+
icon: "ph:users-duotone",
|
|
41
|
+
value: p((a = o.value) == null ? void 0 : a.users),
|
|
42
|
+
color: "var(--color-success)"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
key: "perms",
|
|
46
|
+
icon: "ph:key-duotone",
|
|
47
|
+
value: p((c = o.value) == null ? void 0 : c.perms),
|
|
48
|
+
color: "var(--color-warning)"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: "online",
|
|
52
|
+
icon: "ph:broadcast-duotone",
|
|
53
|
+
value: p((i = o.value) == null ? void 0 : i.onlineSessions),
|
|
54
|
+
color: "var(--color-danger)"
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
}), C = v(() => {
|
|
58
|
+
var t;
|
|
59
|
+
return ((t = o.value) == null ? void 0 : t.trendDays) ?? [];
|
|
60
|
+
}), D = v(() => {
|
|
61
|
+
var t, a;
|
|
62
|
+
return [
|
|
63
|
+
{ name: r("workbench.trendLogins"), data: ((t = o.value) == null ? void 0 : t.trendLogins) ?? [] },
|
|
64
|
+
{ name: r("workbench.trendActive"), data: ((a = o.value) == null ? void 0 : a.trendActiveUsers) ?? [] }
|
|
65
|
+
];
|
|
66
|
+
}), G = v(() => {
|
|
67
|
+
var t, a, c;
|
|
68
|
+
return [
|
|
69
|
+
{ name: r("workbench.roles"), value: ((t = o.value) == null ? void 0 : t.roles) ?? 0 },
|
|
70
|
+
{ name: r("workbench.users"), value: ((a = o.value) == null ? void 0 : a.users) ?? 0 },
|
|
71
|
+
{ name: r("workbench.perms"), value: ((c = o.value) == null ? void 0 : c.perms) ?? 0 }
|
|
72
|
+
];
|
|
73
|
+
});
|
|
74
|
+
return (t, a) => {
|
|
75
|
+
var c;
|
|
76
|
+
return s(), _("div", q, [
|
|
77
|
+
n("div", H, [
|
|
78
|
+
n("div", {
|
|
79
|
+
class: "avatar",
|
|
80
|
+
style: w(A.value)
|
|
81
|
+
}, [
|
|
82
|
+
l(e(x), {
|
|
83
|
+
icon: "ph:user",
|
|
84
|
+
width: 26,
|
|
85
|
+
color: "#fff"
|
|
86
|
+
})
|
|
87
|
+
], 4),
|
|
88
|
+
n("div", null, [
|
|
89
|
+
n("div", J, h(e(r)("workbench.welcome", { name: ((c = e(S).userInfo) == null ? void 0 : c.name) ?? "" })), 1),
|
|
90
|
+
n("div", K, h(e(r)("workbench.subtitle")), 1)
|
|
91
|
+
])
|
|
92
|
+
]),
|
|
93
|
+
l(e(g), {
|
|
94
|
+
cols: "1 s:2 l:4",
|
|
95
|
+
responsive: "screen",
|
|
96
|
+
"x-gap": 16,
|
|
97
|
+
"y-gap": 16
|
|
98
|
+
}, {
|
|
99
|
+
default: u(() => [
|
|
100
|
+
(s(!0), _($, null, E(B.value, (i) => (s(), d(e(f), {
|
|
101
|
+
key: i.key
|
|
102
|
+
}, {
|
|
103
|
+
default: u(() => [
|
|
104
|
+
l(e(k), { bordered: !0 }, {
|
|
105
|
+
default: u(() => [
|
|
106
|
+
n("div", O, [
|
|
107
|
+
n("div", {
|
|
108
|
+
class: "stat-ico",
|
|
109
|
+
style: w({ color: i.color })
|
|
110
|
+
}, [
|
|
111
|
+
l(e(x), {
|
|
112
|
+
icon: i.icon,
|
|
113
|
+
width: 28
|
|
114
|
+
}, null, 8, ["icon"])
|
|
115
|
+
], 4),
|
|
116
|
+
n("div", P, [
|
|
117
|
+
m.value ? (s(), d(e(y), {
|
|
118
|
+
key: 0,
|
|
119
|
+
text: "",
|
|
120
|
+
width: "72px",
|
|
121
|
+
height: "34px"
|
|
122
|
+
})) : (s(), _("div", Q, h(i.value), 1)),
|
|
123
|
+
n("div", R, h(e(r)(`workbench.${i.key}`)), 1)
|
|
124
|
+
])
|
|
125
|
+
])
|
|
126
|
+
]),
|
|
127
|
+
_: 2
|
|
128
|
+
}, 1024)
|
|
129
|
+
]),
|
|
130
|
+
_: 2
|
|
131
|
+
}, 1024))), 128))
|
|
132
|
+
]),
|
|
133
|
+
_: 1
|
|
134
|
+
}),
|
|
135
|
+
l(e(g), {
|
|
136
|
+
cols: "1 l:2",
|
|
137
|
+
responsive: "screen",
|
|
138
|
+
"x-gap": 16,
|
|
139
|
+
"y-gap": 16
|
|
140
|
+
}, {
|
|
141
|
+
default: u(() => [
|
|
142
|
+
l(e(f), null, {
|
|
143
|
+
default: u(() => [
|
|
144
|
+
l(e(k), {
|
|
145
|
+
title: e(r)("workbench.trendTitle"),
|
|
146
|
+
bordered: !0
|
|
147
|
+
}, {
|
|
148
|
+
default: u(() => [
|
|
149
|
+
m.value ? (s(), d(e(y), {
|
|
150
|
+
key: 0,
|
|
151
|
+
height: "320px",
|
|
152
|
+
sharp: !1
|
|
153
|
+
})) : (s(), d(M, {
|
|
154
|
+
key: 1,
|
|
155
|
+
categories: C.value,
|
|
156
|
+
series: D.value
|
|
157
|
+
}, null, 8, ["categories", "series"]))
|
|
158
|
+
]),
|
|
159
|
+
_: 1
|
|
160
|
+
}, 8, ["title"])
|
|
161
|
+
]),
|
|
162
|
+
_: 1
|
|
163
|
+
}),
|
|
164
|
+
l(e(f), null, {
|
|
165
|
+
default: u(() => [
|
|
166
|
+
l(e(k), {
|
|
167
|
+
title: e(r)("workbench.distributionTitle"),
|
|
168
|
+
bordered: !0
|
|
169
|
+
}, {
|
|
170
|
+
default: u(() => [
|
|
171
|
+
m.value ? (s(), d(e(y), {
|
|
172
|
+
key: 0,
|
|
173
|
+
height: "320px",
|
|
174
|
+
sharp: !1
|
|
175
|
+
})) : (s(), d(j, {
|
|
176
|
+
key: 1,
|
|
177
|
+
data: G.value
|
|
178
|
+
}, null, 8, ["data"]))
|
|
179
|
+
]),
|
|
180
|
+
_: 1
|
|
181
|
+
}, 8, ["title"])
|
|
182
|
+
]),
|
|
183
|
+
_: 1
|
|
184
|
+
})
|
|
185
|
+
]),
|
|
186
|
+
_: 1
|
|
187
|
+
})
|
|
188
|
+
]);
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
export {
|
|
193
|
+
le as default
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=workbench2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench2.vue.js","sources":["../../../src/views/dashboard/workbench.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { NGrid, NGi, NCard, NSkeleton } from 'naive-ui'\nimport { Icon } from '@iconify/vue'\nimport { useI18n } from 'vue-i18n'\nimport { useUserStore } from '#/stores/user'\nimport { useAppStore } from '#/stores/app'\nimport { btnGrad } from '#/theme/mix'\nimport { dashboardApi } from '#/api'\nimport type { DashboardSummary } from '#/types/api'\nimport LineChart from '#/components/Chart/LineChart.vue'\nimport PieChart from '#/components/Chart/PieChart.vue'\n\nconst { t } = useI18n()\nconst user = useUserStore()\nconst app = useAppStore()\n\nconst avatarStyle = computed(() => ({ background: btnGrad(app.accent) }))\n\nconst summary = ref<DashboardSummary | null>(null)\nconst loading = ref(true)\n\nonMounted(async () => {\n try {\n summary.value = await dashboardApi.summary()\n } catch {\n // 首页不该因为一张统计图挂了就糊用户一脸红:统计取不到就显示 —,页面其余部分照常可用。\n } finally {\n loading.value = false\n }\n})\n\n/** 计数未到位时显示 —,而不是先闪个 0 再跳到真值。 */\nfunction num(v: number | undefined) {\n return v === undefined ? '—' : v\n}\n\nconst stats = computed(() => [\n {\n key: 'roles',\n icon: 'ph:shield-duotone',\n value: num(summary.value?.roles),\n color: 'var(--color-primary)',\n },\n {\n key: 'users',\n icon: 'ph:users-duotone',\n value: num(summary.value?.users),\n color: 'var(--color-success)',\n },\n {\n key: 'perms',\n icon: 'ph:key-duotone',\n value: num(summary.value?.perms),\n color: 'var(--color-warning)',\n },\n {\n key: 'online',\n icon: 'ph:broadcast-duotone',\n value: num(summary.value?.onlineSessions),\n color: 'var(--color-danger)',\n },\n])\n\nconst trendDays = computed(() => summary.value?.trendDays ?? [])\nconst trendSeries = computed(() => [\n { name: t('workbench.trendLogins'), data: summary.value?.trendLogins ?? [] },\n { name: t('workbench.trendActive'), data: summary.value?.trendActiveUsers ?? [] },\n])\n// 资源分布就是前三个计数,不必让后端再返一份\nconst distribution = computed(() => [\n { name: t('workbench.roles'), value: summary.value?.roles ?? 0 },\n { name: t('workbench.users'), value: summary.value?.users ?? 0 },\n { name: t('workbench.perms'), value: summary.value?.perms ?? 0 },\n])\n</script>\n\n<template>\n <div class=\"view\">\n <!-- 欢迎横幅(英雄区:btnGrad 头像)-->\n <div class=\"banner\">\n <div class=\"avatar\" :style=\"avatarStyle\">\n <Icon icon=\"ph:user\" :width=\"26\" color=\"#fff\" />\n </div>\n <div>\n <div class=\"hi\">{{ t('workbench.welcome', { name: user.userInfo?.name ?? '' }) }}</div>\n <div class=\"tip\">{{ t('workbench.subtitle') }}</div>\n </div>\n </div>\n\n <n-grid :cols=\"'1 s:2 l:4'\" responsive=\"screen\" :x-gap=\"16\" :y-gap=\"16\">\n <n-gi v-for=\"s in stats\" :key=\"s.key\">\n <n-card :bordered=\"true\">\n <div class=\"stat\">\n <div class=\"stat-ico\" :style=\"{ color: s.color }\">\n <Icon :icon=\"s.icon\" :width=\"28\" />\n </div>\n <div class=\"stat-body\">\n <!-- 骨架而非先闪 0 再跳真值:数字位宽固定,到数时不抖 -->\n <n-skeleton v-if=\"loading\" text width=\"72px\" height=\"34px\" />\n <div v-else class=\"stat-val tabular\">{{ s.value }}</div>\n <div class=\"stat-label\">{{ t(`workbench.${s.key}`) }}</div>\n </div>\n </div>\n </n-card>\n </n-gi>\n </n-grid>\n\n <n-grid :cols=\"'1 l:2'\" responsive=\"screen\" :x-gap=\"16\" :y-gap=\"16\">\n <n-gi>\n <n-card :title=\"t('workbench.trendTitle')\" :bordered=\"true\">\n <n-skeleton v-if=\"loading\" height=\"320px\" :sharp=\"false\" />\n <LineChart v-else :categories=\"trendDays\" :series=\"trendSeries\" />\n </n-card>\n </n-gi>\n <n-gi>\n <n-card :title=\"t('workbench.distributionTitle')\" :bordered=\"true\">\n <n-skeleton v-if=\"loading\" height=\"320px\" :sharp=\"false\" />\n <PieChart v-else :data=\"distribution\" />\n </n-card>\n </n-gi>\n </n-grid>\n </div>\n</template>\n\n<style scoped>\n.view {\n display: flex;\n flex-direction: column;\n gap: var(--gap-card);\n}\n.banner {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 24px;\n border-radius: var(--radius-lg);\n background: var(--color-primary-light);\n}\n.avatar {\n width: 52px;\n height: 52px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.hi {\n font-size: var(--font-size-lg);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.tip {\n color: var(--color-text-secondary);\n margin-top: 4px;\n}\n.stat {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n/* 骨架与真值换位时高度一致,卡片不跳 */\n.stat-body {\n min-width: 0;\n}\n/* 图标底盘:取当前语义色 12% 作浅底圆角,呼应 banner 头像,避免图标\"裸浮\" */\n.stat-ico {\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, currentColor 12%, transparent);\n}\n.stat-val {\n font-size: 28px;\n font-weight: 700;\n color: var(--color-text-primary);\n line-height: 1.1;\n}\n.stat-label {\n color: var(--color-text-secondary);\n margin-top: 2px;\n}\n</style>\n"],"names":["t","useI18n","user","useUserStore","app","useAppStore","avatarStyle","computed","btnGrad","summary","ref","loading","onMounted","dashboardApi","num","v","stats","_a","_b","_c","_d","trendDays","trendSeries","distribution","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","_unref","Icon","_hoisted_3","_toDisplayString","_hoisted_4","NGrid","_Fragment","_renderList","s","_createBlock","NGi","NCard","_hoisted_5","_normalizeStyle","_hoisted_6","NSkeleton","_hoisted_7","_hoisted_8","LineChart","PieChart"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|