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,15 @@
|
|
|
1
|
+
var r = /* @__PURE__ */ ((l) => (l[l.All = 1] = "All", l[l.Org = 2] = "Org", l[l.OrgAndChildren = 3] = "OrgAndChildren", l[l.Self = 4] = "Self", l[l.Custom = 5] = "Custom", l))(r || {}), n = /* @__PURE__ */ ((l) => (l[l.Notice = 1] = "Notice", l[l.Announcement = 2] = "Announcement", l[l.Message = 3] = "Message", l))(n || {}), k = /* @__PURE__ */ ((l) => (l[l.All = 0] = "All", l[l.Role = 1] = "Role", l[l.User = 2] = "User", l))(k || {}), m = /* @__PURE__ */ ((l) => (l[l.Skip = 0] = "Skip", l[l.Overwrite = 1] = "Overwrite", l[l.Error = 2] = "Error", l))(m || {}), v = /* @__PURE__ */ ((l) => (l[l.Compiled = 1] = "Compiled", l[l.Http = 2] = "Http", l[l.Sql = 3] = "Sql", l))(v || {}), O = /* @__PURE__ */ ((l) => (l[l.Cron = 1] = "Cron", l[l.Interval = 2] = "Interval", l[l.OneShot = 3] = "OneShot", l))(O || {}), C = /* @__PURE__ */ ((l) => (l[l.Skip = 1] = "Skip", l[l.FireOnceNow = 2] = "FireOnceNow", l))(C || {}), A = /* @__PURE__ */ ((l) => (l[l.SerialSkip = 1] = "SerialSkip", l[l.Parallel = 2] = "Parallel", l))(A || {}), h = /* @__PURE__ */ ((l) => (l[l.Ready = 1] = "Ready", l[l.Paused = 2] = "Paused", l[l.Completed = 3] = "Completed", l[l.Panic = 4] = "Panic", l))(h || {}), P = /* @__PURE__ */ ((l) => (l[l.Running = 1] = "Running", l[l.Success = 2] = "Success", l[l.Failed = 3] = "Failed", l[l.Timeout = 4] = "Timeout", l[l.Cancelled = 5] = "Cancelled", l[l.Skipped = 6] = "Skipped", l))(P || {}), w = /* @__PURE__ */ ((l) => (l[l.Schedule = 1] = "Schedule", l[l.Manual = 2] = "Manual", l[l.Misfire = 3] = "Misfire", l[l.MissedSkipped = 4] = "MissedSkipped", l))(w || {});
|
|
2
|
+
export {
|
|
3
|
+
r as DataScopeType,
|
|
4
|
+
m as DuplicateStrategy,
|
|
5
|
+
A as JobConcurrencyMode,
|
|
6
|
+
w as JobFireMode,
|
|
7
|
+
v as JobHandlerKind,
|
|
8
|
+
C as JobMisfireStrategy,
|
|
9
|
+
P as JobRunStatus,
|
|
10
|
+
h as JobStatus,
|
|
11
|
+
O as JobTriggerKind,
|
|
12
|
+
n as NoticeType,
|
|
13
|
+
k as ReceiverType
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sources":["../../src/types/api.ts"],"sourcesContent":["// 接口出参领域类型(与后端 DTO 对齐)。API 层用它标注 unwrap<T> 的返回,视图直接消费。\nimport type { AppModule } from './menu'\n\n/** 登录/刷新出参(后端 LoginOutput)。 */\nexport interface LoginOutput {\n accessToken: string\n expiresAt: string\n refreshToken: string\n refreshExpiresAt: string\n userId: number\n account: string\n name: string\n /** 是否需强制改密(管理员建号/重置后首登为 true)。 */\n mustChangePassword: boolean\n /**\n * 会话交付模式(可选)。\n * - `body`:刷新令牌在 JSON 体(默认,前端 localStorage 持久化)\n * - `cookie`:刷新令牌在 HttpOnly Cookie,access 仅内存\n * 旧后端/未 regen 的 schema 可能缺此字段,前端用 refreshToken 空串 + csrfRequired 兜底判定。\n */\n sessionMode?: 'body' | 'cookie' | string | null\n /**\n * 是否要求双提交 CSRF(`X-Smart-CSRF` + `smart_csrf` Cookie)。\n * Cookie 会话为 true;默认模式为 false/缺省。\n */\n csrfRequired?: boolean | null\n /** 是否超管;前端据此在 profile 接口故障时仍能正确 fail-open v-auth。 */\n isSuperAdmin?: boolean\n}\n\n/** 我的应用列表(后端 MyModulesOutput)。 */\nexport interface MyModulesOutput {\n modules: AppModule[]\n defaultModuleId?: number | null\n}\n\n/** 个人资料(后端 UserProfile)。 */\nexport interface UserProfile {\n id: number\n account: string\n name: string\n orgId?: number | null\n positionId?: number | null\n /** 机构名称(未分配/已删则 null) */\n orgName?: string | null\n /** 职位名称(未分配/已删则 null) */\n positionName?: string | null\n nickname?: string | null\n phone?: string | null\n email?: string | null\n /** 性别:字典 gender 的项 Value(\"1\"男/\"2\"女/\"0\"未知) */\n gender?: string | null\n /** 头像(文件签名直链 ViewUrl,直接进 img) */\n avatar?: string | null\n isSuperAdmin: boolean\n}\n\n/** 我的会话项(后端 MySessionItem;个人视角,isCurrent 标记本次请求所用会话)。 */\nexport interface MySessionItem {\n sessionId: string\n ip?: string | null\n userAgent?: string | null\n loginTime: string\n expiresAt: string\n isCurrent: boolean\n}\n\n/** 后端统一分页结果 PagedList<T>。 */\nexport interface PagedList<T> {\n current: number\n size: number\n total: number\n pages: number\n items: T[]\n}\n\n/** 用户列表项(后端 UserItem;刻意不含密码)。 */\nexport interface UserItem {\n id: number\n account: string\n name: string\n nickname?: string | null\n phone?: string | null\n email?: string | null\n gender?: string | null\n avatar?: string | null\n orgId?: number | null\n positionId?: number | null\n directorId?: number | null\n orgName?: string | null\n positionName?: string | null\n directorName?: string | null\n enabled: boolean\n isSuperAdmin: boolean\n /** 管理员显式强制 TOTP(只能加严)。 */\n forceTotp?: boolean\n /** 是否已绑定 TOTP(只读)。 */\n totpEnabled?: boolean\n createTime: string\n}\n\n/** 模块/应用管理行(后端 SysModule;列表全字段)。 */\nexport interface ModuleRow {\n id: number\n code: string\n title: string\n icon?: string | null\n defaultRoute?: string | null\n /** 后端路由匹配前缀(如 sys/biz):菜单配按钮时权限路由下拉据此按应用软过滤;留空=不过滤。 */\n apiPrefix?: string | null\n sort: number\n enabled: boolean\n remark?: string | null\n createTime?: string\n}\n\n/** 工作台首页统计(后端 DashboardSummaryOutput)。趋势三条数组等长(近 7 日,含今天,无登录的日子为 0)。 */\nexport interface DashboardSummary {\n roles: number\n users: number\n perms: number\n onlineSessions: number\n trendDays: string[]\n trendLogins: number[]\n trendActiveUsers: number[]\n}\n\n/** 字典项消费投影(后端 SysDictItem;sort 归一为 number,甩掉 int64 序列化的 number|string 噪音)。 */\nexport interface DictItem {\n label: string\n value: string\n sort: number\n enabled: boolean\n}\n\n/** 模块新增/编辑入参(后端 ModuleInput)。 */\nexport interface ModuleInput {\n code: string\n title: string\n icon?: string | null\n defaultRoute?: string | null\n apiPrefix?: string | null\n sort: number\n enabled: boolean\n remark?: string | null\n}\n\n/** 系统配置行(后端 SysConfig;列表返回全字段,int64 收敛为 number)。 */\nexport interface SysConfig {\n id: number\n configKey: string\n configValue?: string | null\n name: string\n groupCode?: string | null\n sort: number\n remark?: string | null\n createTime?: string\n}\n\n/** 配置新增/编辑入参(后端 ConfigInput;configKey 创建后不可改)。 */\nexport interface ConfigInput {\n configKey: string\n configValue?: string | null\n name: string\n groupCode?: string | null\n sort: number\n remark?: string | null\n}\n\n/** 字典类型行(后端 SysDictType;Code 创建后不可改)。int64 收敛为 number。 */\nexport interface SysDictType {\n id: number\n code: string\n name: string\n sort: number\n enabled: boolean\n remark?: string | null\n createTime?: string\n}\n\n/** 字典项行(后端 SysDictItem;管理端分页含停用项,带 id——区别于下拉投影 DictItem)。int64 收敛为 number。 */\nexport interface SysDictItem {\n id: number\n dictTypeCode: string\n label: string\n value: string\n sort: number\n enabled: boolean\n createTime?: string\n}\n\n/** 字典类型新增/编辑入参(后端 DictTypeInput;code 创建后不可改,更新时服务端忽略)。 */\nexport interface DictTypeInput {\n code: string\n name: string\n sort: number\n enabled: boolean\n remark?: string | null\n}\n\n/** 字典项新增/编辑入参(后端 DictItemInput;dictTypeCode = 当前类型,表单隐藏)。 */\nexport interface DictItemInput {\n dictTypeCode: string\n label: string\n value: string\n sort: number\n enabled: boolean\n}\n\n/** 文件记录行(后端 SysFile;列表返回,int64 收敛为 number)。 */\nexport interface SysFile {\n id: number\n originalName: string\n storagePath: string\n extension: string\n contentType?: string | null\n sizeBytes: number\n fileHash?: string | null\n createTime?: string\n}\n\n/** 上传出参(后端 FileUploadOutput)。 */\nexport interface FileUploadOutput {\n id: number\n originalName: string\n /** 存储层相对路径。**别当 URL 用**:后端默认不静态托管上传目录,当 src 必然坏链。要展示图片用 viewUrl。 */\n storagePath: string\n sizeBytes: number\n fileHash?: string | null\n /** 签名直链(匿名可取、不可伪造),可直接塞进 `<img src>`;后端签发,前端不自己拼。 */\n viewUrl?: string | null\n}\n\n/** 分片上传初始化出参(后端 ChunkInitOutput)。 */\nexport interface ChunkInitOutput {\n /** 秒传命中(同内容哈希已存在,无需再传)。 */\n uploaded: boolean\n /** 秒传命中时的既有文件。 */\n file?: FileUploadOutput | null\n /** 上传会话 Id(= 文件哈希);非秒传时返回。 */\n uploadId?: string | null\n /** 服务端已收到的分片下标(断点续传:跳过已传)。 */\n receivedIndexes: number[]\n}\n\n/** 在线会话行(后端 OnlineSessionItem;只读 + 强退按 sessionId)。int64 收敛为 number。 */\nexport interface OnlineSessionItem {\n sessionId: string\n userId: number\n account: string\n ip?: string | null\n userAgent?: string | null\n loginTime?: string\n expiresAt?: string\n}\n\n/** 登录日志行(后端 SysLoginLog;只读,int64 收敛为 number)。 */\nexport interface SysLoginLog {\n id: number\n account: string\n success: boolean\n resultCode: number\n userId?: number | null\n name?: string | null\n ip?: string | null\n userAgent?: string | null\n createTime: string\n}\n\n/** 操作日志行(后端 SysOpLog;只读,分页项已含全字段,详情抽屉直接用行数据)。 */\nexport interface SysOpLog {\n id: number\n title: string\n httpMethod: string\n path: string\n paramJson?: string | null\n resultCode: number\n success: boolean\n exceptionMessage?: string | null\n elapsedMs: number\n operatorId?: number | null\n operatorName?: string | null\n ip?: string | null\n userAgent?: string | null\n createTime: string\n}\n\n/** 磁盘分区容量(后端 DiskInfo)。 */\nexport interface DiskInfo {\n name: string\n totalBytes: number\n freeBytes: number\n}\n\n/** 服务器运行快照(后端 ServerInfoOutput;进程/主机基础指标)。 */\nexport interface ServerInfoOutput {\n machineName: string\n osDescription: string\n frameworkDescription: string\n processArchitecture: string\n processorCount: number\n processUptimeSeconds: number\n processCpuPercent: number\n processWorkingSetBytes: number\n gcHeapBytes: number\n totalAvailableMemoryBytes: number\n threadCount: number\n disks: DiskInfo[]\n}\n\n/** 异常日志行(后端 SysExceptionLog;未捕获异常留痕,只读,分页项已含全字段)。 */\nexport interface SysExceptionLog {\n id: number\n httpMethod: string\n path: string\n traceId?: string | null\n exceptionType: string\n message?: string | null\n stackTrace?: string | null\n operatorId?: number | null\n operatorName?: string | null\n ip?: string | null\n userAgent?: string | null\n createTime: string\n}\n\n/** 机构行(后端 SysOrg;平铺,前端 buildTree)。int64 收敛为 number。 */\nexport interface SysOrg {\n id: number\n parentId: number\n name: string\n code: string\n category?: string | null\n sort: number\n enabled: boolean\n createTime?: string\n}\n\n/** 机构新增/编辑入参(后端 OrgInput;parentId 0=根,code 编辑禁用)。 */\nexport interface OrgInput {\n parentId: number\n name: string\n code: string\n category?: string | null\n sort: number\n enabled: boolean\n}\n\n/** 职位行(后端 SysPosition)。int64 收敛为 number。 */\nexport interface SysPosition {\n id: number\n name: string\n code: string\n sort: number\n enabled: boolean\n createTime?: string\n}\n\n/** 职位新增/编辑入参(后端 PositionInput;增改同一份字段,code 编辑禁用)。 */\nexport interface PositionInput {\n name: string\n code: string\n sort: number\n enabled: boolean\n}\n\n/** 角色行(后端 SysRole)。int64 收敛为 number。 */\nexport interface SysRole {\n id: number\n name: string\n code: string\n sort: number\n enabled: boolean\n remark?: string | null\n isDelegatable?: boolean | null\n createTime?: string\n}\n\n/** 角色新增/编辑入参(后端 RoleInput;增改同一份字段,code 编辑禁用)。 */\nexport interface RoleInput {\n name: string\n code: string\n sort: number\n enabled: boolean\n remark?: string | null\n isDelegatable?: boolean | null\n}\n\n/** 数据范围类型(后端 DataScopeType;存库为 int,枚举值须与后端一致)。 */\nexport enum DataScopeType {\n All = 1,\n Org = 2,\n OrgAndChildren = 3,\n Self = 4,\n Custom = 5,\n}\n\n/** 角色数据范围配置(后端 SysRoleDataScope;数据范围抽屉回显)。customOrgIds 逗号分隔。 */\nexport interface SysRoleDataScope {\n id: number\n roleId: number\n scopeType: DataScopeType\n customOrgIds: string\n}\n\n/** 新增用户入参(后端 AddUserInput;account 建后不可改,password 留空=系统生成随机强口令)。 */\nexport interface AddUserInput {\n account: string\n password?: string | null\n name: string\n nickname?: string | null\n phone?: string | null\n email?: string | null\n gender?: string | null\n avatar?: string | null\n orgId?: number | null\n positionId?: number | null\n directorId?: number | null\n enabled: boolean\n /** 建号即强制 TOTP。 */\n forceTotp?: boolean\n roleIds: number[]\n}\n\n/** 新增用户出参(后端 AddUserOutput):新 Id + 实际生效的初始口令明文——留空口令时是随机生成的,不展示给管理员就没人知道。 */\nexport interface AddUserOutput {\n id: number\n initialPassword: string\n}\n\n/** 一条可授权路由(后端 PermissionRouteItem);喂菜单表单权限码下拉,code 即写进 SysMenu.Permission 的值。 */\nexport interface PermissionRouteItem {\n code: string\n method: string\n path: string\n}\n\n/** 更新用户入参(后端 UpdateUserInput;无 account/password。roleIds 由 detail 原样带回避免清空)。 */\nexport interface UpdateUserInput {\n name: string\n nickname?: string | null\n phone?: string | null\n email?: string | null\n gender?: string | null\n avatar?: string | null\n orgId?: number | null\n positionId?: number | null\n directorId?: number | null\n enabled: boolean\n forceTotp?: boolean\n roleIds: number[]\n}\n\n/** 用户详情(后端 UserDetail;列表字段 + roleIds,编辑回显用)。 */\nexport interface UserDetail {\n id: number\n account: string\n name: string\n nickname?: string | null\n phone?: string | null\n email?: string | null\n gender?: string | null\n avatar?: string | null\n orgId?: number | null\n positionId?: number | null\n directorId?: number | null\n enabled: boolean\n isSuperAdmin: boolean\n forceTotp?: boolean\n totpEnabled?: boolean\n roleIds: number[]\n createTime?: string\n}\n\n/** 通知类型(后端 NoticeType;存库 int,枚举值须与后端一致)。 */\nexport enum NoticeType {\n Notice = 1,\n Announcement = 2,\n Message = 3,\n}\n\n/** 接收范围(后端 ReceiverType;All=0 对全体广播,Role/User 定向)。 */\nexport enum ReceiverType {\n All = 0,\n Role = 1,\n User = 2,\n}\n\n/**\n * 通知动作(后端 NoticeAction):前端渲染成正文下的按钮。url 以 /api/ 开头是接口调用(按 method 发请求),\n * 其它单个 / 开头的站内路径是页面跳转;协议相对 URL(//host、/\\host)发布时即被拒绝。\n * label 含 `.` 视为 i18n key。comment=true 先弹意见框,把 { comment } 作为请求体带上。\n */\nexport interface NoticeAction {\n label: string\n method: 'GET' | 'POST'\n url: string\n style?: 'primary' | 'default' | 'error' | null\n confirm?: boolean\n comment?: boolean\n}\n\n/** 通知行(后端 SysNotice;管理端列表全字段,int64 收敛为 number)。 */\nexport interface SysNotice {\n id: number\n title: string\n content?: string | null\n type: NoticeType\n createTime?: string\n /** 动作列表原文(JSON 数组);管理端只展示条数 */\n actionsJson?: string | null\n}\n\n/** 我的通知项(后端 NoticeMineItem;含当前用户已读标记)。 */\nexport interface NoticeMineItem {\n id: number\n title: string\n content?: string | null\n type: NoticeType\n publishTime: string\n isRead: boolean\n actions?: NoticeAction[] | null\n}\n\n/** 发布通知入参(后端 NoticePublishInput)。 */\nexport interface NoticePublishInput {\n title: string\n content?: string | null\n type: NoticeType\n /** 接收范围;缺省 All 广播全体。 */\n receiverType: ReceiverType\n /** 接收目标 Id(角色 Id 或用户 Id,取决于 receiverType);All 时忽略。 */\n receiverIds?: number[]\n /** 动作列表(可选,最多 5 条) */\n actions?: NoticeAction[] | null\n}\n\n// ── 导入 / 导出(与后端 Core DTO 对齐) ──\n\n/** 导入列声明。 */\nexport interface ImportColumn {\n key: string\n title: string\n required?: boolean\n dictTypeCode?: string | null\n hint?: string | null\n width?: number\n}\n\n/** 导出列声明(前端选列弹窗用;DefaultSelected 决定默认勾选)。 */\nexport interface ExportColumnDef {\n key: string\n title: string\n defaultSelected?: boolean\n}\n\n/** 单元格级错误:只带码,文案由前端 translateError(code) 渲染。 */\nexport interface CellError {\n columnKey: string\n code: number\n args?: Record<string, unknown> | null\n}\n\n/** 一行导入数据;单元格一律字符串。 */\nexport interface ImportRow {\n index: number\n cells: Record<string, string | null | undefined>\n errors: CellError[]\n}\n\n/** 预览 / 重验结果。 */\nexport interface ImportPreview {\n headers: string[]\n /** 表头文本 → 列 Key */\n mapping: Record<string, string>\n columns: ImportColumn[]\n rows: ImportRow[]\n total: number\n errorRows: number\n columnErrors: CellError[]\n}\n\n/** 重复处理策略(与后端 DuplicateStrategy 一致)。 */\nexport enum DuplicateStrategy {\n Skip = 0,\n Overwrite = 1,\n Error = 2,\n}\n\n/** 提交结果。 */\nexport interface ImportCommitResult {\n total: number\n inserted: number\n updated: number\n skipped: number\n failed: number\n failures: ImportRow[]\n}\n\n// ── 定时任务(与后端 SysJob/SysJobLog/JobInput 对齐) ──\n\n/** 载荷类型(后端 JobHandlerKind;存库 int)。 */\nexport enum JobHandlerKind {\n Compiled = 1,\n Http = 2,\n Sql = 3,\n}\n\n/** 触发类型(后端 JobTriggerKind)。 */\nexport enum JobTriggerKind {\n Cron = 1,\n Interval = 2,\n OneShot = 3,\n}\n\n/** 错过策略(后端 JobMisfireStrategy)。 */\nexport enum JobMisfireStrategy {\n Skip = 1,\n FireOnceNow = 2,\n}\n\n/** 并发模式(后端 JobConcurrencyMode;SerialSkip=上次未结束则跳过本次)。 */\nexport enum JobConcurrencyMode {\n SerialSkip = 1,\n Parallel = 2,\n}\n\n/** 任务状态(后端 JobStatus;无 Running 态——\"正在运行\"由未闭合执行记录推导)。 */\nexport enum JobStatus {\n Ready = 1,\n Paused = 2,\n Completed = 3,\n Panic = 4,\n}\n\n/** 单次执行结果(后端 JobRunStatus)。 */\nexport enum JobRunStatus {\n Running = 1,\n Success = 2,\n Failed = 3,\n Timeout = 4,\n Cancelled = 5,\n Skipped = 6,\n}\n\n/** 触发来源(后端 JobFireMode)。 */\nexport enum JobFireMode {\n Schedule = 1,\n Manual = 2,\n Misfire = 3,\n MissedSkipped = 4,\n}\n\n/** 任务行(后端 SysJob;page 返回整行,编辑表单直接用行数据回填)。 */\nexport interface SysJob {\n id: number\n code: string\n name: string\n handlerKind: JobHandlerKind\n handlerName: string\n /** 属性包 JSON(Dictionary<string,string?> 字符串化;HTTP 的 headers 值读取时已被掩码)。 */\n propsJson?: string | null\n triggerKind: JobTriggerKind\n cronExpression?: string | null\n intervalSeconds?: number | null\n oneShotTime?: string | null\n startTime?: string | null\n endTime?: string | null\n misfireStrategy: JobMisfireStrategy\n concurrencyMode: JobConcurrencyMode\n status: JobStatus\n nextRunTime?: string | null\n lastRunTime?: string | null\n numberOfRuns: number\n numberOfErrors: number\n consecutiveErrors: number\n timeoutSeconds: number\n retryCount: number\n retryIntervalSeconds: number\n failAlertThreshold: number\n alertByNotice: boolean\n alertEmails?: string | null\n isSystem: boolean\n remark?: string | null\n createTime?: string\n}\n\n/** 任务新增/编辑入参(后端 JobInput;code 仅新增时生效,更新被服务层忽略)。 */\nexport interface JobInput {\n code: string\n name: string\n handlerKind: JobHandlerKind\n /** 编译类填处理器标识;HTTP/SQL 由服务端固定填内置处理器名,传空即可。 */\n handlerName: string\n /** 属性包对象(非字符串!后端存成 propsJson;HTTP 的 headers 子键值对序列化成 JSON 字符串放 properties.headers)。 */\n properties?: Record<string, string> | null\n triggerKind: JobTriggerKind\n cronExpression?: string | null\n /** ≥5(<5 后端拒 47004)。 */\n intervalSeconds?: number | null\n oneShotTime?: string | null\n startTime?: string | null\n endTime?: string | null\n misfireStrategy: JobMisfireStrategy\n concurrencyMode: JobConcurrencyMode\n timeoutSeconds: number\n retryCount: number\n retryIntervalSeconds: number\n failAlertThreshold: number\n alertByNotice: boolean\n alertEmails?: string | null\n remark?: string | null\n}\n\n/** 执行记录行(后端 SysJobLog;endTime 为空 = 运行中,同 fireInstanceId 聚合重试)。 */\nexport interface SysJobLog {\n id: number\n jobId: number\n jobName: string\n fireInstanceId: number\n retryIndex: number\n fireMode: JobFireMode\n scheduledTime: string\n startTime: string\n endTime?: string | null\n runStatus: JobRunStatus\n elapsedMs: number\n nodeName: string\n killRequested: boolean\n messageText?: string | null\n errorText?: string | null\n createTime?: string\n}\n\n/** cron 预览结果(后端 CronPreviewOutput)。 */\nexport interface CronPreviewOutput {\n normalized: string\n occurrences: string[]\n /** 秒段等效每秒执行的告警(仅提示,不拦截)。 */\n everySecondWarning: boolean\n}\n\n/** 处理器清单(后端 JobHandlersOutput)。 */\nexport interface JobHandlersOutput {\n /** 已注册的编译类处理器名(IAdminJob.Name)。 */\n handlers: string[]\n /** SQL 载荷总闸(SmartAdmin:Jobs:Sql:Enabled);false 时前端禁选 SQL 并提示。 */\n sqlEnabled: boolean\n}\n\n/** 成败趋势的一天。 */\nexport interface JobTrendPoint {\n date: string\n success: number\n failed: number\n}\n\n/** 即将执行的一项。 */\nexport interface JobUpcomingItem {\n jobId: number\n name: string\n nextRunTime: string\n}\n\n/** 集群节点一行(角色由与锁行比对得出)。 */\nexport interface JobNodeItem {\n nodeName: string\n hostName: string\n isLeader: boolean\n lastHeartbeat: string\n workerId: number\n pid: number\n}\n\n/** 任务监控仪表盘(后端 JobDashboardOutput)。 */\nexport interface JobDashboard {\n todaySuccess: number\n todayFailed: number\n running: number\n totalJobs: number\n /** 按状态的任务数(键 = Ready/Paused/Completed/Panic)。 */\n statusCounts: Record<string, number>\n trend: JobTrendPoint[]\n upcoming: JobUpcomingItem[]\n nodes: JobNodeItem[]\n}\n"],"names":["DataScopeType","NoticeType","ReceiverType","DuplicateStrategy","JobHandlerKind","JobTriggerKind","JobMisfireStrategy","JobConcurrencyMode","JobStatus","JobRunStatus","JobFireMode"],"mappings":"AAqYO,IAAKA,sBAAAA,OACVA,EAAAA,EAAA,MAAM,CAAA,IAAN,OACAA,EAAAA,EAAA,MAAM,CAAA,IAAN,OACAA,EAAAA,EAAA,iBAAiB,CAAA,IAAjB,kBACAA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,SAAS,CAAA,IAAT,UALUA,IAAAA,KAAA,CAAA,CAAA,GAsFAC,sBAAAA,OACVA,EAAAA,EAAA,SAAS,CAAA,IAAT,UACAA,EAAAA,EAAA,eAAe,CAAA,IAAf,gBACAA,EAAAA,EAAA,UAAU,CAAA,IAAV,WAHUA,IAAAA,KAAA,CAAA,CAAA,GAOAC,sBAAAA,OACVA,EAAAA,EAAA,MAAM,CAAA,IAAN,OACAA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,OAAO,CAAA,IAAP,QAHUA,IAAAA,KAAA,CAAA,CAAA,GAqGAC,sBAAAA,OACVA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,YAAY,CAAA,IAAZ,aACAA,EAAAA,EAAA,QAAQ,CAAA,IAAR,SAHUA,IAAAA,KAAA,CAAA,CAAA,GAmBAC,sBAAAA,OACVA,EAAAA,EAAA,WAAW,CAAA,IAAX,YACAA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,MAAM,CAAA,IAAN,OAHUA,IAAAA,KAAA,CAAA,CAAA,GAOAC,sBAAAA,OACVA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,WAAW,CAAA,IAAX,YACAA,EAAAA,EAAA,UAAU,CAAA,IAAV,WAHUA,IAAAA,KAAA,CAAA,CAAA,GAOAC,sBAAAA,OACVA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,cAAc,CAAA,IAAd,eAFUA,IAAAA,KAAA,CAAA,CAAA,GAMAC,sBAAAA,OACVA,EAAAA,EAAA,aAAa,CAAA,IAAb,cACAA,EAAAA,EAAA,WAAW,CAAA,IAAX,YAFUA,IAAAA,KAAA,CAAA,CAAA,GAMAC,sBAAAA,OACVA,EAAAA,EAAA,QAAQ,CAAA,IAAR,SACAA,EAAAA,EAAA,SAAS,CAAA,IAAT,UACAA,EAAAA,EAAA,YAAY,CAAA,IAAZ,aACAA,EAAAA,EAAA,QAAQ,CAAA,IAAR,SAJUA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACVA,EAAAA,EAAA,UAAU,CAAA,IAAV,WACAA,EAAAA,EAAA,UAAU,CAAA,IAAV,WACAA,EAAAA,EAAA,SAAS,CAAA,IAAT,UACAA,EAAAA,EAAA,UAAU,CAAA,IAAV,WACAA,EAAAA,EAAA,YAAY,CAAA,IAAZ,aACAA,EAAAA,EAAA,UAAU,CAAA,IAAV,WANUA,IAAAA,KAAA,CAAA,CAAA,GAUAC,sBAAAA,OACVA,EAAAA,EAAA,WAAW,CAAA,IAAX,YACAA,EAAAA,EAAA,SAAS,CAAA,IAAT,UACAA,EAAAA,EAAA,UAAU,CAAA,IAAV,WACAA,EAAAA,EAAA,gBAAgB,CAAA,IAAhB,iBAJUA,IAAAA,KAAA,CAAA,CAAA;"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** 菜单类型:后端整型枚举。门户菜单树已剥掉 Button(仅 Catalog + Menu 返回)。 */
|
|
2
|
+
export declare enum MenuType {
|
|
3
|
+
Catalog = 1,
|
|
4
|
+
Menu = 2,
|
|
5
|
+
Button = 3
|
|
6
|
+
}
|
|
7
|
+
/** 菜单树节点(后端 MenuNode;无 permission / moduleId 字段——moduleId 仅服务端分区用)。 */
|
|
8
|
+
export interface MenuNode {
|
|
9
|
+
id: number;
|
|
10
|
+
parentId: number;
|
|
11
|
+
type: MenuType;
|
|
12
|
+
title: string;
|
|
13
|
+
path?: string;
|
|
14
|
+
component?: string;
|
|
15
|
+
icon?: string;
|
|
16
|
+
sort: number;
|
|
17
|
+
visible: boolean;
|
|
18
|
+
children: MenuNode[];
|
|
19
|
+
}
|
|
20
|
+
/** 应用/模块(后端 ModuleItem)。 */
|
|
21
|
+
export interface AppModule {
|
|
22
|
+
id: number;
|
|
23
|
+
code: string;
|
|
24
|
+
title: string;
|
|
25
|
+
icon?: string;
|
|
26
|
+
defaultRoute?: string;
|
|
27
|
+
sort: number;
|
|
28
|
+
}
|
|
29
|
+
/** 一颗按钮可挂多条权限码,存储时以它连接(与后端 PermissionCode.Separator 一致)。 */
|
|
30
|
+
export declare const PERMISSION_SEPARATOR = ";";
|
|
31
|
+
/** 把按钮的 permission 字段拆成单条码:去空白、去空项、去重。大小写规范化是服务端保存时的事,前端不重复做。 */
|
|
32
|
+
export declare const splitPermission: (permission: string | null | undefined) => string[];
|
|
33
|
+
/** splitPermission 的逆运算:多选框里的码数组 → 存回 permission 字段。 */
|
|
34
|
+
export declare const joinPermission: (codes: string[]) => string;
|
|
35
|
+
/** 菜单管理端树节点(后端 MenuTreeNode;全字段,含权限码 / 启用 / 所属模块 / 按钮节点)。 */
|
|
36
|
+
export interface MenuTreeNode {
|
|
37
|
+
id: number;
|
|
38
|
+
parentId: number;
|
|
39
|
+
type: MenuType;
|
|
40
|
+
title: string;
|
|
41
|
+
/** 按钮节点的权限码,多条以 ; 连接(用 splitPermission 展开);目录 / 页面恒为空。 */
|
|
42
|
+
permission: string;
|
|
43
|
+
sort: number;
|
|
44
|
+
enabled: boolean;
|
|
45
|
+
moduleId?: number | null;
|
|
46
|
+
path?: string | null;
|
|
47
|
+
component?: string | null;
|
|
48
|
+
icon?: string | null;
|
|
49
|
+
visible: boolean;
|
|
50
|
+
children: MenuTreeNode[];
|
|
51
|
+
}
|
|
52
|
+
/** 菜单新增/编辑入参(后端 MenuInput;moduleId 仅顶级目录有效)。 */
|
|
53
|
+
export interface MenuInput {
|
|
54
|
+
parentId: number;
|
|
55
|
+
type: MenuType;
|
|
56
|
+
title: string;
|
|
57
|
+
permission: string;
|
|
58
|
+
sort: number;
|
|
59
|
+
enabled: boolean;
|
|
60
|
+
moduleId?: number | null;
|
|
61
|
+
path?: string | null;
|
|
62
|
+
component?: string | null;
|
|
63
|
+
icon?: string | null;
|
|
64
|
+
visible: boolean;
|
|
65
|
+
}
|
|
66
|
+
/** 菜单树节点 → 全量入参:菜单页 StatusSwitch 行内改状态与编辑弹窗回显共用(后端无独立启停端点,均走全量 update)。 */
|
|
67
|
+
export declare const toMenuInput: (r: MenuTreeNode) => MenuInput;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var i = /* @__PURE__ */ ((t) => (t[t.Catalog = 1] = "Catalog", t[t.Menu = 2] = "Menu", t[t.Button = 3] = "Button", t))(i || {});
|
|
2
|
+
const n = ";", e = (t) => t ? [
|
|
3
|
+
...new Set(
|
|
4
|
+
t.split(n).map((o) => o.trim()).filter(Boolean)
|
|
5
|
+
)
|
|
6
|
+
] : [], l = (t) => t.map((o) => o.trim()).filter(Boolean).join(n), s = (t) => ({
|
|
7
|
+
parentId: t.parentId,
|
|
8
|
+
type: t.type,
|
|
9
|
+
title: t.title,
|
|
10
|
+
permission: t.permission,
|
|
11
|
+
sort: t.sort,
|
|
12
|
+
enabled: t.enabled,
|
|
13
|
+
moduleId: t.moduleId ?? null,
|
|
14
|
+
path: t.path ?? "",
|
|
15
|
+
component: t.component ?? "",
|
|
16
|
+
icon: t.icon ?? "",
|
|
17
|
+
visible: t.visible
|
|
18
|
+
});
|
|
19
|
+
export {
|
|
20
|
+
i as MenuType,
|
|
21
|
+
n as PERMISSION_SEPARATOR,
|
|
22
|
+
l as joinPermission,
|
|
23
|
+
e as splitPermission,
|
|
24
|
+
s as toMenuInput
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sources":["../../src/types/menu.ts"],"sourcesContent":["// 菜单 / 模块领域类型 —— UI 层与 composables 消费这份干净类型,不直接用 openapi 生成的 verbose 类型。\n// 与后端 MenuNode / ModuleItem DTO 对齐。\n\n/** 菜单类型:后端整型枚举。门户菜单树已剥掉 Button(仅 Catalog + Menu 返回)。 */\nexport enum MenuType {\n Catalog = 1,\n Menu = 2,\n Button = 3,\n}\n\n/** 菜单树节点(后端 MenuNode;无 permission / moduleId 字段——moduleId 仅服务端分区用)。 */\nexport interface MenuNode {\n id: number\n parentId: number\n type: MenuType\n title: string\n path?: string\n component?: string\n icon?: string\n sort: number\n visible: boolean\n children: MenuNode[]\n}\n\n/** 应用/模块(后端 ModuleItem)。 */\nexport interface AppModule {\n id: number\n code: string\n title: string\n icon?: string\n defaultRoute?: string\n sort: number\n}\n\n/** 一颗按钮可挂多条权限码,存储时以它连接(与后端 PermissionCode.Separator 一致)。 */\nexport const PERMISSION_SEPARATOR = ';'\n\n/** 把按钮的 permission 字段拆成单条码:去空白、去空项、去重。大小写规范化是服务端保存时的事,前端不重复做。 */\nexport const splitPermission = (permission: string | null | undefined): string[] => {\n if (!permission) return []\n return [\n ...new Set(\n permission\n .split(PERMISSION_SEPARATOR)\n .map(s => s.trim())\n .filter(Boolean),\n ),\n ]\n}\n\n/** splitPermission 的逆运算:多选框里的码数组 → 存回 permission 字段。 */\nexport const joinPermission = (codes: string[]): string =>\n codes\n .map(s => s.trim())\n .filter(Boolean)\n .join(PERMISSION_SEPARATOR)\n\n/** 菜单管理端树节点(后端 MenuTreeNode;全字段,含权限码 / 启用 / 所属模块 / 按钮节点)。 */\nexport interface MenuTreeNode {\n id: number\n parentId: number\n type: MenuType\n title: string\n /** 按钮节点的权限码,多条以 ; 连接(用 splitPermission 展开);目录 / 页面恒为空。 */\n permission: string\n sort: number\n enabled: boolean\n moduleId?: number | null\n path?: string | null\n component?: string | null\n icon?: string | null\n visible: boolean\n children: MenuTreeNode[]\n}\n\n/** 菜单新增/编辑入参(后端 MenuInput;moduleId 仅顶级目录有效)。 */\nexport interface MenuInput {\n parentId: number\n type: MenuType\n title: string\n permission: string\n sort: number\n enabled: boolean\n moduleId?: number | null\n path?: string | null\n component?: string | null\n icon?: string | null\n visible: boolean\n}\n\n/** 菜单树节点 → 全量入参:菜单页 StatusSwitch 行内改状态与编辑弹窗回显共用(后端无独立启停端点,均走全量 update)。 */\nexport const toMenuInput = (r: MenuTreeNode): MenuInput => ({\n parentId: r.parentId,\n type: r.type,\n title: r.title,\n permission: r.permission,\n sort: r.sort,\n enabled: r.enabled,\n moduleId: r.moduleId ?? null,\n path: r.path ?? '',\n component: r.component ?? '',\n icon: r.icon ?? '',\n visible: r.visible,\n})\n"],"names":["MenuType","PERMISSION_SEPARATOR","splitPermission","permission","s","joinPermission","codes","toMenuInput","r"],"mappings":"AAIO,IAAKA,sBAAAA,OACVA,EAAAA,EAAA,UAAU,CAAA,IAAV,WACAA,EAAAA,EAAA,OAAO,CAAA,IAAP,QACAA,EAAAA,EAAA,SAAS,CAAA,IAAT,UAHUA,IAAAA,KAAA,CAAA,CAAA;AA+BL,MAAMC,IAAuB,KAGvBC,IAAkB,CAACC,MACzBA,IACE;AAAA,EACL,GAAG,IAAI;AAAA,IACLA,EACG,MAAMF,CAAoB,EAC1B,IAAI,CAAAG,MAAKA,EAAE,KAAA,CAAM,EACjB,OAAO,OAAO;AAAA,EAAA;AACnB,IAPsB,CAAA,GAYbC,IAAiB,CAACC,MAC7BA,EACG,IAAI,CAAAF,MAAKA,EAAE,KAAA,CAAM,EACjB,OAAO,OAAO,EACd,KAAKH,CAAoB,GAoCjBM,IAAc,CAACC,OAAgC;AAAA,EAC1D,UAAUA,EAAE;AAAA,EACZ,MAAMA,EAAE;AAAA,EACR,OAAOA,EAAE;AAAA,EACT,YAAYA,EAAE;AAAA,EACd,MAAMA,EAAE;AAAA,EACR,SAASA,EAAE;AAAA,EACX,UAAUA,EAAE,YAAY;AAAA,EACxB,MAAMA,EAAE,QAAQ;AAAA,EAChB,WAAWA,EAAE,aAAa;AAAA,EAC1B,MAAMA,EAAE,QAAQ;AAAA,EAChB,SAASA,EAAE;AACb;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { fileApi as l } from "../api/index.js";
|
|
2
|
+
const d = 5 * 1024 * 1024, k = 3;
|
|
3
|
+
async function M(a) {
|
|
4
|
+
const t = await a.arrayBuffer(), c = await crypto.subtle.digest("SHA-256", t);
|
|
5
|
+
return [...new Uint8Array(c)].map((n) => n.toString(16).padStart(2, "0")).join("");
|
|
6
|
+
}
|
|
7
|
+
async function z(a, t) {
|
|
8
|
+
const c = await M(a), n = Math.max(1, Math.ceil(a.size / d)), e = await l.chunkInit({
|
|
9
|
+
fileHash: c,
|
|
10
|
+
fileName: a.name,
|
|
11
|
+
totalSize: a.size,
|
|
12
|
+
chunkCount: n
|
|
13
|
+
});
|
|
14
|
+
if (e.uploaded && e.file)
|
|
15
|
+
return t == null || t(100), e.file;
|
|
16
|
+
const h = e.uploadId, p = new Set(e.receivedIndexes ?? []), u = [];
|
|
17
|
+
for (let i = 0; i < n; i++) p.has(i) || u.push(i);
|
|
18
|
+
let m = p.size;
|
|
19
|
+
const o = () => t == null ? void 0 : t(Math.min(99, Math.round(m / n * 100)));
|
|
20
|
+
o();
|
|
21
|
+
let f = 0;
|
|
22
|
+
async function w() {
|
|
23
|
+
for (; f < u.length; ) {
|
|
24
|
+
const i = u[f++], C = a.slice(i * d, Math.min((i + 1) * d, a.size));
|
|
25
|
+
await l.chunkUpload(h, i, C), m++, o();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
await Promise.all(Array.from({ length: Math.min(k, u.length) }, w));
|
|
29
|
+
const y = await l.chunkComplete({ uploadId: h, fileHash: c, fileName: a.name, chunkCount: n });
|
|
30
|
+
return t == null || t(100), y;
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
z as uploadChunked
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=chunkUpload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunkUpload.js","sources":["../../src/utils/chunkUpload.ts"],"sourcesContent":["// 分片 / 断点续传上传编排:切片 → 算整文件 SHA-256 → init(秒传/断点)→ 并发传缺失片 → complete。\nimport { fileApi } from '#/api'\nimport type { FileUploadOutput } from '#/types/api'\n\n/** 默认分片大小 5MB。 */\nconst CHUNK_SIZE = 5 * 1024 * 1024\n/** 并发上传的分片数。 */\nconst CONCURRENCY = 3\n\n/**\n * 算整文件 SHA-256(hex,小写),与后端合并后重算比对。\n * ponytail: 一次性读入内存做全量 hash,正确优先;超大文件想省内存可改分块 + WASM 流式 hash(需引库),当前不引依赖。\n */\nasync function sha256Hex(file: File): Promise<string> {\n const buf = await file.arrayBuffer()\n const digest = await crypto.subtle.digest('SHA-256', buf)\n return [...new Uint8Array(digest)].map(b => b.toString(16).padStart(2, '0')).join('')\n}\n\n/**\n * 分片上传一个文件,返回文件记录。\n * @param onProgress 进度回调(0–100)。秒传直接 100;否则按已传分片比例(留末段给 complete)。\n */\nexport async function uploadChunked(\n file: File,\n onProgress?: (percent: number) => void,\n): Promise<FileUploadOutput> {\n const fileHash = await sha256Hex(file)\n const chunkCount = Math.max(1, Math.ceil(file.size / CHUNK_SIZE))\n\n const init = await fileApi.chunkInit({\n fileHash,\n fileName: file.name,\n totalSize: file.size,\n chunkCount,\n })\n if (init.uploaded && init.file) {\n onProgress?.(100)\n return init.file // 秒传命中\n }\n const uploadId = init.uploadId!\n const done = new Set(init.receivedIndexes ?? [])\n\n // 待传分片下标(跳过断点续传已收的)\n const pending: number[] = []\n for (let i = 0; i < chunkCount; i++) if (!done.has(i)) pending.push(i)\n\n let uploaded = done.size\n const report = () => onProgress?.(Math.min(99, Math.round((uploaded / chunkCount) * 100)))\n report()\n\n // 限并发的 worker 池:共享游标,各自领片上传\n let cursor = 0\n async function worker() {\n while (cursor < pending.length) {\n const i = pending[cursor++]\n const blob = file.slice(i * CHUNK_SIZE, Math.min((i + 1) * CHUNK_SIZE, file.size))\n await fileApi.chunkUpload(uploadId, i, blob)\n uploaded++\n report()\n }\n }\n await Promise.all(Array.from({ length: Math.min(CONCURRENCY, pending.length) }, worker))\n\n const out = await fileApi.chunkComplete({ uploadId, fileHash, fileName: file.name, chunkCount })\n onProgress?.(100)\n return out\n}\n"],"names":["CHUNK_SIZE","CONCURRENCY","sha256Hex","file","buf","digest","b","uploadChunked","onProgress","fileHash","chunkCount","init","fileApi","uploadId","done","pending","uploaded","report","cursor","worker","blob","out"],"mappings":";AAKA,MAAMA,IAAa,IAAI,OAAO,MAExBC,IAAc;AAMpB,eAAeC,EAAUC,GAA6B;AACpD,QAAMC,IAAM,MAAMD,EAAK,YAAA,GACjBE,IAAS,MAAM,OAAO,OAAO,OAAO,WAAWD,CAAG;AACxD,SAAO,CAAC,GAAG,IAAI,WAAWC,CAAM,CAAC,EAAE,IAAI,CAAAC,MAAKA,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AACtF;AAMA,eAAsBC,EACpBJ,GACAK,GAC2B;AAC3B,QAAMC,IAAW,MAAMP,EAAUC,CAAI,GAC/BO,IAAa,KAAK,IAAI,GAAG,KAAK,KAAKP,EAAK,OAAOH,CAAU,CAAC,GAE1DW,IAAO,MAAMC,EAAQ,UAAU;AAAA,IACnC,UAAAH;AAAA,IACA,UAAUN,EAAK;AAAA,IACf,WAAWA,EAAK;AAAA,IAChB,YAAAO;AAAA,EAAA,CACD;AACD,MAAIC,EAAK,YAAYA,EAAK;AACxB,WAAAH,KAAA,QAAAA,EAAa,MACNG,EAAK;AAEd,QAAME,IAAWF,EAAK,UAChBG,IAAO,IAAI,IAAIH,EAAK,mBAAmB,CAAA,CAAE,GAGzCI,IAAoB,CAAA;AAC1B,WAAS,IAAI,GAAG,IAAIL,GAAY,IAAK,CAAKI,EAAK,IAAI,CAAC,KAAGC,EAAQ,KAAK,CAAC;AAErE,MAAIC,IAAWF,EAAK;AACpB,QAAMG,IAAS,MAAMT,KAAA,gBAAAA,EAAa,KAAK,IAAI,IAAI,KAAK,MAAOQ,IAAWN,IAAc,GAAG,CAAC;AACxF,EAAAO,EAAA;AAGA,MAAIC,IAAS;AACb,iBAAeC,IAAS;AACtB,WAAOD,IAASH,EAAQ,UAAQ;AAC9B,YAAM,IAAIA,EAAQG,GAAQ,GACpBE,IAAOjB,EAAK,MAAM,IAAIH,GAAY,KAAK,KAAK,IAAI,KAAKA,GAAYG,EAAK,IAAI,CAAC;AACjF,YAAMS,EAAQ,YAAYC,GAAU,GAAGO,CAAI,GAC3CJ,KACAC,EAAA;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IAAI,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAIhB,GAAac,EAAQ,MAAM,EAAA,GAAKI,CAAM,CAAC;AAEvF,QAAME,IAAM,MAAMT,EAAQ,cAAc,EAAE,UAAAC,GAAU,UAAAJ,GAAU,UAAUN,EAAK,MAAM,YAAAO,EAAA,CAAY;AAC/F,SAAAF,KAAA,QAAAA,EAAa,MACNa;AACT;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 触发浏览器下载 blob:`createObjectURL` → 临时 `<a download>` 点击 → **移除并释放 URL**。
|
|
3
|
+
*
|
|
4
|
+
* 抽出来是为了能单测这一步 —— 它的两种错法都是**静默**的:漏 `revokeObjectURL` 会内存泄漏,
|
|
5
|
+
* 漏 `download` 名会拿 blob URL 的末段当文件名(存成一串 uuid)。两者都不报错、不影响构建,
|
|
6
|
+
* 也不会被 `typecheck` / `lint` / `build` 照出来。
|
|
7
|
+
*/
|
|
8
|
+
export declare function triggerBlobDownload(blob: Blob, filename: string): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
function n(t, c) {
|
|
2
|
+
const o = URL.createObjectURL(t), e = document.createElement("a");
|
|
3
|
+
e.href = o, e.download = c, document.body.appendChild(e), e.click(), e.remove(), URL.revokeObjectURL(o);
|
|
4
|
+
}
|
|
5
|
+
export {
|
|
6
|
+
n as triggerBlobDownload
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sources":["../../src/utils/download.ts"],"sourcesContent":["/**\n * 触发浏览器下载 blob:`createObjectURL` → 临时 `<a download>` 点击 → **移除并释放 URL**。\n *\n * 抽出来是为了能单测这一步 —— 它的两种错法都是**静默**的:漏 `revokeObjectURL` 会内存泄漏,\n * 漏 `download` 名会拿 blob URL 的末段当文件名(存成一串 uuid)。两者都不报错、不影响构建,\n * 也不会被 `typecheck` / `lint` / `build` 照出来。\n */\nexport function triggerBlobDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = filename\n document.body.appendChild(a)\n a.click()\n a.remove()\n URL.revokeObjectURL(url)\n}\n"],"names":["triggerBlobDownload","blob","filename","url","a"],"mappings":"AAOO,SAASA,EAAoBC,GAAYC,GAAwB;AACtE,QAAMC,IAAM,IAAI,gBAAgBF,CAAI,GAC9BG,IAAI,SAAS,cAAc,GAAG;AACpC,EAAAA,EAAE,OAAOD,GACTC,EAAE,WAAWF,GACb,SAAS,KAAK,YAAYE,CAAC,GAC3BA,EAAE,MAAA,GACFA,EAAE,OAAA,GACF,IAAI,gBAAgBD,CAAG;AACzB;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 把任意错误翻成用户可读文案:
|
|
3
|
+
* - 数字 ErrorCode(CellError.code) → 按码查 i18n
|
|
4
|
+
* - 超时 / 主动取消 → 专门文案(否则用户看到浏览器的英文原话)
|
|
5
|
+
* - ApiError.msgKey 命中 i18n → 本地化文案;否则退回 message;再退回通用兜底。
|
|
6
|
+
* 纯函数,不依赖 Naive —— 视图拿到字符串后自行 useMessage 弹出。
|
|
7
|
+
*/
|
|
8
|
+
export declare function translateError(err: unknown): string;
|
|
9
|
+
/**
|
|
10
|
+
* 同 translateError,但后端在 AdminException 上附了明细(`new AdminException(code, null, "…")`)时优先显示明细。
|
|
11
|
+
* 对接外部系统、批量导入这类场景,对端原话 / 重复项清单比一句泛化的 i18n 文案更有用。
|
|
12
|
+
* 判据:AdminExceptionFilter 无明细时把 Message 置成 msgKey,所以 message !== msgKey 即为明细。
|
|
13
|
+
*/
|
|
14
|
+
export declare function translateErrorDetail(err: unknown): string;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { t as o, i18n as i } from "../locales/index.js";
|
|
2
|
+
import { ApiError as m } from "../api/index.js";
|
|
3
|
+
const e = {
|
|
4
|
+
41002: "error.perm.demoReadOnly",
|
|
5
|
+
44001: "error.file.empty",
|
|
6
|
+
44002: "error.file.tooLarge",
|
|
7
|
+
44003: "error.file.extNotAllowed",
|
|
8
|
+
46001: "error.excel.providerMissing",
|
|
9
|
+
46002: "error.import.fileEmpty",
|
|
10
|
+
46003: "error.import.rowLimitExceeded",
|
|
11
|
+
46004: "error.import.columnMissing",
|
|
12
|
+
46005: "error.import.cellRequired",
|
|
13
|
+
46006: "error.import.cellDictInvalid",
|
|
14
|
+
46007: "error.import.cellRefNotFound",
|
|
15
|
+
46008: "error.import.cellFormatInvalid",
|
|
16
|
+
46009: "error.import.duplicateInFile",
|
|
17
|
+
46010: "error.import.duplicateInDb",
|
|
18
|
+
46011: "error.import.orgOutOfScope",
|
|
19
|
+
46012: "error.export.tooManyRows",
|
|
20
|
+
46013: "error.export.columnInvalid"
|
|
21
|
+
};
|
|
22
|
+
function a(r) {
|
|
23
|
+
if (r instanceof Error) {
|
|
24
|
+
if (r.name === "TimeoutError") return "error.network.timeout";
|
|
25
|
+
if (r.name === "AbortError") return "error.network.aborted";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function l(r) {
|
|
29
|
+
const n = a(r);
|
|
30
|
+
if (n) return o(n);
|
|
31
|
+
if (typeof r == "number") {
|
|
32
|
+
const t = e[r];
|
|
33
|
+
return t && i.global.te(t) ? o(t) : o("error._fallback");
|
|
34
|
+
}
|
|
35
|
+
if (r instanceof m) {
|
|
36
|
+
if (r.msgKey && i.global.te(r.msgKey)) return o(r.msgKey, r.args ?? {});
|
|
37
|
+
if (!r.msgKey && e[r.code] && i.global.te(e[r.code]))
|
|
38
|
+
return o(e[r.code], r.args ?? {});
|
|
39
|
+
if (r.message) return r.message;
|
|
40
|
+
}
|
|
41
|
+
return r instanceof Error && r.message ? r.message : o("error._fallback");
|
|
42
|
+
}
|
|
43
|
+
function c(r) {
|
|
44
|
+
return r instanceof m && r.message && r.msgKey && r.message !== r.msgKey ? r.message : l(r);
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
l as translateError,
|
|
48
|
+
c as translateErrorDetail
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.js","sources":["../../src/utils/error.ts"],"sourcesContent":["import { i18n, t } from '#/locales'\nimport { ApiError } from '#/api'\n\n/**\n * 数值 ErrorCode → msgKey(镜像后端 [MsgKey];CellError 只带码不带文案)。\n * 只列导入预览会在单元格/列错误里出现的码 + 常见下载失败码;其余走兜底。\n */\nconst CODE_MSG_KEY: Record<number, string> = {\n 41002: 'error.perm.demoReadOnly',\n 44001: 'error.file.empty',\n 44002: 'error.file.tooLarge',\n 44003: 'error.file.extNotAllowed',\n 46001: 'error.excel.providerMissing',\n 46002: 'error.import.fileEmpty',\n 46003: 'error.import.rowLimitExceeded',\n 46004: 'error.import.columnMissing',\n 46005: 'error.import.cellRequired',\n 46006: 'error.import.cellDictInvalid',\n 46007: 'error.import.cellRefNotFound',\n 46008: 'error.import.cellFormatInvalid',\n 46009: 'error.import.duplicateInFile',\n 46010: 'error.import.duplicateInDb',\n 46011: 'error.import.orgOutOfScope',\n 46012: 'error.export.tooManyRows',\n 46013: 'error.export.columnInvalid',\n}\n\n/**\n * 请求被中止:超时闸(client.ts 的 timeoutMiddleware)抛 TimeoutError,主动取消抛 AbortError。\n * 二者都是 DOMException,原始 message 是浏览器的英文原话,不能直接给用户看。\n */\nfunction abortMsgKey(err: unknown): string | undefined {\n if (!(err instanceof Error)) return undefined\n if (err.name === 'TimeoutError') return 'error.network.timeout'\n if (err.name === 'AbortError') return 'error.network.aborted'\n return undefined\n}\n\n/**\n * 把任意错误翻成用户可读文案:\n * - 数字 ErrorCode(CellError.code) → 按码查 i18n\n * - 超时 / 主动取消 → 专门文案(否则用户看到浏览器的英文原话)\n * - ApiError.msgKey 命中 i18n → 本地化文案;否则退回 message;再退回通用兜底。\n * 纯函数,不依赖 Naive —— 视图拿到字符串后自行 useMessage 弹出。\n */\nexport function translateError(err: unknown): string {\n const abortKey = abortMsgKey(err)\n if (abortKey) return t(abortKey)\n if (typeof err === 'number') {\n const key = CODE_MSG_KEY[err]\n if (key && i18n.global.te(key)) return t(key)\n return t('error._fallback')\n }\n if (err instanceof ApiError) {\n // args 必须带上:后端 AdminException 的 args 就是文案占位符的实参(如 {max}),\n // 丢了它界面上会显示占位符原文,最该看到的那个数反而没了。无占位符的文案传 args 无害。\n if (err.msgKey && i18n.global.te(err.msgKey)) return t(err.msgKey, err.args ?? {})\n // 无 msgKey 时用数字码兜底(下载失败信封偶发只有 code)\n if (!err.msgKey && CODE_MSG_KEY[err.code] && i18n.global.te(CODE_MSG_KEY[err.code])) {\n return t(CODE_MSG_KEY[err.code], err.args ?? {})\n }\n if (err.message) return err.message\n }\n if (err instanceof Error && err.message) return err.message\n return t('error._fallback')\n}\n\n/**\n * 同 translateError,但后端在 AdminException 上附了明细(`new AdminException(code, null, \"…\")`)时优先显示明细。\n * 对接外部系统、批量导入这类场景,对端原话 / 重复项清单比一句泛化的 i18n 文案更有用。\n * 判据:AdminExceptionFilter 无明细时把 Message 置成 msgKey,所以 message !== msgKey 即为明细。\n */\nexport function translateErrorDetail(err: unknown): string {\n if (err instanceof ApiError && err.message && err.msgKey && err.message !== err.msgKey) {\n return err.message\n }\n return translateError(err)\n}\n"],"names":["CODE_MSG_KEY","abortMsgKey","err","translateError","abortKey","t","key","i18n","ApiError","translateErrorDetail"],"mappings":";;AAOA,MAAMA,IAAuC;AAAA,EAC3C,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT;AAMA,SAASC,EAAYC,GAAkC;AACrD,MAAMA,aAAe,OACrB;AAAA,QAAIA,EAAI,SAAS,eAAgB,QAAO;AACxC,QAAIA,EAAI,SAAS,aAAc,QAAO;AAAA;AAExC;AASO,SAASC,EAAeD,GAAsB;AACnD,QAAME,IAAWH,EAAYC,CAAG;AAChC,MAAIE,EAAU,QAAOC,EAAED,CAAQ;AAC/B,MAAI,OAAOF,KAAQ,UAAU;AAC3B,UAAMI,IAAMN,EAAaE,CAAG;AAC5B,WAAII,KAAOC,EAAK,OAAO,GAAGD,CAAG,IAAUD,EAAEC,CAAG,IACrCD,EAAE,iBAAiB;AAAA,EAC5B;AACA,MAAIH,aAAeM,GAAU;AAG3B,QAAIN,EAAI,UAAUK,EAAK,OAAO,GAAGL,EAAI,MAAM,EAAG,QAAOG,EAAEH,EAAI,QAAQA,EAAI,QAAQ,CAAA,CAAE;AAEjF,QAAI,CAACA,EAAI,UAAUF,EAAaE,EAAI,IAAI,KAAKK,EAAK,OAAO,GAAGP,EAAaE,EAAI,IAAI,CAAC;AAChF,aAAOG,EAAEL,EAAaE,EAAI,IAAI,GAAGA,EAAI,QAAQ,EAAE;AAEjD,QAAIA,EAAI,QAAS,QAAOA,EAAI;AAAA,EAC9B;AACA,SAAIA,aAAe,SAASA,EAAI,UAAgBA,EAAI,UAC7CG,EAAE,iBAAiB;AAC5B;AAOO,SAASI,EAAqBP,GAAsB;AACzD,SAAIA,aAAeM,KAAYN,EAAI,WAAWA,EAAI,UAAUA,EAAI,YAAYA,EAAI,SACvEA,EAAI,UAENC,EAAeD,CAAG;AAC3B;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 后端时间串 → 展示文本。
|
|
3
|
+
*
|
|
4
|
+
* 后端下发的是**服务器本地时区**的 ISO 串(无 Z),所以只做截断,不走 `new Date()` ——
|
|
5
|
+
* 一旦交给 Date 解析再本地化,浏览器会把它当 UTC,时区不同的客户端整体偏移几小时。
|
|
6
|
+
*
|
|
7
|
+
* @param seconds 到秒(默认)还是到分。
|
|
8
|
+
* @param empty 空值占位,列表里通常给 '—',内联文本给 ''。
|
|
9
|
+
*/
|
|
10
|
+
export declare function fmtDateTime(value?: string | null, { seconds, empty }?: {
|
|
11
|
+
seconds?: boolean;
|
|
12
|
+
empty?: string;
|
|
13
|
+
}): string;
|
|
14
|
+
/** 字节 → 人类可读(二进制单位)。B 不带小数,其余两位。 */
|
|
15
|
+
export declare function fmtBytes(n?: number | null): string;
|
|
16
|
+
/** 日志类记录的操作人:姓名优先,只留下 Id 时退回 Id(日志只存 Id,姓名是读取时回填的)。 */
|
|
17
|
+
export declare function operatorText(row: {
|
|
18
|
+
operatorName?: string | null;
|
|
19
|
+
operatorId?: number | null;
|
|
20
|
+
}, empty?: string): string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function i(t, { seconds: r = !0, empty: n = "" } = {}) {
|
|
2
|
+
const e = (t ?? "").trim();
|
|
3
|
+
return e ? e.slice(0, r ? 19 : 16).replace("T", " ") : n;
|
|
4
|
+
}
|
|
5
|
+
const o = ["B", "KB", "MB", "GB", "TB"];
|
|
6
|
+
function a(t) {
|
|
7
|
+
if (!t || t <= 0) return "0 B";
|
|
8
|
+
const r = Math.min(Math.floor(Math.log(t) / Math.log(1024)), o.length - 1);
|
|
9
|
+
return `${(t / 1024 ** r).toFixed(r === 0 ? 0 : 2)} ${o[r]}`;
|
|
10
|
+
}
|
|
11
|
+
function u(t, r = "—") {
|
|
12
|
+
return t.operatorName || (t.operatorId != null ? String(t.operatorId) : r);
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
a as fmtBytes,
|
|
16
|
+
i as fmtDateTime,
|
|
17
|
+
u as operatorText
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sources":["../../src/utils/format.ts"],"sourcesContent":["// 全站共用的展示格式化,统一到这里 —— 时间截断、字节格式化这类逻辑散在各视图里各自实现,\n// 容易抄出不一致的口径(如文件页 1 位小数、监控页 2 位),同一个数在两页显示会不一样。\n\n/**\n * 后端时间串 → 展示文本。\n *\n * 后端下发的是**服务器本地时区**的 ISO 串(无 Z),所以只做截断,不走 `new Date()` ——\n * 一旦交给 Date 解析再本地化,浏览器会把它当 UTC,时区不同的客户端整体偏移几小时。\n *\n * @param seconds 到秒(默认)还是到分。\n * @param empty 空值占位,列表里通常给 '—',内联文本给 ''。\n */\nexport function fmtDateTime(\n value?: string | null,\n { seconds = true, empty = '' }: { seconds?: boolean; empty?: string } = {},\n): string {\n const s = (value ?? '').trim()\n if (!s) return empty\n return s.slice(0, seconds ? 19 : 16).replace('T', ' ')\n}\n\nconst BYTE_UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const\n\n/** 字节 → 人类可读(二进制单位)。B 不带小数,其余两位。 */\nexport function fmtBytes(n?: number | null): string {\n if (!n || n <= 0) return '0 B'\n const i = Math.min(Math.floor(Math.log(n) / Math.log(1024)), BYTE_UNITS.length - 1)\n return `${(n / 1024 ** i).toFixed(i === 0 ? 0 : 2)} ${BYTE_UNITS[i]}`\n}\n\n/** 日志类记录的操作人:姓名优先,只留下 Id 时退回 Id(日志只存 Id,姓名是读取时回填的)。 */\nexport function operatorText(\n row: { operatorName?: string | null; operatorId?: number | null },\n empty = '—',\n): string {\n return row.operatorName || (row.operatorId != null ? String(row.operatorId) : empty)\n}\n"],"names":["fmtDateTime","value","seconds","empty","s","BYTE_UNITS","fmtBytes","n","i","operatorText","row"],"mappings":"AAYO,SAASA,EACdC,GACA,EAAE,SAAAC,IAAU,IAAM,OAAAC,IAAQ,GAAA,IAA8C,IAChE;AACR,QAAMC,KAAKH,KAAS,IAAI,KAAA;AACxB,SAAKG,IACEA,EAAE,MAAM,GAAGF,IAAU,KAAK,EAAE,EAAE,QAAQ,KAAK,GAAG,IADtCC;AAEjB;AAEA,MAAME,IAAa,CAAC,KAAK,MAAM,MAAM,MAAM,IAAI;AAGxC,SAASC,EAASC,GAA2B;AAClD,MAAI,CAACA,KAAKA,KAAK,EAAG,QAAO;AACzB,QAAMC,IAAI,KAAK,IAAI,KAAK,MAAM,KAAK,IAAID,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAGF,EAAW,SAAS,CAAC;AAClF,SAAO,IAAIE,IAAI,QAAQC,GAAG,QAAQA,MAAM,IAAI,IAAI,CAAC,CAAC,IAAIH,EAAWG,CAAC,CAAC;AACrE;AAGO,SAASC,EACdC,GACAP,IAAQ,KACA;AACR,SAAOO,EAAI,iBAAiBA,EAAI,cAAc,OAAO,OAAOA,EAAI,UAAU,IAAIP;AAChF;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DuplicateStrategy, CellError, ImportRow } from '../types/api';
|
|
2
|
+
/**
|
|
3
|
+
* 46010「库里已存在」。
|
|
4
|
+
*
|
|
5
|
+
* 它**不是硬错误**:后端 `ImportRunner.CommitAsync` 把它排除在 hardErrors 之外,再按重复策略分流
|
|
6
|
+
* (Skip 跳过 / Overwrite 更新 / Error 才算失败)。所以只有 Error 策略下它才该按错误呈现 ——
|
|
7
|
+
* 其余两种策略下,一批完全会被正常处理的行如果满屏标红,用户会以为必须逐格改完才能提交。
|
|
8
|
+
*
|
|
9
|
+
* 这里镜像的是后端那一行判定,后端改了这里要跟着改(与 `utils/error.ts` 的 CODE_MSG_KEY 同款镜像债)。
|
|
10
|
+
*/
|
|
11
|
+
export declare const IMPORT_DUPLICATE_IN_DB = 46010;
|
|
12
|
+
/** 该单元格错误是否需要用户动手改。 */
|
|
13
|
+
export declare function isHardError(e: CellError, strategy: DuplicateStrategy): boolean;
|
|
14
|
+
/** 该行里需要用户动手改的错误(不含按策略自动处理的「已存在」)。 */
|
|
15
|
+
export declare function hardErrorsOf(row: ImportRow, strategy: DuplicateStrategy): CellError[];
|
|
16
|
+
/** 该行只是「已存在」——会被策略正常跳过/更新,不需要改。 */
|
|
17
|
+
export declare function isDuplicateOnly(row: ImportRow, strategy: DuplicateStrategy): boolean;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DuplicateStrategy as n } from "../types/api.js";
|
|
2
|
+
const o = 46010;
|
|
3
|
+
function i(r, t) {
|
|
4
|
+
return r.code !== o || t === n.Error;
|
|
5
|
+
}
|
|
6
|
+
function c(r, t) {
|
|
7
|
+
return r.errors.filter((e) => i(e, t));
|
|
8
|
+
}
|
|
9
|
+
function s(r, t) {
|
|
10
|
+
return c(r, t).length === 0 && r.errors.some((e) => e.code === o);
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
o as IMPORT_DUPLICATE_IN_DB,
|
|
14
|
+
c as hardErrorsOf,
|
|
15
|
+
s as isDuplicateOnly,
|
|
16
|
+
i as isHardError
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=importDup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importDup.js","sources":["../../src/utils/importDup.ts"],"sourcesContent":["import { DuplicateStrategy, type CellError, type ImportRow } from '#/types/api'\n\n/**\n * 46010「库里已存在」。\n *\n * 它**不是硬错误**:后端 `ImportRunner.CommitAsync` 把它排除在 hardErrors 之外,再按重复策略分流\n * (Skip 跳过 / Overwrite 更新 / Error 才算失败)。所以只有 Error 策略下它才该按错误呈现 ——\n * 其余两种策略下,一批完全会被正常处理的行如果满屏标红,用户会以为必须逐格改完才能提交。\n *\n * 这里镜像的是后端那一行判定,后端改了这里要跟着改(与 `utils/error.ts` 的 CODE_MSG_KEY 同款镜像债)。\n */\nexport const IMPORT_DUPLICATE_IN_DB = 46010\n\n/** 该单元格错误是否需要用户动手改。 */\nexport function isHardError(e: CellError, strategy: DuplicateStrategy): boolean {\n return e.code !== IMPORT_DUPLICATE_IN_DB || strategy === DuplicateStrategy.Error\n}\n\n/** 该行里需要用户动手改的错误(不含按策略自动处理的「已存在」)。 */\nexport function hardErrorsOf(row: ImportRow, strategy: DuplicateStrategy): CellError[] {\n return row.errors.filter(e => isHardError(e, strategy))\n}\n\n/** 该行只是「已存在」——会被策略正常跳过/更新,不需要改。 */\nexport function isDuplicateOnly(row: ImportRow, strategy: DuplicateStrategy): boolean {\n return (\n hardErrorsOf(row, strategy).length === 0 &&\n row.errors.some(e => e.code === IMPORT_DUPLICATE_IN_DB)\n )\n}\n"],"names":["IMPORT_DUPLICATE_IN_DB","isHardError","e","strategy","DuplicateStrategy","hardErrorsOf","row","isDuplicateOnly"],"mappings":";AAWO,MAAMA,IAAyB;AAG/B,SAASC,EAAYC,GAAcC,GAAsC;AAC9E,SAAOD,EAAE,SAASF,KAA0BG,MAAaC,EAAkB;AAC7E;AAGO,SAASC,EAAaC,GAAgBH,GAA0C;AACrF,SAAOG,EAAI,OAAO,OAAO,OAAKL,EAAY,GAAGE,CAAQ,CAAC;AACxD;AAGO,SAASI,EAAgBD,GAAgBH,GAAsC;AACpF,SACEE,EAAaC,GAAKH,CAAQ,EAAE,WAAW,KACvCG,EAAI,OAAO,KAAK,CAAA,MAAK,EAAE,SAASN,CAAsB;AAE1D;"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** 登录页最多平铺的品牌圆钮数;超出进「…」菜单。 */
|
|
2
|
+
export declare const SSO_VISIBLE_MAX = 4;
|
|
3
|
+
/** 预置精修品牌标的 provider code(大小写不敏感)。 */
|
|
4
|
+
export declare const BRAND_CODES: readonly ["github", "wechat", "wecom", "dingtalk", "gitee", "qq"];
|
|
5
|
+
export type BrandCode = (typeof BRAND_CODES)[number];
|
|
6
|
+
/**
|
|
7
|
+
* 登录页临时展示全部品牌圆标(图标验收用)。
|
|
8
|
+
* true:铺全 6 个,不做 N=4 溢出;false:恢复仅后端 enabled providers。
|
|
9
|
+
* 图标验收时在本地把 false 改成 true,验收完改回来,不要带着 true 提交。
|
|
10
|
+
*/
|
|
11
|
+
export declare const PREVIEW_ALL_SSO_BRANDS = false;
|
|
12
|
+
/**
|
|
13
|
+
* 内置品牌显示名。走 i18n 而非硬编码中文常量表 —— 硬编码在英文界面下会露出「微信/企业微信/钉钉」。
|
|
14
|
+
* 调用方须在 computed 里取值,切语言才会重算。
|
|
15
|
+
*/
|
|
16
|
+
export declare function brandDisplayName(code: BrandCode): string;
|
|
17
|
+
/** 图标预览用的假 provider 列表(与后端是否启用无关)。 */
|
|
18
|
+
export declare function previewAllBrandProviders(): SsoProviderLike[];
|
|
19
|
+
/**
|
|
20
|
+
* 配置页卡片上给出「按账号自动关联」开关的 provider。只有企业微信的外部标识是企业统一分配的账号(userid),
|
|
21
|
+
* 钉钉 / 微信 / GitHub 的标识是 unionid 或数字 id,按账号名对不上本地账号;
|
|
22
|
+
* 自定义 provider 真要开(如 sub 就是工号的 OIDC),到「其他配置」加 sys.externalauth.{code}.linkByAccount。
|
|
23
|
+
*/
|
|
24
|
+
export declare const LINK_BY_ACCOUNT_CODES: readonly string[];
|
|
25
|
+
/** 配置页一行:内置品牌全展示;registered=后端已装包/已配密钥。 */
|
|
26
|
+
export type ConfigProviderRow = {
|
|
27
|
+
code: string;
|
|
28
|
+
displayName: string;
|
|
29
|
+
icon?: string | null;
|
|
30
|
+
registered: boolean;
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
/** 未绑定的外部身份按账号名关联同名本地账号(sys.externalauth.{code}.linkByAccount) */
|
|
33
|
+
linkByAccount: boolean;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* 配置页列表 = 预置品牌(全量) + 其它已注册 code(如 oidc-demo)。
|
|
37
|
+
* 未注册项 registered=false、两个开关强制 false(未部署的方式开了也没用)。
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildConfigProviderRows(registered: readonly {
|
|
40
|
+
code: string;
|
|
41
|
+
displayName: string;
|
|
42
|
+
icon?: string | null;
|
|
43
|
+
enabled: boolean;
|
|
44
|
+
linkByAccount?: boolean;
|
|
45
|
+
}[]): ConfigProviderRow[];
|
|
46
|
+
export type SsoProviderLike = {
|
|
47
|
+
code: string;
|
|
48
|
+
displayName: string;
|
|
49
|
+
icon?: string | null;
|
|
50
|
+
};
|
|
51
|
+
export type BindingLike = {
|
|
52
|
+
provider: string;
|
|
53
|
+
displayName?: string | null;
|
|
54
|
+
boundAt: string;
|
|
55
|
+
};
|
|
56
|
+
export type IconResolve = {
|
|
57
|
+
kind: 'brand';
|
|
58
|
+
code: BrandCode;
|
|
59
|
+
} | {
|
|
60
|
+
kind: 'iconify';
|
|
61
|
+
name: string;
|
|
62
|
+
} | {
|
|
63
|
+
kind: 'letter';
|
|
64
|
+
letter: string;
|
|
65
|
+
};
|
|
66
|
+
export type BindingRow = {
|
|
67
|
+
code: string;
|
|
68
|
+
displayName: string;
|
|
69
|
+
icon?: string | null;
|
|
70
|
+
/** false = 运营已关但仍有绑定 */
|
|
71
|
+
enabled: boolean;
|
|
72
|
+
binding?: BindingLike;
|
|
73
|
+
};
|
|
74
|
+
/** 是否为可渲染的 Iconify 名称;拒绝 URL / data URI。 */
|
|
75
|
+
export declare function isIconifyName(icon: string | null | undefined): boolean;
|
|
76
|
+
export declare function isBrandCode(code: string | null | undefined): code is BrandCode;
|
|
77
|
+
/** brand map → Iconify 名 → 首字母。 */
|
|
78
|
+
export declare function resolveProviderIcon(code: string, icon?: string | null): IconResolve;
|
|
79
|
+
/**
|
|
80
|
+
* 在企业微信客户端里打开登录页时,是否直接发起企业微信登录(客户端内走网页授权,静默、不用点)。
|
|
81
|
+
* 企业微信的 UA 带 wxwork(同时也带微信的 MicroMessenger,不能拿它判断)。
|
|
82
|
+
* 每个浏览器会话只返回一次 true:登录失败或主动退出后再回到登录页就停下,让人自己选登录方式,不会来回跳。
|
|
83
|
+
*/
|
|
84
|
+
export declare function claimWeComAutoLogin(opts: {
|
|
85
|
+
userAgent: string;
|
|
86
|
+
providers: readonly {
|
|
87
|
+
code: string;
|
|
88
|
+
}[];
|
|
89
|
+
storage: Pick<Storage, 'getItem' | 'setItem'>;
|
|
90
|
+
}): boolean;
|
|
91
|
+
/** 严格保序切分:前 max 平铺,其余进溢出。 */
|
|
92
|
+
export declare function splitLoginProviders<T>(providers: readonly T[], maxVisible?: number): {
|
|
93
|
+
visible: T[];
|
|
94
|
+
overflow: T[];
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* 绑定页行:已启用 providers(API 序) ∪ 仅存在于 bindings 的已停用项(接在后面)。
|
|
98
|
+
* 不做 N=4 截断。
|
|
99
|
+
*/
|
|
100
|
+
export declare function mergeBindingRows(providers: readonly SsoProviderLike[], bindings: readonly BindingLike[]): BindingRow[];
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { t as d } from "../locales/index.js";
|
|
2
|
+
const l = 4, s = ["github", "wechat", "wecom", "dingtalk", "gitee", "qq"], u = new Set(s), w = !1;
|
|
3
|
+
function c(n) {
|
|
4
|
+
return d(`oauth.brand.${n}`);
|
|
5
|
+
}
|
|
6
|
+
function y() {
|
|
7
|
+
return s.map((n) => ({ code: n, displayName: c(n) }));
|
|
8
|
+
}
|
|
9
|
+
const g = ["wecom"];
|
|
10
|
+
function N(n) {
|
|
11
|
+
const t = new Map(n.map((o) => [o.code, o])), r = [], i = /* @__PURE__ */ new Set();
|
|
12
|
+
for (const o of s) {
|
|
13
|
+
i.add(o);
|
|
14
|
+
const e = t.get(o);
|
|
15
|
+
r.push({
|
|
16
|
+
code: o,
|
|
17
|
+
displayName: (e == null ? void 0 : e.displayName) || c(o),
|
|
18
|
+
icon: (e == null ? void 0 : e.icon) ?? null,
|
|
19
|
+
registered: !!e,
|
|
20
|
+
enabled: e ? e.enabled : !1,
|
|
21
|
+
linkByAccount: (e == null ? void 0 : e.linkByAccount) ?? !1
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
for (const o of n)
|
|
25
|
+
i.has(o.code) || (i.add(o.code), r.push({
|
|
26
|
+
code: o.code,
|
|
27
|
+
displayName: o.displayName,
|
|
28
|
+
icon: o.icon,
|
|
29
|
+
registered: !0,
|
|
30
|
+
enabled: o.enabled,
|
|
31
|
+
linkByAccount: o.linkByAccount ?? !1
|
|
32
|
+
}));
|
|
33
|
+
return r;
|
|
34
|
+
}
|
|
35
|
+
function f(n) {
|
|
36
|
+
if (n == null) return !1;
|
|
37
|
+
const t = n.trim();
|
|
38
|
+
return !t || /^https?:\/\//i.test(t) || t.startsWith("//") || /^data:/i.test(t) ? !1 : /^[a-z0-9][a-z0-9-]*:[a-z0-9][a-z0-9._-]*$/i.test(t);
|
|
39
|
+
}
|
|
40
|
+
function m(n) {
|
|
41
|
+
return !!n && u.has(n.toLowerCase());
|
|
42
|
+
}
|
|
43
|
+
function b(n, t) {
|
|
44
|
+
const r = (n ?? "").trim().toLowerCase();
|
|
45
|
+
return m(r) ? { kind: "brand", code: r } : f(t) ? { kind: "iconify", name: t.trim() } : { kind: "letter", letter: (n ?? "?").trim().charAt(0).toUpperCase() || "?" };
|
|
46
|
+
}
|
|
47
|
+
const a = "smart.sso.wecomAutoLogin";
|
|
48
|
+
function v(n) {
|
|
49
|
+
if (!/wxwork/i.test(n.userAgent) || !n.providers.some((t) => t.code === "wecom")) return !1;
|
|
50
|
+
try {
|
|
51
|
+
return n.storage.getItem(a) ? !1 : (n.storage.setItem(a, "1"), !0);
|
|
52
|
+
} catch {
|
|
53
|
+
return !1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function A(n, t = l) {
|
|
57
|
+
const r = n.slice();
|
|
58
|
+
return r.length <= t ? { visible: r, overflow: [] } : { visible: r.slice(0, t), overflow: r.slice(t) };
|
|
59
|
+
}
|
|
60
|
+
function h(n, t) {
|
|
61
|
+
const r = /* @__PURE__ */ new Map();
|
|
62
|
+
for (const e of t) r.set(e.provider, e);
|
|
63
|
+
const i = [], o = /* @__PURE__ */ new Set();
|
|
64
|
+
for (const e of n)
|
|
65
|
+
o.add(e.code), i.push({
|
|
66
|
+
code: e.code,
|
|
67
|
+
displayName: e.displayName,
|
|
68
|
+
icon: e.icon,
|
|
69
|
+
enabled: !0,
|
|
70
|
+
binding: r.get(e.code)
|
|
71
|
+
});
|
|
72
|
+
for (const e of t)
|
|
73
|
+
o.has(e.provider) || i.push({
|
|
74
|
+
code: e.provider,
|
|
75
|
+
displayName: e.displayName && e.displayName.trim() || e.provider,
|
|
76
|
+
icon: null,
|
|
77
|
+
enabled: !1,
|
|
78
|
+
binding: e
|
|
79
|
+
});
|
|
80
|
+
return i;
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
s as BRAND_CODES,
|
|
84
|
+
g as LINK_BY_ACCOUNT_CODES,
|
|
85
|
+
w as PREVIEW_ALL_SSO_BRANDS,
|
|
86
|
+
l as SSO_VISIBLE_MAX,
|
|
87
|
+
c as brandDisplayName,
|
|
88
|
+
N as buildConfigProviderRows,
|
|
89
|
+
v as claimWeComAutoLogin,
|
|
90
|
+
m as isBrandCode,
|
|
91
|
+
f as isIconifyName,
|
|
92
|
+
h as mergeBindingRows,
|
|
93
|
+
y as previewAllBrandProviders,
|
|
94
|
+
b as resolveProviderIcon,
|
|
95
|
+
A as splitLoginProviders
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=oauthBrand.js.map
|