smart-admin-web 10.14.0 → 10.20.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/README.md +6 -6
- package/dist/api/index.d.ts +41 -2
- package/dist/api/index.js +36 -15
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.d.ts +418 -6
- package/dist/assets/icons/ph-subset.json.js +7 -7
- package/dist/assets/smart-logo.svg.js +5 -0
- package/dist/assets/smart-logo.svg.js.map +1 -0
- package/dist/components/AppIcon.vue.js +9 -9
- package/dist/components/AppIcon.vue.js.map +1 -1
- package/dist/components/AppWatermark.vue.d.ts +14 -0
- package/dist/components/AppWatermark.vue.js +38 -0
- package/dist/components/AppWatermark.vue.js.map +1 -0
- package/dist/components/AppWatermark2.vue.js +5 -0
- package/dist/components/AppWatermark2.vue.js.map +1 -0
- package/dist/components/Chart/PieChart.vue.d.ts +1 -1
- package/dist/components/Chart/echarts.js +15 -20
- package/dist/components/Chart/echarts.js.map +1 -1
- package/dist/components/CronEditor/index.vue.js +1 -1
- package/dist/components/CronEditor/index2.vue.js +2 -1
- package/dist/components/CronEditor/index2.vue.js.map +1 -1
- package/dist/components/DetailPage/index.vue.js +2 -2
- package/dist/components/DetailPage/index2.vue.js.map +1 -1
- package/dist/components/DictTag/index.vue.js.map +1 -1
- package/dist/components/ErrorBoundary/index.vue.js +2 -2
- package/dist/components/ErrorBoundary/index2.vue.js +1 -1
- package/dist/components/ErrorBoundary/index2.vue.js.map +1 -1
- package/dist/components/FormContainer/index.vue.js +91 -56
- package/dist/components/FormContainer/index.vue.js.map +1 -1
- package/dist/components/ImportWizard/index.vue.js +1 -1
- package/dist/components/ImportWizard/index2.vue.js +44 -41
- package/dist/components/ImportWizard/index2.vue.js.map +1 -1
- package/dist/components/MenuSearch.vue.js +2 -2
- package/dist/components/MenuSearch2.vue.js +19 -18
- package/dist/components/MenuSearch2.vue.js.map +1 -1
- package/dist/components/PasswordStrength/index.vue.js +2 -2
- package/dist/components/PasswordStrength/index2.vue.js +20 -18
- package/dist/components/PasswordStrength/index2.vue.js.map +1 -1
- package/dist/components/SmartLogo.vue.d.ts +3 -0
- package/dist/components/SmartLogo.vue.js +1 -1
- package/dist/components/SmartLogo2.vue.js +22 -64
- package/dist/components/SmartLogo2.vue.js.map +1 -1
- package/dist/{views/system/config/components/GroupExtraConfig.vue.d.ts → components/TableTotal/index.vue.d.ts} +1 -4
- package/dist/components/{SelectTable → TableTotal}/index.vue.js +1 -1
- package/dist/components/TableTotal/index2.vue.js +16 -0
- package/dist/components/TableTotal/index2.vue.js.map +1 -0
- package/dist/components/TableZoomButton/index.vue.js.map +1 -1
- package/dist/components/UserPicker/index.vue.js +2 -2
- package/dist/components/UserPicker/index2.vue.js +176 -117
- package/dist/components/UserPicker/index2.vue.js.map +1 -1
- package/dist/composables/useBatchDelete.js.map +1 -1
- package/dist/composables/useLayoutMenu.js +17 -16
- package/dist/composables/useLayoutMenu.js.map +1 -1
- package/dist/composables/useLoginHero.d.ts +2 -0
- package/dist/composables/useLoginHero.js +22 -0
- package/dist/composables/useLoginHero.js.map +1 -0
- package/dist/composables/useModule.js +39 -29
- package/dist/composables/useModule.js.map +1 -1
- package/dist/composables/usePageTitle.js +16 -14
- package/dist/composables/usePageTitle.js.map +1 -1
- package/dist/composables/useShellBreakpoint.d.ts +19 -0
- package/dist/composables/useShellBreakpoint.js +37 -0
- package/dist/composables/useShellBreakpoint.js.map +1 -0
- package/dist/composables/useSite.d.ts +20 -0
- package/dist/composables/useSite.js +18 -13
- package/dist/composables/useSite.js.map +1 -1
- package/dist/composables/useTabTitle.js.map +1 -1
- package/dist/composables/useTableTitle.d.ts +6 -0
- package/dist/composables/useTableTitle.js +11 -0
- package/dist/composables/useTableTitle.js.map +1 -0
- package/dist/composables/useTableZoom.d.ts +5 -0
- package/dist/composables/useTableZoom.js.map +1 -1
- package/dist/composables/useTheme.d.ts +2 -2
- package/dist/composables/useTheme.js +23 -20
- package/dist/composables/useTheme.js.map +1 -1
- package/dist/createSmartAdmin.d.ts +12 -2
- package/dist/createSmartAdmin.js +72 -60
- package/dist/createSmartAdmin.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +223 -208
- package/dist/index.js.map +1 -1
- package/dist/layouts/AccentPicker.vue.js +8 -0
- package/dist/layouts/AccentPicker.vue.js.map +1 -0
- package/dist/layouts/AccentPicker2.vue.js +131 -0
- package/dist/layouts/AccentPicker2.vue.js.map +1 -0
- package/dist/layouts/AppHeader.vue.d.ts +8 -1
- package/dist/layouts/AppHeader.vue.js +2 -2
- package/dist/layouts/AppHeader2.vue.js +317 -235
- package/dist/layouts/AppHeader2.vue.js.map +1 -1
- package/dist/layouts/NoticeBell.vue.js +2 -2
- package/dist/layouts/NoticeBell2.vue.js +1 -1
- package/dist/layouts/NoticeBell2.vue.js.map +1 -1
- package/dist/layouts/PersonalLayout.vue.js +2 -2
- package/dist/layouts/PersonalLayout2.vue.js +69 -47
- package/dist/layouts/PersonalLayout2.vue.js.map +1 -1
- package/dist/layouts/SettingsDrawer.vue.js +3 -3
- package/dist/layouts/SettingsDrawer2.vue.js +261 -325
- package/dist/layouts/SettingsDrawer2.vue.js.map +1 -1
- package/dist/layouts/TabsBar.vue.js +2 -2
- package/dist/layouts/TabsBar2.vue.js +97 -69
- package/dist/layouts/TabsBar2.vue.js.map +1 -1
- package/dist/layouts/components/SideNav.vue.d.ts +3 -0
- package/dist/layouts/components/SideNav.vue.js +1 -1
- package/dist/layouts/components/SideNav2.vue.js +54 -26
- package/dist/layouts/components/SideNav2.vue.js.map +1 -1
- package/dist/layouts/default.vue.js +1 -1
- package/dist/layouts/default2.vue.js +170 -140
- package/dist/layouts/default2.vue.js.map +1 -1
- package/dist/lib/favicon.d.ts +1 -0
- package/dist/lib/favicon.js +12 -0
- package/dist/lib/favicon.js.map +1 -0
- package/dist/lib/loginHero.d.ts +16 -0
- package/dist/lib/loginHero.js +33 -0
- package/dist/lib/loginHero.js.map +1 -0
- package/dist/lib/logoCrop.d.ts +25 -0
- package/dist/lib/logoCrop.js +22 -0
- package/dist/lib/logoCrop.js.map +1 -0
- package/dist/lib/runtime.d.ts +2 -0
- package/dist/lib/runtime.js +1 -1
- package/dist/lib/runtime.js.map +1 -1
- package/dist/lib/securityRules.d.ts +26 -0
- package/dist/lib/securityRules.js +86 -0
- package/dist/lib/securityRules.js.map +1 -0
- package/dist/lib/watermark.d.ts +110 -0
- package/dist/lib/watermark.js +151 -0
- package/dist/lib/watermark.js.map +1 -0
- package/dist/locales/en-US.d.ts +462 -42
- package/dist/locales/en-US.js +491 -78
- package/dist/locales/en-US.js.map +1 -1
- package/dist/locales/kernelMenuTitles.d.ts +1 -0
- package/dist/locales/kernelMenuTitles.js +128 -0
- package/dist/locales/kernelMenuTitles.js.map +1 -0
- package/dist/locales/menuTitle.d.ts +3 -0
- package/dist/locales/menuTitle.js +14 -12
- package/dist/locales/menuTitle.js.map +1 -1
- package/dist/locales/zh-CN.d.ts +462 -42
- package/dist/locales/zh-CN.js +490 -81
- package/dist/locales/zh-CN.js.map +1 -1
- package/dist/router/index.js +41 -32
- package/dist/router/index.js.map +1 -1
- package/dist/router/namedPage.d.ts +4 -0
- package/dist/router/namedPage.js +7 -7
- package/dist/router/namedPage.js.map +1 -1
- package/dist/router/viewRegistry.js +12 -12
- package/dist/router/viewRegistry.js.map +1 -1
- package/dist/stores/app.d.ts +0 -12
- package/dist/stores/app.js +11 -12
- package/dist/stores/app.js.map +1 -1
- package/dist/stores/tabs.js.map +1 -1
- package/dist/stores/user.d.ts +10 -0
- package/dist/stores/user.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/theme/accentTokens.d.ts +27 -0
- package/dist/theme/accentTokens.js +54 -0
- package/dist/theme/accentTokens.js.map +1 -0
- package/dist/theme/accents.d.ts +21 -1
- package/dist/theme/accents.js +11 -2
- package/dist/theme/accents.js.map +1 -1
- package/dist/theme/mix.d.ts +58 -7
- package/dist/theme/mix.js +115 -30
- package/dist/theme/mix.js.map +1 -1
- package/dist/theme/naive-theme.d.ts +5 -2
- package/dist/theme/naive-theme.js +405 -75
- package/dist/theme/naive-theme.js.map +1 -1
- package/dist/utils/jwt.d.ts +8 -0
- package/dist/utils/jwt.js +14 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/menuIcon.d.ts +2 -0
- package/dist/utils/menuIcon.js +8 -0
- package/dist/utils/menuIcon.js.map +1 -0
- package/dist/utils/oauthBrand.d.ts +34 -9
- package/dist/utils/oauthBrand.js +70 -74
- package/dist/utils/oauthBrand.js.map +1 -1
- package/dist/utils/tableFilter.d.ts +88 -0
- package/dist/utils/tableFilter.js +116 -0
- package/dist/utils/tableFilter.js.map +1 -0
- package/dist/utils/tableToolbar.d.ts +18 -0
- package/dist/utils/tableToolbar.js +11 -0
- package/dist/utils/tableToolbar.js.map +1 -0
- package/dist/utils/treeFilter.d.ts +20 -0
- package/dist/utils/treeFilter.js +24 -0
- package/dist/utils/treeFilter.js.map +1 -0
- package/dist/views/dashboard/ShortcutPicker.vue.js +1 -1
- package/dist/views/dashboard/ShortcutPicker2.vue.js +73 -48
- package/dist/views/dashboard/ShortcutPicker2.vue.js.map +1 -1
- package/dist/views/dashboard/biz.vue.js +1 -1
- package/dist/views/dashboard/biz2.vue.js +310 -257
- package/dist/views/dashboard/biz2.vue.js.map +1 -1
- package/dist/views/dashboard/workbench.vue.js +2 -2
- package/dist/views/dashboard/workbench2.vue.js +141 -155
- package/dist/views/dashboard/workbench2.vue.js.map +1 -1
- package/dist/views/embed/iframe.vue.js +2 -2
- package/dist/views/embed/iframe2.vue.js +22 -15
- package/dist/views/embed/iframe2.vue.js.map +1 -1
- package/dist/views/error/404.vue.js +2 -2
- package/dist/views/error/4042.vue.js +33 -24
- package/dist/views/error/4042.vue.js.map +1 -1
- package/dist/views/error/BootError.vue.js +1 -1
- package/dist/views/error/BootError2.vue.js +59 -48
- package/dist/views/error/BootError2.vue.js.map +1 -1
- package/dist/views/error/MissingRoute.vue.js +2 -2
- package/dist/views/error/MissingRoute2.vue.js +34 -15
- package/dist/views/error/MissingRoute2.vue.js.map +1 -1
- package/dist/views/login/LoginForm.vue.d.ts +7 -1
- package/dist/views/login/LoginForm.vue.js +2 -2
- package/dist/views/login/LoginForm2.vue.js +580 -488
- package/dist/views/login/LoginForm2.vue.js.map +1 -1
- package/dist/views/login/components/LoginDesk.vue.d.ts +36 -0
- package/dist/views/login/components/LoginDesk.vue.js +9 -0
- package/dist/views/login/components/LoginDesk.vue.js.map +1 -0
- package/dist/views/login/components/LoginDesk2.vue.js +100 -0
- package/dist/views/login/components/LoginDesk2.vue.js.map +1 -0
- package/dist/views/login/components/LoginHeroPanel.vue.d.ts +18 -0
- package/dist/views/login/components/LoginHeroPanel.vue.js +8 -0
- package/dist/views/login/components/LoginHeroPanel.vue.js.map +1 -0
- package/dist/views/login/components/LoginHeroPanel2.vue.js +61 -0
- package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -0
- package/dist/views/login/index.vue.js +1 -1
- package/dist/views/login/index2.vue.js +141 -71
- package/dist/views/login/index2.vue.js.map +1 -1
- package/dist/views/login/layout.d.ts +11 -0
- package/dist/views/login/layout.js +27 -0
- package/dist/views/login/layout.js.map +1 -0
- package/dist/views/mfa/index.vue.js +2 -2
- package/dist/views/mfa/index2.vue.js +367 -321
- package/dist/views/mfa/index2.vue.js.map +1 -1
- package/dist/views/module/index.vue.js +2 -2
- package/dist/views/module/index2.vue.js +132 -99
- package/dist/views/module/index2.vue.js.map +1 -1
- package/dist/views/oauth/callback.vue.js +2 -2
- package/dist/views/oauth/callback2.vue.js +65 -51
- package/dist/views/oauth/callback2.vue.js.map +1 -1
- package/dist/views/personal/bindings.vue.js +2 -2
- package/dist/views/personal/bindings2.vue.js +98 -94
- package/dist/views/personal/bindings2.vue.js.map +1 -1
- package/dist/views/personal/notice2.vue.js +103 -76
- package/dist/views/personal/notice2.vue.js.map +1 -1
- package/dist/views/personal/password2.vue.js +47 -40
- package/dist/views/personal/password2.vue.js.map +1 -1
- package/dist/views/personal/profile.vue.js +3 -3
- package/dist/views/personal/profile2.vue.js +24 -18
- package/dist/views/personal/profile2.vue.js.map +1 -1
- package/dist/views/personal/security.vue.js +2 -2
- package/dist/views/personal/security2.vue.js +65 -53
- package/dist/views/personal/security2.vue.js.map +1 -1
- package/dist/views/personal/sessions.vue.js +2 -2
- package/dist/views/personal/sessions2.vue.js +67 -62
- package/dist/views/personal/sessions2.vue.js.map +1 -1
- package/dist/views/system/ai-model/components/ProviderCard.vue.js +2 -2
- package/dist/views/system/ai-model/components/ProviderCard2.vue.js +142 -130
- package/dist/views/system/ai-model/components/ProviderCard2.vue.js.map +1 -1
- package/dist/views/system/ai-model/components/ProviderForm.vue.js +2 -2
- package/dist/views/system/ai-model/components/ProviderForm2.vue.js +71 -70
- package/dist/views/system/ai-model/components/ProviderForm2.vue.js.map +1 -1
- package/dist/views/system/ai-model/index.vue.js +2 -2
- package/dist/views/system/ai-model/index2.vue.js +99 -99
- package/dist/views/system/ai-model/index2.vue.js.map +1 -1
- package/dist/views/system/ai-model/presets.d.ts +1 -1
- package/dist/views/system/ai-model/presets.js +18 -18
- package/dist/views/system/ai-model/presets.js.map +1 -1
- package/dist/views/system/ai-usage/index.vue.js +2 -2
- package/dist/views/system/ai-usage/index2.vue.js +356 -258
- package/dist/views/system/ai-usage/index2.vue.js.map +1 -1
- package/dist/views/system/api-docs/index.vue.js +5 -2
- package/dist/views/system/api-docs/index.vue.js.map +1 -1
- package/dist/views/system/api-docs/index2.vue.js +92 -42
- package/dist/views/system/api-docs/index2.vue.js.map +1 -1
- package/dist/views/system/cache/index.vue.js +2 -2
- package/dist/views/system/cache/index2.vue.js +74 -80
- package/dist/views/system/cache/index2.vue.js.map +1 -1
- package/dist/views/system/config/components/AdminMock.vue.js +8 -0
- package/dist/views/system/config/components/AdminMock.vue.js.map +1 -0
- package/dist/views/system/config/components/AdminMock2.vue.js +93 -0
- package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -0
- package/dist/views/system/config/components/AdvancedSection.vue.js +8 -0
- package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -0
- package/dist/views/system/config/components/AdvancedSection2.vue.js +163 -0
- package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/BrandSection.vue.d.ts +7 -0
- package/dist/views/system/config/components/BrandSection.vue.js +8 -0
- package/dist/views/system/config/components/BrandSection.vue.js.map +1 -0
- package/dist/views/system/config/components/BrandSection2.vue.js +266 -0
- package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgGroup.vue.d.ts +18 -0
- package/dist/views/system/config/components/CfgGroup.vue.js +8 -0
- package/dist/views/system/config/components/CfgGroup.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgGroup2.vue.js +22 -0
- package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgRow.vue.d.ts +26 -0
- package/dist/views/system/config/components/CfgRow.vue.js +9 -0
- package/dist/views/system/config/components/CfgRow.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgRow2.vue.js +54 -0
- package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgSegment.vue.d.ts +28 -0
- package/dist/views/system/config/components/CfgSegment.vue.js +8 -0
- package/dist/views/system/config/components/CfgSegment.vue.js.map +1 -0
- package/dist/views/system/config/components/CfgSegment2.vue.js +45 -0
- package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -0
- package/dist/views/system/config/components/ConfigFormModal.vue.js +4 -1
- package/dist/views/system/config/components/ConfigFormModal.vue.js.map +1 -1
- package/dist/views/system/config/components/ConfigFormModal2.vue.js +72 -60
- package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
- package/dist/views/system/config/components/JobSection.vue.js +8 -0
- package/dist/views/system/config/components/JobSection.vue.js.map +1 -0
- package/dist/views/system/config/components/JobSection2.vue.js +140 -0
- package/dist/views/system/config/components/JobSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/LoginMock.vue.d.ts +8 -0
- package/dist/views/system/config/components/LoginMock.vue.js +8 -0
- package/dist/views/system/config/components/LoginMock.vue.js.map +1 -0
- package/dist/views/system/config/components/LoginMock2.vue.js +132 -0
- package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -0
- package/dist/views/system/config/components/LogoCropper.vue.d.ts +10 -0
- package/dist/views/system/config/components/LogoCropper.vue.js +8 -0
- package/dist/views/system/config/components/LogoCropper.vue.js.map +1 -0
- package/dist/views/system/config/components/LogoCropper2.vue.js +122 -0
- package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -0
- package/dist/views/system/config/components/LogoEditor.vue.js +8 -0
- package/dist/views/system/config/components/LogoEditor.vue.js.map +1 -0
- package/dist/views/system/config/components/LogoEditor2.vue.js +161 -0
- package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -0
- package/dist/views/system/config/components/ProviderSheet.vue.d.ts +17 -0
- package/dist/views/system/config/components/ProviderSheet.vue.js +8 -0
- package/dist/views/system/config/components/ProviderSheet.vue.js.map +1 -0
- package/dist/views/system/config/components/ProviderSheet2.vue.js +343 -0
- package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -0
- package/dist/{layouts/SettingRow.vue.d.ts → views/system/config/components/ScaleToFit.vue.d.ts} +2 -1
- package/dist/views/system/config/components/ScaleToFit.vue.js +8 -0
- package/dist/views/system/config/components/ScaleToFit.vue.js.map +1 -0
- package/dist/views/system/config/components/ScaleToFit2.vue.js +41 -0
- package/dist/views/system/config/components/ScaleToFit2.vue.js.map +1 -0
- package/dist/views/system/config/components/SectionLayout.vue.d.ts +30 -0
- package/dist/views/system/config/components/SectionLayout.vue.js +8 -0
- package/dist/views/system/config/components/SectionLayout.vue.js.map +1 -0
- package/dist/views/system/config/components/SectionLayout2.vue.js +69 -0
- package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -0
- package/dist/views/system/config/components/SecuritySection.vue.js +8 -0
- package/dist/views/system/config/components/SecuritySection.vue.js.map +1 -0
- package/dist/views/system/config/components/SecuritySection2.vue.js +417 -0
- package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -0
- package/dist/views/system/config/components/SensitiveSection.vue.js +8 -0
- package/dist/views/system/config/components/SensitiveSection.vue.js.map +1 -0
- package/dist/views/system/config/components/SensitiveSection2.vue.js +214 -0
- package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/SigninSection.vue.js +8 -0
- package/dist/views/system/config/components/SigninSection.vue.js.map +1 -0
- package/dist/views/system/config/components/SigninSection2.vue.js +201 -0
- package/dist/views/system/config/components/SigninSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/UploadSection.vue.js +8 -0
- package/dist/views/system/config/components/UploadSection.vue.js.map +1 -0
- package/dist/views/system/config/components/UploadSection2.vue.js +176 -0
- package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -0
- package/dist/views/system/config/components/WatermarkSection.vue.js +8 -0
- package/dist/views/system/config/components/WatermarkSection.vue.js.map +1 -0
- package/dist/views/system/config/components/WatermarkSection2.vue.js +284 -0
- package/dist/views/system/config/components/WatermarkSection2.vue.js.map +1 -0
- package/dist/views/system/config/draft.d.ts +148 -0
- package/dist/views/system/config/draft.js +170 -0
- package/dist/views/system/config/draft.js.map +1 -0
- package/dist/views/system/config/flash.d.ts +2 -0
- package/dist/views/system/config/flash.js +9 -0
- package/dist/views/system/config/flash.js.map +1 -0
- package/dist/views/system/config/groups.d.ts +38 -7
- package/dist/views/system/config/groups.js +104 -14
- package/dist/views/system/config/groups.js.map +1 -1
- package/dist/views/system/config/index.vue.js +6 -2
- package/dist/views/system/config/index.vue.js.map +1 -1
- package/dist/views/system/config/index2.vue.js +201 -111
- package/dist/views/system/config/index2.vue.js.map +1 -1
- package/dist/views/system/config/layoutMode.d.ts +23 -0
- package/dist/views/system/config/layoutMode.js +28 -0
- package/dist/views/system/config/layoutMode.js.map +1 -0
- package/dist/views/system/config/providerForm.d.ts +33 -0
- package/dist/views/system/config/providerForm.js +63 -0
- package/dist/views/system/config/providerForm.js.map +1 -0
- package/dist/views/system/dict/index.vue.js +2 -2
- package/dist/views/system/dict/index2.vue.js +471 -366
- package/dist/views/system/dict/index2.vue.js.map +1 -1
- package/dist/views/system/file/index2.vue.js +91 -76
- package/dist/views/system/file/index2.vue.js.map +1 -1
- package/dist/views/system/job/index.vue.js +3 -3
- package/dist/views/system/job/index2.vue.js +897 -828
- package/dist/views/system/job/index2.vue.js.map +1 -1
- package/dist/views/system/job-log/components/AttemptTable.vue.d.ts +8 -0
- package/dist/views/system/job-log/components/AttemptTable.vue.js +5 -0
- package/dist/views/system/job-log/components/AttemptTable.vue.js.map +1 -0
- package/dist/views/system/job-log/components/AttemptTable2.vue.js +54 -0
- package/dist/views/system/job-log/components/AttemptTable2.vue.js.map +1 -0
- package/dist/views/system/job-log/index.vue.js +2 -2
- package/dist/views/system/job-log/index2.vue.js +193 -207
- package/dist/views/system/job-log/index2.vue.js.map +1 -1
- package/dist/views/system/job-log/runStatus.d.ts +13 -0
- package/dist/views/system/job-log/runStatus.js +26 -0
- package/dist/views/system/job-log/runStatus.js.map +1 -0
- package/dist/views/system/job-monitor/index.vue.js +2 -2
- package/dist/views/system/job-monitor/index2.vue.js +172 -180
- package/dist/views/system/job-monitor/index2.vue.js.map +1 -1
- package/dist/views/system/log/exception/index.vue.js +2 -2
- package/dist/views/system/log/exception/index2.vue.js +135 -96
- package/dist/views/system/log/exception/index2.vue.js.map +1 -1
- package/dist/views/system/log/login/index2.vue.js +62 -41
- package/dist/views/system/log/login/index2.vue.js.map +1 -1
- package/dist/views/system/log/op/index.vue.js +2 -2
- package/dist/views/system/log/op/index2.vue.js +200 -162
- package/dist/views/system/log/op/index2.vue.js.map +1 -1
- package/dist/views/system/menu/components/ButtonManager.vue.js +2 -2
- package/dist/views/system/menu/components/ButtonManager2.vue.js +206 -190
- package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -1
- package/dist/views/system/menu/components/MenuFormModal.vue.js +2 -2
- package/dist/views/system/menu/components/MenuFormModal2.vue.js +127 -118
- package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -1
- package/dist/views/system/menu/index.vue.js +1 -1
- package/dist/views/system/menu/index2.vue.js +216 -183
- package/dist/views/system/menu/index2.vue.js.map +1 -1
- package/dist/views/system/module/index.vue.js +1 -1
- package/dist/views/system/module/index2.vue.js +177 -144
- package/dist/views/system/module/index2.vue.js.map +1 -1
- package/dist/views/system/monitor/index.vue.js +2 -2
- package/dist/views/system/monitor/index2.vue.js +134 -149
- package/dist/views/system/monitor/index2.vue.js.map +1 -1
- package/dist/views/system/notice/index.vue.js +1 -1
- package/dist/views/system/notice/index2.vue.js +209 -181
- package/dist/views/system/notice/index2.vue.js.map +1 -1
- package/dist/views/system/org/index.vue.js +1 -1
- package/dist/views/system/org/index2.vue.js +278 -248
- package/dist/views/system/org/index2.vue.js.map +1 -1
- package/dist/views/system/position/index.vue.js +5 -2
- package/dist/views/system/position/index.vue.js.map +1 -1
- package/dist/views/system/position/index2.vue.js +128 -92
- package/dist/views/system/position/index2.vue.js.map +1 -1
- package/dist/views/system/recycle/index.vue.js +2 -2
- package/dist/views/system/recycle/index2.vue.js +90 -67
- package/dist/views/system/recycle/index2.vue.js.map +1 -1
- package/dist/views/system/role/components/GrantMenuSheet.vue.d.ts +20 -0
- package/dist/views/system/role/components/GrantMenuSheet.vue.js +8 -0
- package/dist/views/system/role/components/GrantMenuSheet.vue.js.map +1 -0
- package/dist/views/system/role/components/GrantMenuSheet2.vue.js +117 -0
- package/dist/views/system/role/components/GrantMenuSheet2.vue.js.map +1 -0
- package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +6 -4
- package/dist/views/system/role/components/GrantMenuTable.vue.js +2 -2
- package/dist/views/system/role/components/GrantMenuTable2.vue.js +279 -177
- package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -1
- package/dist/views/system/role/components/MatchText.vue.d.ts +7 -0
- package/dist/views/system/role/components/MatchText.vue.js +8 -0
- package/dist/views/system/role/components/MatchText.vue.js.map +1 -0
- package/dist/views/system/role/components/MatchText2.vue.js +29 -0
- package/dist/views/system/role/components/MatchText2.vue.js.map +1 -0
- package/dist/views/system/role/components/grantMenuGroups.d.ts +36 -0
- package/dist/views/system/role/components/grantMenuGroups.js +110 -48
- package/dist/views/system/role/components/grantMenuGroups.js.map +1 -1
- package/dist/views/system/role/index.vue.js +5 -2
- package/dist/views/system/role/index.vue.js.map +1 -1
- package/dist/views/system/role/index2.vue.js +181 -165
- package/dist/views/system/role/index2.vue.js.map +1 -1
- package/dist/views/system/session/index2.vue.js +75 -49
- package/dist/views/system/session/index2.vue.js.map +1 -1
- package/dist/views/system/user/components/ResetPasswordModal.vue.js +2 -2
- package/dist/views/system/user/components/ResetPasswordModal2.vue.js +2 -0
- package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -1
- package/dist/views/system/user/components/UserFormModal.vue.js +2 -2
- package/dist/views/system/user/components/UserFormModal2.vue.js +77 -76
- package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -1
- package/dist/views/system/user/index.vue.js +2 -2
- package/dist/views/system/user/index2.vue.js +362 -275
- package/dist/views/system/user/index2.vue.js.map +1 -1
- package/package.json +6 -8
- package/dist/components/SelectTable/index.vue.d.ts +0 -76
- package/dist/components/SelectTable/index2.vue.js +0 -256
- package/dist/components/SelectTable/index2.vue.js.map +0 -1
- package/dist/composables/useTableRowSort.d.ts +0 -20
- package/dist/composables/useTableRowSort.js +0 -59
- package/dist/composables/useTableRowSort.js.map +0 -1
- package/dist/layouts/LayoutModeCards.vue.js +0 -8
- package/dist/layouts/LayoutModeCards.vue.js.map +0 -1
- package/dist/layouts/LayoutModeCards2.vue.js +0 -67
- package/dist/layouts/LayoutModeCards2.vue.js.map +0 -1
- package/dist/layouts/SettingRow.vue.js +0 -8
- package/dist/layouts/SettingRow.vue.js.map +0 -1
- package/dist/layouts/SettingRow2.vue.js +0 -23
- package/dist/layouts/SettingRow2.vue.js.map +0 -1
- package/dist/views/login/skins/AuroraGlass.vue.js +0 -8
- package/dist/views/login/skins/AuroraGlass.vue.js.map +0 -1
- package/dist/views/login/skins/AuroraGlass2.vue.js +0 -80
- package/dist/views/login/skins/AuroraGlass2.vue.js.map +0 -1
- package/dist/views/login/skins/SplitPanel.vue.js +0 -8
- package/dist/views/login/skins/SplitPanel.vue.js.map +0 -1
- package/dist/views/login/skins/SplitPanel2.vue.js +0 -85
- package/dist/views/login/skins/SplitPanel2.vue.js.map +0 -1
- package/dist/views/login/skins/Spotlight.vue.js +0 -8
- package/dist/views/login/skins/Spotlight.vue.js.map +0 -1
- package/dist/views/login/skins/Spotlight2.vue.js +0 -36
- package/dist/views/login/skins/Spotlight2.vue.js.map +0 -1
- package/dist/views/login/skins.d.ts +0 -8
- package/dist/views/login/skins.js +0 -13
- package/dist/views/login/skins.js.map +0 -1
- package/dist/views/system/config/components/ExternalAuthConfig.vue.js +0 -8
- package/dist/views/system/config/components/ExternalAuthConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/ExternalAuthConfig2.vue.js +0 -218
- package/dist/views/system/config/components/ExternalAuthConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/GroupExtraConfig.vue.js +0 -8
- package/dist/views/system/config/components/GroupExtraConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/GroupExtraConfig2.vue.js +0 -108
- package/dist/views/system/config/components/GroupExtraConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/HighSensConfig.vue.js +0 -5
- package/dist/views/system/config/components/HighSensConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/HighSensConfig2.vue.js +0 -134
- package/dist/views/system/config/components/HighSensConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/JobConfig.vue.js +0 -5
- package/dist/views/system/config/components/JobConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/JobConfig2.vue.js +0 -116
- package/dist/views/system/config/components/JobConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/OtherConfig.vue.js +0 -5
- package/dist/views/system/config/components/OtherConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/OtherConfig2.vue.js +0 -121
- package/dist/views/system/config/components/OtherConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/SecurityConfig.vue.js +0 -8
- package/dist/views/system/config/components/SecurityConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/SecurityConfig2.vue.js +0 -456
- package/dist/views/system/config/components/SecurityConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/SysBaseConfig.vue.js +0 -5
- package/dist/views/system/config/components/SysBaseConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/SysBaseConfig2.vue.js +0 -107
- package/dist/views/system/config/components/SysBaseConfig2.vue.js.map +0 -1
- package/dist/views/system/config/components/UploadConfig.vue.d.ts +0 -3
- package/dist/views/system/config/components/UploadConfig.vue.js +0 -5
- package/dist/views/system/config/components/UploadConfig.vue.js.map +0 -1
- package/dist/views/system/config/components/UploadConfig2.vue.js +0 -135
- package/dist/views/system/config/components/UploadConfig2.vue.js.map +0 -1
- /package/dist/components/{SelectTable → TableTotal}/index.vue.js.map +0 -0
- /package/dist/layouts/{LayoutModeCards.vue.d.ts → AccentPicker.vue.d.ts} +0 -0
- /package/dist/views/{login/skins/AuroraGlass.vue.d.ts → system/config/components/AdminMock.vue.d.ts} +0 -0
- /package/dist/views/{login/skins/SplitPanel.vue.d.ts → system/config/components/AdvancedSection.vue.d.ts} +0 -0
- /package/dist/views/{login/skins/Spotlight.vue.d.ts → system/config/components/JobSection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{ExternalAuthConfig.vue.d.ts → LogoEditor.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{HighSensConfig.vue.d.ts → SecuritySection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{JobConfig.vue.d.ts → SensitiveSection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{OtherConfig.vue.d.ts → SigninSection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{SecurityConfig.vue.d.ts → UploadSection.vue.d.ts} +0 -0
- /package/dist/views/system/config/components/{SysBaseConfig.vue.d.ts → WatermarkSection.vue.d.ts} +0 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { ExternalProviderAdmin } from '../../../api';
|
|
2
|
+
import { ConfigTab, LoginLocale } from './groups';
|
|
3
|
+
export declare const enabledKey: (code: string) => string;
|
|
4
|
+
export declare const linkKey: (code: string) => string;
|
|
5
|
+
export declare const hasLinkSwitch: (code: string) => boolean;
|
|
6
|
+
/** 与原值不同的键(按字符串比较;配置值一律以字符串落库)。 */
|
|
7
|
+
export declare function diffKeys(original: Record<string, string>, values: Record<string, string>): string[];
|
|
8
|
+
/** 保存前的校验结论:error 阻止保存并跳到对应分类,warnings 只提示。 */
|
|
9
|
+
export interface DraftCheck {
|
|
10
|
+
error?: {
|
|
11
|
+
tab: ConfigTab;
|
|
12
|
+
message: string;
|
|
13
|
+
locale?: LoginLocale;
|
|
14
|
+
};
|
|
15
|
+
warnings: {
|
|
16
|
+
locale: LoginLocale;
|
|
17
|
+
message: string;
|
|
18
|
+
}[];
|
|
19
|
+
}
|
|
20
|
+
/** 登录页 Hero 的规则:亮点最多 5 条(阻止);强调词不在主标题里(提示,照常保存)。 */
|
|
21
|
+
export declare function checkDraft(values: Record<string, string>): DraftCheck;
|
|
22
|
+
export declare function createConfigDraft(): {
|
|
23
|
+
original: Record<string, string>;
|
|
24
|
+
values: Record<string, string>;
|
|
25
|
+
providers: import('vue').Ref<{
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
linkByAccount: boolean;
|
|
28
|
+
code: string;
|
|
29
|
+
displayName: string;
|
|
30
|
+
icon?: string | null | undefined;
|
|
31
|
+
}[], ExternalProviderAdmin[] | {
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
linkByAccount: boolean;
|
|
34
|
+
code: string;
|
|
35
|
+
displayName: string;
|
|
36
|
+
icon?: string | null | undefined;
|
|
37
|
+
}[]>;
|
|
38
|
+
catalog: import('vue').Ref<{
|
|
39
|
+
dataProtectionEphemeral: boolean;
|
|
40
|
+
callbackBaseUrlMissing: boolean;
|
|
41
|
+
types: {
|
|
42
|
+
type: string;
|
|
43
|
+
defaultDisplayName: string;
|
|
44
|
+
defaultIcon: null | string;
|
|
45
|
+
allowMultiple: boolean;
|
|
46
|
+
fields: {
|
|
47
|
+
name: string;
|
|
48
|
+
secret: boolean;
|
|
49
|
+
required: boolean;
|
|
50
|
+
default: null | string;
|
|
51
|
+
definesEndpoint: boolean;
|
|
52
|
+
}[];
|
|
53
|
+
}[];
|
|
54
|
+
providers: {
|
|
55
|
+
code: string;
|
|
56
|
+
type: string;
|
|
57
|
+
displayName: string;
|
|
58
|
+
icon: null | string;
|
|
59
|
+
source: string;
|
|
60
|
+
installed: boolean;
|
|
61
|
+
configured: boolean;
|
|
62
|
+
values: {
|
|
63
|
+
[key: string]: string;
|
|
64
|
+
};
|
|
65
|
+
secrets: {
|
|
66
|
+
[key: string]: import('../../..').KernelComponents["schemas"]["ExternalAuthSecretState"];
|
|
67
|
+
};
|
|
68
|
+
callbackUri: string;
|
|
69
|
+
}[];
|
|
70
|
+
callbackUriTemplate: string;
|
|
71
|
+
}, {
|
|
72
|
+
dataProtectionEphemeral: boolean;
|
|
73
|
+
callbackBaseUrlMissing: boolean;
|
|
74
|
+
types: import('../../..').KernelComponents["schemas"]["ExternalAuthTypeView"][];
|
|
75
|
+
providers: import('../../..').KernelComponents["schemas"]["ExternalAuthProviderView"][];
|
|
76
|
+
callbackUriTemplate: string;
|
|
77
|
+
} | {
|
|
78
|
+
dataProtectionEphemeral: boolean;
|
|
79
|
+
callbackBaseUrlMissing: boolean;
|
|
80
|
+
types: {
|
|
81
|
+
type: string;
|
|
82
|
+
defaultDisplayName: string;
|
|
83
|
+
defaultIcon: null | string;
|
|
84
|
+
allowMultiple: boolean;
|
|
85
|
+
fields: {
|
|
86
|
+
name: string;
|
|
87
|
+
secret: boolean;
|
|
88
|
+
required: boolean;
|
|
89
|
+
default: null | string;
|
|
90
|
+
definesEndpoint: boolean;
|
|
91
|
+
}[];
|
|
92
|
+
}[];
|
|
93
|
+
providers: {
|
|
94
|
+
code: string;
|
|
95
|
+
type: string;
|
|
96
|
+
displayName: string;
|
|
97
|
+
icon: null | string;
|
|
98
|
+
source: string;
|
|
99
|
+
installed: boolean;
|
|
100
|
+
configured: boolean;
|
|
101
|
+
values: {
|
|
102
|
+
[key: string]: string;
|
|
103
|
+
};
|
|
104
|
+
secrets: {
|
|
105
|
+
[key: string]: import('../../..').KernelComponents["schemas"]["ExternalAuthSecretState"];
|
|
106
|
+
};
|
|
107
|
+
callbackUri: string;
|
|
108
|
+
}[];
|
|
109
|
+
callbackUriTemplate: string;
|
|
110
|
+
}>;
|
|
111
|
+
providerRows: import('vue').ComputedRef<import('../../../utils/oauthBrand').ConfigProviderRow[]>;
|
|
112
|
+
loading: import('vue').Ref<boolean, boolean>;
|
|
113
|
+
saving: import('vue').Ref<boolean, boolean>;
|
|
114
|
+
pendingLogo: import('vue').Ref<{
|
|
115
|
+
readonly size: number;
|
|
116
|
+
readonly type: string;
|
|
117
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
118
|
+
bytes: () => Promise<Uint8Array<ArrayBuffer>>;
|
|
119
|
+
slice: (start?: number, end?: number, contentType?: string) => Blob;
|
|
120
|
+
stream: () => ReadableStream<Uint8Array<ArrayBuffer>>;
|
|
121
|
+
text: () => Promise<string>;
|
|
122
|
+
} | null, Blob | {
|
|
123
|
+
readonly size: number;
|
|
124
|
+
readonly type: string;
|
|
125
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
126
|
+
bytes: () => Promise<Uint8Array<ArrayBuffer>>;
|
|
127
|
+
slice: (start?: number, end?: number, contentType?: string) => Blob;
|
|
128
|
+
stream: () => ReadableStream<Uint8Array<ArrayBuffer>>;
|
|
129
|
+
text: () => Promise<string>;
|
|
130
|
+
} | null>;
|
|
131
|
+
dirtyKeys: import('vue').ComputedRef<string[]>;
|
|
132
|
+
dirtyTabs: import('vue').ComputedRef<Set<"security" | "brand" | "watermark" | "advanced" | "job" | "sensitive" | "upload" | "signin">>;
|
|
133
|
+
claimedKeys: import('vue').ComputedRef<string[]>;
|
|
134
|
+
load: () => Promise<void>;
|
|
135
|
+
refreshProviders: () => Promise<void>;
|
|
136
|
+
discard: () => void;
|
|
137
|
+
save: () => Promise<void>;
|
|
138
|
+
setPendingLogo: (blob: Blob | null, previewUrl: string) => void;
|
|
139
|
+
};
|
|
140
|
+
export type ConfigDraft = ReturnType<typeof createConfigDraft>;
|
|
141
|
+
export declare function provideConfigDraft(draft: ConfigDraft): void;
|
|
142
|
+
export declare function useConfigDraft(): ConfigDraft;
|
|
143
|
+
/** 字符串 / 数值 / 开关三种双向绑定,模板里直接 v-model。 */
|
|
144
|
+
export declare function useDraftFields(): {
|
|
145
|
+
str: (key: string) => import('vue').WritableComputedRef<string, string>;
|
|
146
|
+
num: (key: string, fallback: number) => import('vue').WritableComputedRef<number, number>;
|
|
147
|
+
bool: (key: string) => import('vue').WritableComputedRef<boolean, boolean>;
|
|
148
|
+
};
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { reactive as L, ref as m, computed as v, provide as B, inject as F } from "vue";
|
|
2
|
+
import { configApi as O, externalAuthApi as p } from "../../../api/index.js";
|
|
3
|
+
import { loadSite as M } from "../../../composables/useSite.js";
|
|
4
|
+
import { splitLoginHeroFeatures as G } from "../../../lib/loginHero.js";
|
|
5
|
+
import { buildConfigProviderRows as I, LINK_BY_ACCOUNT_CODES as x } from "../../../utils/oauthBrand.js";
|
|
6
|
+
import { tabOfKey as Y, STATIC_CLAIMED_KEYS as S, LOGIN_LOCALES as V, LOGO_KEY as y, bumpConfigRevision as $, STRUCTURED_GROUPS as H, heroKeys as W } from "./groups.js";
|
|
7
|
+
const h = (e) => `sys.externalauth.${e}.enabled`, A = (e) => `sys.externalauth.${e}.linkByAccount`, k = (e) => x.includes(e);
|
|
8
|
+
function E(e, t) {
|
|
9
|
+
return Object.keys(t).filter((i) => t[i] !== e[i]);
|
|
10
|
+
}
|
|
11
|
+
function te(e) {
|
|
12
|
+
var i, r;
|
|
13
|
+
const t = [];
|
|
14
|
+
for (const l of V) {
|
|
15
|
+
const f = W(l);
|
|
16
|
+
if (G(e[f.features], Number.MAX_SAFE_INTEGER).length > 5)
|
|
17
|
+
return { error: { tab: "brand", locale: l, message: "config.login.tooManyFeatures" }, warnings: t };
|
|
18
|
+
const a = ((i = e[f.headline]) == null ? void 0 : i.trim()) ?? "", u = ((r = e[f.highlight]) == null ? void 0 : r.trim()) ?? "";
|
|
19
|
+
u && a && !a.includes(u) && t.push({ locale: l, message: "config.login.highlightMissing" });
|
|
20
|
+
}
|
|
21
|
+
return { warnings: t };
|
|
22
|
+
}
|
|
23
|
+
function oe() {
|
|
24
|
+
const e = L({}), t = L({}), i = m([]), r = m({
|
|
25
|
+
dataProtectionEphemeral: !1,
|
|
26
|
+
callbackBaseUrlMissing: !1,
|
|
27
|
+
callbackUriTemplate: "",
|
|
28
|
+
types: [],
|
|
29
|
+
providers: []
|
|
30
|
+
}), l = m(!0), f = m(!1), a = m(null), u = v(() => I(r.value, i.value)), b = v(() => E(e, t)), j = v(() => new Set(b.value.map(Y))), _ = v(() => [
|
|
31
|
+
...S,
|
|
32
|
+
...u.value.flatMap(
|
|
33
|
+
(o) => k(o.code) ? [h(o.code), A(o.code)] : [h(o.code)]
|
|
34
|
+
)
|
|
35
|
+
]);
|
|
36
|
+
function D(o) {
|
|
37
|
+
for (const n of Object.keys(e)) delete e[n];
|
|
38
|
+
for (const n of Object.keys(t)) delete t[n];
|
|
39
|
+
Object.assign(e, o), Object.assign(t, o);
|
|
40
|
+
}
|
|
41
|
+
async function R() {
|
|
42
|
+
l.value = !0;
|
|
43
|
+
try {
|
|
44
|
+
const [o, n, g] = await Promise.all([
|
|
45
|
+
Promise.all(H.map((d) => O.listByGroup(d))),
|
|
46
|
+
p.providersAll(),
|
|
47
|
+
p.catalog()
|
|
48
|
+
]);
|
|
49
|
+
i.value = n, r.value = g;
|
|
50
|
+
const c = new Set(S), s = {};
|
|
51
|
+
for (const d of S) s[d] = "";
|
|
52
|
+
for (const d of o.flat())
|
|
53
|
+
c.has(d.configKey) && (s[d.configKey] = d.configValue ?? "");
|
|
54
|
+
Object.assign(s, C()), D(s);
|
|
55
|
+
} finally {
|
|
56
|
+
l.value = !1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function C() {
|
|
60
|
+
const o = {};
|
|
61
|
+
for (const n of u.value.filter((g) => g.registered))
|
|
62
|
+
o[h(n.code)] = String(n.enabled), k(n.code) && (o[A(n.code)] = String(n.linkByAccount));
|
|
63
|
+
return o;
|
|
64
|
+
}
|
|
65
|
+
async function N() {
|
|
66
|
+
const [o, n] = await Promise.all([
|
|
67
|
+
p.providersAll(),
|
|
68
|
+
p.catalog()
|
|
69
|
+
]);
|
|
70
|
+
i.value = o, r.value = n;
|
|
71
|
+
const g = C();
|
|
72
|
+
for (const [c, s] of Object.entries(g))
|
|
73
|
+
c in e || (e[c] = s, t[c] = s);
|
|
74
|
+
for (const c of u.value.filter((s) => !s.registered))
|
|
75
|
+
for (const s of [h(c.code), A(c.code)])
|
|
76
|
+
delete e[s], delete t[s];
|
|
77
|
+
}
|
|
78
|
+
function P(o, n) {
|
|
79
|
+
w(), a.value = o, t[y] = n;
|
|
80
|
+
}
|
|
81
|
+
function w() {
|
|
82
|
+
var o;
|
|
83
|
+
(o = t[y]) != null && o.startsWith("blob:") && URL.revokeObjectURL(t[y]);
|
|
84
|
+
}
|
|
85
|
+
function T() {
|
|
86
|
+
w(), a.value = null, Object.assign(t, e);
|
|
87
|
+
}
|
|
88
|
+
async function U() {
|
|
89
|
+
f.value = !0;
|
|
90
|
+
try {
|
|
91
|
+
if (a.value) {
|
|
92
|
+
const n = new File([a.value], "logo.png", { type: "image/png" }), g = await O.uploadLogo(n);
|
|
93
|
+
w(), t[y] = g.viewUrl ?? "", a.value = null;
|
|
94
|
+
}
|
|
95
|
+
for (const n of b.value) t[n] = t[n].trim();
|
|
96
|
+
const o = E(e, t).map((n) => ({
|
|
97
|
+
configKey: n,
|
|
98
|
+
configValue: t[n]
|
|
99
|
+
}));
|
|
100
|
+
o.length && await O.saveBatch(o), Object.assign(e, t), $(), await M(!0);
|
|
101
|
+
} finally {
|
|
102
|
+
f.value = !1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
original: e,
|
|
107
|
+
values: t,
|
|
108
|
+
providers: i,
|
|
109
|
+
catalog: r,
|
|
110
|
+
providerRows: u,
|
|
111
|
+
loading: l,
|
|
112
|
+
saving: f,
|
|
113
|
+
pendingLogo: a,
|
|
114
|
+
dirtyKeys: b,
|
|
115
|
+
dirtyTabs: j,
|
|
116
|
+
claimedKeys: _,
|
|
117
|
+
load: R,
|
|
118
|
+
refreshProviders: N,
|
|
119
|
+
discard: T,
|
|
120
|
+
save: U,
|
|
121
|
+
setPendingLogo: P
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const K = Symbol("config-draft");
|
|
125
|
+
function ne(e) {
|
|
126
|
+
B(K, e);
|
|
127
|
+
}
|
|
128
|
+
function X() {
|
|
129
|
+
const e = F(K);
|
|
130
|
+
if (!e) throw new Error("useConfigDraft() 只能在配置中心页面内使用");
|
|
131
|
+
return e;
|
|
132
|
+
}
|
|
133
|
+
function ie() {
|
|
134
|
+
const { values: e } = X();
|
|
135
|
+
return {
|
|
136
|
+
str: (t) => v({
|
|
137
|
+
get: () => e[t] ?? "",
|
|
138
|
+
set: (i) => {
|
|
139
|
+
e[t] = i ?? "";
|
|
140
|
+
}
|
|
141
|
+
}),
|
|
142
|
+
num: (t, i) => v({
|
|
143
|
+
get: () => {
|
|
144
|
+
const r = Number(e[t]);
|
|
145
|
+
return e[t] === "" || e[t] === void 0 || Number.isNaN(r) ? i : r;
|
|
146
|
+
},
|
|
147
|
+
set: (r) => {
|
|
148
|
+
e[t] = String(r ?? i);
|
|
149
|
+
}
|
|
150
|
+
}),
|
|
151
|
+
bool: (t) => v({
|
|
152
|
+
get: () => e[t] === "true",
|
|
153
|
+
set: (i) => {
|
|
154
|
+
e[t] = i ? "true" : "false";
|
|
155
|
+
}
|
|
156
|
+
})
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export {
|
|
160
|
+
te as checkDraft,
|
|
161
|
+
oe as createConfigDraft,
|
|
162
|
+
E as diffKeys,
|
|
163
|
+
h as enabledKey,
|
|
164
|
+
k as hasLinkSwitch,
|
|
165
|
+
A as linkKey,
|
|
166
|
+
ne as provideConfigDraft,
|
|
167
|
+
X as useConfigDraft,
|
|
168
|
+
ie as useDraftFields
|
|
169
|
+
};
|
|
170
|
+
//# sourceMappingURL=draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft.js","sources":["../../../../src/views/system/config/draft.ts"],"sourcesContent":["// 配置中心的页面级草稿:进页面一次载入所有结构化表单的值,各分类只读写这份草稿,\n// 底部保存条统一保存。切换顶部导航不会丢改动;离开页面草稿随组件销毁。\nimport { computed, inject, provide, reactive, ref, type InjectionKey } from 'vue'\nimport {\n configApi,\n externalAuthApi,\n type ExternalAuthCatalog,\n type ExternalProviderAdmin,\n} from '#/api'\nimport { loadSite } from '#/composables/useSite'\nimport { splitLoginHeroFeatures } from '#/lib/loginHero'\nimport { buildConfigProviderRows, LINK_BY_ACCOUNT_CODES } from '#/utils/oauthBrand'\nimport {\n bumpConfigRevision,\n heroKeys,\n LOGIN_LOCALES,\n LOGO_KEY,\n STATIC_CLAIMED_KEYS,\n STRUCTURED_GROUPS,\n tabOfKey,\n type ConfigTab,\n type LoginLocale,\n} from './groups'\n\nexport const enabledKey = (code: string) => `sys.externalauth.${code}.enabled`\nexport const linkKey = (code: string) => `sys.externalauth.${code}.linkByAccount`\nexport const hasLinkSwitch = (code: string) => LINK_BY_ACCOUNT_CODES.includes(code)\n\n/** 与原值不同的键(按字符串比较;配置值一律以字符串落库)。 */\nexport function diffKeys(original: Record<string, string>, values: Record<string, string>) {\n return Object.keys(values).filter(key => values[key] !== original[key])\n}\n\n/** 保存前的校验结论:error 阻止保存并跳到对应分类,warnings 只提示。 */\nexport interface DraftCheck {\n error?: { tab: ConfigTab; message: string; locale?: LoginLocale }\n warnings: { locale: LoginLocale; message: string }[]\n}\n\n/** 登录页 Hero 的规则:亮点最多 5 条(阻止);强调词不在主标题里(提示,照常保存)。 */\nexport function checkDraft(values: Record<string, string>): DraftCheck {\n const warnings: DraftCheck['warnings'] = []\n for (const locale of LOGIN_LOCALES) {\n const keys = heroKeys(locale)\n if (splitLoginHeroFeatures(values[keys.features], Number.MAX_SAFE_INTEGER).length > 5)\n return { error: { tab: 'brand', locale, message: 'config.login.tooManyFeatures' }, warnings }\n const headline = values[keys.headline]?.trim() ?? ''\n const highlight = values[keys.highlight]?.trim() ?? ''\n if (highlight && headline && !headline.includes(highlight))\n warnings.push({ locale, message: 'config.login.highlightMissing' })\n }\n return { warnings }\n}\n\nexport function createConfigDraft() {\n const original = reactive<Record<string, string>>({})\n const values = reactive<Record<string, string>>({})\n const providers = ref<ExternalProviderAdmin[]>([])\n const catalog = ref<ExternalAuthCatalog>({\n dataProtectionEphemeral: false,\n callbackBaseUrlMissing: false,\n callbackUriTemplate: '',\n types: [],\n providers: [],\n })\n const loading = ref(true)\n const saving = ref(false)\n /** 裁剪好、还没上传的 Logo;预览期间 values[LOGO_KEY] 是它的 blob: 地址,保存时才上传 */\n const pendingLogo = ref<Blob | null>(null)\n\n const providerRows = computed(() => buildConfigProviderRows(catalog.value, providers.value))\n const dirtyKeys = computed(() => diffKeys(original, values))\n const dirtyTabs = computed(() => new Set(dirtyKeys.value.map(tabOfKey)))\n /** 结构化表单认领的全部键:「高级」页排除它们。未注册的第三方登录方式也算,它们的开关在卡片上。 */\n const claimedKeys = computed(() => [\n ...STATIC_CLAIMED_KEYS,\n ...providerRows.value.flatMap(p =>\n hasLinkSwitch(p.code) ? [enabledKey(p.code), linkKey(p.code)] : [enabledKey(p.code)],\n ),\n ])\n\n function reset(next: Record<string, string>) {\n for (const key of Object.keys(original)) delete original[key]\n for (const key of Object.keys(values)) delete values[key]\n Object.assign(original, next)\n Object.assign(values, next)\n }\n\n async function load() {\n loading.value = true\n try {\n const [groups, list, cat] = await Promise.all([\n Promise.all(STRUCTURED_GROUPS.map(g => configApi.listByGroup(g))),\n externalAuthApi.providersAll(),\n externalAuthApi.catalog(),\n ])\n providers.value = list\n catalog.value = cat\n const claimed = new Set(STATIC_CLAIMED_KEYS)\n const next: Record<string, string> = {}\n // 库里没有的键按空串起步:表单显示默认值,不动它就不算改动,也不会被写回\n for (const key of STATIC_CLAIMED_KEYS) next[key] = ''\n for (const row of groups.flat())\n if (claimed.has(row.configKey)) next[row.configKey] = row.configValue ?? ''\n // 第三方登录只收已配置的方式:没配好的开关不可打开,永远不写\n Object.assign(next, providerSwitchValues())\n reset(next)\n } finally {\n loading.value = false\n }\n }\n\n /** 已配置的第三方各自的开关值(enabled / linkByAccount)。 */\n function providerSwitchValues() {\n const out: Record<string, string> = {}\n for (const p of providerRows.value.filter(row => row.registered)) {\n out[enabledKey(p.code)] = String(p.enabled)\n if (hasLinkSwitch(p.code)) out[linkKey(p.code)] = String(p.linkByAccount)\n }\n return out\n }\n\n /**\n * 设置面板保存或清除之后重读第三方目录。已在草稿里的开关不动(可能有未保存的改动),\n * 新配好的补进来,被清掉的移出——没有配置的方式,开关没有意义。\n */\n async function refreshProviders() {\n const [list, cat] = await Promise.all([\n externalAuthApi.providersAll(),\n externalAuthApi.catalog(),\n ])\n providers.value = list\n catalog.value = cat\n const fresh = providerSwitchValues()\n for (const [key, value] of Object.entries(fresh)) {\n if (key in original) continue\n original[key] = value\n values[key] = value\n }\n for (const row of providerRows.value.filter(r => !r.registered)) {\n for (const key of [enabledKey(row.code), linkKey(row.code)]) {\n delete original[key]\n delete values[key]\n }\n }\n }\n\n function setPendingLogo(blob: Blob | null, previewUrl: string) {\n revokePreview()\n pendingLogo.value = blob\n values[LOGO_KEY] = previewUrl\n }\n\n function revokePreview() {\n if (values[LOGO_KEY]?.startsWith('blob:')) URL.revokeObjectURL(values[LOGO_KEY])\n }\n\n function discard() {\n revokePreview()\n pendingLogo.value = null\n Object.assign(values, original)\n }\n\n /** 保存全部改动;有待传的 Logo 先上传换成签名直链,再一次批量写库。 */\n async function save() {\n saving.value = true\n try {\n if (pendingLogo.value) {\n const file = new File([pendingLogo.value], 'logo.png', { type: 'image/png' })\n const uploaded = await configApi.uploadLogo(file)\n revokePreview()\n values[LOGO_KEY] = uploaded.viewUrl ?? ''\n // 传完就清掉:后面批量保存失败时重试不会再传一遍\n pendingLogo.value = null\n }\n for (const key of dirtyKeys.value) values[key] = values[key].trim()\n const items = diffKeys(original, values).map(configKey => ({\n configKey,\n configValue: values[configKey],\n }))\n if (items.length) await configApi.saveBatch(items)\n Object.assign(original, values)\n bumpConfigRevision()\n // 即时生效:侧栏、顶栏、登录页、浏览器标签页的品牌随之刷新\n await loadSite(true)\n } finally {\n saving.value = false\n }\n }\n\n return {\n original,\n values,\n providers,\n catalog,\n providerRows,\n loading,\n saving,\n pendingLogo,\n dirtyKeys,\n dirtyTabs,\n claimedKeys,\n load,\n refreshProviders,\n discard,\n save,\n setPendingLogo,\n }\n}\n\nexport type ConfigDraft = ReturnType<typeof createConfigDraft>\n\nconst DRAFT_KEY: InjectionKey<ConfigDraft> = Symbol('config-draft')\n\nexport function provideConfigDraft(draft: ConfigDraft) {\n provide(DRAFT_KEY, draft)\n}\n\nexport function useConfigDraft(): ConfigDraft {\n const draft = inject(DRAFT_KEY)\n if (!draft) throw new Error('useConfigDraft() 只能在配置中心页面内使用')\n return draft\n}\n\n/** 字符串 / 数值 / 开关三种双向绑定,模板里直接 v-model。 */\nexport function useDraftFields() {\n const { values } = useConfigDraft()\n return {\n str: (key: string) =>\n computed({\n get: () => values[key] ?? '',\n set: v => {\n values[key] = v ?? ''\n },\n }),\n num: (key: string, fallback: number) =>\n computed<number>({\n get: () => {\n const n = Number(values[key])\n return values[key] === '' || values[key] === undefined || Number.isNaN(n) ? fallback : n\n },\n set: v => {\n values[key] = String(v ?? fallback)\n },\n }),\n bool: (key: string) =>\n computed<boolean>({\n get: () => values[key] === 'true',\n set: v => {\n values[key] = v ? 'true' : 'false'\n },\n }),\n }\n}\n"],"names":["enabledKey","code","linkKey","hasLinkSwitch","LINK_BY_ACCOUNT_CODES","diffKeys","original","values","key","checkDraft","warnings","locale","LOGIN_LOCALES","keys","heroKeys","splitLoginHeroFeatures","headline","_a","highlight","_b","createConfigDraft","reactive","providers","ref","catalog","loading","saving","pendingLogo","providerRows","computed","buildConfigProviderRows","dirtyKeys","dirtyTabs","tabOfKey","claimedKeys","STATIC_CLAIMED_KEYS","p","reset","next","load","groups","list","cat","STRUCTURED_GROUPS","configApi","g","externalAuthApi","claimed","row","providerSwitchValues","out","refreshProviders","fresh","value","r","setPendingLogo","blob","previewUrl","revokePreview","LOGO_KEY","discard","save","file","uploaded","items","configKey","bumpConfigRevision","loadSite","DRAFT_KEY","provideConfigDraft","draft","provide","useConfigDraft","inject","useDraftFields","v","fallback","n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flash.js","sources":["../../../../src/views/system/config/flash.ts"],"sourcesContent":["// v-flash=\"值\":值一变,元素闪一下橙框(样式 .cfg-flash 在 SectionLayout 的预览区里)。\n// 用在预览里受某项设置影响的部分上,让用户看到\"刚才改的东西落在这里\"。\nimport type { Directive } from 'vue'\n\nexport const vFlash: Directive<HTMLElement, unknown> = {\n updated(el, binding) {\n if (binding.value === binding.oldValue) return\n el.classList.remove('cfg-flash')\n void el.offsetWidth // 重新触发动画\n el.classList.add('cfg-flash')\n },\n}\n"],"names":["vFlash","el","binding"],"mappings":"AAIO,MAAMA,IAA0C;AAAA,EACrD,QAAQC,GAAIC,GAAS;AACnB,IAAIA,EAAQ,UAAUA,EAAQ,aAC9BD,EAAG,UAAU,OAAO,WAAW,GAC1BA,EAAG,aACRA,EAAG,UAAU,IAAI,WAAW;AAAA,EAC9B;AACF;"}
|
|
@@ -1,9 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const
|
|
3
|
-
export
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { WATERMARK_KEYS } from '../../../lib/watermark';
|
|
2
|
+
export declare const CONFIG_TABS: readonly ["brand", "signin", "security", "watermark", "sensitive", "upload", "job", "advanced"];
|
|
3
|
+
export type ConfigTab = (typeof CONFIG_TABS)[number];
|
|
4
|
+
/** 顶部导航分组:站点与安全 | 系统,组间留空。 */
|
|
5
|
+
export declare const TAB_GROUPS: readonly (readonly ConfigTab[])[];
|
|
6
|
+
/** 导航图标 */
|
|
7
|
+
export declare const TAB_ICONS: Record<ConfigTab, string>;
|
|
8
|
+
export declare const LOGO_KEY = "sys.site.logo";
|
|
9
|
+
export declare const BRAND_KEYS: readonly ["sys.site.title", "sys.site.logo", "sys.site.copyright", "sys.site.copyrightUrl"];
|
|
10
|
+
/** 水印的 10 个键(`sys.watermark.*`),在「水印设置」页编辑 */
|
|
11
|
+
export { WATERMARK_KEYS };
|
|
12
|
+
export declare const LOGIN_LOCALES: readonly ["zh-CN", "en-US"];
|
|
13
|
+
export type LoginLocale = (typeof LOGIN_LOCALES)[number];
|
|
14
|
+
export declare const heroKeys: (locale: LoginLocale) => {
|
|
15
|
+
headline: string;
|
|
16
|
+
highlight: string;
|
|
17
|
+
features: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const SUBTITLE_KEY = "sys.site.subtitle";
|
|
20
|
+
export declare const SHOW_FEATURES_KEY = "sys.login.hero.showFeatures";
|
|
21
|
+
export declare const LOGIN_KEYS: string[];
|
|
22
|
+
export declare const SECURITY_NUMBERS: Readonly<Record<string, number>>;
|
|
23
|
+
/** 短信验证码登录是一种登录方式,在「登录方式」页,不在安全策略 */
|
|
24
|
+
export declare const SMS_LOGIN_KEY = "sys.security.smsLogin.enabled";
|
|
25
|
+
export declare const SECURITY_SWITCHES: readonly ["sys.security.password.requireUpper", "sys.security.password.requireLower", "sys.security.password.requireDigit", "sys.security.password.requireSpecial", "sys.security.password.forceChangeOnFirstLogin", "sys.security.captcha.enabled", "sys.security.totp.enabled", "sys.security.totp.requireForSuperAdmin", "sys.security.mfa.enabled", "sys.security.rateLimit.enabled"];
|
|
26
|
+
export declare const CAPTCHA_TYPE_KEY = "sys.security.captcha.type";
|
|
27
|
+
export declare const SECURITY_KEYS: string[];
|
|
28
|
+
export declare const UPLOAD_MAX_KEY = "sys.upload.maxSizeMb";
|
|
29
|
+
export declare const UPLOAD_EXTS_KEY = "sys.upload.allowedExtensions";
|
|
30
|
+
export declare const JOB_RETENTION_KEY = "sys.job.logRetentionDays";
|
|
31
|
+
export declare const JOB_ALERT_KEY = "sys.job.alertEmails";
|
|
32
|
+
/** 固定认领的键(第三方登录的键按已注册的方式动态认领,见 draft.ts)。 */
|
|
33
|
+
export declare const STATIC_CLAIMED_KEYS: readonly string[];
|
|
34
|
+
/** 结构化表单从这些分组取值。 */
|
|
35
|
+
export declare const STRUCTURED_GROUPS: readonly ["sys", "login", "security", "upload", "job"];
|
|
36
|
+
/** 键 → 所属分类,用于导航上的"有未保存改动"标记。 */
|
|
37
|
+
export declare function tabOfKey(key: string): ConfigTab;
|
|
38
|
+
/** 配置行增删改的版本号:保存或在「高级」页改了行之后 bump,「高级」表据此重拉。 */
|
|
8
39
|
export declare const configRevision: import('vue').Ref<number, number>;
|
|
9
40
|
export declare function bumpConfigRevision(): void;
|
|
@@ -1,18 +1,108 @@
|
|
|
1
|
-
import { ref as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { ref as e } from "vue";
|
|
2
|
+
import { WATERMARK_KEYS as i } from "../../../lib/watermark.js";
|
|
3
|
+
const L = [
|
|
4
|
+
"brand",
|
|
5
|
+
"signin",
|
|
6
|
+
"security",
|
|
7
|
+
"watermark",
|
|
8
|
+
"sensitive",
|
|
9
|
+
"upload",
|
|
10
|
+
"job",
|
|
11
|
+
"advanced"
|
|
12
|
+
], T = [
|
|
13
|
+
["brand", "signin", "security", "watermark", "sensitive"],
|
|
14
|
+
["upload", "job", "advanced"]
|
|
15
|
+
], f = {
|
|
16
|
+
brand: "ph:browser",
|
|
17
|
+
signin: "ph:sign-in",
|
|
18
|
+
security: "ph:shield-check",
|
|
19
|
+
watermark: "ph:drop",
|
|
20
|
+
sensitive: "ph:lock-key",
|
|
21
|
+
upload: "ph:cloud-arrow-up",
|
|
22
|
+
job: "ph:clock",
|
|
23
|
+
advanced: "ph:sliders-horizontal"
|
|
24
|
+
}, r = "sys.site.logo", o = [
|
|
25
|
+
"sys.site.title",
|
|
26
|
+
r,
|
|
27
|
+
"sys.site.copyright",
|
|
28
|
+
"sys.site.copyrightUrl"
|
|
29
|
+
], n = ["zh-CN", "en-US"], a = (s) => ({
|
|
30
|
+
headline: `sys.login.hero.headline.${s}`,
|
|
31
|
+
highlight: `sys.login.hero.highlight.${s}`,
|
|
32
|
+
features: `sys.login.hero.features.${s}`
|
|
33
|
+
}), c = "sys.site.subtitle", y = "sys.login.hero.showFeatures", u = [
|
|
34
|
+
c,
|
|
35
|
+
y,
|
|
36
|
+
...n.flatMap((s) => Object.values(a(s)))
|
|
37
|
+
], d = {
|
|
38
|
+
"sys.security.loginLock.maxFailCount": 0,
|
|
39
|
+
"sys.security.loginLock.lockMinutes": 1,
|
|
40
|
+
"sys.security.password.minLength": 1,
|
|
41
|
+
"sys.security.password.expireDays": 0,
|
|
42
|
+
"sys.security.password.historyCount": 0,
|
|
43
|
+
"sys.security.session.accessMinutes": 1,
|
|
44
|
+
"sys.security.session.refreshMinutes": 1,
|
|
45
|
+
"sys.security.rateLimit.windowSeconds": 1,
|
|
46
|
+
"sys.security.rateLimit.permitPerWindow": 0,
|
|
47
|
+
"sys.security.rateLimit.authPermitPerWindow": 0
|
|
48
|
+
}, t = "sys.security.smsLogin.enabled", p = [
|
|
49
|
+
"sys.security.password.requireUpper",
|
|
50
|
+
"sys.security.password.requireLower",
|
|
51
|
+
"sys.security.password.requireDigit",
|
|
52
|
+
"sys.security.password.requireSpecial",
|
|
53
|
+
"sys.security.password.forceChangeOnFirstLogin",
|
|
54
|
+
"sys.security.captcha.enabled",
|
|
55
|
+
"sys.security.totp.enabled",
|
|
56
|
+
"sys.security.totp.requireForSuperAdmin",
|
|
57
|
+
"sys.security.mfa.enabled",
|
|
58
|
+
"sys.security.rateLimit.enabled"
|
|
59
|
+
], h = "sys.security.captcha.type", l = [
|
|
60
|
+
...Object.keys(d),
|
|
61
|
+
...p,
|
|
62
|
+
h,
|
|
63
|
+
t
|
|
64
|
+
], E = "sys.upload.maxSizeMb", S = "sys.upload.allowedExtensions", _ = "sys.job.logRetentionDays", g = "sys.job.alertEmails", O = [
|
|
65
|
+
...o,
|
|
66
|
+
...u,
|
|
67
|
+
...i,
|
|
68
|
+
...l,
|
|
69
|
+
E,
|
|
70
|
+
S,
|
|
71
|
+
_,
|
|
72
|
+
g
|
|
73
|
+
], Y = ["sys", "login", "security", "upload", "job"];
|
|
74
|
+
function A(s) {
|
|
75
|
+
return s.startsWith("sys.site.") || s.startsWith("sys.login.") ? "brand" : s.startsWith("sys.watermark.") ? "watermark" : s === t || s.startsWith("sys.externalauth.") ? "signin" : s.startsWith("sys.security.") ? "security" : s.startsWith("sys.upload.") ? "upload" : s.startsWith("sys.job.") ? "job" : "advanced";
|
|
76
|
+
}
|
|
77
|
+
const b = e(0);
|
|
78
|
+
function C() {
|
|
79
|
+
b.value++;
|
|
11
80
|
}
|
|
12
81
|
export {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
82
|
+
o as BRAND_KEYS,
|
|
83
|
+
h as CAPTCHA_TYPE_KEY,
|
|
84
|
+
L as CONFIG_TABS,
|
|
85
|
+
g as JOB_ALERT_KEY,
|
|
86
|
+
_ as JOB_RETENTION_KEY,
|
|
87
|
+
u as LOGIN_KEYS,
|
|
88
|
+
n as LOGIN_LOCALES,
|
|
89
|
+
r as LOGO_KEY,
|
|
90
|
+
l as SECURITY_KEYS,
|
|
91
|
+
d as SECURITY_NUMBERS,
|
|
92
|
+
p as SECURITY_SWITCHES,
|
|
93
|
+
y as SHOW_FEATURES_KEY,
|
|
94
|
+
t as SMS_LOGIN_KEY,
|
|
95
|
+
O as STATIC_CLAIMED_KEYS,
|
|
96
|
+
Y as STRUCTURED_GROUPS,
|
|
97
|
+
c as SUBTITLE_KEY,
|
|
98
|
+
T as TAB_GROUPS,
|
|
99
|
+
f as TAB_ICONS,
|
|
100
|
+
S as UPLOAD_EXTS_KEY,
|
|
101
|
+
E as UPLOAD_MAX_KEY,
|
|
102
|
+
i as WATERMARK_KEYS,
|
|
103
|
+
C as bumpConfigRevision,
|
|
104
|
+
b as configRevision,
|
|
105
|
+
a as heroKeys,
|
|
106
|
+
A as tabOfKey
|
|
17
107
|
};
|
|
18
108
|
//# sourceMappingURL=groups.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.js","sources":["../../../../src/views/system/config/groups.ts"],"sourcesContent":["//
|
|
1
|
+
{"version":3,"file":"groups.js","sources":["../../../../src/views/system/config/groups.ts"],"sourcesContent":["// 配置中心的分类与键归属。顶部导航每一项是一个分类,分类名就是它管的那一类东西;\n// 结构化表单认领的键由这里集中声明,\n// 草稿只装这些键,「高级」页据此排除它们(同一个键不会在两处都能改)。\nimport { ref } from 'vue'\nimport { WATERMARK_KEYS } from '#/lib/watermark'\n\nexport const CONFIG_TABS = [\n 'brand',\n 'signin',\n 'security',\n 'watermark',\n 'sensitive',\n 'upload',\n 'job',\n 'advanced',\n] as const\nexport type ConfigTab = (typeof CONFIG_TABS)[number]\n\n/** 顶部导航分组:站点与安全 | 系统,组间留空。 */\nexport const TAB_GROUPS: readonly (readonly ConfigTab[])[] = [\n ['brand', 'signin', 'security', 'watermark', 'sensitive'],\n ['upload', 'job', 'advanced'],\n]\n\n/** 导航图标 */\nexport const TAB_ICONS: Record<ConfigTab, string> = {\n brand: 'ph:browser',\n signin: 'ph:sign-in',\n security: 'ph:shield-check',\n watermark: 'ph:drop',\n sensitive: 'ph:lock-key',\n upload: 'ph:cloud-arrow-up',\n job: 'ph:clock',\n advanced: 'ph:sliders-horizontal',\n}\n\nexport const LOGO_KEY = 'sys.site.logo'\nexport const BRAND_KEYS = [\n 'sys.site.title',\n LOGO_KEY,\n 'sys.site.copyright',\n 'sys.site.copyrightUrl',\n] as const\n\n/** 水印的 10 个键(`sys.watermark.*`),在「水印设置」页编辑 */\nexport { WATERMARK_KEYS }\n\nexport const LOGIN_LOCALES = ['zh-CN', 'en-US'] as const\nexport type LoginLocale = (typeof LOGIN_LOCALES)[number]\nexport const heroKeys = (locale: LoginLocale) => ({\n headline: `sys.login.hero.headline.${locale}`,\n highlight: `sys.login.hero.highlight.${locale}`,\n features: `sys.login.hero.features.${locale}`,\n})\nexport const SUBTITLE_KEY = 'sys.site.subtitle'\nexport const SHOW_FEATURES_KEY = 'sys.login.hero.showFeatures'\nexport const LOGIN_KEYS = [\n SUBTITLE_KEY,\n SHOW_FEATURES_KEY,\n ...LOGIN_LOCALES.flatMap(l => Object.values(heroKeys(l))),\n]\n\n// 数值项的下限:锁定阈值不为负、时长至少 1 分钟,避免存 0 变成永不过期/永久锁定。\n// 0 在少数项上是合法的\"关闭\"语义(永不过期、不防重用、不限流)。\nexport const SECURITY_NUMBERS: Readonly<Record<string, number>> = {\n 'sys.security.loginLock.maxFailCount': 0,\n 'sys.security.loginLock.lockMinutes': 1,\n 'sys.security.password.minLength': 1,\n 'sys.security.password.expireDays': 0,\n 'sys.security.password.historyCount': 0,\n 'sys.security.session.accessMinutes': 1,\n 'sys.security.session.refreshMinutes': 1,\n 'sys.security.rateLimit.windowSeconds': 1,\n 'sys.security.rateLimit.permitPerWindow': 0,\n 'sys.security.rateLimit.authPermitPerWindow': 0,\n}\n/** 短信验证码登录是一种登录方式,在「登录方式」页,不在安全策略 */\nexport const SMS_LOGIN_KEY = 'sys.security.smsLogin.enabled'\nexport const SECURITY_SWITCHES = [\n 'sys.security.password.requireUpper',\n 'sys.security.password.requireLower',\n 'sys.security.password.requireDigit',\n 'sys.security.password.requireSpecial',\n 'sys.security.password.forceChangeOnFirstLogin',\n 'sys.security.captcha.enabled',\n 'sys.security.totp.enabled',\n 'sys.security.totp.requireForSuperAdmin',\n 'sys.security.mfa.enabled',\n 'sys.security.rateLimit.enabled',\n] as const\nexport const CAPTCHA_TYPE_KEY = 'sys.security.captcha.type'\nexport const SECURITY_KEYS = [\n ...Object.keys(SECURITY_NUMBERS),\n ...SECURITY_SWITCHES,\n CAPTCHA_TYPE_KEY,\n SMS_LOGIN_KEY,\n]\n\nexport const UPLOAD_MAX_KEY = 'sys.upload.maxSizeMb'\nexport const UPLOAD_EXTS_KEY = 'sys.upload.allowedExtensions'\nexport const JOB_RETENTION_KEY = 'sys.job.logRetentionDays'\nexport const JOB_ALERT_KEY = 'sys.job.alertEmails'\n\n/** 固定认领的键(第三方登录的键按已注册的方式动态认领,见 draft.ts)。 */\nexport const STATIC_CLAIMED_KEYS: readonly string[] = [\n ...BRAND_KEYS,\n ...LOGIN_KEYS,\n ...WATERMARK_KEYS,\n ...SECURITY_KEYS,\n UPLOAD_MAX_KEY,\n UPLOAD_EXTS_KEY,\n JOB_RETENTION_KEY,\n JOB_ALERT_KEY,\n]\n\n/** 结构化表单从这些分组取值。 */\nexport const STRUCTURED_GROUPS = ['sys', 'login', 'security', 'upload', 'job'] as const\n\n/** 键 → 所属分类,用于导航上的\"有未保存改动\"标记。 */\nexport function tabOfKey(key: string): ConfigTab {\n if (key.startsWith('sys.site.') || key.startsWith('sys.login.')) return 'brand'\n if (key.startsWith('sys.watermark.')) return 'watermark'\n if (key === SMS_LOGIN_KEY || key.startsWith('sys.externalauth.')) return 'signin'\n if (key.startsWith('sys.security.')) return 'security'\n if (key.startsWith('sys.upload.')) return 'upload'\n if (key.startsWith('sys.job.')) return 'job'\n return 'advanced'\n}\n\n/** 配置行增删改的版本号:保存或在「高级」页改了行之后 bump,「高级」表据此重拉。 */\nexport const configRevision = ref(0)\n\nexport function bumpConfigRevision() {\n configRevision.value++\n}\n"],"names":["CONFIG_TABS","TAB_GROUPS","TAB_ICONS","LOGO_KEY","BRAND_KEYS","LOGIN_LOCALES","heroKeys","locale","SUBTITLE_KEY","SHOW_FEATURES_KEY","LOGIN_KEYS","l","SECURITY_NUMBERS","SMS_LOGIN_KEY","SECURITY_SWITCHES","CAPTCHA_TYPE_KEY","SECURITY_KEYS","UPLOAD_MAX_KEY","UPLOAD_EXTS_KEY","JOB_RETENTION_KEY","JOB_ALERT_KEY","STATIC_CLAIMED_KEYS","WATERMARK_KEYS","STRUCTURED_GROUPS","tabOfKey","key","configRevision","ref","bumpConfigRevision"],"mappings":";;AAMO,MAAMA,IAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIaC,IAAgD;AAAA,EAC3D,CAAC,SAAS,UAAU,YAAY,aAAa,WAAW;AAAA,EACxD,CAAC,UAAU,OAAO,UAAU;AAC9B,GAGaC,IAAuC;AAAA,EAClD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AACZ,GAEaC,IAAW,iBACXC,IAAa;AAAA,EACxB;AAAA,EACAD;AAAA,EACA;AAAA,EACA;AACF,GAKaE,IAAgB,CAAC,SAAS,OAAO,GAEjCC,IAAW,CAACC,OAAyB;AAAA,EAChD,UAAU,2BAA2BA,CAAM;AAAA,EAC3C,WAAW,4BAA4BA,CAAM;AAAA,EAC7C,UAAU,2BAA2BA,CAAM;AAC7C,IACaC,IAAe,qBACfC,IAAoB,+BACpBC,IAAa;AAAA,EACxBF;AAAA,EACAC;AAAA,EACA,GAAGJ,EAAc,QAAQ,CAAAM,MAAK,OAAO,OAAOL,EAASK,CAAC,CAAC,CAAC;AAC1D,GAIaC,IAAqD;AAAA,EAChE,uCAAuC;AAAA,EACvC,sCAAsC;AAAA,EACtC,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,sCAAsC;AAAA,EACtC,uCAAuC;AAAA,EACvC,wCAAwC;AAAA,EACxC,0CAA0C;AAAA,EAC1C,8CAA8C;AAChD,GAEaC,IAAgB,iCAChBC,IAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACaC,IAAmB,6BACnBC,IAAgB;AAAA,EAC3B,GAAG,OAAO,KAAKJ,CAAgB;AAAA,EAC/B,GAAGE;AAAA,EACHC;AAAA,EACAF;AACF,GAEaI,IAAiB,wBACjBC,IAAkB,gCAClBC,IAAoB,4BACpBC,IAAgB,uBAGhBC,IAAyC;AAAA,EACpD,GAAGjB;AAAA,EACH,GAAGM;AAAA,EACH,GAAGY;AAAA,EACH,GAAGN;AAAA,EACHC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AACF,GAGaG,IAAoB,CAAC,OAAO,SAAS,YAAY,UAAU,KAAK;AAGtE,SAASC,EAASC,GAAwB;AAC/C,SAAIA,EAAI,WAAW,WAAW,KAAKA,EAAI,WAAW,YAAY,IAAU,UACpEA,EAAI,WAAW,gBAAgB,IAAU,cACzCA,MAAQZ,KAAiBY,EAAI,WAAW,mBAAmB,IAAU,WACrEA,EAAI,WAAW,eAAe,IAAU,aACxCA,EAAI,WAAW,aAAa,IAAU,WACtCA,EAAI,WAAW,UAAU,IAAU,QAChC;AACT;AAGO,MAAMC,IAAiBC,EAAI,CAAC;AAE5B,SAASC,IAAqB;AACnC,EAAAF,EAAe;AACjB;"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import o from "./index2.vue.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
/* empty css */
|
|
4
|
+
import t from "../../../_virtual/_plugin-vue_export-helper.js";
|
|
5
|
+
const i = /* @__PURE__ */ t(o, [["__scopeId", "data-v-c57600e7"]]);
|
|
2
6
|
export {
|
|
3
|
-
|
|
7
|
+
i as default
|
|
4
8
|
};
|
|
5
9
|
//# sourceMappingURL=index.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|