smart-admin-web 10.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +78 -0
- package/dist/App.vue.d.ts +3 -0
- package/dist/App.vue.js +54 -0
- package/dist/App.vue.js.map +1 -0
- package/dist/App2.vue.js +5 -0
- package/dist/App2.vue.js.map +1 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
- package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
- package/dist/api/client.d.ts +29 -0
- package/dist/api/client.js +139 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/index.d.ts +672 -0
- package/dist/api/index.js +638 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/reauthGate.d.ts +16 -0
- package/dist/api/reauthGate.js +21 -0
- package/dist/api/reauthGate.js.map +1 -0
- package/dist/api/schema.d.ts +10230 -0
- package/dist/assets/icons/ph-subset.json.js +16 -0
- package/dist/assets/icons/ph-subset.json.js.map +1 -0
- package/dist/assets/oauth/dingtalk.svg.js +5 -0
- package/dist/assets/oauth/dingtalk.svg.js.map +1 -0
- package/dist/assets/oauth/gitee.svg.js +5 -0
- package/dist/assets/oauth/gitee.svg.js.map +1 -0
- package/dist/assets/oauth/github.svg.js +5 -0
- package/dist/assets/oauth/github.svg.js.map +1 -0
- package/dist/assets/oauth/qq.svg.js +5 -0
- package/dist/assets/oauth/qq.svg.js.map +1 -0
- package/dist/assets/oauth/wechat.svg.js +5 -0
- package/dist/assets/oauth/wechat.svg.js.map +1 -0
- package/dist/assets/oauth/wecom.svg.js +5 -0
- package/dist/assets/oauth/wecom.svg.js.map +1 -0
- package/dist/assets/svg/star.svg.js +6 -0
- package/dist/assets/svg/star.svg.js.map +1 -0
- package/dist/components/ApiSelect/index.vue.d.ts +22 -0
- package/dist/components/ApiSelect/index.vue.js +50 -0
- package/dist/components/ApiSelect/index.vue.js.map +1 -0
- package/dist/components/ApiSelect/index2.vue.js +5 -0
- package/dist/components/ApiSelect/index2.vue.js.map +1 -0
- package/dist/components/AppIcon.vue.d.ts +7 -0
- package/dist/components/AppIcon.vue.js +33 -0
- package/dist/components/AppIcon.vue.js.map +1 -0
- package/dist/components/AppIcon2.vue.js +5 -0
- package/dist/components/AppIcon2.vue.js.map +1 -0
- package/dist/components/Chart/BarChart.vue.d.ts +13 -0
- package/dist/components/Chart/BarChart.vue.js +27 -0
- package/dist/components/Chart/BarChart.vue.js.map +1 -0
- package/dist/components/Chart/BarChart2.vue.js +5 -0
- package/dist/components/Chart/BarChart2.vue.js.map +1 -0
- package/dist/components/Chart/LineChart.vue.d.ts +15 -0
- package/dist/components/Chart/LineChart.vue.js +33 -0
- package/dist/components/Chart/LineChart.vue.js.map +1 -0
- package/dist/components/Chart/LineChart2.vue.js +5 -0
- package/dist/components/Chart/LineChart2.vue.js.map +1 -0
- package/dist/components/Chart/PieChart.vue.d.ts +14 -0
- package/dist/components/Chart/PieChart.vue.js +31 -0
- package/dist/components/Chart/PieChart.vue.js.map +1 -0
- package/dist/components/Chart/PieChart2.vue.js +5 -0
- package/dist/components/Chart/PieChart2.vue.js.map +1 -0
- package/dist/components/Chart/echarts.d.ts +57 -0
- package/dist/components/Chart/echarts.js +47 -0
- package/dist/components/Chart/echarts.js.map +1 -0
- package/dist/components/Chart/index.vue.d.ts +12 -0
- package/dist/components/Chart/index.vue.js +8 -0
- package/dist/components/Chart/index.vue.js.map +1 -0
- package/dist/components/Chart/index2.vue.js +27 -0
- package/dist/components/Chart/index2.vue.js.map +1 -0
- package/dist/components/CodeBlock/index.vue.d.ts +17 -0
- package/dist/components/CodeBlock/index.vue.js +8 -0
- package/dist/components/CodeBlock/index.vue.js.map +1 -0
- package/dist/components/CodeBlock/index2.vue.js +48 -0
- package/dist/components/CodeBlock/index2.vue.js.map +1 -0
- package/dist/components/CronEditor/index.vue.d.ts +15 -0
- package/dist/components/CronEditor/index.vue.js +8 -0
- package/dist/components/CronEditor/index.vue.js.map +1 -0
- package/dist/components/CronEditor/index2.vue.js +528 -0
- package/dist/components/CronEditor/index2.vue.js.map +1 -0
- package/dist/components/DetailPage/index.vue.d.ts +26 -0
- package/dist/components/DetailPage/index.vue.js +8 -0
- package/dist/components/DetailPage/index.vue.js.map +1 -0
- package/dist/components/DetailPage/index2.vue.js +51 -0
- package/dist/components/DetailPage/index2.vue.js.map +1 -0
- package/dist/components/DictCheckbox/index.vue.d.ts +6 -0
- package/dist/components/DictCheckbox/index.vue.js +43 -0
- package/dist/components/DictCheckbox/index.vue.js.map +1 -0
- package/dist/components/DictCheckbox/index2.vue.js +5 -0
- package/dist/components/DictCheckbox/index2.vue.js.map +1 -0
- package/dist/components/DictRadio/index.vue.d.ts +6 -0
- package/dist/components/DictRadio/index.vue.js +38 -0
- package/dist/components/DictRadio/index.vue.js.map +1 -0
- package/dist/components/DictRadio/index2.vue.js +5 -0
- package/dist/components/DictRadio/index2.vue.js.map +1 -0
- package/dist/components/DictSelect/index.vue.d.ts +6 -0
- package/dist/components/DictSelect/index.vue.js +37 -0
- package/dist/components/DictSelect/index.vue.js.map +1 -0
- package/dist/components/DictSelect/index2.vue.js +5 -0
- package/dist/components/DictSelect/index2.vue.js.map +1 -0
- package/dist/components/DictTag/index.vue.d.ts +10 -0
- package/dist/components/DictTag/index.vue.js +48 -0
- package/dist/components/DictTag/index.vue.js.map +1 -0
- package/dist/components/DictTag/index2.vue.js +5 -0
- package/dist/components/DictTag/index2.vue.js.map +1 -0
- package/dist/components/ErrorBoundary/index.vue.d.ts +13 -0
- package/dist/components/ErrorBoundary/index.vue.js +8 -0
- package/dist/components/ErrorBoundary/index.vue.js.map +1 -0
- package/dist/components/ErrorBoundary/index2.vue.js +61 -0
- package/dist/components/ErrorBoundary/index2.vue.js.map +1 -0
- package/dist/components/ExportColumnsModal/index.vue.d.ts +19 -0
- package/dist/components/ExportColumnsModal/index.vue.js +8 -0
- package/dist/components/ExportColumnsModal/index.vue.js.map +1 -0
- package/dist/components/ExportColumnsModal/index2.vue.js +121 -0
- package/dist/components/ExportColumnsModal/index2.vue.js.map +1 -0
- package/dist/components/FileUpload/index.vue.d.ts +24 -0
- package/dist/components/FileUpload/index.vue.js +42 -0
- package/dist/components/FileUpload/index.vue.js.map +1 -0
- package/dist/components/FileUpload/index2.vue.js +5 -0
- package/dist/components/FileUpload/index2.vue.js.map +1 -0
- package/dist/components/FormContainer/index.vue.d.ts +51 -0
- package/dist/components/FormContainer/index.vue.js +160 -0
- package/dist/components/FormContainer/index.vue.js.map +1 -0
- package/dist/components/FormContainer/index3.vue.js +6 -0
- package/dist/components/FormContainer/index3.vue.js.map +1 -0
- package/dist/components/IconPicker/index.vue.d.ts +18 -0
- package/dist/components/IconPicker/index.vue.js +43 -0
- package/dist/components/IconPicker/index.vue.js.map +1 -0
- package/dist/components/IconPicker/index2.vue.js +5 -0
- package/dist/components/IconPicker/index2.vue.js.map +1 -0
- package/dist/components/ImportWizard/index.vue.d.ts +39 -0
- package/dist/components/ImportWizard/index.vue.js +8 -0
- package/dist/components/ImportWizard/index.vue.js.map +1 -0
- package/dist/components/ImportWizard/index2.vue.js +634 -0
- package/dist/components/ImportWizard/index2.vue.js.map +1 -0
- package/dist/components/JsonEditor/index.vue.d.ts +12 -0
- package/dist/components/JsonEditor/index.vue.js +87 -0
- package/dist/components/JsonEditor/index.vue.js.map +1 -0
- package/dist/components/JsonEditor/index2.vue.js +5 -0
- package/dist/components/JsonEditor/index2.vue.js.map +1 -0
- package/dist/components/MarkdownEditor/MarkdownView.vue.d.ts +6 -0
- package/dist/components/MarkdownEditor/MarkdownView.vue.js +33 -0
- package/dist/components/MarkdownEditor/MarkdownView.vue.js.map +1 -0
- package/dist/components/MarkdownEditor/MarkdownView2.vue.js +5 -0
- package/dist/components/MarkdownEditor/MarkdownView2.vue.js.map +1 -0
- package/dist/components/MarkdownEditor/index.vue.d.ts +10 -0
- package/dist/components/MarkdownEditor/index.vue.js +35 -0
- package/dist/components/MarkdownEditor/index.vue.js.map +1 -0
- package/dist/components/MarkdownEditor/index2.vue.js +5 -0
- package/dist/components/MarkdownEditor/index2.vue.js.map +1 -0
- package/dist/components/MenuSearch.vue.d.ts +10 -0
- package/dist/components/MenuSearch.vue.js +8 -0
- package/dist/components/MenuSearch.vue.js.map +1 -0
- package/dist/components/MenuSearch2.vue.js +121 -0
- package/dist/components/MenuSearch2.vue.js.map +1 -0
- package/dist/components/OrgTreeSelect/index.vue.d.ts +6 -0
- package/dist/components/OrgTreeSelect/index.vue.js +42 -0
- package/dist/components/OrgTreeSelect/index.vue.js.map +1 -0
- package/dist/components/OrgTreeSelect/index2.vue.js +5 -0
- package/dist/components/OrgTreeSelect/index2.vue.js.map +1 -0
- package/dist/components/PasswordStrength/index.vue.d.ts +6 -0
- package/dist/components/PasswordStrength/index.vue.js +8 -0
- package/dist/components/PasswordStrength/index.vue.js.map +1 -0
- package/dist/components/PasswordStrength/index2.vue.js +91 -0
- package/dist/components/PasswordStrength/index2.vue.js.map +1 -0
- package/dist/components/ReauthModal.vue.d.ts +3 -0
- package/dist/components/ReauthModal.vue.js +8 -0
- package/dist/components/ReauthModal.vue.js.map +1 -0
- package/dist/components/ReauthModal2.vue.js +139 -0
- package/dist/components/ReauthModal2.vue.js.map +1 -0
- package/dist/components/RoleSelect/index.vue.d.ts +8 -0
- package/dist/components/RoleSelect/index.vue.js +26 -0
- package/dist/components/RoleSelect/index.vue.js.map +1 -0
- package/dist/components/RoleSelect/index2.vue.js +5 -0
- package/dist/components/RoleSelect/index2.vue.js.map +1 -0
- package/dist/components/SelectTable/index.vue.d.ts +76 -0
- package/dist/components/SelectTable/index.vue.js +8 -0
- package/dist/components/SelectTable/index.vue.js.map +1 -0
- package/dist/components/SelectTable/index2.vue.js +256 -0
- package/dist/components/SelectTable/index2.vue.js.map +1 -0
- package/dist/components/SmartLogo.vue.d.ts +8 -0
- package/dist/components/SmartLogo.vue.js +8 -0
- package/dist/components/SmartLogo.vue.js.map +1 -0
- package/dist/components/SmartLogo2.vue.js +74 -0
- package/dist/components/SmartLogo2.vue.js.map +1 -0
- package/dist/components/StatusSwitch/index.vue.d.ts +21 -0
- package/dist/components/StatusSwitch/index.vue.js +45 -0
- package/dist/components/StatusSwitch/index.vue.js.map +1 -0
- package/dist/components/StatusSwitch/index2.vue.js +5 -0
- package/dist/components/StatusSwitch/index2.vue.js.map +1 -0
- package/dist/components/TableZoomButton/index.vue.d.ts +13 -0
- package/dist/components/TableZoomButton/index.vue.js +42 -0
- package/dist/components/TableZoomButton/index.vue.js.map +1 -0
- package/dist/components/TableZoomButton/index2.vue.js +5 -0
- package/dist/components/TableZoomButton/index2.vue.js.map +1 -0
- package/dist/components/UserPicker/index.vue.d.ts +13 -0
- package/dist/components/UserPicker/index.vue.js +8 -0
- package/dist/components/UserPicker/index.vue.js.map +1 -0
- package/dist/components/UserPicker/index2.vue.js +214 -0
- package/dist/components/UserPicker/index2.vue.js.map +1 -0
- package/dist/components/UserSelect/index.vue.d.ts +9 -0
- package/dist/components/UserSelect/index.vue.js +32 -0
- package/dist/components/UserSelect/index.vue.js.map +1 -0
- package/dist/components/UserSelect/index2.vue.js +5 -0
- package/dist/components/UserSelect/index2.vue.js.map +1 -0
- package/dist/components/oauth/BrandIcon.vue.d.ts +12 -0
- package/dist/components/oauth/BrandIcon.vue.js +8 -0
- package/dist/components/oauth/BrandIcon.vue.js.map +1 -0
- package/dist/components/oauth/BrandIcon2.vue.js +95 -0
- package/dist/components/oauth/BrandIcon2.vue.js.map +1 -0
- package/dist/composables/authMenuRoute.d.ts +32 -0
- package/dist/composables/authMenuRoute.js +37 -0
- package/dist/composables/authMenuRoute.js.map +1 -0
- package/dist/composables/clearClientCache.d.ts +10 -0
- package/dist/composables/clearClientCache.js +17 -0
- package/dist/composables/clearClientCache.js.map +1 -0
- package/dist/composables/useAuthMenu.d.ts +3 -0
- package/dist/composables/useAuthMenu.js +61 -0
- package/dist/composables/useAuthMenu.js.map +1 -0
- package/dist/composables/useBatchDelete.d.ts +18 -0
- package/dist/composables/useBatchDelete.js +21 -0
- package/dist/composables/useBatchDelete.js.map +1 -0
- package/dist/composables/useCompactScreen.d.ts +12 -0
- package/dist/composables/useCompactScreen.js +17 -0
- package/dist/composables/useCompactScreen.js.map +1 -0
- package/dist/composables/useConfirm.d.ts +18 -0
- package/dist/composables/useConfirm.js +61 -0
- package/dist/composables/useConfirm.js.map +1 -0
- package/dist/composables/useFullscreenToggle.d.ts +11 -0
- package/dist/composables/useFullscreenToggle.js +64 -0
- package/dist/composables/useFullscreenToggle.js.map +1 -0
- package/dist/composables/useHeaderTools.d.ts +31 -0
- package/dist/composables/useHeaderTools.js +15 -0
- package/dist/composables/useHeaderTools.js.map +1 -0
- package/dist/composables/useLayoutMenu.d.ts +17 -0
- package/dist/composables/useLayoutMenu.js +93 -0
- package/dist/composables/useLayoutMenu.js.map +1 -0
- package/dist/composables/useMenuBadge.d.ts +11 -0
- package/dist/composables/useMenuBadge.js +17 -0
- package/dist/composables/useMenuBadge.js.map +1 -0
- package/dist/composables/useMenuFlat.d.ts +8 -0
- package/dist/composables/useMenuFlat.js +29 -0
- package/dist/composables/useMenuFlat.js.map +1 -0
- package/dist/composables/useModule.d.ts +16 -0
- package/dist/composables/useModule.js +44 -0
- package/dist/composables/useModule.js.map +1 -0
- package/dist/composables/useNoticeAction.d.ts +8 -0
- package/dist/composables/useNoticeAction.js +79 -0
- package/dist/composables/useNoticeAction.js.map +1 -0
- package/dist/composables/usePageTitle.d.ts +1 -0
- package/dist/composables/usePageTitle.js +20 -0
- package/dist/composables/usePageTitle.js.map +1 -0
- package/dist/composables/useRealtime.d.ts +31 -0
- package/dist/composables/useRealtime.js +59 -0
- package/dist/composables/useRealtime.js.map +1 -0
- package/dist/composables/useSite.d.ts +24 -0
- package/dist/composables/useSite.js +27 -0
- package/dist/composables/useSite.js.map +1 -0
- package/dist/composables/useTabTitle.d.ts +1 -0
- package/dist/composables/useTabTitle.js +10 -0
- package/dist/composables/useTabTitle.js.map +1 -0
- package/dist/composables/useTableRowSort.d.ts +20 -0
- package/dist/composables/useTableRowSort.js +59 -0
- package/dist/composables/useTableRowSort.js.map +1 -0
- package/dist/composables/useTableZoom.d.ts +5 -0
- package/dist/composables/useTableZoom.js +30 -0
- package/dist/composables/useTableZoom.js.map +1 -0
- package/dist/composables/useTheme.d.ts +13 -0
- package/dist/composables/useTheme.js +30 -0
- package/dist/composables/useTheme.js.map +1 -0
- package/dist/composables/useVisualViewportHeight.d.ts +3 -0
- package/dist/composables/useVisualViewportHeight.js +16 -0
- package/dist/composables/useVisualViewportHeight.js.map +1 -0
- package/dist/createSmartAdmin.d.ts +56 -0
- package/dist/createSmartAdmin.js +76 -0
- package/dist/createSmartAdmin.js.map +1 -0
- package/dist/directives/auth.d.ts +16 -0
- package/dist/directives/auth.js +19 -0
- package/dist/directives/auth.js.map +1 -0
- package/dist/env.d.ts +10 -0
- package/dist/index.d.ts +90 -0
- package/dist/index.js +273 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts/AppHeader.vue.d.ts +12 -0
- package/dist/layouts/AppHeader.vue.js +8 -0
- package/dist/layouts/AppHeader.vue.js.map +1 -0
- package/dist/layouts/AppHeader2.vue.js +352 -0
- package/dist/layouts/AppHeader2.vue.js.map +1 -0
- package/dist/layouts/LayoutModeCards.vue.d.ts +3 -0
- package/dist/layouts/LayoutModeCards.vue.js +8 -0
- package/dist/layouts/LayoutModeCards.vue.js.map +1 -0
- package/dist/layouts/LayoutModeCards2.vue.js +67 -0
- package/dist/layouts/LayoutModeCards2.vue.js.map +1 -0
- package/dist/layouts/NoticeBell.vue.d.ts +3 -0
- package/dist/layouts/NoticeBell.vue.js +8 -0
- package/dist/layouts/NoticeBell.vue.js.map +1 -0
- package/dist/layouts/NoticeBell2.vue.js +292 -0
- package/dist/layouts/NoticeBell2.vue.js.map +1 -0
- package/dist/layouts/PersonalLayout.vue.d.ts +3 -0
- package/dist/layouts/PersonalLayout.vue.js +8 -0
- package/dist/layouts/PersonalLayout.vue.js.map +1 -0
- package/dist/layouts/PersonalLayout2.vue.js +65 -0
- package/dist/layouts/PersonalLayout2.vue.js.map +1 -0
- package/dist/layouts/SettingRow.vue.d.ts +16 -0
- package/dist/layouts/SettingRow.vue.js +8 -0
- package/dist/layouts/SettingRow.vue.js.map +1 -0
- package/dist/layouts/SettingRow2.vue.js +23 -0
- package/dist/layouts/SettingRow2.vue.js.map +1 -0
- package/dist/layouts/SettingsDrawer.vue.d.ts +10 -0
- package/dist/layouts/SettingsDrawer.vue.js +8 -0
- package/dist/layouts/SettingsDrawer.vue.js.map +1 -0
- package/dist/layouts/SettingsDrawer2.vue.js +380 -0
- package/dist/layouts/SettingsDrawer2.vue.js.map +1 -0
- package/dist/layouts/TabsBar.vue.d.ts +3 -0
- package/dist/layouts/TabsBar.vue.js +8 -0
- package/dist/layouts/TabsBar.vue.js.map +1 -0
- package/dist/layouts/TabsBar2.vue.js +132 -0
- package/dist/layouts/TabsBar2.vue.js.map +1 -0
- package/dist/layouts/components/SideNav.vue.d.ts +15 -0
- package/dist/layouts/components/SideNav.vue.js +8 -0
- package/dist/layouts/components/SideNav.vue.js.map +1 -0
- package/dist/layouts/components/SideNav2.vue.js +49 -0
- package/dist/layouts/components/SideNav2.vue.js.map +1 -0
- package/dist/layouts/default.vue.d.ts +3 -0
- package/dist/layouts/default.vue.js +8 -0
- package/dist/layouts/default.vue.js.map +1 -0
- package/dist/layouts/default2.vue.js +213 -0
- package/dist/layouts/default2.vue.js.map +1 -0
- package/dist/lib/chunkReload.d.ts +9 -0
- package/dist/lib/chunkReload.js +24 -0
- package/dist/lib/chunkReload.js.map +1 -0
- package/dist/lib/icons.d.ts +2 -0
- package/dist/lib/icons.js +39 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/loadingBar.d.ts +7 -0
- package/dist/lib/loadingBar.js +18 -0
- package/dist/lib/loadingBar.js.map +1 -0
- package/dist/lib/markdown.d.ts +8 -0
- package/dist/lib/markdown.js +16 -0
- package/dist/lib/markdown.js.map +1 -0
- package/dist/lib/markdownLinks.d.ts +26 -0
- package/dist/lib/markdownLinks.js +21 -0
- package/dist/lib/markdownLinks.js.map +1 -0
- package/dist/lib/noticeActions.d.ts +13 -0
- package/dist/lib/noticeActions.js +16 -0
- package/dist/lib/noticeActions.js.map +1 -0
- package/dist/lib/runtime.d.ts +21 -0
- package/dist/lib/runtime.js +13 -0
- package/dist/lib/runtime.js.map +1 -0
- package/dist/locales/en-US.d.ts +1358 -0
- package/dist/locales/en-US.js +1362 -0
- package/dist/locales/en-US.js.map +1 -0
- package/dist/locales/index.d.ts +30 -0
- package/dist/locales/index.js +46 -0
- package/dist/locales/index.js.map +1 -0
- package/dist/locales/menuTitle.d.ts +8 -0
- package/dist/locales/menuTitle.js +19 -0
- package/dist/locales/menuTitle.js.map +1 -0
- package/dist/locales/zh-CN.d.ts +1358 -0
- package/dist/locales/zh-CN.js +1368 -0
- package/dist/locales/zh-CN.js.map +1 -0
- package/dist/router/bootFailure.d.ts +8 -0
- package/dist/router/bootFailure.js +11 -0
- package/dist/router/bootFailure.js.map +1 -0
- package/dist/router/detailRoutes.d.ts +2 -0
- package/dist/router/detailRoutes.js +19 -0
- package/dist/router/detailRoutes.js.map +1 -0
- package/dist/router/index.d.ts +3 -0
- package/dist/router/index.js +58 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/namedPage.d.ts +13 -0
- package/dist/router/namedPage.js +12 -0
- package/dist/router/namedPage.js.map +1 -0
- package/dist/router/routes.d.ts +2 -0
- package/dist/router/routes.js +121 -0
- package/dist/router/routes.js.map +1 -0
- package/dist/router/viewRegistry.d.ts +18 -0
- package/dist/router/viewRegistry.js +26 -0
- package/dist/router/viewRegistry.js.map +1 -0
- package/dist/stores/app.d.ts +83 -0
- package/dist/stores/app.js +82 -0
- package/dist/stores/app.js.map +1 -0
- package/dist/stores/auth.d.ts +106 -0
- package/dist/stores/auth.js +59 -0
- package/dist/stores/auth.js.map +1 -0
- package/dist/stores/dict.d.ts +11 -0
- package/dist/stores/dict.js +36 -0
- package/dist/stores/dict.js.map +1 -0
- package/dist/stores/tabs.d.ts +53 -0
- package/dist/stores/tabs.js +88 -0
- package/dist/stores/tabs.js.map +1 -0
- package/dist/stores/user.d.ts +64 -0
- package/dist/stores/user.js +64 -0
- package/dist/stores/user.js.map +1 -0
- package/dist/style.css +1 -0
- package/dist/theme/accents.d.ts +2 -0
- package/dist/theme/accents.js +5 -0
- package/dist/theme/accents.js.map +1 -0
- package/dist/theme/mix.d.ts +26 -0
- package/dist/theme/mix.js +43 -0
- package/dist/theme/mix.js.map +1 -0
- package/dist/theme/naive-theme.d.ts +9 -0
- package/dist/theme/naive-theme.js +89 -0
- package/dist/theme/naive-theme.js.map +1 -0
- package/dist/types/api.d.ts +714 -0
- package/dist/types/api.js +15 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/menu.d.ts +67 -0
- package/dist/types/menu.js +26 -0
- package/dist/types/menu.js.map +1 -0
- package/dist/utils/chunkUpload.d.ts +6 -0
- package/dist/utils/chunkUpload.js +35 -0
- package/dist/utils/chunkUpload.js.map +1 -0
- package/dist/utils/download.d.ts +8 -0
- package/dist/utils/download.js +8 -0
- package/dist/utils/download.js.map +1 -0
- package/dist/utils/error.d.ts +14 -0
- package/dist/utils/error.js +50 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/format.d.ts +20 -0
- package/dist/utils/format.js +19 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/importDup.d.ts +17 -0
- package/dist/utils/importDup.js +18 -0
- package/dist/utils/importDup.js.map +1 -0
- package/dist/utils/oauthBrand.d.ts +100 -0
- package/dist/utils/oauthBrand.js +97 -0
- package/dist/utils/oauthBrand.js.map +1 -0
- package/dist/utils/tree.d.ts +33 -0
- package/dist/utils/tree.js +47 -0
- package/dist/utils/tree.js.map +1 -0
- package/dist/utils/ua.d.ts +7 -0
- package/dist/utils/ua.js +33 -0
- package/dist/utils/ua.js.map +1 -0
- package/dist/utils/url.d.ts +16 -0
- package/dist/utils/url.js +13 -0
- package/dist/utils/url.js.map +1 -0
- package/dist/views/dashboard/biz.vue.d.ts +3 -0
- package/dist/views/dashboard/biz.vue.js +8 -0
- package/dist/views/dashboard/biz.vue.js.map +1 -0
- package/dist/views/dashboard/biz2.vue.js +136 -0
- package/dist/views/dashboard/biz2.vue.js.map +1 -0
- package/dist/views/dashboard/workbench.vue.d.ts +3 -0
- package/dist/views/dashboard/workbench.vue.js +8 -0
- package/dist/views/dashboard/workbench.vue.js.map +1 -0
- package/dist/views/dashboard/workbench2.vue.js +195 -0
- package/dist/views/dashboard/workbench2.vue.js.map +1 -0
- package/dist/views/embed/iframe.vue.d.ts +3 -0
- package/dist/views/embed/iframe.vue.js +8 -0
- package/dist/views/embed/iframe.vue.js.map +1 -0
- package/dist/views/embed/iframe2.vue.js +21 -0
- package/dist/views/embed/iframe2.vue.js.map +1 -0
- package/dist/views/error/404.vue.d.ts +3 -0
- package/dist/views/error/404.vue.js +8 -0
- package/dist/views/error/404.vue.js.map +1 -0
- package/dist/views/error/4042.vue.js +31 -0
- package/dist/views/error/4042.vue.js.map +1 -0
- package/dist/views/error/BootError.vue.d.ts +3 -0
- package/dist/views/error/BootError.vue.js +8 -0
- package/dist/views/error/BootError.vue.js.map +1 -0
- package/dist/views/error/BootError2.vue.js +57 -0
- package/dist/views/error/BootError2.vue.js.map +1 -0
- package/dist/views/error/MissingRoute.vue.d.ts +3 -0
- package/dist/views/error/MissingRoute.vue.js +8 -0
- package/dist/views/error/MissingRoute.vue.js.map +1 -0
- package/dist/views/error/MissingRoute2.vue.js +23 -0
- package/dist/views/error/MissingRoute2.vue.js.map +1 -0
- package/dist/views/login/LoginForm.vue.d.ts +12 -0
- package/dist/views/login/LoginForm.vue.js +8 -0
- package/dist/views/login/LoginForm.vue.js.map +1 -0
- package/dist/views/login/LoginForm2.vue.js +642 -0
- package/dist/views/login/LoginForm2.vue.js.map +1 -0
- package/dist/views/login/index.vue.d.ts +3 -0
- package/dist/views/login/index.vue.js +8 -0
- package/dist/views/login/index.vue.js.map +1 -0
- package/dist/views/login/index2.vue.js +79 -0
- package/dist/views/login/index2.vue.js.map +1 -0
- package/dist/views/login/skins/AuroraGlass.vue.d.ts +3 -0
- package/dist/views/login/skins/AuroraGlass.vue.js +8 -0
- package/dist/views/login/skins/AuroraGlass.vue.js.map +1 -0
- package/dist/views/login/skins/AuroraGlass2.vue.js +80 -0
- package/dist/views/login/skins/AuroraGlass2.vue.js.map +1 -0
- package/dist/views/login/skins/SplitPanel.vue.d.ts +3 -0
- package/dist/views/login/skins/SplitPanel.vue.js +8 -0
- package/dist/views/login/skins/SplitPanel.vue.js.map +1 -0
- package/dist/views/login/skins/SplitPanel2.vue.js +85 -0
- package/dist/views/login/skins/SplitPanel2.vue.js.map +1 -0
- package/dist/views/login/skins/Spotlight.vue.d.ts +3 -0
- package/dist/views/login/skins/Spotlight.vue.js +8 -0
- package/dist/views/login/skins/Spotlight.vue.js.map +1 -0
- package/dist/views/login/skins/Spotlight2.vue.js +36 -0
- package/dist/views/login/skins/Spotlight2.vue.js.map +1 -0
- package/dist/views/login/skins.d.ts +8 -0
- package/dist/views/login/skins.js +13 -0
- package/dist/views/login/skins.js.map +1 -0
- package/dist/views/mfa/bindComplete.d.ts +7 -0
- package/dist/views/mfa/bindComplete.js +8 -0
- package/dist/views/mfa/bindComplete.js.map +1 -0
- package/dist/views/mfa/index.vue.d.ts +3 -0
- package/dist/views/mfa/index.vue.js +8 -0
- package/dist/views/mfa/index.vue.js.map +1 -0
- package/dist/views/mfa/index2.vue.js +425 -0
- package/dist/views/mfa/index2.vue.js.map +1 -0
- package/dist/views/module/index.vue.d.ts +3 -0
- package/dist/views/module/index.vue.js +8 -0
- package/dist/views/module/index.vue.js.map +1 -0
- package/dist/views/module/index2.vue.js +142 -0
- package/dist/views/module/index2.vue.js.map +1 -0
- package/dist/views/oauth/callback.vue.d.ts +3 -0
- package/dist/views/oauth/callback.vue.js +8 -0
- package/dist/views/oauth/callback.vue.js.map +1 -0
- package/dist/views/oauth/callback2.vue.js +86 -0
- package/dist/views/oauth/callback2.vue.js.map +1 -0
- package/dist/views/personal/bindings.vue.d.ts +3 -0
- package/dist/views/personal/bindings.vue.js +8 -0
- package/dist/views/personal/bindings.vue.js.map +1 -0
- package/dist/views/personal/bindings2.vue.js +220 -0
- package/dist/views/personal/bindings2.vue.js.map +1 -0
- package/dist/views/personal/notice.vue.d.ts +3 -0
- package/dist/views/personal/notice.vue.js +5 -0
- package/dist/views/personal/notice.vue.js.map +1 -0
- package/dist/views/personal/notice2.vue.js +163 -0
- package/dist/views/personal/notice2.vue.js.map +1 -0
- package/dist/views/personal/password.vue.d.ts +3 -0
- package/dist/views/personal/password.vue.js +5 -0
- package/dist/views/personal/password.vue.js.map +1 -0
- package/dist/views/personal/password2.vue.js +147 -0
- package/dist/views/personal/password2.vue.js.map +1 -0
- package/dist/views/personal/profile.vue.d.ts +3 -0
- package/dist/views/personal/profile.vue.js +8 -0
- package/dist/views/personal/profile.vue.js.map +1 -0
- package/dist/views/personal/profile2.vue.js +264 -0
- package/dist/views/personal/profile2.vue.js.map +1 -0
- package/dist/views/personal/security.vue.d.ts +3 -0
- package/dist/views/personal/security.vue.js +8 -0
- package/dist/views/personal/security.vue.js.map +1 -0
- package/dist/views/personal/security2.vue.js +82 -0
- package/dist/views/personal/security2.vue.js.map +1 -0
- package/dist/views/personal/sessions.vue.d.ts +3 -0
- package/dist/views/personal/sessions.vue.js +8 -0
- package/dist/views/personal/sessions.vue.js.map +1 -0
- package/dist/views/personal/sessions2.vue.js +101 -0
- package/dist/views/personal/sessions2.vue.js.map +1 -0
- package/dist/views/system/cache/index.vue.d.ts +3 -0
- package/dist/views/system/cache/index.vue.js +8 -0
- package/dist/views/system/cache/index.vue.js.map +1 -0
- package/dist/views/system/cache/index2.vue.js +113 -0
- package/dist/views/system/cache/index2.vue.js.map +1 -0
- package/dist/views/system/config/components/ConfigFormModal.vue.d.ts +16 -0
- package/dist/views/system/config/components/ConfigFormModal.vue.js +5 -0
- package/dist/views/system/config/components/ConfigFormModal.vue.js.map +1 -0
- package/dist/views/system/config/components/ConfigFormModal2.vue.js +177 -0
- package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -0
- package/dist/views/system/config/components/ExternalAuthConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/ExternalAuthConfig.vue.js +8 -0
- package/dist/views/system/config/components/ExternalAuthConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/ExternalAuthConfig2.vue.js +218 -0
- package/dist/views/system/config/components/ExternalAuthConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/GroupExtraConfig.vue.d.ts +9 -0
- package/dist/views/system/config/components/GroupExtraConfig.vue.js +8 -0
- package/dist/views/system/config/components/GroupExtraConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/GroupExtraConfig2.vue.js +108 -0
- package/dist/views/system/config/components/GroupExtraConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/HighSensConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/HighSensConfig.vue.js +5 -0
- package/dist/views/system/config/components/HighSensConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/HighSensConfig2.vue.js +134 -0
- package/dist/views/system/config/components/HighSensConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/JobConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/JobConfig.vue.js +5 -0
- package/dist/views/system/config/components/JobConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/JobConfig2.vue.js +116 -0
- package/dist/views/system/config/components/JobConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/OtherConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/OtherConfig.vue.js +5 -0
- package/dist/views/system/config/components/OtherConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/OtherConfig2.vue.js +121 -0
- package/dist/views/system/config/components/OtherConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/SecurityConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/SecurityConfig.vue.js +8 -0
- package/dist/views/system/config/components/SecurityConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/SecurityConfig2.vue.js +456 -0
- package/dist/views/system/config/components/SecurityConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/SysBaseConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/SysBaseConfig.vue.js +5 -0
- package/dist/views/system/config/components/SysBaseConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/SysBaseConfig2.vue.js +107 -0
- package/dist/views/system/config/components/SysBaseConfig2.vue.js.map +1 -0
- package/dist/views/system/config/components/UploadConfig.vue.d.ts +3 -0
- package/dist/views/system/config/components/UploadConfig.vue.js +5 -0
- package/dist/views/system/config/components/UploadConfig.vue.js.map +1 -0
- package/dist/views/system/config/components/UploadConfig2.vue.js +135 -0
- package/dist/views/system/config/components/UploadConfig2.vue.js.map +1 -0
- package/dist/views/system/config/groups.d.ts +9 -0
- package/dist/views/system/config/groups.js +18 -0
- package/dist/views/system/config/groups.js.map +1 -0
- package/dist/views/system/config/index.vue.d.ts +3 -0
- package/dist/views/system/config/index.vue.js +5 -0
- package/dist/views/system/config/index.vue.js.map +1 -0
- package/dist/views/system/config/index2.vue.js +127 -0
- package/dist/views/system/config/index2.vue.js.map +1 -0
- package/dist/views/system/dict/index.vue.d.ts +3 -0
- package/dist/views/system/dict/index.vue.js +8 -0
- package/dist/views/system/dict/index.vue.js.map +1 -0
- package/dist/views/system/dict/index2.vue.js +560 -0
- package/dist/views/system/dict/index2.vue.js.map +1 -0
- package/dist/views/system/file/index.vue.d.ts +3 -0
- package/dist/views/system/file/index.vue.js +5 -0
- package/dist/views/system/file/index.vue.js.map +1 -0
- package/dist/views/system/file/index2.vue.js +186 -0
- package/dist/views/system/file/index2.vue.js.map +1 -0
- package/dist/views/system/job/index.vue.d.ts +3 -0
- package/dist/views/system/job/index.vue.js +8 -0
- package/dist/views/system/job/index.vue.js.map +1 -0
- package/dist/views/system/job/index2.vue.js +1167 -0
- package/dist/views/system/job/index2.vue.js.map +1 -0
- package/dist/views/system/job-log/index.vue.d.ts +3 -0
- package/dist/views/system/job-log/index.vue.js +8 -0
- package/dist/views/system/job-log/index.vue.js.map +1 -0
- package/dist/views/system/job-log/index2.vue.js +411 -0
- package/dist/views/system/job-log/index2.vue.js.map +1 -0
- package/dist/views/system/job-monitor/index.vue.d.ts +3 -0
- package/dist/views/system/job-monitor/index.vue.js +8 -0
- package/dist/views/system/job-monitor/index.vue.js.map +1 -0
- package/dist/views/system/job-monitor/index2.vue.js +253 -0
- package/dist/views/system/job-monitor/index2.vue.js.map +1 -0
- package/dist/views/system/log/exception/index.vue.d.ts +3 -0
- package/dist/views/system/log/exception/index.vue.js +8 -0
- package/dist/views/system/log/exception/index.vue.js.map +1 -0
- package/dist/views/system/log/exception/index2.vue.js +216 -0
- package/dist/views/system/log/exception/index2.vue.js.map +1 -0
- package/dist/views/system/log/login/index.vue.d.ts +3 -0
- package/dist/views/system/log/login/index.vue.js +5 -0
- package/dist/views/system/log/login/index.vue.js.map +1 -0
- package/dist/views/system/log/login/index2.vue.js +113 -0
- package/dist/views/system/log/login/index2.vue.js.map +1 -0
- package/dist/views/system/log/op/index.vue.d.ts +3 -0
- package/dist/views/system/log/op/index.vue.js +8 -0
- package/dist/views/system/log/op/index.vue.js.map +1 -0
- package/dist/views/system/log/op/index2.vue.js +332 -0
- package/dist/views/system/log/op/index2.vue.js.map +1 -0
- package/dist/views/system/menu/components/ButtonManager.vue.d.ts +21 -0
- package/dist/views/system/menu/components/ButtonManager.vue.js +8 -0
- package/dist/views/system/menu/components/ButtonManager.vue.js.map +1 -0
- package/dist/views/system/menu/components/ButtonManager2.vue.js +498 -0
- package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -0
- package/dist/views/system/menu/components/MenuFormModal.vue.d.ts +22 -0
- package/dist/views/system/menu/components/MenuFormModal.vue.js +8 -0
- package/dist/views/system/menu/components/MenuFormModal.vue.js.map +1 -0
- package/dist/views/system/menu/components/MenuFormModal2.vue.js +259 -0
- package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -0
- package/dist/views/system/menu/index.vue.d.ts +3 -0
- package/dist/views/system/menu/index.vue.js +8 -0
- package/dist/views/system/menu/index.vue.js.map +1 -0
- package/dist/views/system/menu/index2.vue.js +391 -0
- package/dist/views/system/menu/index2.vue.js.map +1 -0
- package/dist/views/system/module/index.vue.d.ts +3 -0
- package/dist/views/system/module/index.vue.js +8 -0
- package/dist/views/system/module/index.vue.js.map +1 -0
- package/dist/views/system/module/index2.vue.js +344 -0
- package/dist/views/system/module/index2.vue.js.map +1 -0
- package/dist/views/system/monitor/index.vue.d.ts +3 -0
- package/dist/views/system/monitor/index.vue.js +8 -0
- package/dist/views/system/monitor/index.vue.js.map +1 -0
- package/dist/views/system/monitor/index2.vue.js +184 -0
- package/dist/views/system/monitor/index2.vue.js.map +1 -0
- package/dist/views/system/notice/index.vue.d.ts +3 -0
- package/dist/views/system/notice/index.vue.js +8 -0
- package/dist/views/system/notice/index.vue.js.map +1 -0
- package/dist/views/system/notice/index2.vue.js +401 -0
- package/dist/views/system/notice/index2.vue.js.map +1 -0
- package/dist/views/system/org/index.vue.d.ts +3 -0
- package/dist/views/system/org/index.vue.js +8 -0
- package/dist/views/system/org/index.vue.js.map +1 -0
- package/dist/views/system/org/index2.vue.js +397 -0
- package/dist/views/system/org/index2.vue.js.map +1 -0
- package/dist/views/system/position/index.vue.d.ts +3 -0
- package/dist/views/system/position/index.vue.js +5 -0
- package/dist/views/system/position/index.vue.js.map +1 -0
- package/dist/views/system/position/index2.vue.js +211 -0
- package/dist/views/system/position/index2.vue.js.map +1 -0
- package/dist/views/system/recycle/index.vue.d.ts +3 -0
- package/dist/views/system/recycle/index.vue.js +8 -0
- package/dist/views/system/recycle/index.vue.js.map +1 -0
- package/dist/views/system/recycle/index2.vue.js +121 -0
- package/dist/views/system/recycle/index2.vue.js.map +1 -0
- package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +18 -0
- package/dist/views/system/role/components/GrantMenuTable.vue.js +8 -0
- package/dist/views/system/role/components/GrantMenuTable.vue.js.map +1 -0
- package/dist/views/system/role/components/GrantMenuTable2.vue.js +212 -0
- package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -0
- package/dist/views/system/role/components/grantMenuGroups.d.ts +31 -0
- package/dist/views/system/role/components/grantMenuGroups.js +76 -0
- package/dist/views/system/role/components/grantMenuGroups.js.map +1 -0
- package/dist/views/system/role/index.vue.d.ts +3 -0
- package/dist/views/system/role/index.vue.js +5 -0
- package/dist/views/system/role/index.vue.js.map +1 -0
- package/dist/views/system/role/index2.vue.js +476 -0
- package/dist/views/system/role/index2.vue.js.map +1 -0
- package/dist/views/system/session/index.vue.d.ts +3 -0
- package/dist/views/system/session/index.vue.js +5 -0
- package/dist/views/system/session/index.vue.js.map +1 -0
- package/dist/views/system/session/index2.vue.js +80 -0
- package/dist/views/system/session/index2.vue.js.map +1 -0
- package/dist/views/system/user/components/ResetPasswordModal.vue.d.ts +10 -0
- package/dist/views/system/user/components/ResetPasswordModal.vue.js +8 -0
- package/dist/views/system/user/components/ResetPasswordModal.vue.js.map +1 -0
- package/dist/views/system/user/components/ResetPasswordModal2.vue.js +111 -0
- package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -0
- package/dist/views/system/user/components/UserFormModal.vue.d.ts +30 -0
- package/dist/views/system/user/components/UserFormModal.vue.js +8 -0
- package/dist/views/system/user/components/UserFormModal.vue.js.map +1 -0
- package/dist/views/system/user/components/UserFormModal2.vue.js +415 -0
- package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -0
- package/dist/views/system/user/index.vue.d.ts +3 -0
- package/dist/views/system/user/index.vue.js +8 -0
- package/dist/views/system/user/index.vue.js.map +1 -0
- package/dist/views/system/user/index2.vue.js +427 -0
- package/dist/views/system/user/index2.vue.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.vue.js","sources":["../../../src/views/module/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport { NButton, NEmpty, NSpin, NTag, useMessage } from 'naive-ui'\nimport { Icon } from '@iconify/vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAuthStore } from '#/stores/auth'\nimport { useUserStore } from '#/stores/user'\nimport { useModule } from '#/composables/useModule'\nimport { beginVoluntaryLogout } from '#/composables/useRealtime'\nimport { resetRouter } from '#/router'\nimport { translateError } from '#/utils/error'\nimport { authApi } from '#/api'\nimport SmartLogo from '#/components/SmartLogo.vue'\n\nconst router = useRouter()\nconst message = useMessage()\nconst { t } = useI18n()\nconst auth = useAuthStore()\nconst user = useUserStore()\nconst busy = ref(false)\n\nasync function pick(id: number) {\n busy.value = true\n try {\n // switchModule = 建路由 + 清标签 + 落新应用首页(旧应用的标签在新应用里都是死链)\n await useModule().switchModule(id)\n } catch (e) {\n message.error(translateError(e))\n } finally {\n busy.value = false\n }\n}\n\nasync function handleLogout() {\n await beginVoluntaryLogout()\n try {\n await authApi.logout()\n } catch {}\n resetRouter()\n auth.reset()\n user.clear()\n router.replace('/login')\n}\n\nasync function setDefault(id: number) {\n try {\n await useModule().setDefault(id)\n message.success(t('common.success'))\n } catch (e) {\n message.error(translateError(e))\n }\n}\n</script>\n\n<template>\n <div class=\"wrap\">\n <div class=\"head\">\n <SmartLogo :size=\"34\" />\n <h1>{{ t('module.choose') }}</h1>\n <!-- 从应用内点九宫格进来的(路由已就绪)才给返回;登录直落选择页时无处可返。 -->\n <n-button v-if=\"auth.routesReady\" text size=\"small\" class=\"back\" @click=\"router.back()\">\n <Icon icon=\"ph:arrow-left\" :width=\"16\" />\n <span style=\"margin-left: 4px\">{{ t('module.back') }}</span>\n </n-button>\n </div>\n\n <n-spin :show=\"busy\">\n <n-empty v-if=\"!auth.modules.length\" :description=\"t('module.empty')\" style=\"padding: 60px 0\">\n <template #extra>\n <n-button size=\"small\" @click=\"handleLogout\">{{ t('app.logout') }}</n-button>\n </template>\n </n-empty>\n <div v-else class=\"grid\">\n <!-- 卡片是可点 div:补 role/tabindex/键盘激活,让键盘用户也能选应用(a11y) -->\n <div\n v-for=\"m in auth.modules\"\n :key=\"m.id\"\n class=\"card\"\n :class=\"{ current: m.id === auth.currentModuleId }\"\n role=\"button\"\n tabindex=\"0\"\n @click=\"pick(m.id)\"\n @keydown.enter=\"pick(m.id)\"\n @keydown.space.prevent=\"pick(m.id)\"\n >\n <div class=\"ico\"><Icon :icon=\"m.icon || 'ph:app-window-duotone'\" :width=\"28\" /></div>\n <div class=\"body\">\n <div class=\"name\">{{ m.title }}</div>\n <div class=\"code\">{{ m.code }}</div>\n </div>\n <n-tag\n v-if=\"m.id === auth.defaultModuleId\"\n size=\"small\"\n type=\"primary\"\n :bordered=\"false\"\n class=\"def\"\n >\n {{ t('module.isDefault') }}\n </n-tag>\n <n-button v-else text size=\"tiny\" class=\"def\" @click.stop=\"setDefault(m.id)\">\n {{ t('module.setDefault') }}\n </n-button>\n </div>\n </div>\n </n-spin>\n </div>\n</template>\n\n<style scoped>\n.wrap {\n min-height: 100dvh;\n background: var(--color-bg-body);\n padding: 80px 24px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.head {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 32px;\n}\n.head h1 {\n font-size: var(--font-size-xl);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n gap: var(--gap-card);\n width: 100%;\n max-width: 900px;\n}\n.card {\n position: relative;\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 20px;\n background: var(--color-bg-container);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-1);\n cursor: pointer;\n transition:\n transform var(--transition-fast),\n border-color var(--transition-fast);\n}\n.card.current {\n border-color: var(--color-primary);\n}\n.card:hover {\n transform: translateY(-3px);\n border-color: var(--color-primary);\n box-shadow: var(--shadow-2);\n}\n.card:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n}\n.ico {\n color: var(--color-primary);\n}\n.name {\n font-size: var(--font-size-md);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.code {\n font-size: var(--font-size-sm);\n color: var(--color-text-tertiary);\n font-family: var(--font-family-mono);\n}\n.def {\n position: absolute;\n top: 10px;\n right: 12px;\n}\n</style>\n"],"names":["router","useRouter","message","useMessage","t","useI18n","auth","useAuthStore","user","useUserStore","busy","ref","pick","id","useModule","e","translateError","handleLogout","beginVoluntaryLogout","authApi","resetRouter","setDefault","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","SmartLogo","_unref","_createBlock","NButton","_cache","$event","Icon","_hoisted_3","_toDisplayString","NSpin","_hoisted_4","_Fragment","_renderList","m","_normalizeClass","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","NTag","_withModifiers","NEmpty"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { defineComponent as w, ref as b, onMounted as A, openBlock as c, createElementBlock as u, createVNode as v, unref as s, createElementVNode as p, toDisplayString as l } from "vue";
|
|
2
|
+
import { useRoute as E, useRouter as T } from "vue-router";
|
|
3
|
+
import { useI18n as q } from "vue-i18n";
|
|
4
|
+
import { NSpin as B } from "naive-ui";
|
|
5
|
+
import { Icon as C } from "@iconify/vue";
|
|
6
|
+
import { externalAuthApi as L } from "../../api/index.js";
|
|
7
|
+
import { useUserStore as I } from "../../stores/user.js";
|
|
8
|
+
import { useAuthStore as D } from "../../stores/auth.js";
|
|
9
|
+
import { resetRouter as O } from "../../router/index.js";
|
|
10
|
+
import { translateError as U } from "../../utils/error.js";
|
|
11
|
+
const V = { class: "oauth-cb" }, z = {
|
|
12
|
+
key: 0,
|
|
13
|
+
class: "oauth-box"
|
|
14
|
+
}, F = { class: "oauth-msg" }, H = {
|
|
15
|
+
key: 1,
|
|
16
|
+
class: "oauth-box"
|
|
17
|
+
}, K = { class: "oauth-msg" }, M = { class: "oauth-sub" }, te = /* @__PURE__ */ w({
|
|
18
|
+
__name: "callback",
|
|
19
|
+
setup(P) {
|
|
20
|
+
const S = E(), t = T(), { t: o } = q(), r = I(), x = D(), h = b("processing"), d = b(""), N = {
|
|
21
|
+
40013: "error.auth.oauthProviderDisabled",
|
|
22
|
+
40014: "error.auth.oauthStateInvalid",
|
|
23
|
+
40015: "error.auth.oauthExchangeFailed",
|
|
24
|
+
40016: "error.auth.oauthAccountNotBound",
|
|
25
|
+
40017: "error.auth.oauthAlreadyBound"
|
|
26
|
+
};
|
|
27
|
+
function a(e) {
|
|
28
|
+
h.value = "error", d.value = e, window.setTimeout(() => t.replace("/login"), 2600);
|
|
29
|
+
}
|
|
30
|
+
function f() {
|
|
31
|
+
!r.accessToken && !r.refreshToken && !r.cookieSession || (O(), x.reset(), r.clear());
|
|
32
|
+
}
|
|
33
|
+
return A(async () => {
|
|
34
|
+
const e = S.query, i = typeof e.ticket == "string" ? e.ticket : "", R = typeof e.bind == "string" ? e.bind : "", m = typeof e.pendingLink == "string" ? e.pendingLink : "", g = typeof e.provider == "string" ? e.provider : "", _ = typeof e.displayName == "string" ? e.displayName : "", y = typeof e.error == "string" ? e.error : "", k = typeof e.totpChallenge == "string" ? e.totpChallenge : "";
|
|
35
|
+
if (k) {
|
|
36
|
+
f(), await t.replace({ path: "/login", query: { totpChallenge: k } });
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (m) {
|
|
40
|
+
f(), await t.replace({
|
|
41
|
+
path: "/login",
|
|
42
|
+
query: {
|
|
43
|
+
pendingLink: m,
|
|
44
|
+
...g ? { provider: g } : {},
|
|
45
|
+
..._ ? { displayName: _ } : {}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (y) {
|
|
51
|
+
const n = N[Number(y)];
|
|
52
|
+
a(o(n || "oauth.failed"));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (R) {
|
|
56
|
+
t.replace("/personal/bindings");
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (i) {
|
|
60
|
+
try {
|
|
61
|
+
r.setSession(await L.exchange(i)), t.replace("/");
|
|
62
|
+
} catch (n) {
|
|
63
|
+
a(U(n));
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
a(o("oauth.failed"));
|
|
68
|
+
}), (e, i) => (c(), u("div", V, [
|
|
69
|
+
h.value === "processing" ? (c(), u("div", z, [
|
|
70
|
+
v(s(B), { size: "large" }),
|
|
71
|
+
p("p", F, l(s(o)("oauth.processing")), 1)
|
|
72
|
+
])) : (c(), u("div", H, [
|
|
73
|
+
v(s(C), {
|
|
74
|
+
icon: "ph:warning-circle-duotone",
|
|
75
|
+
class: "oauth-err-icon"
|
|
76
|
+
}),
|
|
77
|
+
p("p", K, l(d.value), 1),
|
|
78
|
+
p("p", M, l(s(o)("oauth.backToLogin")), 1)
|
|
79
|
+
]))
|
|
80
|
+
]));
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
export {
|
|
84
|
+
te as default
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=callback2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback2.vue.js","sources":["../../../src/views/oauth/callback.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 外部登录 / SSO 回调结果页。IdP → 后端回调换会话后,后端 302 到本页并带:\n// ?ticket=xxx 登录成功:凭一次性票据换令牌 → 存会话 → 进首页\n// ?bind=code 绑定成功:回个人中心绑定页\n// ?pendingLink=…&provider=… 未绑定:转登录页,账密成功后认领自动绑定\n// ?totpChallenge=id (+ error=40018) SSO 后需 TOTP:带回登录页完成二次验证\n// ?error=NNNNN 失败:按错误码提示,稍候回登录页\n// 公开路由(未登录也能到);令牌不进 URL,只带票据(见后端 ExternalAuthController)。\nimport { onMounted, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { NSpin } from 'naive-ui'\nimport { Icon } from '@iconify/vue'\nimport { externalAuthApi } from '#/api'\nimport { useUserStore } from '#/stores/user'\nimport { useAuthStore } from '#/stores/auth'\nimport { resetRouter } from '#/router'\nimport { translateError } from '#/utils/error'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { t } = useI18n()\nconst user = useUserStore()\nconst auth = useAuthStore()\n\nconst state = ref<'processing' | 'error'>('processing')\nconst errorText = ref('')\n\n// 后端按 ErrorCode 数字码重定向;这里映射已知 oauth 码到 i18n(与后端 40013–40017 对齐)\nconst OAUTH_ERROR_KEYS: Record<number, string> = {\n 40013: 'error.auth.oauthProviderDisabled',\n 40014: 'error.auth.oauthStateInvalid',\n 40015: 'error.auth.oauthExchangeFailed',\n 40016: 'error.auth.oauthAccountNotBound',\n 40017: 'error.auth.oauthAlreadyBound',\n}\n\nfunction fail(text: string) {\n state.value = 'error'\n errorText.value = text\n window.setTimeout(() => router.replace('/login'), 2600)\n}\n\n/**\n * 丢掉残留 SPA 会话。解绑后 SSO 会回 pendingLink/totpChallenge → /login;\n * 若 localStorage 仍有 token,路由守卫会把「已登录访问 /login」弹回首页,看起来像「GitHub 直接登录进去了」。\n * 多个前端实例不同源存储时尤其易踩:在一端登出,回调却落到另一端仍带旧会话。\n */\nfunction dropResidualSession() {\n if (!user.accessToken && !user.refreshToken && !user.cookieSession) return\n resetRouter()\n auth.reset()\n user.clear()\n}\n\nonMounted(async () => {\n const q = route.query\n const ticket = typeof q.ticket === 'string' ? q.ticket : ''\n const bind = typeof q.bind === 'string' ? q.bind : ''\n const pendingLink = typeof q.pendingLink === 'string' ? q.pendingLink : ''\n const provider = typeof q.provider === 'string' ? q.provider : ''\n const displayName = typeof q.displayName === 'string' ? q.displayName : ''\n const error = typeof q.error === 'string' ? q.error : ''\n const totpChallenge = typeof q.totpChallenge === 'string' ? q.totpChallenge : ''\n\n // SSO 已通过 IdP,但需 TOTP:把挑战 Id 交给登录页完成 40018 流\n if (totpChallenge) {\n dropResidualSession()\n await router.replace({ path: '/login', query: { totpChallenge } })\n return\n }\n\n // 未绑定:转登录页现场绑定(账密成功后须确认再 claim);必须先清残留会话,否则守卫直接送首页\n if (pendingLink) {\n dropResidualSession()\n await router.replace({\n path: '/login',\n query: {\n pendingLink,\n ...(provider ? { provider } : {}),\n ...(displayName ? { displayName } : {}),\n },\n })\n return\n }\n\n if (error) {\n const key = OAUTH_ERROR_KEYS[Number(error)]\n fail(key ? t(key) : t('oauth.failed'))\n return\n }\n\n if (bind) {\n router.replace('/personal/bindings') // 绑定成功回个人中心\n return\n }\n\n if (ticket) {\n try {\n user.setSession(await externalAuthApi.exchange(ticket))\n router.replace('/')\n } catch (e) {\n fail(translateError(e))\n }\n return\n }\n\n fail(t('oauth.failed')) // 既无票据也无错误码:异常回退\n})\n</script>\n\n<template>\n <div class=\"oauth-cb\">\n <div v-if=\"state === 'processing'\" class=\"oauth-box\">\n <n-spin size=\"large\" />\n <p class=\"oauth-msg\">{{ t('oauth.processing') }}</p>\n </div>\n <div v-else class=\"oauth-box\">\n <Icon icon=\"ph:warning-circle-duotone\" class=\"oauth-err-icon\" />\n <p class=\"oauth-msg\">{{ errorText }}</p>\n <p class=\"oauth-sub\">{{ t('oauth.backToLogin') }}</p>\n </div>\n </div>\n</template>\n\n<style scoped>\n.oauth-cb {\n min-height: 100dvh;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-bg-layout, #f5f6f8);\n}\n.oauth-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n}\n.oauth-msg {\n font-size: 15px;\n color: var(--color-text-primary);\n}\n.oauth-sub {\n font-size: 13px;\n color: var(--color-text-tertiary);\n}\n.oauth-err-icon {\n font-size: 44px;\n color: var(--color-error, #e88080);\n}\n</style>\n"],"names":["route","useRoute","router","useRouter","t","useI18n","user","useUserStore","auth","useAuthStore","state","ref","errorText","OAUTH_ERROR_KEYS","fail","text","dropResidualSession","resetRouter","onMounted","q","ticket","bind","pendingLink","provider","displayName","error","totpChallenge","key","externalAuthApi","e","translateError","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_createVNode","_unref","NSpin","_createElementVNode","_hoisted_3","_toDisplayString","_hoisted_4","Icon","_hoisted_5","_hoisted_6"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindings.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { defineComponent as I, ref as _, computed as B, onMounted as L, openBlock as a, createElementBlock as c, createElementVNode as d, toDisplayString as i, unref as e, createCommentVNode as v, createVNode as m, withCtx as l, createTextVNode as h, createBlock as u, Fragment as P, renderList as q, normalizeClass as T } from "vue";
|
|
2
|
+
import { useMessage as F, NAlert as H, NSpin as R, NEmpty as U, NCard as j, NTag as y, NButton as x } from "naive-ui";
|
|
3
|
+
import { useI18n as G } from "vue-i18n";
|
|
4
|
+
import { externalAuthApi as f } from "../../api/index.js";
|
|
5
|
+
import { useConfirm as J } from "../../composables/useConfirm.js";
|
|
6
|
+
import { translateError as A } from "../../utils/error.js";
|
|
7
|
+
import { fmtDateTime as K } from "../../utils/format.js";
|
|
8
|
+
import { mergeBindingRows as O } from "../../utils/oauthBrand.js";
|
|
9
|
+
import Q from "../../components/oauth/BrandIcon.vue.js";
|
|
10
|
+
import g from "../../components/AppIcon.vue.js";
|
|
11
|
+
const W = { class: "bind-page" }, X = { class: "bind-header" }, Y = { class: "bind-header-text" }, Z = { class: "bind-title" }, w = { class: "bind-hint" }, ee = {
|
|
12
|
+
key: 0,
|
|
13
|
+
class: "bind-summary"
|
|
14
|
+
}, ne = { class: "bind-summary-num" }, ie = { class: "bind-summary-label" }, se = {
|
|
15
|
+
key: 1,
|
|
16
|
+
class: "bind-grid"
|
|
17
|
+
}, te = { class: "bind-card-main" }, ae = {
|
|
18
|
+
key: 0,
|
|
19
|
+
class: "bind-check",
|
|
20
|
+
"aria-hidden": "true"
|
|
21
|
+
}, de = { class: "bind-meta" }, oe = { class: "bind-title-row" }, le = { class: "bind-name" }, ce = { class: "bind-code" }, re = {
|
|
22
|
+
key: 0,
|
|
23
|
+
class: "bind-time"
|
|
24
|
+
}, ue = {
|
|
25
|
+
key: 1,
|
|
26
|
+
class: "bind-disabled-tip"
|
|
27
|
+
}, be = {
|
|
28
|
+
key: 2,
|
|
29
|
+
class: "bind-free-tip"
|
|
30
|
+
}, me = { class: "bind-actions" }, he = {
|
|
31
|
+
key: 2,
|
|
32
|
+
class: "bind-na"
|
|
33
|
+
}, Te = /* @__PURE__ */ I({
|
|
34
|
+
__name: "bindings",
|
|
35
|
+
setup(pe) {
|
|
36
|
+
const { t: s } = G(), k = F(), { confirm: E } = J(), p = _(!0), C = _([]), z = _([]), r = _(null), b = B(() => O(C.value, z.value)), V = B(() => b.value.filter((t) => !!t.binding).length);
|
|
37
|
+
async function N() {
|
|
38
|
+
p.value = !0;
|
|
39
|
+
try {
|
|
40
|
+
const [t, o] = await Promise.all([f.providers(), f.bindings()]);
|
|
41
|
+
C.value = t, z.value = o;
|
|
42
|
+
} catch (t) {
|
|
43
|
+
k.error(A(t));
|
|
44
|
+
} finally {
|
|
45
|
+
p.value = !1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
L(N);
|
|
49
|
+
async function M(t) {
|
|
50
|
+
if (!(!t.enabled || r.value)) {
|
|
51
|
+
r.value = t.code;
|
|
52
|
+
try {
|
|
53
|
+
const { authorizeUrl: o } = await f.bindStart(t.code);
|
|
54
|
+
window.location.href = o;
|
|
55
|
+
} catch (o) {
|
|
56
|
+
k.error(A(o)), r.value = null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function S(t) {
|
|
61
|
+
r.value || E({
|
|
62
|
+
type: "warning",
|
|
63
|
+
content: s("oauth.unbindConfirm", { name: t.displayName }),
|
|
64
|
+
action: () => f.unbind(t.code),
|
|
65
|
+
successMsg: s("oauth.unbound")
|
|
66
|
+
}).then((o) => {
|
|
67
|
+
o && N();
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function $(t) {
|
|
71
|
+
return t.enabled ? t.binding ? "bind-card--bound" : "bind-card--free" : "bind-card--disabled";
|
|
72
|
+
}
|
|
73
|
+
return (t, o) => (a(), c("div", W, [
|
|
74
|
+
d("header", X, [
|
|
75
|
+
d("div", Y, [
|
|
76
|
+
d("h2", Z, i(e(s)("oauth.bindingsTitle")), 1),
|
|
77
|
+
d("p", w, i(e(s)("oauth.bindingsHint")), 1)
|
|
78
|
+
]),
|
|
79
|
+
!p.value && b.value.length ? (a(), c("div", ee, [
|
|
80
|
+
d("span", ne, i(V.value), 1),
|
|
81
|
+
o[0] || (o[0] = d("span", { class: "bind-summary-sep" }, "/", -1)),
|
|
82
|
+
d("span", null, i(b.value.length), 1),
|
|
83
|
+
d("span", ie, i(e(s)("oauth.boundCountLabel")), 1)
|
|
84
|
+
])) : v("", !0)
|
|
85
|
+
]),
|
|
86
|
+
m(e(H), {
|
|
87
|
+
type: "info",
|
|
88
|
+
bordered: !1,
|
|
89
|
+
class: "bind-alert"
|
|
90
|
+
}, {
|
|
91
|
+
default: l(() => [
|
|
92
|
+
h(i(e(s)("oauth.bindingsTip")), 1)
|
|
93
|
+
]),
|
|
94
|
+
_: 1
|
|
95
|
+
}),
|
|
96
|
+
m(e(R), { show: p.value }, {
|
|
97
|
+
default: l(() => [
|
|
98
|
+
!p.value && !b.value.length ? (a(), u(e(U), {
|
|
99
|
+
key: 0,
|
|
100
|
+
description: e(s)("oauth.noProviders"),
|
|
101
|
+
class: "bind-empty"
|
|
102
|
+
}, null, 8, ["description"])) : b.value.length ? (a(), c("div", se, [
|
|
103
|
+
(a(!0), c(P, null, q(b.value, (n) => (a(), u(e(j), {
|
|
104
|
+
key: n.code,
|
|
105
|
+
size: "small",
|
|
106
|
+
bordered: !0,
|
|
107
|
+
class: T(["bind-card", $(n)])
|
|
108
|
+
}, {
|
|
109
|
+
default: l(() => [
|
|
110
|
+
d("div", te, [
|
|
111
|
+
d("span", {
|
|
112
|
+
class: T(["bind-avatar", { "bind-avatar--bound": !!n.binding }])
|
|
113
|
+
}, [
|
|
114
|
+
m(Q, {
|
|
115
|
+
code: n.code,
|
|
116
|
+
icon: n.icon,
|
|
117
|
+
size: 44
|
|
118
|
+
}, null, 8, ["code", "icon"]),
|
|
119
|
+
n.binding ? (a(), c("span", ae, [
|
|
120
|
+
m(g, {
|
|
121
|
+
icon: "ph:check-bold",
|
|
122
|
+
size: 12
|
|
123
|
+
})
|
|
124
|
+
])) : v("", !0)
|
|
125
|
+
], 2),
|
|
126
|
+
d("div", de, [
|
|
127
|
+
d("div", oe, [
|
|
128
|
+
d("span", le, i(n.displayName), 1),
|
|
129
|
+
n.enabled ? n.binding ? (a(), u(e(y), {
|
|
130
|
+
key: 1,
|
|
131
|
+
size: "small",
|
|
132
|
+
type: "success",
|
|
133
|
+
bordered: !1,
|
|
134
|
+
round: ""
|
|
135
|
+
}, {
|
|
136
|
+
default: l(() => [
|
|
137
|
+
h(i(e(s)("oauth.bound")), 1)
|
|
138
|
+
]),
|
|
139
|
+
_: 1
|
|
140
|
+
})) : (a(), u(e(y), {
|
|
141
|
+
key: 2,
|
|
142
|
+
size: "small",
|
|
143
|
+
bordered: !1,
|
|
144
|
+
round: ""
|
|
145
|
+
}, {
|
|
146
|
+
default: l(() => [
|
|
147
|
+
h(i(e(s)("oauth.notBound")), 1)
|
|
148
|
+
]),
|
|
149
|
+
_: 1
|
|
150
|
+
})) : (a(), u(e(y), {
|
|
151
|
+
key: 0,
|
|
152
|
+
size: "small",
|
|
153
|
+
type: "warning",
|
|
154
|
+
bordered: !1,
|
|
155
|
+
round: ""
|
|
156
|
+
}, {
|
|
157
|
+
default: l(() => [
|
|
158
|
+
h(i(e(s)("oauth.disabled")), 1)
|
|
159
|
+
]),
|
|
160
|
+
_: 1
|
|
161
|
+
}))
|
|
162
|
+
]),
|
|
163
|
+
d("code", ce, i(n.code), 1),
|
|
164
|
+
n.binding ? (a(), c("p", re, i(e(s)("oauth.boundAt", { time: e(K)(n.binding.boundAt) })), 1)) : n.enabled ? (a(), c("p", be, i(e(s)("oauth.bindTip")), 1)) : (a(), c("p", ue, i(e(s)("oauth.disabledTip")), 1))
|
|
165
|
+
])
|
|
166
|
+
]),
|
|
167
|
+
d("div", me, [
|
|
168
|
+
n.binding ? (a(), u(e(x), {
|
|
169
|
+
key: 0,
|
|
170
|
+
size: "small",
|
|
171
|
+
quaternary: "",
|
|
172
|
+
type: "error",
|
|
173
|
+
disabled: !!r.value,
|
|
174
|
+
onClick: (D) => S(n)
|
|
175
|
+
}, {
|
|
176
|
+
icon: l(() => [
|
|
177
|
+
m(g, {
|
|
178
|
+
icon: "ph:link-break",
|
|
179
|
+
size: 15
|
|
180
|
+
})
|
|
181
|
+
]),
|
|
182
|
+
default: l(() => [
|
|
183
|
+
h(" " + i(e(s)("oauth.unbind")), 1)
|
|
184
|
+
]),
|
|
185
|
+
_: 1
|
|
186
|
+
}, 8, ["disabled", "onClick"])) : n.enabled ? (a(), u(e(x), {
|
|
187
|
+
key: 1,
|
|
188
|
+
size: "small",
|
|
189
|
+
type: "primary",
|
|
190
|
+
secondary: "",
|
|
191
|
+
loading: r.value === n.code,
|
|
192
|
+
disabled: !!r.value && r.value !== n.code,
|
|
193
|
+
onClick: (D) => M(n)
|
|
194
|
+
}, {
|
|
195
|
+
icon: l(() => [
|
|
196
|
+
m(g, {
|
|
197
|
+
icon: "ph:link",
|
|
198
|
+
size: 15
|
|
199
|
+
})
|
|
200
|
+
]),
|
|
201
|
+
default: l(() => [
|
|
202
|
+
h(" " + i(e(s)("oauth.bind")), 1)
|
|
203
|
+
]),
|
|
204
|
+
_: 1
|
|
205
|
+
}, 8, ["loading", "disabled", "onClick"])) : (a(), c("span", he, i(e(s)("oauth.cannotBind")), 1))
|
|
206
|
+
])
|
|
207
|
+
]),
|
|
208
|
+
_: 2
|
|
209
|
+
}, 1032, ["class"]))), 128))
|
|
210
|
+
])) : v("", !0)
|
|
211
|
+
]),
|
|
212
|
+
_: 1
|
|
213
|
+
}, 8, ["show"])
|
|
214
|
+
]));
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
export {
|
|
218
|
+
Te as default
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=bindings2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bindings2.vue.js","sources":["../../../src/views/personal/bindings.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 账号绑定(个人中心 + 品牌化):启用 providers ∪ 已绑定停用项;卡片网格与配置 Tab 同风。\nimport { computed, onMounted, ref } from 'vue'\nimport { NAlert, NButton, NCard, NEmpty, NSpin, NTag, useMessage } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { externalAuthApi, type ExternalProvider, type ExternalBinding } from '#/api'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { translateError } from '#/utils/error'\nimport { fmtDateTime } from '#/utils/format'\nimport { mergeBindingRows, type BindingRow } from '#/utils/oauthBrand'\nimport BrandIcon from '#/components/oauth/BrandIcon.vue'\nimport AppIcon from '#/components/AppIcon.vue'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { confirm } = useConfirm()\n\nconst loading = ref(true)\nconst providers = ref<ExternalProvider[]>([])\nconst bindings = ref<ExternalBinding[]>([])\nconst busyCode = ref<string | null>(null)\n\nconst rows = computed(() => mergeBindingRows(providers.value, bindings.value))\nconst boundCount = computed(() => rows.value.filter(r => !!r.binding).length)\n\nasync function load() {\n loading.value = true\n try {\n const [ps, bs] = await Promise.all([externalAuthApi.providers(), externalAuthApi.bindings()])\n providers.value = ps\n bindings.value = bs\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\nonMounted(load)\n\nasync function bind(row: BindingRow) {\n if (!row.enabled || busyCode.value) return\n busyCode.value = row.code\n try {\n const { authorizeUrl } = await externalAuthApi.bindStart(row.code)\n window.location.href = authorizeUrl\n } catch (e) {\n message.error(translateError(e))\n busyCode.value = null\n }\n}\n\nfunction unbind(row: BindingRow) {\n if (busyCode.value) return\n confirm({\n type: 'warning',\n content: t('oauth.unbindConfirm', { name: row.displayName }),\n action: () => externalAuthApi.unbind(row.code),\n successMsg: t('oauth.unbound'),\n }).then(ok => {\n if (ok) load()\n })\n}\n\n/** 三种绑定状态各一个修饰类,着色写在样式里(free = naive 默认卡片)。 */\nfunction cardClass(row: BindingRow) {\n if (!row.enabled) return 'bind-card--disabled'\n if (row.binding) return 'bind-card--bound'\n return 'bind-card--free'\n}\n</script>\n\n<template>\n <div class=\"bind-page\">\n <header class=\"bind-header\">\n <div class=\"bind-header-text\">\n <h2 class=\"bind-title\">{{ t('oauth.bindingsTitle') }}</h2>\n <p class=\"bind-hint\">{{ t('oauth.bindingsHint') }}</p>\n </div>\n <div v-if=\"!loading && rows.length\" class=\"bind-summary\">\n <span class=\"bind-summary-num\">{{ boundCount }}</span>\n <span class=\"bind-summary-sep\">/</span>\n <span>{{ rows.length }}</span>\n <span class=\"bind-summary-label\">{{ t('oauth.boundCountLabel') }}</span>\n </div>\n </header>\n\n <n-alert type=\"info\" :bordered=\"false\" class=\"bind-alert\">\n {{ t('oauth.bindingsTip') }}\n </n-alert>\n\n <n-spin :show=\"loading\">\n <n-empty\n v-if=\"!loading && !rows.length\"\n :description=\"t('oauth.noProviders')\"\n class=\"bind-empty\"\n />\n\n <div v-else-if=\"rows.length\" class=\"bind-grid\">\n <n-card\n v-for=\"row in rows\"\n :key=\"row.code\"\n size=\"small\"\n :bordered=\"true\"\n class=\"bind-card\"\n :class=\"cardClass(row)\"\n >\n <div class=\"bind-card-main\">\n <span class=\"bind-avatar\" :class=\"{ 'bind-avatar--bound': !!row.binding }\">\n <BrandIcon :code=\"row.code\" :icon=\"row.icon\" :size=\"44\" />\n <span v-if=\"row.binding\" class=\"bind-check\" aria-hidden=\"true\">\n <AppIcon icon=\"ph:check-bold\" :size=\"12\" />\n </span>\n </span>\n <div class=\"bind-meta\">\n <div class=\"bind-title-row\">\n <span class=\"bind-name\">{{ row.displayName }}</span>\n <n-tag v-if=\"!row.enabled\" size=\"small\" type=\"warning\" :bordered=\"false\" round>\n {{ t('oauth.disabled') }}\n </n-tag>\n <n-tag v-else-if=\"row.binding\" size=\"small\" type=\"success\" :bordered=\"false\" round>\n {{ t('oauth.bound') }}\n </n-tag>\n <n-tag v-else size=\"small\" :bordered=\"false\" round>\n {{ t('oauth.notBound') }}\n </n-tag>\n </div>\n <code class=\"bind-code\">{{ row.code }}</code>\n <p v-if=\"row.binding\" class=\"bind-time\">\n {{ t('oauth.boundAt', { time: fmtDateTime(row.binding.boundAt) }) }}\n </p>\n <p v-else-if=\"!row.enabled\" class=\"bind-disabled-tip\">\n {{ t('oauth.disabledTip') }}\n </p>\n <p v-else class=\"bind-free-tip\">{{ t('oauth.bindTip') }}</p>\n </div>\n </div>\n\n <div class=\"bind-actions\">\n <n-button\n v-if=\"row.binding\"\n size=\"small\"\n quaternary\n type=\"error\"\n :disabled=\"!!busyCode\"\n @click=\"unbind(row)\"\n >\n <template #icon><AppIcon icon=\"ph:link-break\" :size=\"15\" /></template>\n {{ t('oauth.unbind') }}\n </n-button>\n <n-button\n v-else-if=\"row.enabled\"\n size=\"small\"\n type=\"primary\"\n secondary\n :loading=\"busyCode === row.code\"\n :disabled=\"!!busyCode && busyCode !== row.code\"\n @click=\"bind(row)\"\n >\n <template #icon><AppIcon icon=\"ph:link\" :size=\"15\" /></template>\n {{ t('oauth.bind') }}\n </n-button>\n <span v-else class=\"bind-na\">{{ t('oauth.cannotBind') }}</span>\n </div>\n </n-card>\n </div>\n </n-spin>\n </div>\n</template>\n\n<style scoped>\n.bind-page {\n max-width: 920px;\n}\n.bind-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 14px;\n flex-wrap: wrap;\n}\n.bind-title {\n margin: 0 0 6px;\n font-size: 18px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--color-text-primary, #1f1f1f);\n}\n.bind-hint {\n margin: 0;\n max-width: 520px;\n font-size: 13px;\n line-height: 1.55;\n color: var(--color-text-secondary, #666);\n}\n.bind-summary {\n display: inline-flex;\n align-items: baseline;\n gap: 4px;\n padding: 8px 12px;\n border-radius: 10px;\n background: var(--color-fill, #f5f5f5);\n font-size: 13px;\n color: var(--color-text-secondary, #666);\n flex-shrink: 0;\n}\n.bind-summary-num {\n font-size: 18px;\n font-weight: 700;\n color: var(--color-primary, #646cff);\n font-variant-numeric: tabular-nums;\n}\n.bind-summary-sep {\n opacity: 0.5;\n}\n.bind-summary-label {\n margin-left: 4px;\n}\n.bind-alert {\n margin-bottom: 16px;\n border-radius: 10px;\n}\n.bind-empty {\n padding: 48px 0;\n}\n.bind-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 12px;\n}\n/* n-card 默认边框/底色就是 --color-border / --color-bg-container(见 theme/naive-theme.ts),\n 所以「未绑定」态什么都不用写;圆角同样由 Card.borderRadius = --radius-lg 给。 */\n.bind-card :deep(.n-card-content) {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n.bind-card:hover {\n box-shadow: 0 4px 14px rgba(0, 0, 0, 0.06);\n}\n/* 状态着色必须压过 naive 的 `.n-card.n-card--bordered`(两个类=同权重,加载顺序不确定),\n 故修饰类与 .bind-card 复合写,靠权重取胜,而不是靠先后。 */\n.bind-card.bind-card--bound {\n border-color: color-mix(in srgb, var(--color-success, #18a058) 40%, var(--color-border, #e8e8e8));\n background: color-mix(in srgb, var(--color-success, #18a058) 4%, var(--color-bg-container, #fff));\n}\n.bind-card.bind-card--disabled {\n opacity: 0.78;\n background: var(--color-fill-quaternary, #f7f7f7);\n border-style: dashed;\n}\n.bind-card-main {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n min-width: 0;\n}\n.bind-avatar {\n position: relative;\n display: inline-flex;\n width: 48px;\n height: 48px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n overflow: visible;\n background: var(--color-fill, #f5f5f5);\n}\n.bind-avatar :deep(.oauth-brand-badge),\n.bind-avatar :deep(img) {\n border-radius: 50%;\n overflow: hidden;\n}\n.bind-avatar--bound {\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--color-success, #18a058) 35%, transparent);\n}\n.bind-check {\n position: absolute;\n right: -2px;\n bottom: -2px;\n display: inline-flex;\n width: 18px;\n height: 18px;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: var(--color-success, #18a058);\n color: #fff;\n border: 2px solid var(--color-bg-container, #fff);\n line-height: 0;\n}\n.bind-meta {\n min-width: 0;\n flex: 1;\n}\n.bind-title-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 4px;\n}\n.bind-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--color-text-primary, #1f1f1f);\n line-height: 1.3;\n}\n.bind-code {\n display: inline-block;\n font-size: 12px;\n color: var(--color-text-tertiary, #999);\n background: var(--color-fill, #f5f5f5);\n padding: 1px 6px;\n border-radius: 4px;\n}\n.bind-time,\n.bind-free-tip,\n.bind-disabled-tip {\n margin: 8px 0 0;\n font-size: 12px;\n line-height: 1.45;\n color: var(--color-text-tertiary, #999);\n}\n.bind-time {\n color: var(--color-text-secondary, #666);\n}\n.bind-actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding-top: 12px;\n border-top: 1px dashed var(--color-border, #e8e8e8);\n min-height: 36px;\n}\n.bind-na {\n font-size: 12px;\n color: var(--color-text-tertiary, #999);\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","confirm","useConfirm","loading","ref","providers","bindings","busyCode","rows","computed","mergeBindingRows","boundCount","r","load","ps","bs","externalAuthApi","e","translateError","onMounted","bind","row","authorizeUrl","unbind","ok","cardClass","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_toDisplayString","_unref","_hoisted_5","_hoisted_6","_hoisted_7","_cache","_hoisted_8","_createVNode","NAlert","NSpin","_createBlock","NEmpty","_hoisted_9","_Fragment","_renderList","NCard","_normalizeClass","_hoisted_10","BrandIcon","_hoisted_11","AppIcon","_hoisted_12","_hoisted_13","_hoisted_14","NTag","_hoisted_15","_hoisted_16","fmtDateTime","_hoisted_18","_hoisted_17","_hoisted_19","NButton","$event","_createTextVNode","_hoisted_20"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notice.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { defineComponent as E, ref as d, openBlock as y, createElementBlock as b, createVNode as l, unref as i, withCtx as a, createTextVNode as R, toDisplayString as T, createSlots as $, Fragment as D, renderList as I, createBlock as M, h } from "vue";
|
|
2
|
+
import { useMessage as j, NButton as v, NModal as q, NSpace as F, NTag as A } from "naive-ui";
|
|
3
|
+
import { useI18n as L } from "vue-i18n";
|
|
4
|
+
import { SmartTable as U } from "smart-naive-table";
|
|
5
|
+
import G from "../../components/AppIcon.vue.js";
|
|
6
|
+
import H from "../../components/MarkdownEditor/MarkdownView.vue.js";
|
|
7
|
+
import { useConfirm as J } from "../../composables/useConfirm.js";
|
|
8
|
+
import { useNoticeAction as K } from "../../composables/useNoticeAction.js";
|
|
9
|
+
import { noticeApi as w } from "../../api/index.js";
|
|
10
|
+
import { NoticeType as N } from "../../types/api.js";
|
|
11
|
+
import { translateError as x } from "../../utils/error.js";
|
|
12
|
+
import { fmtDateTime as O } from "../../utils/format.js";
|
|
13
|
+
const P = { class: "fill-page" }, ce = /* @__PURE__ */ E({
|
|
14
|
+
__name: "notice",
|
|
15
|
+
setup(Q) {
|
|
16
|
+
const { t } = L(), k = j(), { run: C } = J(), f = K(), p = d(), z = [
|
|
17
|
+
{ type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
|
|
18
|
+
{
|
|
19
|
+
key: "isRead",
|
|
20
|
+
title: () => t("notice.status"),
|
|
21
|
+
width: 80,
|
|
22
|
+
render: (e) => h(
|
|
23
|
+
A,
|
|
24
|
+
{ size: "small", type: e.isRead ? "default" : "success", bordered: !1 },
|
|
25
|
+
() => e.isRead ? t("notice.read") : t("notice.unread")
|
|
26
|
+
)
|
|
27
|
+
},
|
|
28
|
+
{ key: "title", title: () => t("notice.noticeTitle") },
|
|
29
|
+
{
|
|
30
|
+
key: "type",
|
|
31
|
+
title: () => t("notice.type"),
|
|
32
|
+
width: 90,
|
|
33
|
+
render: (e) => h(
|
|
34
|
+
A,
|
|
35
|
+
{
|
|
36
|
+
size: "small",
|
|
37
|
+
type: e.type === N.Announcement ? "warning" : "info",
|
|
38
|
+
bordered: !1
|
|
39
|
+
},
|
|
40
|
+
() => e.type === N.Announcement ? t("notice.typeAnnouncement") : t("notice.typeNotice")
|
|
41
|
+
)
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
key: "publishTime",
|
|
45
|
+
title: () => t("notice.publishTime"),
|
|
46
|
+
width: 170,
|
|
47
|
+
render: (e) => O(e.publishTime)
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
key: "op",
|
|
51
|
+
title: () => t("common.operation"),
|
|
52
|
+
width: 80,
|
|
53
|
+
fixed: "right",
|
|
54
|
+
hideInSetting: !0,
|
|
55
|
+
render: (e) => h(
|
|
56
|
+
v,
|
|
57
|
+
{ size: "small", quaternary: !0, type: "primary", onClick: () => S(e) },
|
|
58
|
+
() => t("notice.view")
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
], c = d(!1), r = d(null);
|
|
62
|
+
async function S(e) {
|
|
63
|
+
var o;
|
|
64
|
+
if (r.value = e, c.value = !0, !e.isRead)
|
|
65
|
+
try {
|
|
66
|
+
await w.markRead(e.id), await ((o = p.value) == null ? void 0 : o.refresh());
|
|
67
|
+
} catch (u) {
|
|
68
|
+
k.error(x(u));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const s = d(null);
|
|
72
|
+
async function B(e, o) {
|
|
73
|
+
s.value = o;
|
|
74
|
+
try {
|
|
75
|
+
await f.run(e) && (c.value = !1);
|
|
76
|
+
} finally {
|
|
77
|
+
s.value = null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function V() {
|
|
81
|
+
var e;
|
|
82
|
+
await C(() => w.markAllRead(), t("notice.allRead")) && await ((e = p.value) == null ? void 0 : e.refresh());
|
|
83
|
+
}
|
|
84
|
+
return (e, o) => {
|
|
85
|
+
var u, g, _;
|
|
86
|
+
return y(), b("div", P, [
|
|
87
|
+
l(i(U), {
|
|
88
|
+
"default-page-size": 100,
|
|
89
|
+
ref_key: "tableRef",
|
|
90
|
+
ref: p,
|
|
91
|
+
columns: z,
|
|
92
|
+
fetcher: i(w).mine,
|
|
93
|
+
"flex-height": "",
|
|
94
|
+
"virtual-scroll": "",
|
|
95
|
+
"storage-key": "personal-notice",
|
|
96
|
+
onError: o[0] || (o[0] = (n) => i(k).error(i(x)(n)))
|
|
97
|
+
}, {
|
|
98
|
+
toolbar: a(() => [
|
|
99
|
+
l(i(v), { onClick: V }, {
|
|
100
|
+
icon: a(() => [
|
|
101
|
+
l(G, {
|
|
102
|
+
icon: "ph:checks",
|
|
103
|
+
size: 16
|
|
104
|
+
})
|
|
105
|
+
]),
|
|
106
|
+
default: a(() => [
|
|
107
|
+
R(" " + T(i(t)("app.notice.markAllRead")), 1)
|
|
108
|
+
]),
|
|
109
|
+
_: 1
|
|
110
|
+
})
|
|
111
|
+
]),
|
|
112
|
+
_: 1
|
|
113
|
+
}, 8, ["fetcher"]),
|
|
114
|
+
l(i(q), {
|
|
115
|
+
show: c.value,
|
|
116
|
+
"onUpdate:show": o[1] || (o[1] = (n) => c.value = n),
|
|
117
|
+
preset: "card",
|
|
118
|
+
title: ((u = r.value) == null ? void 0 : u.title) || i(t)("notice.detailTitle"),
|
|
119
|
+
style: { width: "720px", "max-width": "92vw" }
|
|
120
|
+
}, $({
|
|
121
|
+
default: a(() => {
|
|
122
|
+
var n;
|
|
123
|
+
return [
|
|
124
|
+
l(H, {
|
|
125
|
+
value: (n = r.value) == null ? void 0 : n.content
|
|
126
|
+
}, null, 8, ["value"])
|
|
127
|
+
];
|
|
128
|
+
}),
|
|
129
|
+
_: 2
|
|
130
|
+
}, [
|
|
131
|
+
(_ = (g = r.value) == null ? void 0 : g.actions) != null && _.length ? {
|
|
132
|
+
name: "footer",
|
|
133
|
+
fn: a(() => [
|
|
134
|
+
l(i(F), { justify: "end" }, {
|
|
135
|
+
default: a(() => [
|
|
136
|
+
(y(!0), b(D, null, I(r.value.actions, (n, m) => (y(), M(i(v), {
|
|
137
|
+
key: m,
|
|
138
|
+
size: "small",
|
|
139
|
+
type: i(f).buttonType(n),
|
|
140
|
+
loading: s.value === m,
|
|
141
|
+
disabled: s.value !== null && s.value !== m,
|
|
142
|
+
onClick: (W) => B(n, m)
|
|
143
|
+
}, {
|
|
144
|
+
default: a(() => [
|
|
145
|
+
R(T(i(f).label(n)), 1)
|
|
146
|
+
]),
|
|
147
|
+
_: 2
|
|
148
|
+
}, 1032, ["type", "loading", "disabled", "onClick"]))), 128))
|
|
149
|
+
]),
|
|
150
|
+
_: 1
|
|
151
|
+
})
|
|
152
|
+
]),
|
|
153
|
+
key: "0"
|
|
154
|
+
} : void 0
|
|
155
|
+
]), 1032, ["show", "title"])
|
|
156
|
+
]);
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
export {
|
|
161
|
+
ce as default
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=notice2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notice2.vue.js","sources":["../../../src/views/personal/notice.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 我的通知(个人页,非管理端):列出发给自己的通知并读正文、标记已读。\n// 走 [ActiveSession] 的 notice/mine —— 任何登录用户可调,故本页注册为静态路由,不进菜单/权限系统。\n// 正文随列表一起返回(NoticeMineItem.content),点\"查看\"不另发请求。\n// 通知带动作列表时,正文弹层底部渲染成按钮(useNoticeAction),与顶栏铃铛同一套行为。\nimport { h, ref } from 'vue'\nimport { NButton, NModal, NSpace, NTag, useMessage } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport MarkdownView from '#/components/MarkdownEditor/MarkdownView.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useNoticeAction } from '#/composables/useNoticeAction'\nimport { noticeApi } from '#/api'\nimport { NoticeType, type NoticeAction, type NoticeMineItem } from '#/types/api'\nimport { translateError } from '#/utils/error'\nimport { fmtDateTime } from '#/utils/format'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst noticeAction = useNoticeAction()\nconst tableRef = ref<SmartTableInst<NoticeMineItem>>()\n\nconst columns: SmartTableColumn<NoticeMineItem>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'isRead',\n title: () => t('notice.status'),\n width: 80,\n render: r =>\n h(NTag, { size: 'small', type: r.isRead ? 'default' : 'success', bordered: false }, () =>\n r.isRead ? t('notice.read') : t('notice.unread'),\n ),\n },\n { key: 'title', title: () => t('notice.noticeTitle') },\n {\n key: 'type',\n title: () => t('notice.type'),\n width: 90,\n render: r =>\n h(\n NTag,\n {\n size: 'small',\n type: r.type === NoticeType.Announcement ? 'warning' : 'info',\n bordered: false,\n },\n () =>\n r.type === NoticeType.Announcement\n ? t('notice.typeAnnouncement')\n : t('notice.typeNotice'),\n ),\n },\n {\n key: 'publishTime',\n title: () => t('notice.publishTime'),\n width: 170,\n render: r => fmtDateTime(r.publishTime),\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 80,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openView(r) },\n () => t('notice.view'),\n ),\n },\n]\n\n// ── 查看正文(行里已带 content,不发请求)+ 顺手标记已读 ──\nconst showView = ref(false)\nconst viewRow = ref<NoticeMineItem | null>(null)\nasync function openView(r: NoticeMineItem) {\n viewRow.value = r\n showView.value = true\n if (r.isRead) return\n try {\n await noticeApi.markRead(r.id)\n await tableRef.value?.refresh() // 顶栏未读角标由其自身的 30s 轮询自愈\n } catch (e) {\n message.error(translateError(e))\n }\n}\n\nconst running = ref<number | null>(null)\nasync function onAction(a: NoticeAction, index: number) {\n running.value = index\n try {\n if (await noticeAction.run(a)) showView.value = false\n } finally {\n running.value = null\n }\n}\n\nasync function markAll() {\n if (await run(() => noticeApi.markAllRead(), t('notice.allRead'))) await tableRef.value?.refresh()\n}\n</script>\n\n<template>\n <!-- .fill-page:高度链在 styles/layout.css,卡片吃满内容区,滚动只发生在表体里。 -->\n <div class=\"fill-page\">\n <SmartTable\n :default-page-size=\"100\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"noticeApi.mine\"\n flex-height\n virtual-scroll\n storage-key=\"personal-notice\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button @click=\"markAll\">\n <template #icon><AppIcon icon=\"ph:checks\" :size=\"16\" /></template>\n {{ t('app.notice.markAllRead') }}\n </n-button>\n </template>\n </SmartTable>\n\n <n-modal\n v-model:show=\"showView\"\n preset=\"card\"\n :title=\"viewRow?.title || t('notice.detailTitle')\"\n style=\"width: 720px; max-width: 92vw\"\n >\n <MarkdownView :value=\"viewRow?.content\" />\n <template v-if=\"viewRow?.actions?.length\" #footer>\n <n-space justify=\"end\">\n <n-button\n v-for=\"(a, i) in viewRow.actions\"\n :key=\"i\"\n size=\"small\"\n :type=\"noticeAction.buttonType(a)\"\n :loading=\"running === i\"\n :disabled=\"running !== null && running !== i\"\n @click=\"onAction(a, i)\"\n >\n {{ noticeAction.label(a) }}\n </n-button>\n </n-space>\n </template>\n </n-modal>\n </div>\n</template>\n"],"names":["useI18n","message","useMessage","run","useConfirm","noticeAction","useNoticeAction","tableRef","ref","columns","r","NTag","NoticeType","fmtDateTime","NButton","openView","showView","viewRow","noticeApi","_a","e","translateError","running","onAction","a","index","markAll","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","SmartTable","_cache","AppIcon","_createTextVNode","NModal","$event","MarkdownView","_c","_b","NSpace","_Fragment","i","_createBlock"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
+
declare const _default: typeof __VLS_export;
|
|
3
|
+
export default _default;
|