smart-admin-web 10.15.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 +1 -1
- package/dist/api/index.d.ts +4 -2
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.d.ts +39 -5
- package/dist/assets/icons/ph-subset.json.js +5 -5
- 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/TableTotal/index.vue.d.ts +6 -0
- 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/useModule.js +39 -29
- package/dist/composables/useModule.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 +15 -0
- package/dist/composables/useSite.js +16 -14
- 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 +219 -205
- 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/loginHero.d.ts +2 -2
- package/dist/lib/loginHero.js.map +1 -1
- package/dist/lib/runtime.js +1 -1
- 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 +221 -15
- package/dist/locales/en-US.js +230 -21
- 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 +221 -15
- package/dist/locales/zh-CN.js +238 -28
- 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 +8 -8
- 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.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.js +3 -3
- package/dist/views/login/components/LoginHeroPanel2.vue.js +34 -39
- package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -1
- 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 +2 -2
- package/dist/views/system/config/components/AdminMock2.vue.js +60 -43
- package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -1
- package/dist/views/system/config/components/AdvancedSection.vue.js +5 -2
- package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -1
- package/dist/views/system/config/components/AdvancedSection2.vue.js +98 -70
- package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/BrandSection.vue.js +2 -2
- package/dist/views/system/config/components/BrandSection2.vue.js +121 -119
- package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/CfgGroup.vue.js +3 -3
- package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -1
- package/dist/views/system/config/components/CfgRow.vue.js +1 -1
- package/dist/views/system/config/components/CfgRow2.vue.js +24 -23
- package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -1
- package/dist/views/system/config/components/CfgSegment.vue.js +1 -1
- package/dist/views/system/config/components/CfgSegment2.vue.js +16 -15
- package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -1
- package/dist/views/system/config/components/ConfigFormModal.vue.js +2 -2
- package/dist/views/system/config/components/ConfigFormModal2.vue.js +35 -33
- package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
- package/dist/views/system/config/components/JobSection.vue.js +2 -2
- package/dist/views/system/config/components/JobSection2.vue.js +46 -44
- package/dist/views/system/config/components/JobSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/LoginMock.vue.js +3 -3
- package/dist/views/system/config/components/LoginMock2.vue.js +83 -72
- package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -1
- package/dist/views/system/config/components/LogoCropper.vue.js +1 -1
- package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -1
- package/dist/views/system/config/components/LogoEditor.vue.js +2 -2
- package/dist/views/system/config/components/LogoEditor2.vue.js +11 -13
- package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -1
- package/dist/views/system/config/components/ProviderSheet.vue.js +3 -3
- package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -1
- package/dist/views/system/config/components/SectionLayout.vue.d.ts +4 -2
- package/dist/views/system/config/components/SectionLayout.vue.js +2 -2
- package/dist/views/system/config/components/SectionLayout2.vue.js +51 -27
- package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -1
- package/dist/views/system/config/components/SecuritySection.vue.js +2 -2
- package/dist/views/system/config/components/SecuritySection2.vue.js +207 -206
- package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -1
- package/dist/views/system/config/components/SensitiveSection.vue.js +2 -2
- package/dist/views/system/config/components/SensitiveSection2.vue.js +107 -102
- package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/UploadSection.vue.js +2 -2
- package/dist/views/system/config/components/UploadSection2.vue.js +86 -77
- package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -1
- 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 +2 -2
- package/dist/views/system/config/draft.js.map +1 -1
- package/dist/views/system/config/groups.d.ts +4 -1
- package/dist/views/system/config/groups.js +54 -49
- package/dist/views/system/config/groups.js.map +1 -1
- package/dist/views/system/config/index.vue.js +3 -2
- package/dist/views/system/config/index.vue.js.map +1 -1
- package/dist/views/system/config/index2.vue.js +173 -148
- 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/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 +3 -5
- 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.d.ts +0 -16
- 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.d.ts +0 -3
- 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 -65
- package/dist/views/login/skins/SplitPanel2.vue.js.map +0 -1
- package/dist/views/login/skins/Spotlight.vue.d.ts +0 -3
- 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/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/WatermarkSection.vue.d.ts} +0 -0
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { onBeforeUnmount as w, nextTick as y } from "vue";
|
|
2
|
-
const S = "drag-handle", h = 10, k = 80;
|
|
3
|
-
function L(e) {
|
|
4
|
-
let r = null, c = null, s;
|
|
5
|
-
function l() {
|
|
6
|
-
clearTimeout(s), r == null || r.destroy(), r = null, c = null;
|
|
7
|
-
}
|
|
8
|
-
async function i(d = 0) {
|
|
9
|
-
var f;
|
|
10
|
-
if (e.disabled()) {
|
|
11
|
-
l();
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
await y();
|
|
15
|
-
const t = (f = e.container.value) == null ? void 0 : f.querySelector(".n-data-table-tbody");
|
|
16
|
-
if (!t) {
|
|
17
|
-
l(), d < h && (s = setTimeout(() => void i(d + 1), k));
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
if (t === c) return;
|
|
21
|
-
clearTimeout(s), l();
|
|
22
|
-
const { default: m } = await import("sortablejs");
|
|
23
|
-
r = m.create(t, {
|
|
24
|
-
handle: `.${S}`,
|
|
25
|
-
draggable: ".n-data-table-tr",
|
|
26
|
-
animation: 180,
|
|
27
|
-
easing: "cubic-bezier(0.22, 0.61, 0.36, 1)",
|
|
28
|
-
chosenClass: "row-chosen",
|
|
29
|
-
ghostClass: "row-ghost",
|
|
30
|
-
fallbackClass: "row-fallback",
|
|
31
|
-
// 自绘拖拽层(而不是浏览器的原生拖影),配合样式里的隐藏才能把拖拽锁在表内
|
|
32
|
-
forceFallback: !0,
|
|
33
|
-
// 手柄上的轻微抖动不该被当成拖拽,否则点一下就误触发
|
|
34
|
-
fallbackTolerance: 4,
|
|
35
|
-
scroll: !0,
|
|
36
|
-
forceAutoScrollFallback: !0,
|
|
37
|
-
scrollSensitivity: 64,
|
|
38
|
-
scrollSpeed: 12,
|
|
39
|
-
onStart: () => {
|
|
40
|
-
var a;
|
|
41
|
-
return (a = e.container.value) == null ? void 0 : a.classList.add("is-dragging");
|
|
42
|
-
},
|
|
43
|
-
onEnd: (a) => {
|
|
44
|
-
var g, T;
|
|
45
|
-
(g = e.container.value) == null || g.classList.remove("is-dragging");
|
|
46
|
-
const { oldIndex: n, newIndex: o } = a;
|
|
47
|
-
if (n == null || o == null || n === o) return;
|
|
48
|
-
const b = e.rows(), [u] = b.splice(n, 1);
|
|
49
|
-
u && (b.splice(o, 0, u), (T = e.onSorted) == null || T.call(e, u, n, o));
|
|
50
|
-
}
|
|
51
|
-
}), c = t;
|
|
52
|
-
}
|
|
53
|
-
return w(l), { sync: i, destroy: l };
|
|
54
|
-
}
|
|
55
|
-
export {
|
|
56
|
-
S as DRAG_HANDLE_CLASS,
|
|
57
|
-
L as useTableRowSort
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=useTableRowSort.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useTableRowSort.js","sources":["../../src/composables/useTableRowSort.ts"],"sourcesContent":["// n-data-table 的行拖拽排序:sortablejs 的挂载/重建/销毁与重排回调都收在这里。\n//\n// 为什么不用原生 HTML5 拖放(<tr draggable> + dragstart/drop):那个半透明拖影由浏览器绘制,\n// 能跟着鼠标飘到表格外、弹窗外甚至窗口外,CSS 一点都管不到。这里用 sortablejs 的\n// forceFallback + 隐藏浮层(样式里 .row-fallback { display: none }),拖拽全靠行本身移动来表达,\n// 视觉上永远出不了表体;让位动画与自动滚动交给 sortablejs。\nimport { nextTick, onBeforeUnmount, type Ref } from 'vue'\nimport type Sortable from 'sortablejs'\n\nexport interface TableRowSortOptions<T> {\n /**\n * 表格所在的容器元素,从中找 tbody;拖拽期间它会被打上 .is-dragging。\n * 该元素要套全局类 <code>.row-sort</code>(styles/table.css)才有配套外观。\n */\n container: Ref<HTMLElement | null>\n /** 被排序的数组,原地重排(reactive 数组直接传函数返回值即可) */\n rows: () => T[]\n /** 为真时不可拖(只读态、详情态) */\n disabled: () => boolean\n /** 重排完成:落位的行 + 原始/目标下标 */\n onSorted?: (row: T, from: number, to: number) => void\n}\n\n/** 拖拽手柄的类名,列渲染和样式两边都按它对齐 */\nexport const DRAG_HANDLE_CLASS = 'drag-handle'\n\n/** tbody 还没渲染出来时的重试次数与间隔:弹窗有开场动画,首帧往往取不到表体 */\nconst RETRY_LIMIT = 10\nconst RETRY_DELAY = 80\n\nexport function useTableRowSort<T>(options: TableRowSortOptions<T>) {\n let sortable: Sortable | null = null\n let boundTbody: HTMLElement | null = null\n let retryTimer: ReturnType<typeof setTimeout> | undefined\n\n function destroy() {\n clearTimeout(retryTimer)\n sortable?.destroy()\n sortable = null\n boundTbody = null\n }\n\n /**\n * 重新绑定拖拽。表格换了一个 tbody(弹窗重开、只读态切换)才需要真的重建,\n * 行的增删不动 tbody 元素本身,重复调用是廉价的。\n */\n async function sync(attempt = 0) {\n if (options.disabled()) {\n destroy()\n return\n }\n await nextTick()\n const tbody = options.container.value?.querySelector<HTMLElement>('.n-data-table-tbody')\n if (!tbody) {\n destroy()\n // 弹窗开场动画期间表体还没挂上,过一会儿再试,别把拖拽丢了\n if (attempt < RETRY_LIMIT) {\n retryTimer = setTimeout(() => void sync(attempt + 1), RETRY_DELAY)\n }\n return\n }\n if (tbody === boundTbody) return\n clearTimeout(retryTimer)\n\n destroy()\n const { default: SortableCtor } = await import('sortablejs')\n sortable = SortableCtor.create(tbody, {\n handle: `.${DRAG_HANDLE_CLASS}`,\n draggable: '.n-data-table-tr',\n animation: 180,\n easing: 'cubic-bezier(0.22, 0.61, 0.36, 1)',\n chosenClass: 'row-chosen',\n ghostClass: 'row-ghost',\n fallbackClass: 'row-fallback',\n // 自绘拖拽层(而不是浏览器的原生拖影),配合样式里的隐藏才能把拖拽锁在表内\n forceFallback: true,\n // 手柄上的轻微抖动不该被当成拖拽,否则点一下就误触发\n fallbackTolerance: 4,\n scroll: true,\n forceAutoScrollFallback: true,\n scrollSensitivity: 64,\n scrollSpeed: 12,\n onStart: () => options.container.value?.classList.add('is-dragging'),\n onEnd: event => {\n options.container.value?.classList.remove('is-dragging')\n const { oldIndex: from, newIndex: to } = event\n if (from == null || to == null || from === to) return\n // sortablejs 已经把 DOM 挪好了,这里同步数据;表格带 row-key,Vue 按键重排不会串行\n const rows = options.rows()\n const [row] = rows.splice(from, 1)\n if (!row) return\n rows.splice(to, 0, row)\n options.onSorted?.(row, from, to)\n },\n })\n boundTbody = tbody\n }\n\n onBeforeUnmount(destroy)\n\n return { sync, destroy }\n}\n"],"names":["DRAG_HANDLE_CLASS","RETRY_LIMIT","RETRY_DELAY","useTableRowSort","options","sortable","boundTbody","retryTimer","destroy","sync","attempt","nextTick","tbody","_a","SortableCtor","event","from","to","rows","row","_b","onBeforeUnmount"],"mappings":";AAwBO,MAAMA,IAAoB,eAG3BC,IAAc,IACdC,IAAc;AAEb,SAASC,EAAmBC,GAAiC;AAClE,MAAIC,IAA4B,MAC5BC,IAAiC,MACjCC;AAEJ,WAASC,IAAU;AACjB,iBAAaD,CAAU,GACvBF,KAAA,QAAAA,EAAU,WACVA,IAAW,MACXC,IAAa;AAAA,EACf;AAMA,iBAAeG,EAAKC,IAAU,GAAG;;AAC/B,QAAIN,EAAQ,YAAY;AACtB,MAAAI,EAAA;AACA;AAAA,IACF;AACA,UAAMG,EAAA;AACN,UAAMC,KAAQC,IAAAT,EAAQ,UAAU,UAAlB,gBAAAS,EAAyB,cAA2B;AAClE,QAAI,CAACD,GAAO;AACV,MAAAJ,EAAA,GAEIE,IAAUT,MACZM,IAAa,WAAW,MAAM,KAAKE,EAAKC,IAAU,CAAC,GAAGR,CAAW;AAEnE;AAAA,IACF;AACA,QAAIU,MAAUN,EAAY;AAC1B,iBAAaC,CAAU,GAEvBC,EAAA;AACA,UAAM,EAAE,SAASM,MAAiB,MAAM,OAAO,YAAY;AAC3D,IAAAT,IAAWS,EAAa,OAAOF,GAAO;AAAA,MACpC,QAAQ,IAAIZ,CAAiB;AAAA,MAC7B,WAAW;AAAA,MACX,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,eAAe;AAAA;AAAA,MAEf,eAAe;AAAA;AAAA,MAEf,mBAAmB;AAAA,MACnB,QAAQ;AAAA,MACR,yBAAyB;AAAA,MACzB,mBAAmB;AAAA,MACnB,aAAa;AAAA,MACb,SAAS,MAAA;;AAAM,gBAAAa,IAAAT,EAAQ,UAAU,UAAlB,gBAAAS,EAAyB,UAAU,IAAI;AAAA;AAAA,MACtD,OAAO,CAAAE,MAAS;;AACd,SAAAF,IAAAT,EAAQ,UAAU,UAAlB,QAAAS,EAAyB,UAAU,OAAO;AAC1C,cAAM,EAAE,UAAUG,GAAM,UAAUC,MAAOF;AACzC,YAAIC,KAAQ,QAAQC,KAAM,QAAQD,MAASC,EAAI;AAE/C,cAAMC,IAAOd,EAAQ,KAAA,GACf,CAACe,CAAG,IAAID,EAAK,OAAOF,GAAM,CAAC;AACjC,QAAKG,MACLD,EAAK,OAAOD,GAAI,GAAGE,CAAG,IACtBC,IAAAhB,EAAQ,aAAR,QAAAgB,EAAA,KAAAhB,GAAmBe,GAAKH,GAAMC;AAAA,MAChC;AAAA,IAAA,CACD,GACDX,IAAaM;AAAA,EACf;AAEA,SAAAS,EAAgBb,CAAO,GAEhB,EAAE,MAAAC,GAAM,SAAAD,EAAA;AACjB;"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import o from "./LayoutModeCards2.vue.js";
|
|
2
|
-
/* empty css */
|
|
3
|
-
import t from "../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const d = /* @__PURE__ */ t(o, [["__scopeId", "data-v-66443dff"]]);
|
|
5
|
-
export {
|
|
6
|
-
d as default
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=LayoutModeCards.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutModeCards.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { defineComponent as c, openBlock as l, createElementBlock as t, Fragment as r, renderList as v, unref as e, createElementVNode as a, normalizeClass as n, createStaticVNode as f, toDisplayString as y } from "vue";
|
|
2
|
-
import { useI18n as b } from "vue-i18n";
|
|
3
|
-
import { useAppStore as g, LAYOUT_MODES as k } from "../stores/app.js";
|
|
4
|
-
const m = { class: "grid" }, w = ["onClick"], C = ["aria-label", "aria-pressed"], z = /* @__PURE__ */ c({
|
|
5
|
-
__name: "LayoutModeCards",
|
|
6
|
-
setup(M) {
|
|
7
|
-
const o = g(), { t: u } = b();
|
|
8
|
-
function d(p) {
|
|
9
|
-
const s = p.split("-").map((i) => i[0].toUpperCase() + i.slice(1)).join("");
|
|
10
|
-
return u("settings.layout" + s);
|
|
11
|
-
}
|
|
12
|
-
return (p, s) => (l(), t("div", m, [
|
|
13
|
-
(l(!0), t(r, null, v(e(k), (i) => (l(), t("div", {
|
|
14
|
-
key: i,
|
|
15
|
-
class: "cell",
|
|
16
|
-
onClick: (L) => e(o).setLayoutMode(i)
|
|
17
|
-
}, [
|
|
18
|
-
a("button", {
|
|
19
|
-
type: "button",
|
|
20
|
-
class: n(["card", { on: e(o).layoutMode === i }]),
|
|
21
|
-
"aria-label": d(i),
|
|
22
|
-
"aria-pressed": e(o).layoutMode === i
|
|
23
|
-
}, [
|
|
24
|
-
a("span", {
|
|
25
|
-
class: n(["inner", i.includes("vertical") ? "row" : "col"])
|
|
26
|
-
}, [
|
|
27
|
-
i === "vertical" ? (l(), t(r, { key: 0 }, [
|
|
28
|
-
s[0] || (s[0] = a("i", { class: "sider strong" }, null, -1)),
|
|
29
|
-
s[1] || (s[1] = a("i", { class: "vwrap" }, [
|
|
30
|
-
a("i", { class: "header p200" }),
|
|
31
|
-
a("i", { class: "main p200" })
|
|
32
|
-
], -1))
|
|
33
|
-
], 64)) : i === "vertical-mix" ? (l(), t(r, { key: 1 }, [
|
|
34
|
-
s[2] || (s[2] = f('<i class="rail strong" data-v-66443dff></i><i class="subsider p300" data-v-66443dff></i><i class="vwrap" data-v-66443dff><i class="header p200" data-v-66443dff></i><i class="main p200" data-v-66443dff></i></i>', 3))
|
|
35
|
-
], 64)) : i === "vertical-hybrid-header-first" ? (l(), t(r, { key: 2 }, [
|
|
36
|
-
s[3] || (s[3] = f('<i class="rail strong" data-v-66443dff></i><i class="subsider p300" data-v-66443dff></i><i class="vwrap" data-v-66443dff><i class="header strong" data-v-66443dff></i><i class="main p200" data-v-66443dff></i></i>', 3))
|
|
37
|
-
], 64)) : i === "horizontal" ? (l(), t(r, { key: 3 }, [
|
|
38
|
-
s[4] || (s[4] = a("i", { class: "header full strong" }, null, -1)),
|
|
39
|
-
s[5] || (s[5] = a("i", { class: "hwrap" }, [
|
|
40
|
-
a("i", { class: "main p200" })
|
|
41
|
-
], -1))
|
|
42
|
-
], 64)) : i === "top-hybrid-sidebar-first" ? (l(), t(r, { key: 4 }, [
|
|
43
|
-
s[6] || (s[6] = a("i", { class: "header full p300" }, null, -1)),
|
|
44
|
-
s[7] || (s[7] = a("i", { class: "hwrap" }, [
|
|
45
|
-
a("i", { class: "sider strong" }),
|
|
46
|
-
a("i", { class: "main p200" })
|
|
47
|
-
], -1))
|
|
48
|
-
], 64)) : (l(), t(r, { key: 5 }, [
|
|
49
|
-
s[8] || (s[8] = a("i", { class: "header full strong" }, null, -1)),
|
|
50
|
-
s[9] || (s[9] = a("i", { class: "hwrap" }, [
|
|
51
|
-
a("i", { class: "sider p300" }),
|
|
52
|
-
a("i", { class: "main p200" })
|
|
53
|
-
], -1))
|
|
54
|
-
], 64))
|
|
55
|
-
], 2)
|
|
56
|
-
], 10, C),
|
|
57
|
-
a("p", {
|
|
58
|
-
class: n(["label", { on: e(o).layoutMode === i }])
|
|
59
|
-
}, y(d(i)), 3)
|
|
60
|
-
], 8, w))), 128))
|
|
61
|
-
]));
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
export {
|
|
65
|
-
z as default
|
|
66
|
-
};
|
|
67
|
-
//# sourceMappingURL=LayoutModeCards2.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutModeCards2.vue.js","sources":["../../src/layouts/LayoutModeCards.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\nimport { useAppStore, LAYOUT_MODES, type LayoutMode } from '#/stores/app'\n\n// 布局模式彩色线框卡片(对齐 SoybeanAdmin theme-drawer/layout-mode.vue)。\n// 三档主色 strong(500)/p300/p200 由实时 --color-primary 派生;形状与 soybean 逐模式一致。\nconst app = useAppStore()\nconst { t } = useI18n()\n\nfunction label(m: LayoutMode) {\n const pascal = m\n .split('-')\n .map(w => w[0]!.toUpperCase() + w.slice(1))\n .join('')\n return t('settings.layout' + pascal)\n}\n</script>\n\n<template>\n <div class=\"grid\">\n <div v-for=\"m in LAYOUT_MODES\" :key=\"m\" class=\"cell\" @click=\"app.setLayoutMode(m)\">\n <button\n type=\"button\"\n class=\"card\"\n :class=\"{ on: app.layoutMode === m }\"\n :aria-label=\"label(m)\"\n :aria-pressed=\"app.layoutMode === m\"\n >\n <span class=\"inner\" :class=\"m.includes('vertical') ? 'row' : 'col'\">\n <!-- 左侧菜单:满高侧栏 + (头 / 内容) -->\n <template v-if=\"m === 'vertical'\">\n <i class=\"sider strong\" />\n <i class=\"vwrap\">\n <i class=\"header p200\" />\n <i class=\"main p200\" />\n </i>\n </template>\n <!-- 左侧混合:一级 rail + 二级列 + (头 / 内容) -->\n <template v-else-if=\"m === 'vertical-mix'\">\n <i class=\"rail strong\" />\n <i class=\"subsider p300\" />\n <i class=\"vwrap\">\n <i class=\"header p200\" />\n <i class=\"main p200\" />\n </i>\n </template>\n <!-- 左侧混合-顶部优先:一级上顶,rail(二级) + 三级列 + (强调头 / 内容) -->\n <template v-else-if=\"m === 'vertical-hybrid-header-first'\">\n <i class=\"rail strong\" />\n <i class=\"subsider p300\" />\n <i class=\"vwrap\">\n <i class=\"header strong\" />\n <i class=\"main p200\" />\n </i>\n </template>\n <!-- 顶部菜单:通栏头 + 内容 -->\n <template v-else-if=\"m === 'horizontal'\">\n <i class=\"header full strong\" />\n <i class=\"hwrap\"><i class=\"main p200\" /></i>\n </template>\n <!-- 顶部混合-侧边优先:头(二级)+ (强调 rail(一级) / 内容) -->\n <template v-else-if=\"m === 'top-hybrid-sidebar-first'\">\n <i class=\"header full p300\" />\n <i class=\"hwrap\">\n <i class=\"sider strong\" />\n <i class=\"main p200\" />\n </i>\n </template>\n <!-- 顶部混合-顶部优先:强调头(一级)+ (侧栏(二级) / 内容) -->\n <template v-else>\n <i class=\"header full strong\" />\n <i class=\"hwrap\">\n <i class=\"sider p300\" />\n <i class=\"main p200\" />\n </i>\n </template>\n </span>\n </button>\n <p class=\"label\" :class=\"{ on: app.layoutMode === m }\">{{ label(m) }}</p>\n </div>\n </div>\n</template>\n\n<style scoped>\n.grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n /* animated tab 的 .n-tabs-pane-wrapper 是 overflow:hidden,会裁掉边列卡片的 2px 选中环;内缩 3px 让环留在裁剪框内 */\n padding-inline: 3px;\n}\n.cell {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n}\n\n/* 卡片:soybean = shadow + ring-2(默认透明,hover/选中转主色) */\n.card {\n width: 100%;\n height: 62px;\n padding: 6px;\n border: none;\n border-radius: 4px;\n background: var(--color-bg-container);\n box-shadow:\n 0 1px 3px rgba(20, 27, 45, 0.1),\n 0 0 0 2px transparent;\n cursor: pointer;\n transition: box-shadow 0.15s ease;\n}\n.cell:hover .card {\n box-shadow:\n 0 1px 3px rgba(20, 27, 45, 0.1),\n 0 0 0 2px var(--color-primary);\n}\n.card.on {\n box-shadow:\n 0 1px 3px rgba(20, 27, 45, 0.1),\n 0 0 0 2px var(--color-primary);\n}\n\n/* 线框:三档主色派生跟随实时 --color-primary */\n.inner {\n --strong: var(--color-primary);\n --p300: color-mix(in srgb, var(--color-primary) 58%, var(--color-bg-container));\n --p200: color-mix(in srgb, var(--color-primary) 34%, var(--color-bg-container));\n display: flex;\n gap: 5px;\n width: 100%;\n height: 100%;\n}\n.inner.row {\n flex-direction: row;\n}\n.inner.col {\n flex-direction: column;\n}\n.inner i,\n.inner .vwrap,\n.inner .hwrap {\n border-radius: 3px;\n}\n.strong {\n background: var(--strong);\n}\n.p300 {\n background: var(--p300);\n}\n.p200 {\n background: var(--p200);\n}\n.sider {\n width: 18%;\n flex-shrink: 0;\n}\n.rail {\n width: 9%;\n flex-shrink: 0;\n}\n.subsider {\n width: 16%;\n flex-shrink: 0;\n}\n.header {\n flex-shrink: 0;\n height: 13px;\n}\n.header.full {\n width: 100%;\n}\n.main {\n flex: 1;\n}\n.vwrap {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 5px;\n}\n.vwrap .header {\n width: 100%;\n}\n.hwrap {\n flex: 1;\n display: flex;\n flex-direction: row;\n gap: 5px;\n}\n\n.label {\n margin: 0;\n text-align: center;\n font-size: var(--font-size-xs);\n line-height: var(--line-height-xs);\n color: var(--color-text-secondary);\n}\n.label.on {\n color: var(--color-primary);\n font-weight: var(--font-weight-medium);\n}\n</style>\n"],"names":["app","useAppStore","t","useI18n","label","m","pascal","w","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_renderList","_unref","LAYOUT_MODES","$event","_createElementVNode","_normalizeClass","_toDisplayString"],"mappings":";;;;;;AAMA,UAAMA,IAAMC,EAAA,GACN,EAAE,GAAAC,EAAA,IAAMC,EAAA;AAEd,aAASC,EAAMC,GAAe;AAC5B,YAAMC,IAASD,EACZ,MAAM,GAAG,EACT,IAAI,OAAKE,EAAE,CAAC,EAAG,YAAA,IAAgBA,EAAE,MAAM,CAAC,CAAC,EACzC,KAAK,EAAE;AACV,aAAOL,EAAE,oBAAoBI,CAAM;AAAA,IACrC;sBAIEE,EAAA,GAAAC,EA6DM,OA7DNC,GA6DM;AAAA,cA5DJD,EA2DME,GAAA,MAAAC,EA3DWC,EAAAC,CAAA,GAAY,CAAjBT,YAAZI,EA2DM,OAAA;AAAA,QA3D0B,KAAKJ;AAAA,QAAG,OAAM;AAAA,QAAQ,SAAK,CAAAU,MAAEF,EAAAb,CAAA,EAAI,cAAcK,CAAC;AAAA,MAAA;QAC9EW,EAwDS,UAAA;AAAA,UAvDP,MAAK;AAAA,UACL,UAAM,QAAM,EAAA,IACEH,KAAI,eAAeR,EAAA,CAAC,CAAA;AAAA,UACjC,cAAYD,EAAMC,CAAC;AAAA,UACnB,gBAAcQ,EAAAb,CAAA,EAAI,eAAeK;AAAA,QAAA;UAElCW,EAgDO,QAAA;AAAA,YAhDD,OAAKC,EAAA,CAAC,SAAgBZ,EAAE,SAAQ,UAAA,IAAA,QAAA,KAAA,CAAA;AAAA,UAAA;YAEpBA,MAAC,mBAAjBI,EAMWE,GAAA,EAAA,KAAA,KAAA;AAAA,8BALTK,EAA0B,KAAA,EAAvB,OAAM,eAAA,GAAc,MAAA,EAAA;AAAA,8BACvBA,EAGI,KAAA,EAHD,OAAM,WAAO;AAAA,gBACdA,EAAyB,KAAA,EAAtB,OAAM,eAAa;AAAA,gBACtBA,EAAuB,KAAA,EAApB,OAAM,aAAW;AAAA,cAAA;sBAIHX,MAAC,uBAAtBI,EAOWE,GAAA,EAAA,KAAA,KAAA;AAAA;sBAEUN,MAAC,uCAAtBI,EAOWE,GAAA,EAAA,KAAA,KAAA;AAAA;sBAEUN,MAAC,qBAAtBI,EAGWE,GAAA,EAAA,KAAA,KAAA;AAAA,8BAFTK,EAAgC,KAAA,EAA7B,OAAM,qBAAA,GAAoB,MAAA,EAAA;AAAA,8BAC7BA,EAA4C,KAAA,EAAzC,OAAM,WAAO;AAAA,gBAACA,EAAuB,KAAA,EAApB,OAAM,aAAW;AAAA,cAAA;sBAGlBX,MAAC,mCAAtBI,EAMWE,GAAA,EAAA,KAAA,KAAA;AAAA,8BALTK,EAA8B,KAAA,EAA3B,OAAM,mBAAA,GAAkB,MAAA,EAAA;AAAA,8BAC3BA,EAGI,KAAA,EAHD,OAAM,WAAO;AAAA,gBACdA,EAA0B,KAAA,EAAvB,OAAM,gBAAc;AAAA,gBACvBA,EAAuB,KAAA,EAApB,OAAM,aAAW;AAAA,cAAA;4BAIxBP,EAMWE,GAAA,EAAA,KAAA,KAAA;AAAA,8BALTK,EAAgC,KAAA,EAA7B,OAAM,qBAAA,GAAoB,MAAA,EAAA;AAAA,8BAC7BA,EAGI,KAAA,EAHD,OAAM,WAAO;AAAA,gBACdA,EAAwB,KAAA,EAArB,OAAM,cAAY;AAAA,gBACrBA,EAAuB,KAAA,EAApB,OAAM,aAAW;AAAA,cAAA;;;;QAK5BA,EAAyE,KAAA;AAAA,UAAtE,UAAM,SAAO,EAAA,IAAeH,KAAI,eAAeR,GAAC,CAAA;AAAA,QAAA,GAAOa,EAAAd,EAAMC,CAAC,CAAA,GAAA,CAAA;AAAA,MAAA;;;;"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
type __VLS_Props = {
|
|
2
|
-
label: string;
|
|
3
|
-
};
|
|
4
|
-
declare var __VLS_1: {};
|
|
5
|
-
type __VLS_Slots = {} & {
|
|
6
|
-
default?: (props: typeof __VLS_1) => any;
|
|
7
|
-
};
|
|
8
|
-
declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
9
|
-
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
10
|
-
declare const _default: typeof __VLS_export;
|
|
11
|
-
export default _default;
|
|
12
|
-
type __VLS_WithSlots<T, S> = T & {
|
|
13
|
-
new (): {
|
|
14
|
-
$slots: S;
|
|
15
|
-
};
|
|
16
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SettingRow.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { defineComponent as o, openBlock as a, createElementBlock as s, createElementVNode as t, toDisplayString as n, renderSlot as r } from "vue";
|
|
2
|
-
const c = ["aria-label"], i = { class: "lbl" }, d = { class: "ctl" }, m = /* @__PURE__ */ o({
|
|
3
|
-
__name: "SettingRow",
|
|
4
|
-
props: {
|
|
5
|
-
label: {}
|
|
6
|
-
},
|
|
7
|
-
setup(e) {
|
|
8
|
-
return (l, _) => (a(), s("div", {
|
|
9
|
-
class: "row",
|
|
10
|
-
role: "group",
|
|
11
|
-
"aria-label": e.label
|
|
12
|
-
}, [
|
|
13
|
-
t("span", i, n(e.label), 1),
|
|
14
|
-
t("div", d, [
|
|
15
|
-
r(l.$slots, "default", {}, void 0, !0)
|
|
16
|
-
])
|
|
17
|
-
], 8, c));
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
export {
|
|
21
|
-
m as default
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=SettingRow2.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SettingRow2.vue.js","sources":["../../src/layouts/SettingRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 设置项行:左标签 + 右控件槽。槽内是 Naive 自绘控件(n-switch/n-select),无法用原生 <label for> 绑定,\n// 故给整行 role=\"group\" + aria-label,让读屏聚焦控件时能读到这项设置名(可见 span 仍留给视觉)。\ndefineProps<{ label: string }>()\n</script>\n\n<template>\n <div class=\"row\" role=\"group\" :aria-label=\"label\">\n <span class=\"lbl\">{{ label }}</span>\n <div class=\"ctl\"><slot /></div>\n </div>\n</template>\n\n<style scoped>\n.row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n min-height: 40px;\n}\n.lbl {\n color: var(--color-text-secondary);\n font-size: var(--font-size-sm);\n white-space: nowrap;\n}\n.ctl {\n display: flex;\n align-items: center;\n min-width: 0;\n}\n</style>\n"],"names":["_createElementBlock","__props","_createElementVNode","_hoisted_2","_toDisplayString","_hoisted_3","_renderSlot","_ctx"],"mappings":";;;;;;;2BAOEA,EAGM,OAAA;AAAA,MAHD,OAAM;AAAA,MAAM,MAAK;AAAA,MAAS,cAAYC,EAAA;AAAA,IAAA;MACzCC,EAAoC,QAApCC,GAAoCC,EAAfH,EAAA,KAAK,GAAA,CAAA;AAAA,MAC1BC,EAA+B,OAA/BG,GAA+B;AAAA,QAAdC,EAAQC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,MAAA;;;;"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import o from "./AuroraGlass2.vue.js";
|
|
2
|
-
/* empty css */
|
|
3
|
-
import r from "../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const m = /* @__PURE__ */ r(o, [["__scopeId", "data-v-e994c489"]]);
|
|
5
|
-
export {
|
|
6
|
-
m as default
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=AuroraGlass.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuroraGlass.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { defineComponent as v, computed as t, openBlock as b, createElementBlock as p, normalizeStyle as u, normalizeClass as C, unref as s, createStaticVNode as x, createElementVNode as c, createVNode as i, withCtx as g } from "vue";
|
|
2
|
-
import { darkTheme as f, NConfigProvider as h } from "naive-ui";
|
|
3
|
-
import { useAppStore as F } from "../../../stores/app.js";
|
|
4
|
-
import { rgba as r, mix as a } from "../../../theme/mix.js";
|
|
5
|
-
import k from "../LoginForm.vue.js";
|
|
6
|
-
const E = { class: "aurora-content" }, _ = { class: "glass-card" }, B = /* @__PURE__ */ v({
|
|
7
|
-
__name: "AuroraGlass",
|
|
8
|
-
setup($) {
|
|
9
|
-
const o = F(), n = t(() => ({
|
|
10
|
-
"--a1": r(o.accent, 0.55),
|
|
11
|
-
"--a2": r(a(o.accent, "#8B5CF6", 0.65), 0.5),
|
|
12
|
-
"--a3": r(a(o.accent, "#22D3EE", 0.55), 0.45),
|
|
13
|
-
"--a4": r(a(o.accent, "#EC4899", 0.6), 0.4)
|
|
14
|
-
})), d = t(() => o.isDark ? f : null), l = t(() => ({
|
|
15
|
-
primaryColor: o.accent,
|
|
16
|
-
primaryColorHover: a(o.accent, "#ffffff", 0.16),
|
|
17
|
-
primaryColorPressed: a(o.accent, "#000000", 0.18)
|
|
18
|
-
})), m = t(
|
|
19
|
-
() => o.isDark ? {
|
|
20
|
-
common: l.value,
|
|
21
|
-
Input: {
|
|
22
|
-
color: "rgba(255, 255, 255, 0.06)",
|
|
23
|
-
colorFocus: "rgba(255, 255, 255, 0.1)",
|
|
24
|
-
textColor: "rgba(255, 255, 255, 0.92)",
|
|
25
|
-
placeholderColor: "rgba(255, 255, 255, 0.4)",
|
|
26
|
-
iconColor: "rgba(255, 255, 255, 0.5)",
|
|
27
|
-
border: "1px solid rgba(255, 255, 255, 0.14)",
|
|
28
|
-
borderHover: `1px solid ${r(o.accent, 0.6)}`,
|
|
29
|
-
borderFocus: `1px solid ${o.accent}`,
|
|
30
|
-
boxShadowFocus: `0 0 0 2px ${r(o.accent, 0.25)}`,
|
|
31
|
-
caretColor: o.accent
|
|
32
|
-
},
|
|
33
|
-
Form: { labelTextColor: "rgba(255, 255, 255, 0.78)" },
|
|
34
|
-
Checkbox: { textColor: "rgba(255, 255, 255, 0.7)" }
|
|
35
|
-
} : {
|
|
36
|
-
common: l.value,
|
|
37
|
-
Input: {
|
|
38
|
-
color: "rgba(255, 255, 255, 0.5)",
|
|
39
|
-
colorFocus: "rgba(255, 255, 255, 0.8)",
|
|
40
|
-
textColor: "#1D2129",
|
|
41
|
-
placeholderColor: "rgba(0, 0, 0, 0.4)",
|
|
42
|
-
iconColor: "rgba(0, 0, 0, 0.4)",
|
|
43
|
-
border: "1px solid rgba(0, 0, 0, 0.1)",
|
|
44
|
-
borderHover: `1px solid ${r(o.accent, 0.5)}`,
|
|
45
|
-
borderFocus: `1px solid ${o.accent}`,
|
|
46
|
-
boxShadowFocus: `0 0 0 2px ${r(o.accent, 0.2)}`,
|
|
47
|
-
caretColor: o.accent
|
|
48
|
-
},
|
|
49
|
-
Form: { labelTextColor: "#4E5969" },
|
|
50
|
-
Checkbox: { textColor: "#4E5969" }
|
|
51
|
-
}
|
|
52
|
-
);
|
|
53
|
-
return (y, e) => (b(), p("div", {
|
|
54
|
-
class: C(["aurora", { light: !s(o).isDark }]),
|
|
55
|
-
style: u(n.value)
|
|
56
|
-
}, [
|
|
57
|
-
e[1] || (e[1] = x('<div class="aurora-bg" data-v-e994c489></div><div class="stars" data-v-e994c489></div><div class="orb orb-1" data-v-e994c489></div><div class="orb orb-2" data-v-e994c489></div><div class="orb orb-3" data-v-e994c489></div>', 5)),
|
|
58
|
-
c("div", E, [
|
|
59
|
-
e[0] || (e[0] = c("div", { class: "halo" }, null, -1)),
|
|
60
|
-
i(s(h), {
|
|
61
|
-
theme: d.value,
|
|
62
|
-
"theme-overrides": m.value,
|
|
63
|
-
"inherit-theme-overrides": !1
|
|
64
|
-
}, {
|
|
65
|
-
default: g(() => [
|
|
66
|
-
c("div", _, [
|
|
67
|
-
i(k)
|
|
68
|
-
])
|
|
69
|
-
]),
|
|
70
|
-
_: 1
|
|
71
|
-
}, 8, ["theme", "theme-overrides"])
|
|
72
|
-
]),
|
|
73
|
-
e[2] || (e[2] = c("div", { class: "grain" }, null, -1))
|
|
74
|
-
], 6));
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
export {
|
|
78
|
-
B as default
|
|
79
|
-
};
|
|
80
|
-
//# sourceMappingURL=AuroraGlass2.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuroraGlass2.vue.js","sources":["../../../../src/views/login/skins/AuroraGlass.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { NConfigProvider, darkTheme } from 'naive-ui'\nimport type { GlobalThemeOverrides } from 'naive-ui'\nimport { useAppStore } from '#/stores/app'\nimport { mix, rgba } from '#/theme/mix'\nimport LoginForm from '../LoginForm.vue'\n\nconst app = useAppStore()\n\n// 极光四色:accent + 派生紫/青/品红,随主题色联动。\nconst vars = computed(() => ({\n '--a1': rgba(app.accent, 0.55),\n '--a2': rgba(mix(app.accent, '#8B5CF6', 0.65), 0.5),\n '--a3': rgba(mix(app.accent, '#22D3EE', 0.55), 0.45),\n '--a4': rgba(mix(app.accent, '#EC4899', 0.6), 0.4),\n}))\n\n// 跟随应用明暗:深色用 darkTheme,浅色用 Naive 默认(null)。inherit=false 隔离应用根 overrides。\nconst naiveTheme = computed(() => (app.isDark ? darkTheme : null))\n\n// accent 派生主色两套共用。\nconst common = computed(() => ({\n primaryColor: app.accent,\n primaryColorHover: mix(app.accent, '#ffffff', 0.16),\n primaryColorPressed: mix(app.accent, '#000000', 0.18),\n}))\n\n// 输入框做成玻璃上的半透明观感 + accent 聚焦,深/浅两套。\n// ponytail: 浅色分支硬编码了 text-primary(#1D2129)/secondary(#4E5969) 令牌值,tokens 若改需同步\nconst glassTheme = computed<GlobalThemeOverrides>(() =>\n app.isDark\n ? {\n common: common.value,\n Input: {\n color: 'rgba(255, 255, 255, 0.06)',\n colorFocus: 'rgba(255, 255, 255, 0.1)',\n textColor: 'rgba(255, 255, 255, 0.92)',\n placeholderColor: 'rgba(255, 255, 255, 0.4)',\n iconColor: 'rgba(255, 255, 255, 0.5)',\n border: '1px solid rgba(255, 255, 255, 0.14)',\n borderHover: `1px solid ${rgba(app.accent, 0.6)}`,\n borderFocus: `1px solid ${app.accent}`,\n boxShadowFocus: `0 0 0 2px ${rgba(app.accent, 0.25)}`,\n caretColor: app.accent,\n },\n Form: { labelTextColor: 'rgba(255, 255, 255, 0.78)' },\n Checkbox: { textColor: 'rgba(255, 255, 255, 0.7)' },\n }\n : {\n common: common.value,\n Input: {\n color: 'rgba(255, 255, 255, 0.5)',\n colorFocus: 'rgba(255, 255, 255, 0.8)',\n textColor: '#1D2129',\n placeholderColor: 'rgba(0, 0, 0, 0.4)',\n iconColor: 'rgba(0, 0, 0, 0.4)',\n border: '1px solid rgba(0, 0, 0, 0.1)',\n borderHover: `1px solid ${rgba(app.accent, 0.5)}`,\n borderFocus: `1px solid ${app.accent}`,\n boxShadowFocus: `0 0 0 2px ${rgba(app.accent, 0.2)}`,\n caretColor: app.accent,\n },\n Form: { labelTextColor: '#4E5969' },\n Checkbox: { textColor: '#4E5969' },\n },\n)\n</script>\n\n<template>\n <div class=\"aurora\" :class=\"{ light: !app.isDark }\" :style=\"vars\">\n <div class=\"aurora-bg\" />\n <div class=\"stars\" />\n <div class=\"orb orb-1\" />\n <div class=\"orb orb-2\" />\n <div class=\"orb orb-3\" />\n <div class=\"aurora-content\">\n <div class=\"halo\" />\n <n-config-provider\n :theme=\"naiveTheme\"\n :theme-overrides=\"glassTheme\"\n :inherit-theme-overrides=\"false\"\n >\n <div class=\"glass-card\">\n <LoginForm />\n </div>\n </n-config-provider>\n </div>\n <div class=\"grain\" />\n </div>\n</template>\n\n<style scoped>\n.aurora {\n position: relative;\n height: 100dvh;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: radial-gradient(140% 120% at 50% 0%, #12162b 0%, #0a0b12 55%, #06060c 100%);\n}\n/* 细网格,中心遮罩淡出 */\n.aurora::before {\n content: '';\n position: absolute;\n inset: 0;\n z-index: 0;\n background-image:\n linear-gradient(rgba(255, 255, 255, 0.045) 1px, transparent 1px),\n linear-gradient(90deg, rgba(255, 255, 255, 0.045) 1px, transparent 1px);\n background-size: 46px 46px;\n -webkit-mask-image: radial-gradient(circle at 50% 45%, #000 0%, transparent 72%);\n mask-image: radial-gradient(circle at 50% 45%, #000 0%, transparent 72%);\n}\n/* 暗角,聚焦中心 */\n.aurora::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: 1;\n pointer-events: none;\n background: radial-gradient(120% 120% at 50% 42%, transparent 52%, rgba(0, 0, 0, 0.6) 100%);\n}\n.aurora-bg {\n position: absolute;\n inset: -20%;\n z-index: 0;\n background:\n radial-gradient(38% 38% at 18% 22%, var(--a1), transparent 68%),\n radial-gradient(42% 42% at 82% 18%, var(--a2), transparent 70%),\n radial-gradient(48% 48% at 60% 88%, var(--a3), transparent 72%),\n radial-gradient(34% 34% at 88% 68%, var(--a4), transparent 66%);\n filter: blur(28px);\n animation: aurora-move 18s ease-in-out infinite alternate;\n}\n@keyframes aurora-move {\n 0% {\n transform: translate3d(-3%, -2%, 0) rotate(0deg) scale(1.05);\n }\n 50% {\n transform: translate3d(3%, 2%, 0) rotate(4deg) scale(1.16);\n }\n 100% {\n transform: translate3d(-2%, 3%, 0) rotate(-3deg) scale(1.08);\n }\n}\n/* 星点微闪 */\n.stars {\n position: absolute;\n inset: 0;\n z-index: 0;\n background-image:\n radial-gradient(1.5px 1.5px at 20% 30%, rgba(255, 255, 255, 0.7), transparent 60%),\n radial-gradient(1px 1px at 70% 62%, rgba(255, 255, 255, 0.5), transparent 60%),\n radial-gradient(1.5px 1.5px at 42% 82%, rgba(255, 255, 255, 0.6), transparent 60%),\n radial-gradient(1px 1px at 85% 22%, rgba(255, 255, 255, 0.5), transparent 60%),\n radial-gradient(1px 1px at 55% 14%, rgba(255, 255, 255, 0.55), transparent 60%),\n radial-gradient(1.5px 1.5px at 12% 66%, rgba(255, 255, 255, 0.5), transparent 60%),\n radial-gradient(1px 1px at 92% 48%, rgba(255, 255, 255, 0.45), transparent 60%);\n animation: twinkle 5s ease-in-out infinite;\n}\n@keyframes twinkle {\n 0%,\n 100% {\n opacity: 0.45;\n }\n 50% {\n opacity: 0.9;\n }\n}\n.orb {\n position: absolute;\n z-index: 0;\n border-radius: 50%;\n filter: blur(55px);\n opacity: 0.55;\n}\n.orb-1 {\n width: 340px;\n height: 340px;\n background: var(--a1);\n top: -60px;\n left: -40px;\n animation: float-y 14s ease-in-out infinite;\n}\n.orb-2 {\n width: 280px;\n height: 280px;\n background: var(--a4);\n bottom: -80px;\n right: -40px;\n animation: float-y 16s ease-in-out infinite reverse;\n}\n.orb-3 {\n width: 200px;\n height: 200px;\n background: var(--a3);\n top: 38%;\n right: 18%;\n animation: float-y 20s ease-in-out infinite;\n}\n@keyframes float-y {\n 0%,\n 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-30px);\n }\n}\n.aurora-content {\n position: relative;\n z-index: 3;\n width: 100%;\n max-width: 520px;\n padding: 24px;\n}\n/* 卡后旋转极光光环(略大于卡片,溢出成辉光环) */\n.halo {\n position: absolute;\n z-index: 0;\n inset: 8px;\n border-radius: 36px;\n background: conic-gradient(from 0deg, var(--a1), var(--a2), var(--a3), var(--a4), var(--a1));\n filter: blur(48px);\n opacity: 0.6;\n animation: spin 16s linear infinite;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n.glass-card {\n /* 覆盖共享表单文字色为浅色(玻璃是深的) */\n --lf-title: #fff;\n --lf-hint: rgba(255, 255, 255, 0.5);\n position: relative;\n z-index: 1;\n width: 100%;\n padding: 46px 46px;\n border-radius: 20px;\n background: rgba(255, 255, 255, 0.07);\n border: 1px solid rgba(255, 255, 255, 0.14);\n backdrop-filter: blur(26px) saturate(150%);\n -webkit-backdrop-filter: blur(26px) saturate(150%);\n box-shadow:\n 0 30px 80px rgba(0, 0, 0, 0.55),\n 0 0 60px -12px var(--a2),\n inset 0 1px 0 rgba(255, 255, 255, 0.2);\n overflow: hidden;\n}\n/* accent 渐变发光边框 */\n.glass-card::before {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: 20px;\n padding: 1px;\n background: linear-gradient(135deg, var(--a1), transparent 45%, var(--a2));\n -webkit-mask:\n linear-gradient(#000 0 0) content-box,\n linear-gradient(#000 0 0);\n -webkit-mask-composite: xor;\n mask-composite: exclude;\n pointer-events: none;\n opacity: 0.9;\n}\n/* 玻璃表面缓慢流光 */\n.glass-card::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: 2;\n pointer-events: none;\n background: linear-gradient(\n 120deg,\n transparent 36%,\n rgba(255, 255, 255, 0.1) 48%,\n transparent 60%\n );\n background-size: 220% 100%;\n background-repeat: no-repeat;\n animation: sheen 8s ease-in-out infinite;\n}\n@keyframes sheen {\n 0% {\n background-position: 180% 0;\n }\n 55%,\n 100% {\n background-position: -60% 0;\n }\n}\n/* 胶片颗粒,消除色带 + 质感 */\n.grain {\n position: absolute;\n inset: 0;\n z-index: 5;\n pointer-events: none;\n opacity: 0.05;\n mix-blend-mode: overlay;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\");\n}\n/* ── 浅色变体(应用浅色主题时)──────────────────────── */\n.aurora.light {\n background: radial-gradient(140% 120% at 50% 0%, #eef1fb 0%, #f6f7fc 55%, #ffffff 100%);\n}\n/* 网格线改深(浅底上可见) */\n.aurora.light::before {\n background-image:\n linear-gradient(rgba(0, 0, 0, 0.05) 1px, transparent 1px),\n linear-gradient(90deg, rgba(0, 0, 0, 0.05) 1px, transparent 1px);\n}\n/* 暗角柔化为冷色微晕(黑暗角在浅底像脏) */\n.aurora.light::after {\n background: radial-gradient(\n 120% 120% at 50% 42%,\n transparent 55%,\n rgba(120, 130, 180, 0.12) 100%\n );\n}\n/* 白星点在浅底不可见,隐藏 */\n.aurora.light .stars {\n display: none;\n}\n/* 光环稍收敛 */\n.aurora.light .halo {\n opacity: 0.5;\n}\n/* 玻璃卡:浅色玻璃 + 深色文字 */\n.aurora.light .glass-card {\n --lf-title: var(--color-text-primary);\n --lf-hint: var(--color-text-tertiary);\n background: rgba(255, 255, 255, 0.62);\n border: 1px solid rgba(214, 218, 235, 0.9);\n box-shadow:\n 0 30px 80px rgba(80, 90, 160, 0.18),\n 0 0 60px -12px var(--a2),\n inset 0 1px 0 rgba(255, 255, 255, 0.9);\n}\n/* 浅色下关掉 accent 遮罩渐变环:mask-composite 在圆角处有细毛边,深色靠辉光盖住、浅色会暴露成\"一层毛边\" */\n.aurora.light .glass-card::before {\n display: none;\n}\n/* 白色流光在浅玻璃上几乎不可见,浅色下关掉 */\n.aurora.light .glass-card::after {\n display: none;\n}\n\n/* 窄屏收紧内边距:默认 46px 卡内边距在 ~360px 手机上会挤压表单 */\n@media (max-width: 480px) {\n .aurora-content {\n padding: 16px;\n }\n .glass-card {\n padding: 32px 24px;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .aurora-bg,\n .orb,\n .stars,\n .halo,\n .glass-card::after {\n animation: none;\n }\n .glass-card::after {\n display: none;\n }\n}\n</style>\n"],"names":["app","useAppStore","vars","computed","rgba","mix","naiveTheme","darkTheme","common","glassTheme","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_hoisted_1","_createVNode","NConfigProvider","_hoisted_2","LoginForm"],"mappings":";;;;;;;;AAQA,UAAMA,IAAMC,EAAA,GAGNC,IAAOC,EAAS,OAAO;AAAA,MAC3B,QAAQC,EAAKJ,EAAI,QAAQ,IAAI;AAAA,MAC7B,QAAQI,EAAKC,EAAIL,EAAI,QAAQ,WAAW,IAAI,GAAG,GAAG;AAAA,MAClD,QAAQI,EAAKC,EAAIL,EAAI,QAAQ,WAAW,IAAI,GAAG,IAAI;AAAA,MACnD,QAAQI,EAAKC,EAAIL,EAAI,QAAQ,WAAW,GAAG,GAAG,GAAG;AAAA,IAAA,EACjD,GAGIM,IAAaH,EAAS,MAAOH,EAAI,SAASO,IAAY,IAAK,GAG3DC,IAASL,EAAS,OAAO;AAAA,MAC7B,cAAcH,EAAI;AAAA,MAClB,mBAAmBK,EAAIL,EAAI,QAAQ,WAAW,IAAI;AAAA,MAClD,qBAAqBK,EAAIL,EAAI,QAAQ,WAAW,IAAI;AAAA,IAAA,EACpD,GAIIS,IAAaN;AAAA,MAA+B,MAChDH,EAAI,SACA;AAAA,QACE,QAAQQ,EAAO;AAAA,QACf,OAAO;AAAA,UACL,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,aAAa,aAAaJ,EAAKJ,EAAI,QAAQ,GAAG,CAAC;AAAA,UAC/C,aAAa,aAAaA,EAAI,MAAM;AAAA,UACpC,gBAAgB,aAAaI,EAAKJ,EAAI,QAAQ,IAAI,CAAC;AAAA,UACnD,YAAYA,EAAI;AAAA,QAAA;AAAA,QAElB,MAAM,EAAE,gBAAgB,4BAAA;AAAA,QACxB,UAAU,EAAE,WAAW,2BAAA;AAAA,MAA2B,IAEpD;AAAA,QACE,QAAQQ,EAAO;AAAA,QACf,OAAO;AAAA,UACL,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,aAAa,aAAaJ,EAAKJ,EAAI,QAAQ,GAAG,CAAC;AAAA,UAC/C,aAAa,aAAaA,EAAI,MAAM;AAAA,UACpC,gBAAgB,aAAaI,EAAKJ,EAAI,QAAQ,GAAG,CAAC;AAAA,UAClD,YAAYA,EAAI;AAAA,QAAA;AAAA,QAElB,MAAM,EAAE,gBAAgB,UAAA;AAAA,QACxB,UAAU,EAAE,WAAW,UAAA;AAAA,MAAU;AAAA,IACnC;2BAKJU,EAmBM,OAAA;AAAA,MAnBD,OAAKC,EAAA,CAAC,UAAQ,EAAA,OAAA,CAAmBC,EAAAZ,CAAA,EAAI,OAAA,CAAM,CAAA;AAAA,MAAK,SAAOE,EAAA,KAAI;AAAA,IAAA;;MAM9DW,EAWM,OAXNC,GAWM;AAAA,wBAVJD,EAAoB,OAAA,EAAf,OAAM,OAAA,GAAM,MAAA,EAAA;AAAA,QACjBE,EAQoBH,EAAAI,CAAA,GAAA;AAAA,UAPjB,OAAOV,EAAA;AAAA,UACP,mBAAiBG,EAAA;AAAA,UACjB,2BAAyB;AAAA,QAAA;qBAE1B,MAEM;AAAA,YAFNI,EAEM,OAFNI,GAEM;AAAA,cADJF,EAAaG,CAAA;AAAA,YAAA;;;;;sBAInBL,EAAqB,OAAA,EAAhB,OAAM,WAAO,MAAA,EAAA;AAAA,IAAA;;;"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
-
declare const _default: typeof __VLS_export;
|
|
3
|
-
export default _default;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import o from "./SplitPanel2.vue.js";
|
|
2
|
-
/* empty css */
|
|
3
|
-
import t from "../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-b4c7728a"]]);
|
|
5
|
-
export {
|
|
6
|
-
m as default
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=SplitPanel.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SplitPanel.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { defineComponent as u, computed as g, openBlock as r, createElementBlock as i, normalizeStyle as v, createElementVNode as t, createVNode as m, unref as e, toDisplayString as s, createTextVNode as h, Fragment as y, createCommentVNode as b } from "vue";
|
|
2
|
-
import { useI18n as w } from "vue-i18n";
|
|
3
|
-
import { useLoginHero as k } from "../../../composables/useLoginHero.js";
|
|
4
|
-
import { useAppStore as S } from "../../../stores/app.js";
|
|
5
|
-
import { useSite as V } from "../../../composables/useSite.js";
|
|
6
|
-
import { rgba as d, mix as x } from "../../../theme/mix.js";
|
|
7
|
-
import F from "../LoginForm.vue.js";
|
|
8
|
-
import N from "../components/LoginHeroPanel.vue.js";
|
|
9
|
-
const B = { class: "panel" }, C = { class: "panel-inner" }, L = { class: "form-wrap" }, D = { class: "mid" }, E = { class: "form-inner" }, H = { class: "greet" }, P = { class: "greet-sub" }, U = { class: "foot" }, z = ["href"], A = {
|
|
10
|
-
key: 2,
|
|
11
|
-
class: "foot-ver"
|
|
12
|
-
}, Q = /* @__PURE__ */ u({
|
|
13
|
-
__name: "SplitPanel",
|
|
14
|
-
setup(I) {
|
|
15
|
-
const { t: n } = w(), a = S(), { site: o, appVersion: c } = V(), l = k(), _ = (/* @__PURE__ */ new Date()).getFullYear(), f = g(() => ({
|
|
16
|
-
"--a1": d(a.accent, 0.5),
|
|
17
|
-
"--a2": d(x(a.accent, "#8B5CF6", 0.6), 0.4)
|
|
18
|
-
}));
|
|
19
|
-
return (T, p) => (r(), i("div", {
|
|
20
|
-
class: "split",
|
|
21
|
-
style: v(f.value)
|
|
22
|
-
}, [
|
|
23
|
-
t("div", B, [
|
|
24
|
-
p[0] || (p[0] = t("div", { class: "panel-aurora" }, null, -1)),
|
|
25
|
-
t("div", C, [
|
|
26
|
-
m(N, {
|
|
27
|
-
headline: e(l).headline,
|
|
28
|
-
highlight: e(l).highlight,
|
|
29
|
-
subtitle: e(o).subtitle || e(n)("login.subtitle"),
|
|
30
|
-
features: e(l).features
|
|
31
|
-
}, null, 8, ["headline", "highlight", "subtitle", "features"])
|
|
32
|
-
])
|
|
33
|
-
]),
|
|
34
|
-
t("div", L, [
|
|
35
|
-
t("div", D, [
|
|
36
|
-
t("div", E, [
|
|
37
|
-
t("p", H, s(e(n)("login.welcome")), 1),
|
|
38
|
-
t("p", P, s(e(n)("login.welcomeSub")), 1),
|
|
39
|
-
m(F, {
|
|
40
|
-
"show-logo": !1,
|
|
41
|
-
"show-title": !1,
|
|
42
|
-
"show-footer": !1
|
|
43
|
-
})
|
|
44
|
-
])
|
|
45
|
-
]),
|
|
46
|
-
t("p", U, [
|
|
47
|
-
h(" © " + s(e(_)) + " ", 1),
|
|
48
|
-
e(o).copyrightUrl ? (r(), i("a", {
|
|
49
|
-
key: 0,
|
|
50
|
-
href: e(o).copyrightUrl,
|
|
51
|
-
target: "_blank",
|
|
52
|
-
rel: "noopener"
|
|
53
|
-
}, s(e(o).copyright || e(o).title), 9, z)) : (r(), i(y, { key: 1 }, [
|
|
54
|
-
h(s(e(o).copyright || e(o).title), 1)
|
|
55
|
-
], 64)),
|
|
56
|
-
e(c) ? (r(), i("span", A, "v" + s(e(c)), 1)) : b("", !0)
|
|
57
|
-
])
|
|
58
|
-
])
|
|
59
|
-
], 4));
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
export {
|
|
63
|
-
Q as default
|
|
64
|
-
};
|
|
65
|
-
//# sourceMappingURL=SplitPanel2.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SplitPanel2.vue.js","sources":["../../../../src/views/login/skins/SplitPanel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useLoginHero } from '#/composables/useLoginHero'\nimport { useAppStore } from '#/stores/app'\nimport { useSite } from '#/composables/useSite'\nimport { mix, rgba } from '#/theme/mix'\nimport LoginForm from '../LoginForm.vue'\nimport LoginHeroPanel from '../components/LoginHeroPanel.vue'\n\nconst { t } = useI18n()\nconst app = useAppStore()\nconst { site, appVersion } = useSite()\nconst hero = useLoginHero()\nconst year = new Date().getFullYear()\n\nconst vars = computed(() => ({\n '--a1': rgba(app.accent, 0.5),\n '--a2': rgba(mix(app.accent, '#8B5CF6', 0.6), 0.4),\n}))\n</script>\n\n<template>\n <div class=\"split\" :style=\"vars\">\n <!-- 左:品牌面板(窄屏隐藏)-->\n <div class=\"panel\">\n <div class=\"panel-aurora\" />\n <div class=\"panel-inner\">\n <LoginHeroPanel\n :headline=\"hero.headline\"\n :highlight=\"hero.highlight\"\n :subtitle=\"site.subtitle || t('login.subtitle')\"\n :features=\"hero.features\"\n />\n </div>\n </div>\n\n <!-- 右:全高工作区(居中表单 + 版权页脚);主题/语言切换在外壳全局工具药丸 -->\n <div class=\"form-wrap\">\n <div class=\"mid\">\n <div class=\"form-inner\">\n <p class=\"greet\">{{ t('login.welcome') }}</p>\n <p class=\"greet-sub\">{{ t('login.welcomeSub') }}</p>\n <LoginForm :show-logo=\"false\" :show-title=\"false\" :show-footer=\"false\" />\n </div>\n </div>\n\n <p class=\"foot\">\n © {{ year }}\n <a v-if=\"site.copyrightUrl\" :href=\"site.copyrightUrl\" target=\"_blank\" rel=\"noopener\">\n {{ site.copyright || site.title }}\n </a>\n <template v-else>{{ site.copyright || site.title }}</template>\n <span v-if=\"appVersion\" class=\"foot-ver\">v{{ appVersion }}</span>\n </p>\n </div>\n </div>\n</template>\n\n<style scoped>\n.split {\n height: 100dvh;\n display: grid;\n grid-template-columns: 1.15fr 0.85fr;\n background: var(--color-bg-body);\n}\n/* 左栏 = recessed 品牌面(body 底 + 极光),与右栏 clean container 拉开图/底关系 */\n.panel {\n position: relative;\n overflow: hidden;\n background: var(--color-bg-body);\n border-right: 1px solid var(--color-border);\n}\n/* 细网格纹理,左上淡出 */\n.panel::before {\n content: '';\n position: absolute;\n inset: 0;\n background-image:\n linear-gradient(rgba(127, 127, 127, 0.08) 1px, transparent 1px),\n linear-gradient(90deg, rgba(127, 127, 127, 0.08) 1px, transparent 1px);\n background-size: 40px 40px;\n -webkit-mask-image: radial-gradient(circle at 30% 40%, #000, transparent 72%);\n mask-image: radial-gradient(circle at 30% 40%, #000, transparent 72%);\n}\n.panel-aurora {\n position: absolute;\n inset: -20%;\n background:\n radial-gradient(40% 40% at 25% 20%, var(--a1), transparent 68%),\n radial-gradient(45% 45% at 80% 78%, var(--a2), transparent 70%);\n filter: blur(45px);\n opacity: 0.9;\n animation: panel-move 22s ease-in-out infinite alternate;\n}\n@keyframes panel-move {\n 0% {\n transform: translate3d(-3%, -2%, 0) scale(1.05);\n }\n 100% {\n transform: translate3d(3%, 3%, 0) scale(1.12);\n }\n}\n.panel-inner {\n position: relative;\n z-index: 1;\n padding: 64px 56px;\n display: flex;\n flex-direction: column;\n height: 100%;\n justify-content: center;\n}\n/* 右栏 = 全高工作区:居中表单 + 页脚(主题/语言切换在外壳全局工具) */\n.form-wrap {\n position: relative;\n display: flex;\n flex-direction: column;\n background: var(--color-bg-container);\n}\n.mid {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n}\n.form-inner {\n width: 100%;\n max-width: 340px;\n animation: fade-up 0.6s cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n.greet {\n font-size: 26px;\n font-weight: 700;\n letter-spacing: -0.01em;\n color: var(--color-text-primary);\n margin: 0 0 6px;\n}\n.greet-sub {\n font-size: var(--font-size-sm);\n color: var(--color-text-tertiary);\n margin: 0 0 26px;\n}\n.foot {\n margin: 0;\n padding: 18px 24px 22px;\n text-align: center;\n font-size: var(--font-size-sm);\n color: var(--color-text-tertiary);\n}\n.foot a {\n color: inherit;\n text-decoration: none;\n}\n.foot a:hover {\n color: var(--color-primary);\n}\n.foot-ver {\n margin-left: 8px;\n opacity: 0.75;\n}\n@keyframes fade-up {\n from {\n opacity: 0;\n transform: translateY(16px);\n }\n to {\n opacity: 1;\n transform: none;\n }\n}\n@media (max-width: 900px) {\n .split {\n grid-template-columns: 1fr;\n }\n .panel {\n display: none;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .panel-aurora,\n .form-inner {\n animation: none;\n }\n}\n</style>\n"],"names":["t","useI18n","app","useAppStore","site","appVersion","useSite","hero","useLoginHero","year","vars","computed","rgba","mix","_createElementBlock","_createElementVNode","_hoisted_1","_hoisted_2","_createVNode","LoginHeroPanel","_unref","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_toDisplayString","_hoisted_7","LoginForm","_hoisted_8","_hoisted_9","_Fragment","_createTextVNode","_openBlock","_hoisted_10"],"mappings":";;;;;;;;;;;;;;AAUA,UAAM,EAAE,GAAAA,EAAA,IAAMC,EAAA,GACRC,IAAMC,EAAA,GACN,EAAE,MAAAC,GAAM,YAAAC,EAAA,IAAeC,EAAA,GACvBC,IAAOC,EAAA,GACPC,KAAO,oBAAI,KAAA,GAAO,YAAA,GAElBC,IAAOC,EAAS,OAAO;AAAA,MAC3B,QAAQC,EAAKV,EAAI,QAAQ,GAAG;AAAA,MAC5B,QAAQU,EAAKC,EAAIX,EAAI,QAAQ,WAAW,GAAG,GAAG,GAAG;AAAA,IAAA,EACjD;2BAIAY,EAiCM,OAAA;AAAA,MAjCD,OAAM;AAAA,MAAS,SAAOJ,EAAA,KAAI;AAAA,IAAA;MAE7BK,EAUM,OAVNC,GAUM;AAAA,wBATJD,EAA4B,OAAA,EAAvB,OAAM,eAAA,GAAc,MAAA,EAAA;AAAA,QACzBA,EAOM,OAPNE,GAOM;AAAA,UANJC,EAKEC,GAAA;AAAA,YAJC,UAAUC,EAAAb,CAAA,EAAK;AAAA,YACf,WAAWa,EAAAb,CAAA,EAAK;AAAA,YAChB,UAAUa,EAAAhB,CAAA,EAAK,YAAYgB,EAAApB,CAAA,EAAC,gBAAA;AAAA,YAC5B,UAAUoB,EAAAb,CAAA,EAAK;AAAA,UAAA;;;MAMtBQ,EAiBM,OAjBNM,GAiBM;AAAA,QAhBJN,EAMM,OANNO,GAMM;AAAA,UALJP,EAIM,OAJNQ,GAIM;AAAA,YAHJR,EAA6C,KAA7CS,GAA6CC,EAAzBL,EAAApB,CAAA,EAAC,eAAA,CAAA,GAAA,CAAA;AAAA,YACrBe,EAAoD,KAApDW,GAAoDD,EAA5BL,EAAApB,CAAA,EAAC,kBAAA,CAAA,GAAA,CAAA;AAAA,YACzBkB,EAAyES,GAAA;AAAA,cAA7D,aAAW;AAAA,cAAQ,cAAY;AAAA,cAAQ,eAAa;AAAA,YAAA;;;QAIpEZ,EAOI,KAPJa,GAOI;AAAA,YAPY,QACZH,EAAGL,EAAAX,CAAA,CAAI,IAAG,KACZ,CAAA;AAAA,UAASW,EAAAhB,CAAA,EAAK,qBAAdU,EAEI,KAAA;AAAA;YAFyB,MAAMM,EAAAhB,CAAA,EAAK;AAAA,YAAc,QAAO;AAAA,YAAS,KAAI;AAAA,UAAA,GACrEqB,EAAAL,EAAAhB,CAAA,EAAK,aAAagB,EAAAhB,CAAA,EAAK,KAAK,GAAA,GAAAyB,CAAA,WAEjCf,EAA8DgB,GAAA,EAAA,KAAA,KAAA;AAAA,YAA1CC,EAAAN,EAAAL,EAAAhB,CAAA,EAAK,aAAagB,EAAAhB,CAAA,EAAK,KAAK,GAAA,CAAA;AAAA,UAAA;UACpCgB,EAAAf,CAAA,KAAZ2B,KAAAlB,EAAiE,QAAjEmB,GAAyC,QAAIb,EAAAf,CAAA,CAAU,GAAA,CAAA;;;;;;"}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
2
|
-
declare const _default: typeof __VLS_export;
|
|
3
|
-
export default _default;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Spotlight.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { defineComponent as c, ref as l, onMounted as p, onBeforeUnmount as d, computed as u, openBlock as v, createElementBlock as f, normalizeStyle as w, createElementVNode as n, createVNode as _ } from "vue";
|
|
2
|
-
import { useAppStore as g } from "../../../stores/app.js";
|
|
3
|
-
import { rgba as s, mix as x } from "../../../theme/mix.js";
|
|
4
|
-
import y from "../LoginForm.vue.js";
|
|
5
|
-
const B = { class: "card" }, C = /* @__PURE__ */ c({
|
|
6
|
-
__name: "Spotlight",
|
|
7
|
-
setup(E) {
|
|
8
|
-
const e = g(), r = l(50), i = l(38);
|
|
9
|
-
function m(t) {
|
|
10
|
-
r.value = t.clientX / window.innerWidth * 100, i.value = t.clientY / window.innerHeight * 100;
|
|
11
|
-
}
|
|
12
|
-
p(() => window.addEventListener("mousemove", m, { passive: !0 })), d(() => window.removeEventListener("mousemove", m));
|
|
13
|
-
const a = u(() => ({
|
|
14
|
-
"--mx": r.value + "%",
|
|
15
|
-
"--my": i.value + "%",
|
|
16
|
-
"--s1": s(e.accent, 0.28),
|
|
17
|
-
"--s2": s(x(e.accent, "#8B5CF6", 0.6), 0.22),
|
|
18
|
-
// 跟随光晕独立取色:亮色近白底下 0.28 几乎不可见,提到 0.5 才读得出;暗底 0.28 已够。
|
|
19
|
-
"--spot": s(e.accent, e.isDark ? 0.3 : 0.5)
|
|
20
|
-
}));
|
|
21
|
-
return (t, o) => (v(), f("div", {
|
|
22
|
-
class: "spotlight",
|
|
23
|
-
style: w(a.value)
|
|
24
|
-
}, [
|
|
25
|
-
o[0] || (o[0] = n("div", { class: "mesh" }, null, -1)),
|
|
26
|
-
o[1] || (o[1] = n("div", { class: "spot" }, null, -1)),
|
|
27
|
-
n("div", B, [
|
|
28
|
-
_(y)
|
|
29
|
-
])
|
|
30
|
-
], 4));
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
export {
|
|
34
|
-
C as default
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=Spotlight2.vue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Spotlight2.vue.js","sources":["../../../../src/views/login/skins/Spotlight.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport { useAppStore } from '#/stores/app'\nimport { mix, rgba } from '#/theme/mix'\nimport LoginForm from '../LoginForm.vue'\n\nconst app = useAppStore()\n\n// 聚光位置(百分比),默认略偏上居中;鼠标移动时跟随。\nconst mx = ref(50)\nconst my = ref(38)\nfunction onMove(e: MouseEvent) {\n mx.value = (e.clientX / window.innerWidth) * 100\n my.value = (e.clientY / window.innerHeight) * 100\n}\nonMounted(() => window.addEventListener('mousemove', onMove, { passive: true }))\nonBeforeUnmount(() => window.removeEventListener('mousemove', onMove))\n\nconst vars = computed(() => ({\n '--mx': mx.value + '%',\n '--my': my.value + '%',\n '--s1': rgba(app.accent, 0.28),\n '--s2': rgba(mix(app.accent, '#8B5CF6', 0.6), 0.22),\n // 跟随光晕独立取色:亮色近白底下 0.28 几乎不可见,提到 0.5 才读得出;暗底 0.28 已够。\n '--spot': rgba(app.accent, app.isDark ? 0.3 : 0.5),\n}))\n</script>\n\n<template>\n <div class=\"spotlight\" :style=\"vars\">\n <div class=\"mesh\" />\n <div class=\"spot\" />\n <div class=\"card\">\n <LoginForm />\n </div>\n </div>\n</template>\n\n<style scoped>\n.spotlight {\n position: relative;\n height: 100dvh;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-bg-body);\n}\n.mesh {\n position: absolute;\n inset: 0;\n background:\n radial-gradient(30% 40% at 15% 20%, var(--s1), transparent 60%),\n radial-gradient(30% 40% at 85% 80%, var(--s2), transparent 60%);\n opacity: 0.9;\n}\n.spot {\n position: absolute;\n inset: 0;\n pointer-events: none;\n background: radial-gradient(340px 340px at var(--mx) var(--my), var(--spot), transparent 60%);\n transition: background 0.12s ease-out;\n}\n.card {\n position: relative;\n z-index: 2;\n width: 100%;\n max-width: 460px;\n padding: 46px 46px;\n background: var(--color-bg-container);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-xl);\n box-shadow: var(--shadow-3);\n animation: fade-up 0.6s cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n@keyframes fade-up {\n from {\n opacity: 0;\n transform: translateY(16px);\n }\n to {\n opacity: 1;\n transform: none;\n }\n}\n/* 窄屏:给卡片侧边留白 + 收紧内边距(默认 46px 在 ~360px 手机上挤压表单、卡片贴边) */\n@media (max-width: 480px) {\n .spotlight {\n padding: 0 16px;\n }\n .card {\n padding: 32px 24px;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spot {\n /* 光晕仍跟随指针(指针驱动的位移,非自发动画);仅去掉缓动过渡。\n Windows Server 等默认关动画的环境会命中此分支;若连指针跟随一并禁掉,会退化为静态居中,\n 表现为\"光晕不跟鼠标\",故此处只去缓动、保留跟随。 */\n transition: none;\n }\n .card {\n animation: none;\n }\n}\n</style>\n"],"names":["app","useAppStore","mx","ref","my","onMove","e","onMounted","onBeforeUnmount","vars","computed","rgba","mix","_createElementBlock","_createElementVNode","_hoisted_1","_createVNode","LoginForm"],"mappings":";;;;;;;AAMA,UAAMA,IAAMC,EAAA,GAGNC,IAAKC,EAAI,EAAE,GACXC,IAAKD,EAAI,EAAE;AACjB,aAASE,EAAOC,GAAe;AAC7B,MAAAJ,EAAG,QAASI,EAAE,UAAU,OAAO,aAAc,KAC7CF,EAAG,QAASE,EAAE,UAAU,OAAO,cAAe;AAAA,IAChD;AACA,IAAAC,EAAU,MAAM,OAAO,iBAAiB,aAAaF,GAAQ,EAAE,SAAS,GAAA,CAAM,CAAC,GAC/EG,EAAgB,MAAM,OAAO,oBAAoB,aAAaH,CAAM,CAAC;AAErE,UAAMI,IAAOC,EAAS,OAAO;AAAA,MAC3B,QAAQR,EAAG,QAAQ;AAAA,MACnB,QAAQE,EAAG,QAAQ;AAAA,MACnB,QAAQO,EAAKX,EAAI,QAAQ,IAAI;AAAA,MAC7B,QAAQW,EAAKC,EAAIZ,EAAI,QAAQ,WAAW,GAAG,GAAG,IAAI;AAAA;AAAA,MAElD,UAAUW,EAAKX,EAAI,QAAQA,EAAI,SAAS,MAAM,GAAG;AAAA,IAAA,EACjD;2BAIAa,EAMM,OAAA;AAAA,MAND,OAAM;AAAA,MAAa,SAAOJ,EAAA,KAAI;AAAA,IAAA;sBACjCK,EAAoB,OAAA,EAAf,OAAM,OAAA,GAAM,MAAA,EAAA;AAAA,sBACjBA,EAAoB,OAAA,EAAf,OAAM,OAAA,GAAM,MAAA,EAAA;AAAA,MACjBA,EAEM,OAFNC,GAEM;AAAA,QADJC,EAAaC,CAAA;AAAA,MAAA;;;;"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import o from "./skins/AuroraGlass.vue.js";
|
|
2
|
-
import i from "./skins/SplitPanel.vue.js";
|
|
3
|
-
import t from "./skins/Spotlight.vue.js";
|
|
4
|
-
const p = [
|
|
5
|
-
{ id: "aurora", label: "login.skinAurora", component: o },
|
|
6
|
-
{ id: "split", label: "login.skinSplit", component: i },
|
|
7
|
-
{ id: "spotlight", label: "login.skinSpotlight", component: t }
|
|
8
|
-
], a = "aurora";
|
|
9
|
-
export {
|
|
10
|
-
a as DEFAULT_SKIN,
|
|
11
|
-
p as LOGIN_SKINS
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=skins.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skins.js","sources":["../../../src/views/login/skins.ts"],"sourcesContent":["import type { Component } from 'vue'\nimport AuroraGlass from './skins/AuroraGlass.vue'\nimport SplitPanel from './skins/SplitPanel.vue'\nimport Spotlight from './skins/Spotlight.vue'\n\nexport interface LoginSkin {\n id: string\n label: string\n component: Component\n}\n\nexport const LOGIN_SKINS: LoginSkin[] = [\n { id: 'aurora', label: 'login.skinAurora', component: AuroraGlass },\n { id: 'split', label: 'login.skinSplit', component: SplitPanel },\n { id: 'spotlight', label: 'login.skinSpotlight', component: Spotlight },\n]\n\nexport const DEFAULT_SKIN = 'aurora'\n"],"names":["LOGIN_SKINS","AuroraGlass","SplitPanel","Spotlight","DEFAULT_SKIN"],"mappings":";;;AAWO,MAAMA,IAA2B;AAAA,EACtC,EAAE,IAAI,UAAU,OAAO,oBAAoB,WAAWC,EAAA;AAAA,EACtD,EAAE,IAAI,SAAS,OAAO,mBAAmB,WAAWC,EAAA;AAAA,EACpD,EAAE,IAAI,aAAa,OAAO,uBAAuB,WAAWC,EAAA;AAC9D,GAEaC,IAAe;"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|