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,176 @@
|
|
|
1
|
+
import { defineComponent as A, computed as g, openBlock as m, createBlock as P, unref as e, withCtx as u, createVNode as s, isRef as S, createElementVNode as p, createElementBlock as d, Fragment as C, renderList as y, createTextVNode as f, toDisplayString as r, withDirectives as E, normalizeClass as j } from "vue";
|
|
2
|
+
import { NSlider as $, NInputNumber as F, NDynamicTags as I, NButton as D } from "naive-ui";
|
|
3
|
+
import { useI18n as R } from "vue-i18n";
|
|
4
|
+
import V from "../../../../components/AppIcon.vue.js";
|
|
5
|
+
import { UPLOAD_MAX_KEY as B, UPLOAD_EXTS_KEY as x } from "../groups.js";
|
|
6
|
+
import { useConfigDraft as K, useDraftFields as X } from "../draft.js";
|
|
7
|
+
import { useConfigLayout as Y } from "../layoutMode.js";
|
|
8
|
+
import { vFlash as L } from "../flash.js";
|
|
9
|
+
import q from "./SectionLayout.vue.js";
|
|
10
|
+
import G from "./CfgGroup.vue.js";
|
|
11
|
+
import b from "./CfgRow.vue.js";
|
|
12
|
+
const W = { class: "presets" }, H = {
|
|
13
|
+
class: "drop",
|
|
14
|
+
"data-testid": "upload-preview"
|
|
15
|
+
}, J = { class: "files" }, Q = { class: "fi" }, Z = { class: "nm" }, ce = /* @__PURE__ */ A({
|
|
16
|
+
__name: "UploadSection",
|
|
17
|
+
setup(ee) {
|
|
18
|
+
const { t: l } = R(), { values: k } = K(), { num: h } = X(), { ctl: M, sm: _ } = Y(), i = h(B, 20);
|
|
19
|
+
function N(a) {
|
|
20
|
+
const t = a.trim().toLowerCase();
|
|
21
|
+
return t.startsWith(".") ? t : "." + t;
|
|
22
|
+
}
|
|
23
|
+
const n = g({
|
|
24
|
+
get: () => (k[x] ?? "").split(",").map((a) => a.trim()).filter(Boolean),
|
|
25
|
+
set: (a) => {
|
|
26
|
+
k[x] = [...new Set(a.map(N).filter((t) => t !== "."))].join(",");
|
|
27
|
+
}
|
|
28
|
+
}), w = {
|
|
29
|
+
images: [".jpg", ".jpeg", ".png", ".gif", ".webp"],
|
|
30
|
+
docs: [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx"],
|
|
31
|
+
archives: [".zip", ".rar", ".7z"]
|
|
32
|
+
};
|
|
33
|
+
function T(a) {
|
|
34
|
+
n.value = [...n.value, ...w[a]];
|
|
35
|
+
}
|
|
36
|
+
const U = [
|
|
37
|
+
{ name: "report.pdf", mb: 3.2 },
|
|
38
|
+
{ name: "photo.png", mb: 1.4 },
|
|
39
|
+
{ name: "demo.mp4", mb: 48 },
|
|
40
|
+
{ name: "setup.exe", mb: 12 }
|
|
41
|
+
], O = g(
|
|
42
|
+
() => U.map((a) => {
|
|
43
|
+
const t = a.name.slice(a.name.lastIndexOf(".")), o = n.value.length ? n.value.includes(t) : void 0, c = a.mb <= i.value, z = o === !1 ? { ok: !1, text: l("config.upload.fileBadExt", { ext: t }) } : c ? o ? { ok: !0, text: l("config.upload.fileOk") } : { ok: void 0, text: l("config.upload.fileDefault") } : { ok: !1, text: l("config.upload.fileTooBig", { mb: i.value }) };
|
|
44
|
+
return { ...a, ext: t.slice(1).toUpperCase(), status: z };
|
|
45
|
+
})
|
|
46
|
+
), v = g(
|
|
47
|
+
() => l("config.upload.previewLimit", {
|
|
48
|
+
exts: n.value.length ? n.value.join(" ") : l("config.upload.previewDefault"),
|
|
49
|
+
mb: i.value
|
|
50
|
+
})
|
|
51
|
+
);
|
|
52
|
+
return (a, t) => (m(), P(q, {
|
|
53
|
+
title: e(l)("config.tab.upload"),
|
|
54
|
+
desc: e(l)("config.upload.desc"),
|
|
55
|
+
"preview-title": e(l)("config.upload.preview"),
|
|
56
|
+
layout: "slim"
|
|
57
|
+
}, {
|
|
58
|
+
preview: u(() => [
|
|
59
|
+
p("div", H, [
|
|
60
|
+
s(V, {
|
|
61
|
+
icon: "ph:cloud-arrow-up",
|
|
62
|
+
size: 30,
|
|
63
|
+
class: "ic"
|
|
64
|
+
}),
|
|
65
|
+
p("b", null, r(e(l)("config.upload.previewDrop")), 1),
|
|
66
|
+
E((m(), d("small", null, [
|
|
67
|
+
f(r(v.value), 1)
|
|
68
|
+
])), [
|
|
69
|
+
[e(L), v.value]
|
|
70
|
+
])
|
|
71
|
+
]),
|
|
72
|
+
E((m(), d("ul", J, [
|
|
73
|
+
(m(!0), d(C, null, y(O.value, (o) => (m(), d("li", {
|
|
74
|
+
key: o.name
|
|
75
|
+
}, [
|
|
76
|
+
p("span", Q, r(o.ext), 1),
|
|
77
|
+
p("span", Z, [
|
|
78
|
+
f(r(o.name) + " ", 1),
|
|
79
|
+
p("small", null, r(o.mb) + " MB", 1)
|
|
80
|
+
]),
|
|
81
|
+
p("span", {
|
|
82
|
+
class: j(["st", { ok: o.status.ok === !0, no: o.status.ok === !1 }])
|
|
83
|
+
}, r(o.status.text), 3)
|
|
84
|
+
]))), 128))
|
|
85
|
+
])), [
|
|
86
|
+
[e(L), v.value]
|
|
87
|
+
])
|
|
88
|
+
]),
|
|
89
|
+
default: u(() => [
|
|
90
|
+
s(G, {
|
|
91
|
+
title: e(l)("config.upload.groupLimit")
|
|
92
|
+
}, {
|
|
93
|
+
default: u(() => [
|
|
94
|
+
s(b, {
|
|
95
|
+
label: e(l)("config.upload.maxSizeMb"),
|
|
96
|
+
keys: [e(B)]
|
|
97
|
+
}, {
|
|
98
|
+
default: u(() => [
|
|
99
|
+
s(e($), {
|
|
100
|
+
value: e(i),
|
|
101
|
+
"onUpdate:value": t[0] || (t[0] = (o) => S(i) ? i.value = o : null),
|
|
102
|
+
class: "slider",
|
|
103
|
+
min: 1,
|
|
104
|
+
max: 200,
|
|
105
|
+
tooltip: !1,
|
|
106
|
+
"aria-label": e(l)("config.upload.maxSizeMb")
|
|
107
|
+
}, null, 8, ["value", "aria-label"]),
|
|
108
|
+
s(e(F), {
|
|
109
|
+
value: e(i),
|
|
110
|
+
"onUpdate:value": t[1] || (t[1] = (o) => S(i) ? i.value = o : null),
|
|
111
|
+
class: "num sm",
|
|
112
|
+
size: e(M),
|
|
113
|
+
min: 1,
|
|
114
|
+
"show-button": !1,
|
|
115
|
+
"input-props": { "aria-label": e(l)("config.upload.maxSizeMb") }
|
|
116
|
+
}, null, 8, ["value", "size", "input-props"]),
|
|
117
|
+
t[4] || (t[4] = p("span", { class: "unit" }, "MB", -1))
|
|
118
|
+
]),
|
|
119
|
+
_: 1
|
|
120
|
+
}, 8, ["label", "keys"]),
|
|
121
|
+
s(b, {
|
|
122
|
+
label: e(l)("config.upload.allowedExtensions"),
|
|
123
|
+
hint: e(l)("config.upload.extTip"),
|
|
124
|
+
keys: [e(x)],
|
|
125
|
+
tall: "",
|
|
126
|
+
class: "exts"
|
|
127
|
+
}, {
|
|
128
|
+
default: u(() => [
|
|
129
|
+
s(e(I), {
|
|
130
|
+
value: n.value,
|
|
131
|
+
"onUpdate:value": t[2] || (t[2] = (o) => n.value = o),
|
|
132
|
+
size: "small"
|
|
133
|
+
}, null, 8, ["value"])
|
|
134
|
+
]),
|
|
135
|
+
_: 1
|
|
136
|
+
}, 8, ["label", "hint", "keys"]),
|
|
137
|
+
s(b, {
|
|
138
|
+
label: e(l)("config.upload.quickAdd")
|
|
139
|
+
}, {
|
|
140
|
+
default: u(() => [
|
|
141
|
+
p("span", W, [
|
|
142
|
+
(m(), d(C, null, y(w, (o, c) => s(e(D), {
|
|
143
|
+
key: c,
|
|
144
|
+
size: e(_),
|
|
145
|
+
onClick: (z) => T(c)
|
|
146
|
+
}, {
|
|
147
|
+
default: u(() => [
|
|
148
|
+
f(r(e(l)(`config.upload.preset.${c}`)), 1)
|
|
149
|
+
]),
|
|
150
|
+
_: 2
|
|
151
|
+
}, 1032, ["size", "onClick"])), 64)),
|
|
152
|
+
s(e(D), {
|
|
153
|
+
size: e(_),
|
|
154
|
+
onClick: t[3] || (t[3] = (o) => n.value = [])
|
|
155
|
+
}, {
|
|
156
|
+
default: u(() => [
|
|
157
|
+
f(r(e(l)("config.upload.preset.clear")), 1)
|
|
158
|
+
]),
|
|
159
|
+
_: 1
|
|
160
|
+
}, 8, ["size"])
|
|
161
|
+
])
|
|
162
|
+
]),
|
|
163
|
+
_: 1
|
|
164
|
+
}, 8, ["label"])
|
|
165
|
+
]),
|
|
166
|
+
_: 1
|
|
167
|
+
}, 8, ["title"])
|
|
168
|
+
]),
|
|
169
|
+
_: 1
|
|
170
|
+
}, 8, ["title", "desc", "preview-title"]));
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
export {
|
|
174
|
+
ce as default
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=UploadSection2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UploadSection2.vue.js","sources":["../../../../../src/views/system/config/components/UploadSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 文件上传:大小上限 + 后缀白名单。后端 FileService 读这两键强制执行,保存即生效。\n// 后缀以逗号分隔落库,输入时补前导点、转小写(与后端 ParseExts 对齐)。\n// 预览是用户看到的上传框,再拿几个示例文件按新规则判一遍,能不能传、为什么不能一目了然。\nimport { computed } from 'vue'\nimport { NButton, NDynamicTags, NInputNumber, NSlider } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport { UPLOAD_EXTS_KEY, UPLOAD_MAX_KEY } from '../groups'\nimport { useConfigDraft, useDraftFields } from '../draft'\nimport { useConfigLayout } from '../layoutMode'\nimport { vFlash } from '../flash'\nimport SectionLayout from './SectionLayout.vue'\nimport CfgGroup from './CfgGroup.vue'\nimport CfgRow from './CfgRow.vue'\n\nconst { t } = useI18n()\nconst { values } = useConfigDraft()\nconst { num } = useDraftFields()\nconst { ctl, sm } = useConfigLayout()\nconst maxSizeMb = num(UPLOAD_MAX_KEY, 20)\n\nfunction normalizeExt(v: string): string {\n const s = v.trim().toLowerCase()\n return s.startsWith('.') ? s : '.' + s\n}\nconst exts = computed({\n get: () =>\n (values[UPLOAD_EXTS_KEY] ?? '')\n .split(',')\n .map(e => e.trim())\n .filter(Boolean),\n set: (list: string[]) => {\n values[UPLOAD_EXTS_KEY] = [...new Set(list.map(normalizeExt).filter(e => e !== '.'))].join(',')\n },\n})\n\nconst PRESETS = {\n images: ['.jpg', '.jpeg', '.png', '.gif', '.webp'],\n docs: ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx'],\n archives: ['.zip', '.rar', '.7z'],\n} as const\nfunction addPreset(name: keyof typeof PRESETS) {\n exts.value = [...exts.value, ...PRESETS[name]]\n}\n\nconst SAMPLES = [\n { name: 'report.pdf', mb: 3.2 },\n { name: 'photo.png', mb: 1.4 },\n { name: 'demo.mp4', mb: 48 },\n { name: 'setup.exe', mb: 12 },\n]\nconst samples = computed(() =>\n SAMPLES.map(f => {\n const ext = f.name.slice(f.name.lastIndexOf('.'))\n // 白名单留空时格式以服务端默认为准,这里不替它下结论\n const extOk = exts.value.length ? exts.value.includes(ext) : undefined\n const sizeOk = f.mb <= maxSizeMb.value\n const status =\n extOk === false\n ? { ok: false, text: t('config.upload.fileBadExt', { ext }) }\n : !sizeOk\n ? { ok: false, text: t('config.upload.fileTooBig', { mb: maxSizeMb.value }) }\n : extOk\n ? { ok: true, text: t('config.upload.fileOk') }\n : { ok: undefined, text: t('config.upload.fileDefault') }\n return { ...f, ext: ext.slice(1).toUpperCase(), status }\n }),\n)\nconst limitText = computed(() =>\n t('config.upload.previewLimit', {\n exts: exts.value.length ? exts.value.join(' ') : t('config.upload.previewDefault'),\n mb: maxSizeMb.value,\n }),\n)\n</script>\n\n<template>\n <SectionLayout\n :title=\"t('config.tab.upload')\"\n :desc=\"t('config.upload.desc')\"\n :preview-title=\"t('config.upload.preview')\"\n layout=\"slim\"\n >\n <CfgGroup :title=\"t('config.upload.groupLimit')\">\n <CfgRow :label=\"t('config.upload.maxSizeMb')\" :keys=\"[UPLOAD_MAX_KEY]\">\n <n-slider\n v-model:value=\"maxSizeMb\"\n class=\"slider\"\n :min=\"1\"\n :max=\"200\"\n :tooltip=\"false\"\n :aria-label=\"t('config.upload.maxSizeMb')\"\n />\n <n-input-number\n v-model:value=\"maxSizeMb\"\n class=\"num sm\"\n :size=\"ctl\"\n :min=\"1\"\n :show-button=\"false\"\n :input-props=\"{ 'aria-label': t('config.upload.maxSizeMb') }\"\n />\n <span class=\"unit\">MB</span>\n </CfgRow>\n <CfgRow\n :label=\"t('config.upload.allowedExtensions')\"\n :hint=\"t('config.upload.extTip')\"\n :keys=\"[UPLOAD_EXTS_KEY]\"\n tall\n class=\"exts\"\n >\n <n-dynamic-tags v-model:value=\"exts\" size=\"small\" />\n </CfgRow>\n <CfgRow :label=\"t('config.upload.quickAdd')\">\n <span class=\"presets\">\n <n-button v-for=\"(_, name) in PRESETS\" :key=\"name\" :size=\"sm\" @click=\"addPreset(name)\">\n {{ t(`config.upload.preset.${name}`) }}\n </n-button>\n <n-button :size=\"sm\" @click=\"exts = []\">\n {{ t('config.upload.preset.clear') }}\n </n-button>\n </span>\n </CfgRow>\n </CfgGroup>\n\n <template #preview>\n <div class=\"drop\" data-testid=\"upload-preview\">\n <AppIcon icon=\"ph:cloud-arrow-up\" :size=\"30\" class=\"ic\" />\n <b>{{ t('config.upload.previewDrop') }}</b>\n <small v-flash=\"limitText\">{{ limitText }}</small>\n </div>\n <ul v-flash=\"limitText\" class=\"files\">\n <li v-for=\"f in samples\" :key=\"f.name\">\n <span class=\"fi\">{{ f.ext }}</span>\n <span class=\"nm\">\n {{ f.name }}\n <small>{{ f.mb }} MB</small>\n </span>\n <span :class=\"['st', { ok: f.status.ok === true, no: f.status.ok === false }]\">\n {{ f.status.text }}\n </span>\n </li>\n </ul>\n </template>\n </SectionLayout>\n</template>\n\n<style scoped>\n.slider {\n width: 160px;\n}\n.num {\n width: 96px;\n}\n.num.sm {\n width: 72px;\n}\n.num :deep(input) {\n text-align: right;\n}\n.unit {\n flex: none;\n min-width: 32px;\n font-size: 13px;\n color: var(--text-2);\n}\n.exts :deep(.ctl) {\n flex: 1.4 1 0;\n}\n.exts :deep(.n-dynamic-tags) {\n justify-content: flex-end;\n}\n.presets {\n display: inline-flex;\n flex: none;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 5px;\n}\n.drop {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n padding: 24px 16px;\n border: 1.5px dashed var(--hairline-strong);\n border-radius: var(--radius-lg);\n background: var(--cfg-card);\n text-align: center;\n}\n.drop .ic {\n color: var(--signal);\n}\n.drop b {\n font-size: 14px;\n font-weight: 600;\n}\n.drop small {\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-3);\n}\n.files {\n margin: 0;\n padding: 4px 0;\n list-style: none;\n border-radius: var(--radius-lg);\n background: var(--cfg-card);\n}\n.files li {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 14px;\n font-size: 14px;\n}\n.files li + li {\n border-top: 1px solid var(--separator);\n}\n.fi {\n display: grid;\n flex: none;\n place-items: center;\n width: 34px;\n height: 24px;\n border-radius: 6px;\n background: var(--glass-strong);\n font-size: 11px;\n font-weight: 600;\n color: var(--text-2);\n}\n.nm {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n}\n.nm small {\n font-size: 13px;\n color: var(--text-3);\n}\n.st {\n flex: none;\n font-size: 13px;\n color: var(--text-3);\n}\n.st.ok {\n color: var(--ok);\n}\n.st.no {\n color: var(--err);\n}\n</style>\n"],"names":["t","useI18n","values","useConfigDraft","num","useDraftFields","ctl","sm","useConfigLayout","maxSizeMb","UPLOAD_MAX_KEY","normalizeExt","v","s","exts","computed","UPLOAD_EXTS_KEY","e","list","PRESETS","addPreset","name","SAMPLES","samples","f","ext","extOk","sizeOk","status","limitText","_createBlock","SectionLayout","_unref","_createElementVNode","_hoisted_2","_createVNode","AppIcon","_createElementBlock","_withDirectives","_openBlock","_hoisted_3","_Fragment","_renderList","_hoisted_4","_toDisplayString","_hoisted_5","_normalizeClass","CfgGroup","CfgRow","NSlider","$event","NInputNumber","_cache","NDynamicTags","_hoisted_1","_","NButton","_createTextVNode"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import o from "./WatermarkSection2.vue.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import t from "../../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const c = /* @__PURE__ */ t(o, [["__scopeId", "data-v-f22dc314"]]);
|
|
5
|
+
export {
|
|
6
|
+
c as default
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=WatermarkSection.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WatermarkSection.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { defineComponent as G, computed as u, openBlock as R, createBlock as h, unref as e, withCtx as s, createVNode as t, isRef as f, createElementVNode as p, createElementBlock as P, Fragment as j, renderList as Y, normalizeClass as $, toDisplayString as y } from "vue";
|
|
2
|
+
import { NSwitch as D, NCheckboxGroup as q, NCheckbox as J, NInput as Q, NSelect as X, NSlider as A } from "naive-ui";
|
|
3
|
+
import { useI18n as Z } from "vue-i18n";
|
|
4
|
+
import { WATERMARK_KEY as i, DEFAULT_WATERMARK as c, normalizeWatermarkFields as V, WATERMARK_FIELDS as ee, WATERMARK_TIME_FORMATS as ae, formatWatermarkTime as le, watermarkParts as te, watermarkFromValues as ie, WATERMARK_LIMITS as b } from "../../../../lib/watermark.js";
|
|
5
|
+
import { useConfigDraft as oe, useDraftFields as ne } from "../draft.js";
|
|
6
|
+
import { useConfigLayout as se } from "../layoutMode.js";
|
|
7
|
+
import re from "./SectionLayout.vue.js";
|
|
8
|
+
import L from "./CfgGroup.vue.js";
|
|
9
|
+
import m from "./CfgRow.vue.js";
|
|
10
|
+
import N from "./CfgSegment.vue.js";
|
|
11
|
+
import me from "./ScaleToFit.vue.js";
|
|
12
|
+
import de from "./AdminMock.vue.js";
|
|
13
|
+
const ue = { class: "wm-fields" }, fe = { class: "unit" }, be = { class: "unit" }, ce = { class: "unit" }, Re = /* @__PURE__ */ G({
|
|
14
|
+
__name: "WatermarkSection",
|
|
15
|
+
setup(pe) {
|
|
16
|
+
const { t: a } = Z(), { values: d } = oe(), { str: W, num: x, bool: O } = ne(), { ctl: C } = se(), n = O(i.enabled), S = u({
|
|
17
|
+
get: () => d[i.fields] === void 0 ? [...c.fields] : V(d[i.fields]),
|
|
18
|
+
set: (r) => {
|
|
19
|
+
d[i.fields] = V(r).join(",");
|
|
20
|
+
}
|
|
21
|
+
}), F = W(i.text), _ = (r, o) => u({
|
|
22
|
+
get: () => d[r] || o,
|
|
23
|
+
set: (l) => {
|
|
24
|
+
d[r] = l;
|
|
25
|
+
}
|
|
26
|
+
}), T = _(
|
|
27
|
+
i.timeFormat,
|
|
28
|
+
c.timeFormat
|
|
29
|
+
), z = _(i.layout, c.layout), E = _(i.density, c.density), w = x(i.fontSize, c.fontSize), k = x(i.opacity, c.opacity), v = x(i.rotate, c.rotate), U = u({
|
|
30
|
+
get: () => d[i.cross] !== "false",
|
|
31
|
+
set: (r) => {
|
|
32
|
+
d[i.cross] = r ? "true" : "false";
|
|
33
|
+
}
|
|
34
|
+
}), g = (r) => S.value.includes(r), H = u(
|
|
35
|
+
() => ee.map((r) => ({ value: r, label: a(`config.watermark.field.${r}`) }))
|
|
36
|
+
), I = u(
|
|
37
|
+
() => ae.map((r) => ({ value: r, label: le(r, /* @__PURE__ */ new Date()) }))
|
|
38
|
+
), K = u(() => [
|
|
39
|
+
{ value: "single", label: a("config.watermark.layoutSingle") },
|
|
40
|
+
{ value: "multi", label: a("config.watermark.layoutMulti") }
|
|
41
|
+
]), B = u(() => [
|
|
42
|
+
{ value: "sparse", label: a("config.watermark.sparse") },
|
|
43
|
+
{ value: "normal", label: a("config.watermark.normal") },
|
|
44
|
+
{ value: "dense", label: a("config.watermark.dense") }
|
|
45
|
+
]), M = u(
|
|
46
|
+
() => n.value && te(
|
|
47
|
+
ie(d),
|
|
48
|
+
{ name: "x", account: "x", org: "x", phoneTail: "x" },
|
|
49
|
+
/* @__PURE__ */ new Date()
|
|
50
|
+
).length === 0
|
|
51
|
+
);
|
|
52
|
+
return (r, o) => (R(), h(re, {
|
|
53
|
+
title: e(a)("config.tab.watermark"),
|
|
54
|
+
desc: e(a)("config.watermark.desc"),
|
|
55
|
+
"preview-title": e(a)("config.brand.preview")
|
|
56
|
+
}, {
|
|
57
|
+
preview: s(() => [
|
|
58
|
+
t(me, {
|
|
59
|
+
width: 880,
|
|
60
|
+
height: 540
|
|
61
|
+
}, {
|
|
62
|
+
default: s(() => [
|
|
63
|
+
t(de)
|
|
64
|
+
]),
|
|
65
|
+
_: 1
|
|
66
|
+
})
|
|
67
|
+
]),
|
|
68
|
+
default: s(() => [
|
|
69
|
+
t(L, {
|
|
70
|
+
title: e(a)("config.watermark.groupContent")
|
|
71
|
+
}, {
|
|
72
|
+
default: s(() => [
|
|
73
|
+
t(m, {
|
|
74
|
+
label: e(a)("config.watermark.enable"),
|
|
75
|
+
hint: e(a)("config.watermark.enableHint"),
|
|
76
|
+
keys: [e(i).enabled]
|
|
77
|
+
}, {
|
|
78
|
+
default: s(() => [
|
|
79
|
+
t(e(D), {
|
|
80
|
+
value: e(n),
|
|
81
|
+
"onUpdate:value": o[0] || (o[0] = (l) => f(n) ? n.value = l : null),
|
|
82
|
+
"aria-label": e(a)("config.watermark.enable")
|
|
83
|
+
}, null, 8, ["value", "aria-label"])
|
|
84
|
+
]),
|
|
85
|
+
_: 1
|
|
86
|
+
}, 8, ["label", "hint", "keys"]),
|
|
87
|
+
t(m, {
|
|
88
|
+
label: e(a)("config.watermark.content"),
|
|
89
|
+
keys: [e(i).fields],
|
|
90
|
+
disabled: !e(n),
|
|
91
|
+
tall: "",
|
|
92
|
+
class: "wm-content"
|
|
93
|
+
}, {
|
|
94
|
+
hint: s(() => [
|
|
95
|
+
p("span", {
|
|
96
|
+
class: $({ warn: M.value })
|
|
97
|
+
}, y(M.value ? e(a)("config.watermark.contentEmpty") : e(a)("config.watermark.contentHint")), 3)
|
|
98
|
+
]),
|
|
99
|
+
default: s(() => [
|
|
100
|
+
t(e(q), {
|
|
101
|
+
value: S.value,
|
|
102
|
+
"onUpdate:value": o[1] || (o[1] = (l) => S.value = l),
|
|
103
|
+
disabled: !e(n)
|
|
104
|
+
}, {
|
|
105
|
+
default: s(() => [
|
|
106
|
+
p("div", ue, [
|
|
107
|
+
(R(!0), P(j, null, Y(H.value, (l) => (R(), h(e(J), {
|
|
108
|
+
key: l.value,
|
|
109
|
+
value: l.value,
|
|
110
|
+
label: l.label
|
|
111
|
+
}, null, 8, ["value", "label"]))), 128))
|
|
112
|
+
])
|
|
113
|
+
]),
|
|
114
|
+
_: 1
|
|
115
|
+
}, 8, ["value", "disabled"])
|
|
116
|
+
]),
|
|
117
|
+
_: 1
|
|
118
|
+
}, 8, ["label", "keys", "disabled"]),
|
|
119
|
+
t(m, {
|
|
120
|
+
label: e(a)("config.watermark.text"),
|
|
121
|
+
hint: e(a)("config.watermark.textHint"),
|
|
122
|
+
keys: [e(i).text],
|
|
123
|
+
disabled: !e(n) || !g("text"),
|
|
124
|
+
sub: ""
|
|
125
|
+
}, {
|
|
126
|
+
default: s(() => [
|
|
127
|
+
t(e(Q), {
|
|
128
|
+
value: e(F),
|
|
129
|
+
"onUpdate:value": o[2] || (o[2] = (l) => f(F) ? F.value = l : null),
|
|
130
|
+
size: e(C),
|
|
131
|
+
maxlength: e(b).text,
|
|
132
|
+
"show-count": "",
|
|
133
|
+
disabled: !e(n) || !g("text"),
|
|
134
|
+
placeholder: e(a)("config.watermark.textPlaceholder", { max: e(b).text }),
|
|
135
|
+
"input-props": { "aria-label": e(a)("config.watermark.text") }
|
|
136
|
+
}, null, 8, ["value", "size", "maxlength", "disabled", "placeholder", "input-props"])
|
|
137
|
+
]),
|
|
138
|
+
_: 1
|
|
139
|
+
}, 8, ["label", "hint", "keys", "disabled"]),
|
|
140
|
+
t(m, {
|
|
141
|
+
label: e(a)("config.watermark.timeFormat"),
|
|
142
|
+
keys: [e(i).timeFormat],
|
|
143
|
+
disabled: !e(n) || !g("time"),
|
|
144
|
+
sub: ""
|
|
145
|
+
}, {
|
|
146
|
+
default: s(() => [
|
|
147
|
+
t(e(X), {
|
|
148
|
+
value: e(T),
|
|
149
|
+
"onUpdate:value": o[3] || (o[3] = (l) => f(T) ? T.value = l : null),
|
|
150
|
+
size: e(C),
|
|
151
|
+
options: I.value,
|
|
152
|
+
disabled: !e(n) || !g("time"),
|
|
153
|
+
"aria-label": e(a)("config.watermark.timeFormat")
|
|
154
|
+
}, null, 8, ["value", "size", "options", "disabled", "aria-label"])
|
|
155
|
+
]),
|
|
156
|
+
_: 1
|
|
157
|
+
}, 8, ["label", "keys", "disabled"])
|
|
158
|
+
]),
|
|
159
|
+
_: 1
|
|
160
|
+
}, 8, ["title"]),
|
|
161
|
+
t(L, {
|
|
162
|
+
title: e(a)("config.watermark.groupStyle")
|
|
163
|
+
}, {
|
|
164
|
+
default: s(() => [
|
|
165
|
+
t(m, {
|
|
166
|
+
label: e(a)("config.watermark.layout"),
|
|
167
|
+
keys: [e(i).layout],
|
|
168
|
+
disabled: !e(n)
|
|
169
|
+
}, {
|
|
170
|
+
default: s(() => [
|
|
171
|
+
t(N, {
|
|
172
|
+
modelValue: e(z),
|
|
173
|
+
"onUpdate:modelValue": o[4] || (o[4] = (l) => f(z) ? z.value = l : null),
|
|
174
|
+
options: K.value,
|
|
175
|
+
label: e(a)("config.watermark.layout")
|
|
176
|
+
}, null, 8, ["modelValue", "options", "label"])
|
|
177
|
+
]),
|
|
178
|
+
_: 1
|
|
179
|
+
}, 8, ["label", "keys", "disabled"]),
|
|
180
|
+
t(m, {
|
|
181
|
+
label: e(a)("config.watermark.fontSize"),
|
|
182
|
+
keys: [e(i).fontSize],
|
|
183
|
+
disabled: !e(n)
|
|
184
|
+
}, {
|
|
185
|
+
default: s(() => [
|
|
186
|
+
t(e(A), {
|
|
187
|
+
value: e(w),
|
|
188
|
+
"onUpdate:value": o[5] || (o[5] = (l) => f(w) ? w.value = l : null),
|
|
189
|
+
class: "slider",
|
|
190
|
+
min: e(b).fontSize.min,
|
|
191
|
+
max: e(b).fontSize.max,
|
|
192
|
+
tooltip: !1,
|
|
193
|
+
disabled: !e(n),
|
|
194
|
+
"aria-label": e(a)("config.watermark.fontSize")
|
|
195
|
+
}, null, 8, ["value", "min", "max", "disabled", "aria-label"]),
|
|
196
|
+
p("span", fe, y(e(w)) + " px", 1)
|
|
197
|
+
]),
|
|
198
|
+
_: 1
|
|
199
|
+
}, 8, ["label", "keys", "disabled"]),
|
|
200
|
+
t(m, {
|
|
201
|
+
label: e(a)("config.watermark.opacity"),
|
|
202
|
+
hint: e(a)("config.watermark.opacityHint"),
|
|
203
|
+
keys: [e(i).opacity],
|
|
204
|
+
disabled: !e(n)
|
|
205
|
+
}, {
|
|
206
|
+
default: s(() => [
|
|
207
|
+
t(e(A), {
|
|
208
|
+
value: e(k),
|
|
209
|
+
"onUpdate:value": o[6] || (o[6] = (l) => f(k) ? k.value = l : null),
|
|
210
|
+
class: "slider",
|
|
211
|
+
min: e(b).opacity.min,
|
|
212
|
+
max: e(b).opacity.max,
|
|
213
|
+
tooltip: !1,
|
|
214
|
+
disabled: !e(n),
|
|
215
|
+
"aria-label": e(a)("config.watermark.opacity")
|
|
216
|
+
}, null, 8, ["value", "min", "max", "disabled", "aria-label"]),
|
|
217
|
+
p("span", be, y(e(k)) + "%", 1)
|
|
218
|
+
]),
|
|
219
|
+
_: 1
|
|
220
|
+
}, 8, ["label", "hint", "keys", "disabled"]),
|
|
221
|
+
t(m, {
|
|
222
|
+
label: e(a)("config.watermark.rotate"),
|
|
223
|
+
keys: [e(i).rotate],
|
|
224
|
+
disabled: !e(n)
|
|
225
|
+
}, {
|
|
226
|
+
default: s(() => [
|
|
227
|
+
t(e(A), {
|
|
228
|
+
value: e(v),
|
|
229
|
+
"onUpdate:value": o[7] || (o[7] = (l) => f(v) ? v.value = l : null),
|
|
230
|
+
class: "slider",
|
|
231
|
+
min: e(b).rotate.min,
|
|
232
|
+
max: e(b).rotate.max,
|
|
233
|
+
step: 5,
|
|
234
|
+
tooltip: !1,
|
|
235
|
+
disabled: !e(n),
|
|
236
|
+
"aria-label": e(a)("config.watermark.rotate")
|
|
237
|
+
}, null, 8, ["value", "min", "max", "disabled", "aria-label"]),
|
|
238
|
+
p("span", ce, y(e(v)) + "°", 1)
|
|
239
|
+
]),
|
|
240
|
+
_: 1
|
|
241
|
+
}, 8, ["label", "keys", "disabled"]),
|
|
242
|
+
t(m, {
|
|
243
|
+
label: e(a)("config.watermark.density"),
|
|
244
|
+
keys: [e(i).density],
|
|
245
|
+
disabled: !e(n)
|
|
246
|
+
}, {
|
|
247
|
+
default: s(() => [
|
|
248
|
+
t(N, {
|
|
249
|
+
modelValue: e(E),
|
|
250
|
+
"onUpdate:modelValue": o[8] || (o[8] = (l) => f(E) ? E.value = l : null),
|
|
251
|
+
options: B.value,
|
|
252
|
+
label: e(a)("config.watermark.density")
|
|
253
|
+
}, null, 8, ["modelValue", "options", "label"])
|
|
254
|
+
]),
|
|
255
|
+
_: 1
|
|
256
|
+
}, 8, ["label", "keys", "disabled"]),
|
|
257
|
+
t(m, {
|
|
258
|
+
label: e(a)("config.watermark.cross"),
|
|
259
|
+
hint: e(a)("config.watermark.crossHint"),
|
|
260
|
+
keys: [e(i).cross],
|
|
261
|
+
disabled: !e(n)
|
|
262
|
+
}, {
|
|
263
|
+
default: s(() => [
|
|
264
|
+
t(e(D), {
|
|
265
|
+
value: U.value,
|
|
266
|
+
"onUpdate:value": o[9] || (o[9] = (l) => U.value = l),
|
|
267
|
+
disabled: !e(n),
|
|
268
|
+
"aria-label": e(a)("config.watermark.cross")
|
|
269
|
+
}, null, 8, ["value", "disabled", "aria-label"])
|
|
270
|
+
]),
|
|
271
|
+
_: 1
|
|
272
|
+
}, 8, ["label", "hint", "keys", "disabled"])
|
|
273
|
+
]),
|
|
274
|
+
_: 1
|
|
275
|
+
}, 8, ["title"])
|
|
276
|
+
]),
|
|
277
|
+
_: 1
|
|
278
|
+
}, 8, ["title", "desc", "preview-title"]));
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
export {
|
|
282
|
+
Re as default
|
|
283
|
+
};
|
|
284
|
+
//# sourceMappingURL=WatermarkSection2.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WatermarkSection2.vue.js","sources":["../../../../../src/views/system/config/components/WatermarkSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 水印设置:左边「内容」「样式」两组设置,右边预览(缩小版后台,水印层直接叠在上面,改一项即时变)。\n// 水印只印在登录后的页面,所以预览只有后台一种,不像「品牌与登录页」要切登录页。\nimport { computed } from 'vue'\nimport { NCheckbox, NCheckboxGroup, NInput, NSelect, NSlider, NSwitch } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport {\n DEFAULT_WATERMARK,\n formatWatermarkTime,\n normalizeWatermarkFields,\n watermarkFromValues,\n watermarkParts,\n WATERMARK_FIELDS,\n WATERMARK_KEY,\n WATERMARK_LIMITS,\n WATERMARK_TIME_FORMATS,\n type WatermarkDensity,\n type WatermarkLayout,\n type WatermarkTimeFormat,\n} from '#/lib/watermark'\nimport { useConfigDraft, useDraftFields } from '../draft'\nimport { useConfigLayout } from '../layoutMode'\nimport SectionLayout from './SectionLayout.vue'\nimport CfgGroup from './CfgGroup.vue'\nimport CfgRow from './CfgRow.vue'\nimport CfgSegment from './CfgSegment.vue'\nimport ScaleToFit from './ScaleToFit.vue'\nimport AdminMock from './AdminMock.vue'\n\nconst { t } = useI18n()\nconst { values } = useConfigDraft()\nconst { str, num, bool } = useDraftFields()\nconst { ctl } = useConfigLayout()\n\n// 内容项勾选顺序不算数,存的时候按固定顺序排,线上和预览才印得一样;键不存在(老库没种子)按默认内容项。\nconst wmOn = bool(WATERMARK_KEY.enabled)\nconst wmFields = computed<string[]>({\n get: () =>\n values[WATERMARK_KEY.fields] === undefined\n ? [...DEFAULT_WATERMARK.fields]\n : normalizeWatermarkFields(values[WATERMARK_KEY.fields]),\n set: v => {\n values[WATERMARK_KEY.fields] = normalizeWatermarkFields(v).join(',')\n },\n})\nconst wmText = str(WATERMARK_KEY.text)\nconst wmEnum = <T extends string>(key: string, fallback: T) =>\n computed<T>({\n get: () => (values[key] || fallback) as T,\n set: v => {\n values[key] = v\n },\n })\nconst wmTimeFormat = wmEnum<WatermarkTimeFormat>(\n WATERMARK_KEY.timeFormat,\n DEFAULT_WATERMARK.timeFormat,\n)\nconst wmLayout = wmEnum<WatermarkLayout>(WATERMARK_KEY.layout, DEFAULT_WATERMARK.layout)\nconst wmDensity = wmEnum<WatermarkDensity>(WATERMARK_KEY.density, DEFAULT_WATERMARK.density)\nconst wmSize = num(WATERMARK_KEY.fontSize, DEFAULT_WATERMARK.fontSize)\nconst wmOpacity = num(WATERMARK_KEY.opacity, DEFAULT_WATERMARK.opacity)\nconst wmRotate = num(WATERMARK_KEY.rotate, DEFAULT_WATERMARK.rotate)\nconst wmCross = computed({\n get: () => values[WATERMARK_KEY.cross] !== 'false',\n set: v => {\n values[WATERMARK_KEY.cross] = v ? 'true' : 'false'\n },\n})\nconst wmHasField = (f: string) => wmFields.value.includes(f)\nconst wmFieldOptions = computed(() =>\n WATERMARK_FIELDS.map(f => ({ value: f, label: t(`config.watermark.field.${f}`) })),\n)\n// 时间格式的选项文字就是「现在这一刻按该格式印出来」的样子,不用背格式串\nconst wmTimeOptions = computed(() =>\n WATERMARK_TIME_FORMATS.map(f => ({ value: f, label: formatWatermarkTime(f, new Date()) })),\n)\nconst wmLayoutOptions = computed(() => [\n { value: 'single' as const, label: t('config.watermark.layoutSingle') },\n { value: 'multi' as const, label: t('config.watermark.layoutMulti') },\n])\nconst wmDensityOptions = computed(() => [\n { value: 'sparse' as const, label: t('config.watermark.sparse') },\n { value: 'normal' as const, label: t('config.watermark.normal') },\n { value: 'dense' as const, label: t('config.watermark.dense') },\n])\n// 启用了但没有任何可印的东西(一项没勾,或只勾了自定义文字却没填):警告,照常允许保存\nconst wmEmpty = computed(\n () =>\n wmOn.value &&\n watermarkParts(\n watermarkFromValues(values),\n { name: 'x', account: 'x', org: 'x', phoneTail: 'x' },\n new Date(),\n ).length === 0,\n)\n</script>\n\n<template>\n <SectionLayout\n :title=\"t('config.tab.watermark')\"\n :desc=\"t('config.watermark.desc')\"\n :preview-title=\"t('config.brand.preview')\"\n >\n <CfgGroup :title=\"t('config.watermark.groupContent')\">\n <CfgRow\n :label=\"t('config.watermark.enable')\"\n :hint=\"t('config.watermark.enableHint')\"\n :keys=\"[WATERMARK_KEY.enabled]\"\n >\n <n-switch v-model:value=\"wmOn\" :aria-label=\"t('config.watermark.enable')\" />\n </CfgRow>\n <CfgRow\n :label=\"t('config.watermark.content')\"\n :keys=\"[WATERMARK_KEY.fields]\"\n :disabled=\"!wmOn\"\n tall\n class=\"wm-content\"\n >\n <template #hint>\n <span :class=\"{ warn: wmEmpty }\">\n {{ wmEmpty ? t('config.watermark.contentEmpty') : t('config.watermark.contentHint') }}\n </span>\n </template>\n <n-checkbox-group v-model:value=\"wmFields\" :disabled=\"!wmOn\">\n <div class=\"wm-fields\">\n <n-checkbox\n v-for=\"o in wmFieldOptions\"\n :key=\"o.value\"\n :value=\"o.value\"\n :label=\"o.label\"\n />\n </div>\n </n-checkbox-group>\n </CfgRow>\n <CfgRow\n :label=\"t('config.watermark.text')\"\n :hint=\"t('config.watermark.textHint')\"\n :keys=\"[WATERMARK_KEY.text]\"\n :disabled=\"!wmOn || !wmHasField('text')\"\n sub\n >\n <n-input\n v-model:value=\"wmText\"\n :size=\"ctl\"\n :maxlength=\"WATERMARK_LIMITS.text\"\n show-count\n :disabled=\"!wmOn || !wmHasField('text')\"\n :placeholder=\"t('config.watermark.textPlaceholder', { max: WATERMARK_LIMITS.text })\"\n :input-props=\"{ 'aria-label': t('config.watermark.text') }\"\n />\n </CfgRow>\n <CfgRow\n :label=\"t('config.watermark.timeFormat')\"\n :keys=\"[WATERMARK_KEY.timeFormat]\"\n :disabled=\"!wmOn || !wmHasField('time')\"\n sub\n >\n <n-select\n v-model:value=\"wmTimeFormat\"\n :size=\"ctl\"\n :options=\"wmTimeOptions\"\n :disabled=\"!wmOn || !wmHasField('time')\"\n :aria-label=\"t('config.watermark.timeFormat')\"\n />\n </CfgRow>\n </CfgGroup>\n\n <CfgGroup :title=\"t('config.watermark.groupStyle')\">\n <CfgRow\n :label=\"t('config.watermark.layout')\"\n :keys=\"[WATERMARK_KEY.layout]\"\n :disabled=\"!wmOn\"\n >\n <CfgSegment\n v-model=\"wmLayout\"\n :options=\"wmLayoutOptions\"\n :label=\"t('config.watermark.layout')\"\n />\n </CfgRow>\n <CfgRow\n :label=\"t('config.watermark.fontSize')\"\n :keys=\"[WATERMARK_KEY.fontSize]\"\n :disabled=\"!wmOn\"\n >\n <n-slider\n v-model:value=\"wmSize\"\n class=\"slider\"\n :min=\"WATERMARK_LIMITS.fontSize.min\"\n :max=\"WATERMARK_LIMITS.fontSize.max\"\n :tooltip=\"false\"\n :disabled=\"!wmOn\"\n :aria-label=\"t('config.watermark.fontSize')\"\n />\n <span class=\"unit\">{{ wmSize }} px</span>\n </CfgRow>\n <CfgRow\n :label=\"t('config.watermark.opacity')\"\n :hint=\"t('config.watermark.opacityHint')\"\n :keys=\"[WATERMARK_KEY.opacity]\"\n :disabled=\"!wmOn\"\n >\n <n-slider\n v-model:value=\"wmOpacity\"\n class=\"slider\"\n :min=\"WATERMARK_LIMITS.opacity.min\"\n :max=\"WATERMARK_LIMITS.opacity.max\"\n :tooltip=\"false\"\n :disabled=\"!wmOn\"\n :aria-label=\"t('config.watermark.opacity')\"\n />\n <span class=\"unit\">{{ wmOpacity }}%</span>\n </CfgRow>\n <CfgRow\n :label=\"t('config.watermark.rotate')\"\n :keys=\"[WATERMARK_KEY.rotate]\"\n :disabled=\"!wmOn\"\n >\n <n-slider\n v-model:value=\"wmRotate\"\n class=\"slider\"\n :min=\"WATERMARK_LIMITS.rotate.min\"\n :max=\"WATERMARK_LIMITS.rotate.max\"\n :step=\"5\"\n :tooltip=\"false\"\n :disabled=\"!wmOn\"\n :aria-label=\"t('config.watermark.rotate')\"\n />\n <span class=\"unit\">{{ wmRotate }}°</span>\n </CfgRow>\n <CfgRow\n :label=\"t('config.watermark.density')\"\n :keys=\"[WATERMARK_KEY.density]\"\n :disabled=\"!wmOn\"\n >\n <CfgSegment\n v-model=\"wmDensity\"\n :options=\"wmDensityOptions\"\n :label=\"t('config.watermark.density')\"\n />\n </CfgRow>\n <CfgRow\n :label=\"t('config.watermark.cross')\"\n :hint=\"t('config.watermark.crossHint')\"\n :keys=\"[WATERMARK_KEY.cross]\"\n :disabled=\"!wmOn\"\n >\n <n-switch\n v-model:value=\"wmCross\"\n :disabled=\"!wmOn\"\n :aria-label=\"t('config.watermark.cross')\"\n />\n </CfgRow>\n </CfgGroup>\n\n <template #preview>\n <ScaleToFit :width=\"880\" :height=\"540\">\n <AdminMock />\n </ScaleToFit>\n </template>\n </SectionLayout>\n</template>\n\n<style scoped>\n.warn {\n color: var(--warn);\n}\n.wm-content :deep(.ctl) {\n flex: 1.8 1 0;\n}\n.wm-content :deep(.n-checkbox-group) {\n width: 100%;\n}\n.wm-fields {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 8px 16px;\n}\n.slider {\n width: 160px;\n}\n.unit {\n flex: none;\n min-width: 44px;\n font-size: 13px;\n color: var(--text-2);\n text-align: right;\n font-variant-numeric: tabular-nums;\n}\n</style>\n"],"names":["t","useI18n","values","useConfigDraft","str","num","bool","useDraftFields","ctl","useConfigLayout","wmOn","WATERMARK_KEY","wmFields","computed","DEFAULT_WATERMARK","normalizeWatermarkFields","v","wmText","wmEnum","key","fallback","wmTimeFormat","wmLayout","wmDensity","wmSize","wmOpacity","wmRotate","wmCross","wmHasField","f","wmFieldOptions","WATERMARK_FIELDS","wmTimeOptions","WATERMARK_TIME_FORMATS","formatWatermarkTime","wmLayoutOptions","wmDensityOptions","wmEmpty","watermarkParts","watermarkFromValues","_createBlock","SectionLayout","_unref","_createVNode","ScaleToFit","AdminMock","CfgGroup","CfgRow","NSwitch","$event","_createElementVNode","NCheckboxGroup","_hoisted_1","_createElementBlock","_Fragment","_renderList","o","NCheckbox","NInput","WATERMARK_LIMITS","NSelect","CfgSegment","NSlider","_hoisted_2","_toDisplayString","_hoisted_3","_hoisted_4"],"mappings":"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"}
|