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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/dict/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 字典管理 = 主从:左=类型 SmartTable(CRUD),点击行选中 → 右=该类型的字典项(裸 n-data-table + CRUD)。\n// 关键约束:右侧走管理端 dict/item/page(含停用项、带 id);下拉用的 dict/items/{code} 只回启用项且丢 id,不能复用。\n// 任何类型/项的增删改后调 useDictStore().invalidate(code) 失效下拉缓存,变更即时生效。\nimport { h, reactive, ref } from 'vue'\nimport {\n NButton,\n NCard,\n NSpace,\n NInput,\n NInputNumber,\n NPopconfirm,\n NForm,\n NFormItem,\n NDataTable,\n NEmpty,\n NSwitch,\n useMessage,\n type DataTableColumns,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useBatchDelete } from '#/composables/useBatchDelete'\nimport { dictAdminApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { useDictStore } from '#/stores/dict'\nimport { translateError } from '#/utils/error'\nimport type { DictItemInput, DictTypeInput, SysDictItem, SysDictType } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst dictStore = useDictStore()\nconst typeTableRef = ref<SmartTableInst<SysDictType>>()\n\n// ── 主从选中态 + 右侧字典项 ──\nconst selectedType = ref<SysDictType | null>(null)\nconst items = ref<SysDictItem[]>([])\nconst itemsLoading = ref(false)\n\nasync function loadItems() {\n const code = selectedType.value?.code\n if (!code) {\n items.value = []\n return\n }\n itemsLoading.value = true\n try {\n const list = await dictAdminApi.items(code)\n // 竞态守卫:await 期间用户可能已切换类型,过期响应不得覆盖当前选中项\n if (selectedType.value?.code === code) items.value = list\n } catch (e) {\n if (selectedType.value?.code === code) {\n message.error(translateError(e))\n items.value = []\n }\n } finally {\n if (selectedType.value?.code === code) itemsLoading.value = false\n }\n}\nasync function selectType(r: SysDictType) {\n selectedType.value = r\n await loadItems()\n}\n\n// 批量删除:类型批删后清空选中类型 + 全量失效下拉缓存;项批删后仅重载右栏 + 失效缓存。\nconst {\n checkedKeys: typeCheckedKeys,\n hasSelection: typeHasSelection,\n run: typeBatchDelete,\n} = useBatchDelete({\n remove: dictAdminApi.typeBatchRemove,\n refresh: () => {\n selectedType.value = null\n items.value = []\n dictStore.invalidate()\n typeTableRef.value?.refresh()\n },\n successMsg: t('dict.typeDeleted'),\n})\nconst {\n checkedKeys: itemCheckedKeys,\n hasSelection: itemHasSelection,\n run: itemBatchDelete,\n} = useBatchDelete({\n remove: dictAdminApi.itemBatchRemove,\n refresh: () => {\n dictStore.invalidate()\n loadItems()\n },\n successMsg: t('dict.itemDeleted'),\n})\n\n// ── 左:字典类型 SmartTable ──\n// 窄栏用 search.layout:'inline'(无卡片单行),按名称过滤走列声明式 search。\nconst typeToInput = (r: SysDictType): DictTypeInput => ({\n code: r.code,\n name: r.name,\n sort: r.sort,\n enabled: r.enabled,\n remark: r.remark ?? '',\n})\nconst typeColumns: SmartTableColumn<SysDictType>[] = [\n { type: 'selection' },\n\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n { key: 'code', title: () => t('dict.code') },\n { key: 'name', title: () => t('dict.name'), search: true },\n { key: 'sort', title: () => t('dict.sort'), width: 70 },\n {\n key: 'enabled',\n title: () => t('common.status'),\n width: 90,\n // 包一层 stopPropagation:开关点击不得冒泡到行 onClick(否则误切选中类型)\n render: r =>\n h('div', { onClick: (e: Event) => e.stopPropagation() }, [\n h(StatusSwitch, {\n value: r.enabled,\n request: (next: boolean) =>\n dictAdminApi.typeUpdate(r.id, { ...typeToInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n dictStore.invalidate(r.code)\n },\n }),\n ]),\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 130,\n fixed: 'right',\n hideInSetting: true,\n // stopPropagation:操作按钮点击不得冒泡到行 onClick(否则误切选中类型)\n render: r =>\n h(NSpace, { size: 4, wrapItem: false, onClick: (e: Event) => e.stopPropagation() }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/dict/type/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openTypeEdit(r) },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/dict/type/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => dictAdminApi.typeRemove(r.id), t('dict.typeDeleted')).then(ok => {\n if (!ok) return\n dictStore.invalidate(r.code)\n if (selectedType.value?.id === r.id) {\n selectedType.value = null\n items.value = []\n }\n typeTableRef.value?.refresh()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('dict.typeDeleteConfirm', { name: r.name }),\n },\n )\n : null,\n ]),\n },\n]\n\n// ── 类型 新增/编辑弹窗 ──\nconst typeShow = ref(false)\nconst typeFormRef = ref<FormInst | null>(null)\nconst typeEditingId = ref<number | null>(null)\nconst typeRules: FormRules = {\n code: {\n required: true,\n whitespace: true,\n message: () => t('dict.codeRequired'),\n trigger: ['input', 'blur'],\n },\n name: {\n required: true,\n whitespace: true,\n message: () => t('dict.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blankType = (): DictTypeInput => ({ code: '', name: '', sort: 0, enabled: true, remark: '' })\nconst typeForm = reactive<DictTypeInput>(blankType())\n\nfunction openTypeAdd() {\n typeEditingId.value = null\n Object.assign(typeForm, blankType())\n typeShow.value = true\n}\nfunction openTypeEdit(r: SysDictType) {\n typeEditingId.value = r.id\n Object.assign(typeForm, typeToInput(r))\n typeShow.value = true\n}\nasync function saveType() {\n await typeFormRef.value?.validate()\n try {\n if (typeEditingId.value === null) await dictAdminApi.typeAdd({ ...typeForm })\n else await dictAdminApi.typeUpdate(typeEditingId.value, { ...typeForm })\n dictStore.invalidate(typeForm.code)\n message.success(t('dict.typeSaved'))\n await typeTableRef.value?.refresh()\n // 若编辑的是当前选中类型,同步其名称/编码到右栏标题与后续项提交\n if (selectedType.value?.id === typeEditingId.value)\n Object.assign(selectedType.value, { name: typeForm.name })\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n\n// ── 右:字典项 表格 ──\nconst itemToInput = (r: SysDictItem): DictItemInput => ({\n dictTypeCode: r.dictTypeCode,\n label: r.label,\n value: r.value,\n sort: r.sort,\n enabled: r.enabled,\n})\nconst itemColumns: DataTableColumns<SysDictItem> = [\n { type: 'selection' },\n\n {\n key: 'rowNo',\n title: () => t('common.rowNo'),\n width: 64,\n align: 'center',\n render: (_row, index) => index + 1,\n },\n { title: () => t('dict.itemLabel'), key: 'label' },\n { title: () => t('dict.itemValue'), key: 'value' },\n { title: () => t('dict.sort'), key: 'sort', width: 70 },\n {\n title: () => t('common.status'),\n key: 'enabled',\n width: 90,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n request: (next: boolean) =>\n dictAdminApi.itemUpdate(r.id, { ...itemToInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n dictStore.invalidate(r.dictTypeCode)\n },\n }),\n },\n {\n title: () => t('common.operation'),\n key: 'op',\n width: 130,\n render: r =>\n h(NSpace, { size: 4, wrapItem: false }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/dict/item/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openItemEdit(r) },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/dict/item/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => dictAdminApi.itemRemove(r.id), t('dict.itemDeleted')).then(ok => {\n if (!ok) return\n dictStore.invalidate(r.dictTypeCode)\n loadItems()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('dict.itemDeleteConfirm', { label: r.label }),\n },\n )\n : null,\n ]),\n },\n]\n\n// ── 字典项 新增/编辑弹窗 ──\nconst itemShow = ref(false)\nconst itemFormRef = ref<FormInst | null>(null)\nconst itemEditingId = ref<number | null>(null)\nconst itemRules: FormRules = {\n label: {\n required: true,\n whitespace: true,\n message: () => t('dict.itemLabelRequired'),\n trigger: ['input', 'blur'],\n },\n value: {\n required: true,\n whitespace: true,\n message: () => t('dict.itemValueRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blankItem = (): DictItemInput => ({\n dictTypeCode: '',\n label: '',\n value: '',\n sort: 0,\n enabled: true,\n})\nconst itemForm = reactive<DictItemInput>(blankItem())\n\nfunction openItemAdd() {\n if (!selectedType.value) return\n itemEditingId.value = null\n Object.assign(itemForm, blankItem(), { dictTypeCode: selectedType.value.code })\n itemShow.value = true\n}\nfunction openItemEdit(r: SysDictItem) {\n itemEditingId.value = r.id\n Object.assign(itemForm, itemToInput(r))\n itemShow.value = true\n}\nasync function saveItem() {\n await itemFormRef.value?.validate()\n try {\n if (itemEditingId.value === null) await dictAdminApi.itemAdd({ ...itemForm })\n else await dictAdminApi.itemUpdate(itemEditingId.value, { ...itemForm })\n dictStore.invalidate(itemForm.dictTypeCode)\n message.success(t('dict.itemSaved'))\n await loadItems()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n</script>\n\n<template>\n <!-- 两栏并排 = styles/layout.css 的形状 3(.side-page):display/拉伸/整屏高度都在那儿。\n 两个面板外面各套了一层自己的卡片,故卡片挂 .fill-card 接高度链;\n 左栏里还嵌着 SmartTable(卡中卡),「包住主表的那一层」就是卡片内容区,故 content-class 标 .fill-main\n —— 契约里写明了别把它写在 <SmartTable> 上(inheritAttrs:false,class 到不了 .smart-table 根节点)。 -->\n <div class=\"dict-layout side-page\">\n <n-card class=\"dict-pane fill-card\" content-class=\"fill-main\" :bordered=\"true\">\n <SmartTable\n :default-page-size=\"100\"\n ref=\"typeTableRef\"\n :columns=\"typeColumns\"\n :fetcher=\"dictAdminApi.typePage\"\n flex-height\n virtual-scroll\n :search=\"{ layout: 'inline' }\"\n storage-key=\"sys-dict-type\"\n :active-row-key=\"selectedType?.id ?? null\"\n :row-props=\"() => ({ style: 'cursor: pointer' })\"\n :checked-row-keys=\"typeCheckedKeys\"\n @row-click=\"(row: SysDictType) => selectType(row)\"\n @update:checked-row-keys=\"(keys: (string | number)[]) => (typeCheckedKeys = keys)\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button v-auth=\"'POST:/api/v1/sys/dict/type'\" type=\"primary\" @click=\"openTypeAdd\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n <n-button\n v-auth=\"'POST:/api/v1/sys/dict/type/batch-delete'\"\n type=\"error\"\n :disabled=\"!typeHasSelection\"\n @click=\"typeBatchDelete\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('common.batchDelete') }}\n </n-button>\n </template>\n </SmartTable>\n </n-card>\n\n <n-card\n v-if=\"selectedType\"\n class=\"dict-pane fill-card\"\n :bordered=\"true\"\n :title=\"t('dict.itemsOf', { name: selectedType.name })\"\n >\n <template #header-extra>\n <n-space :size=\"8\">\n <n-button\n v-auth=\"'POST:/api/v1/sys/dict/item/batch-delete'\"\n size=\"small\"\n type=\"error\"\n :disabled=\"!itemHasSelection\"\n @click=\"itemBatchDelete\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"15\" /></template>\n {{ t('common.batchDelete') }}\n </n-button>\n <n-button\n v-auth=\"'POST:/api/v1/sys/dict/item'\"\n size=\"small\"\n type=\"primary\"\n @click=\"openItemAdd\"\n >\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"15\" /></template>\n {{ t('dict.addItem') }}\n </n-button>\n </n-space>\n </template>\n <n-data-table\n :columns=\"itemColumns\"\n :data=\"items\"\n :loading=\"itemsLoading\"\n :row-key=\"(r: SysDictItem) => r.id\"\n :checked-row-keys=\"itemCheckedKeys\"\n size=\"small\"\n flex-height\n virtual-scroll\n @update:checked-row-keys=\"(keys: (string | number)[]) => (itemCheckedKeys = keys)\"\n />\n </n-card>\n <n-card v-else class=\"dict-pane\" :bordered=\"true\">\n <n-empty :description=\"t('dict.selectTypeHint')\" style=\"padding: 48px 0\" />\n </n-card>\n </div>\n\n <FormContainer\n v-model:show=\"typeShow\"\n :title=\"typeEditingId === null ? t('dict.addTypeTitle') : t('dict.editTypeTitle')\"\n :width=\"480\"\n :on-confirm=\"saveType\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form\n ref=\"typeFormRef\"\n :model=\"typeForm\"\n :rules=\"typeRules\"\n label-placement=\"left\"\n :label-width=\"80\"\n >\n <n-form-item :label=\"t('dict.code')\" path=\"code\">\n <n-input\n v-model:value=\"typeForm.code\"\n :placeholder=\"t('dict.code')\"\n :disabled=\"typeEditingId !== null\"\n />\n </n-form-item>\n <n-form-item :label=\"t('dict.name')\" path=\"name\">\n <n-input v-model:value=\"typeForm.name\" :placeholder=\"t('dict.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('dict.sort')\">\n <n-input-number v-model:value=\"typeForm.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('dict.remark')\">\n <n-input\n v-model:value=\"typeForm.remark as string\"\n type=\"textarea\"\n :autosize=\"{ minRows: 2 }\"\n />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"typeForm.enabled\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n\n <FormContainer\n v-model:show=\"itemShow\"\n :title=\"itemEditingId === null ? t('dict.addItemTitle') : t('dict.editItemTitle')\"\n :width=\"480\"\n :on-confirm=\"saveItem\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form\n ref=\"itemFormRef\"\n :model=\"itemForm\"\n :rules=\"itemRules\"\n label-placement=\"left\"\n :label-width=\"80\"\n >\n <n-form-item :label=\"t('dict.itemLabel')\" path=\"label\">\n <n-input v-model:value=\"itemForm.label\" :placeholder=\"t('dict.itemLabel')\" />\n </n-form-item>\n <n-form-item :label=\"t('dict.itemValue')\" path=\"value\">\n <n-input v-model:value=\"itemForm.value\" :placeholder=\"t('dict.itemValue')\" />\n </n-form-item>\n <n-form-item :label=\"t('dict.sort')\">\n <n-input-number v-model:value=\"itemForm.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"itemForm.enabled\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n</template>\n\n<style scoped>\n/* display / 拉伸 / 整屏高度都在 styles/layout.css 的 .side-page,这里只留换行与间距。 */\n.dict-layout {\n flex-wrap: wrap;\n gap: var(--gap-card);\n}\n.dict-pane {\n flex: 1 1 380px;\n min-width: 0;\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","dictStore","useDictStore","typeTableRef","ref","selectedType","items","itemsLoading","loadItems","code","_a","list","dictAdminApi","_b","e","_c","translateError","_d","selectType","r","typeCheckedKeys","typeHasSelection","typeBatchDelete","useBatchDelete","itemCheckedKeys","itemHasSelection","itemBatchDelete","typeToInput","typeColumns","h","StatusSwitch","next","v","NSpace","NButton","openTypeEdit","NPopconfirm","ok","typeShow","typeFormRef","typeEditingId","typeRules","blankType","typeForm","reactive","openTypeAdd","saveType","itemToInput","itemColumns","_row","index","openItemEdit","itemShow","itemFormRef","itemEditingId","itemRules","blankItem","itemForm","openItemAdd","saveItem","_createElementVNode","_hoisted_1","_createVNode","_unref","NCard","SmartTable","_cache","row","keys","_createBlock","AppIcon","_createTextVNode","NDataTable","NEmpty","FormContainer","$event","NForm","NFormItem","NInput","NInputNumber","NSwitch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/dict/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 字典管理 = 主从:上=类型 SmartTable(CRUD),点击行选中 → 下=该类型的字典项(同样是 SmartTable,静态数据模式 + CRUD)。\n// 关键约束:下方走管理端 dict/item/page(含停用项、带 id);下拉用的 dict/items/{code} 只回启用项且丢 id,不能复用。\n// 任何类型/项的增删改后调 useDictStore().invalidate(code) 失效下拉缓存,变更即时生效。\nimport { computed, h, reactive, ref } from 'vue'\nimport {\n NButton,\n NCard,\n NDrawer,\n NDrawerContent,\n NSpace,\n NInput,\n NInputNumber,\n NPopconfirm,\n NForm,\n NFormItem,\n NEmpty,\n NSwitch,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useElementSize, useMediaQuery } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useBatchDelete } from '#/composables/useBatchDelete'\nimport { dictAdminApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { useDictStore } from '#/stores/dict'\nimport { translateError } from '#/utils/error'\nimport { SEARCH_ACTIONS, deriveHeaderFilters } from '#/utils/tableFilter'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport TableTotal from '#/components/TableTotal/index.vue'\nimport type { DictItemInput, DictTypeInput, SysDictItem, SysDictType } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst dictStore = useDictStore()\nconst typeTableRef = ref<SmartTableInst<SysDictType>>()\n\n// 本页不开「放大」:上下两栏各自定高、表体内部滚动,放大层会把主从关系拆散。\nconst TYPE_TOOLBAR = { ...TABLE_TOOLBAR, maximize: false }\n\n// ── 窄档:类型表换成卡片列表,字典项不内联,点卡片从底部抽屉看 ──\n// 阈值与 smart-naive-table 的 card-on-narrow 一致(根节点宽 < 600);页面外壳宽 = 类型表根节点宽。\n// 首帧量到 0 不算窄档,免得宽屏刷新时闪一下卡片。\nconst layoutRef = ref<HTMLElement>()\nconst { width: layoutWidth } = useElementSize(layoutRef)\nconst narrow = computed(() => layoutWidth.value > 0 && layoutWidth.value < 600)\nconst itemSheet = ref(false)\n\n// 表单:窄屏标签放上方(底部抽屉里横排标签太挤),宽 / 中档沿用左标签\nconst narrowForm = useMediaQuery('(max-width: 640px)')\nconst formLayout = computed(() =>\n narrowForm.value\n ? { labelPlacement: 'top' as const, labelWidth: undefined }\n : { labelPlacement: 'left' as const, labelWidth: 80 },\n)\n\n// ── 主从选中态 + 下方字典项 ──\nconst selectedType = ref<SysDictType | null>(null)\nconst items = ref<SysDictItem[]>([])\nconst itemsLoading = ref(false)\n\nasync function loadItems() {\n const code = selectedType.value?.code\n if (!code) {\n items.value = []\n return\n }\n itemsLoading.value = true\n try {\n const list = await dictAdminApi.items(code)\n // 竞态守卫:await 期间用户可能已切换类型,过期响应不得覆盖当前选中项\n if (selectedType.value?.code === code) items.value = list\n } catch (e) {\n if (selectedType.value?.code === code) {\n message.error(translateError(e))\n items.value = []\n }\n } finally {\n if (selectedType.value?.code === code) itemsLoading.value = false\n }\n}\nasync function selectType(r: SysDictType) {\n selectedType.value = r\n await loadItems()\n}\n/** 点类型行 / 卡片:窄档同时拉起底部抽屉(此时下栏卡片不渲染)。 */\nfunction onTypeClick(r: SysDictType) {\n if (narrow.value) itemSheet.value = true\n return selectType(r)\n}\n\n// 批量删除:类型批删后清空选中类型 + 全量失效下拉缓存;项批删后仅重载下栏 + 失效缓存。\nconst { checkedKeys: typeCheckedKeys, run: typeBatchDelete } = useBatchDelete({\n remove: dictAdminApi.typeBatchRemove,\n refresh: () => {\n selectedType.value = null\n items.value = []\n dictStore.invalidate()\n typeTableRef.value?.refresh()\n },\n successMsg: t('dict.typeDeleted'),\n})\nconst {\n checkedKeys: itemCheckedKeys,\n hasSelection: itemHasSelection,\n run: itemBatchDelete,\n} = useBatchDelete({\n remove: dictAdminApi.itemBatchRemove,\n refresh: () => {\n dictStore.invalidate()\n loadItems()\n },\n successMsg: t('dict.itemDeleted'),\n})\n\n// ── 上:字典类型 SmartTable ──\n// 窄栏同样用条件构造器(container: 'table'):容器宽小于 600 时 3.0 自动收成「输入框 + 筛选」,按名称过滤走列声明式 search。\nconst typeToInput = (r: SysDictType): DictTypeInput => ({\n code: r.code,\n name: r.name,\n sort: r.sort,\n enabled: r.enabled,\n remark: r.remark ?? '',\n})\nconst typeColumns: SmartTableColumn<SysDictType>[] = [\n { type: 'selection' },\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'code',\n title: () => t('dict.code'),\n render: r => h('span', { class: 'mono muted' }, r.code),\n },\n // 窄档卡片以类型名称作标题(默认取第一个数据列 = 编码,不如名称好认)\n {\n key: 'name',\n title: () => t('dict.name'),\n card: 'title',\n search: { actions: SEARCH_ACTIONS.fuzzy },\n },\n {\n key: 'sort',\n title: () => t('dict.sort'),\n width: 70,\n render: r => h('span', { class: 'num muted' }, r.sort),\n },\n {\n key: 'enabled',\n title: () => t('common.status'),\n width: 90,\n // 包一层 stopPropagation:开关点击不得冒泡到行 onClick(否则误切选中类型)\n render: r =>\n h('div', { onClick: (e: Event) => e.stopPropagation() }, [\n h(StatusSwitch, {\n value: r.enabled,\n request: (next: boolean) =>\n dictAdminApi.typeUpdate(r.id, { ...typeToInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n dictStore.invalidate(r.code)\n },\n }),\n ]),\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 130,\n align: 'right',\n fixed: 'right',\n hideInSetting: true,\n // stopPropagation:操作按钮点击不得冒泡到行 onClick(否则误切选中类型)\n render: r =>\n h(\n NSpace,\n { size: 2, justify: 'end', wrapItem: false, onClick: (e: Event) => e.stopPropagation() },\n () => [\n authStore.hasPerm('PUT:/api/v1/sys/dict/type/{id}')\n ? h(\n NButton,\n {\n size: 'small',\n quaternary: true,\n type: 'primary',\n onClick: () => openTypeEdit(r),\n },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/dict/type/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => dictAdminApi.typeRemove(r.id), t('dict.typeDeleted')).then(ok => {\n if (!ok) return\n dictStore.invalidate(r.code)\n if (selectedType.value?.id === r.id) {\n selectedType.value = null\n items.value = []\n }\n typeTableRef.value?.refresh()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('dict.typeDeleteConfirm', { name: r.name }),\n },\n )\n : null,\n ],\n ),\n },\n]\nderiveHeaderFilters(typeColumns)\n\n// ── 类型 新增/编辑弹窗 ──\nconst typeShow = ref(false)\nconst typeFormRef = ref<FormInst | null>(null)\nconst typeEditingId = ref<number | null>(null)\nconst typeRules: FormRules = {\n code: {\n required: true,\n whitespace: true,\n message: () => t('dict.codeRequired'),\n trigger: ['input', 'blur'],\n },\n name: {\n required: true,\n whitespace: true,\n message: () => t('dict.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blankType = (): DictTypeInput => ({ code: '', name: '', sort: 0, enabled: true, remark: '' })\nconst typeForm = reactive<DictTypeInput>(blankType())\n\nfunction openTypeAdd() {\n typeEditingId.value = null\n Object.assign(typeForm, blankType())\n typeShow.value = true\n}\nfunction openTypeEdit(r: SysDictType) {\n typeEditingId.value = r.id\n Object.assign(typeForm, typeToInput(r))\n typeShow.value = true\n}\nasync function saveType() {\n await typeFormRef.value?.validate()\n try {\n if (typeEditingId.value === null) await dictAdminApi.typeAdd({ ...typeForm })\n else await dictAdminApi.typeUpdate(typeEditingId.value, { ...typeForm })\n dictStore.invalidate(typeForm.code)\n message.success(t('dict.typeSaved'))\n await typeTableRef.value?.refresh()\n // 若编辑的是当前选中类型,同步其名称/编码到下栏标题与后续项提交\n if (selectedType.value?.id === typeEditingId.value)\n Object.assign(selectedType.value, { name: typeForm.name })\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n\n// ── 下:字典项 表格 ──\nconst itemToInput = (r: SysDictItem): DictItemInput => ({\n dictTypeCode: r.dictTypeCode,\n label: r.label,\n value: r.value,\n sort: r.sort,\n enabled: r.enabled,\n})\n/** 字典项启停:悲观更新(StatusSwitch 请求成功才 emit);表格行与窄档抽屉卡片共用。 */\nconst itemEnabledRequest = (r: SysDictItem) => (next: boolean) =>\n dictAdminApi.itemUpdate(r.id, { ...itemToInput(r), enabled: next })\nfunction onItemEnabled(r: SysDictItem, v: boolean) {\n r.enabled = v\n dictStore.invalidate(r.dictTypeCode)\n}\n/** 字典项删除成功后失效缓存并重载下栏;表格行与窄档抽屉卡片共用。 */\nconst removeItem = (r: SysDictItem) =>\n run(() => dictAdminApi.itemRemove(r.id), t('dict.itemDeleted')).then(ok => {\n if (!ok) return\n dictStore.invalidate(r.dictTypeCode)\n loadItems()\n })\n// 字典项是静态数据(整类一次取回),条件搜索由 SmartTable 前端求值\nconst itemColumns: SmartTableColumn<SysDictItem>[] = [\n { type: 'selection' },\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n { title: () => t('dict.itemLabel'), key: 'label', card: 'title', search: {} },\n {\n title: () => t('dict.itemValue'),\n key: 'value',\n search: {},\n render: r => h('span', { class: 'mono muted' }, r.value),\n },\n {\n title: () => t('dict.sort'),\n key: 'sort',\n width: 70,\n render: r => h('span', { class: 'num muted' }, r.sort),\n },\n {\n title: () => t('common.status'),\n key: 'enabled',\n width: 90,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n request: itemEnabledRequest(r),\n 'onUpdate:value': (v: boolean) => onItemEnabled(r, v),\n }),\n },\n {\n title: () => t('common.operation'),\n key: 'op',\n width: 130,\n align: 'right',\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 2, justify: 'end', wrapItem: false }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/dict/item/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openItemEdit(r) },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/dict/item/{id}')\n ? h(\n NPopconfirm,\n { onPositiveClick: () => removeItem(r) },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('dict.itemDeleteConfirm', { label: r.label }),\n },\n )\n : null,\n ]),\n },\n]\nderiveHeaderFilters(itemColumns)\n\n// ── 字典项 新增/编辑弹窗 ──\nconst itemShow = ref(false)\nconst itemFormRef = ref<FormInst | null>(null)\nconst itemEditingId = ref<number | null>(null)\nconst itemRules: FormRules = {\n label: {\n required: true,\n whitespace: true,\n message: () => t('dict.itemLabelRequired'),\n trigger: ['input', 'blur'],\n },\n value: {\n required: true,\n whitespace: true,\n message: () => t('dict.itemValueRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blankItem = (): DictItemInput => ({\n dictTypeCode: '',\n label: '',\n value: '',\n sort: 0,\n enabled: true,\n})\nconst itemForm = reactive<DictItemInput>(blankItem())\n\nfunction openItemAdd() {\n if (!selectedType.value) return\n itemEditingId.value = null\n Object.assign(itemForm, blankItem(), { dictTypeCode: selectedType.value.code })\n itemShow.value = true\n}\nfunction openItemEdit(r: SysDictItem) {\n itemEditingId.value = r.id\n Object.assign(itemForm, itemToInput(r))\n itemShow.value = true\n}\nasync function saveItem() {\n await itemFormRef.value?.validate()\n try {\n if (itemEditingId.value === null) await dictAdminApi.itemAdd({ ...itemForm })\n else await dictAdminApi.itemUpdate(itemEditingId.value, { ...itemForm })\n dictStore.invalidate(itemForm.dictTypeCode)\n message.success(t('dict.itemSaved'))\n await loadItems()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n</script>\n<template>\n <!-- 上下两栏、各吃一半 = styles/layout.css 的形状 5(.fill-split)套在整页外壳 .fill-page 里:\n 字典类型在上、字典项在下,宽度都是整行,类型表的条件搜索因此能排成单行三段式。\n 上栏的 SmartTable 自己就是一张卡片,直接作为 .fill-split 的子元素均分高度,外面不再套卡片(否则卡中卡);\n 下栏的字典项表同样是 SmartTable(静态数据模式),也直接作为 .fill-split 的子元素均分;\n 没选中类型时下栏是一张带提示的空卡片(挂 .fill-main 参与均分)。\n .fill-page--soft:矮屏让页面滚动,不把两张表压成一条缝。\n 窄档(外壳宽 < 600):类型表由库换成卡片列表(card-on-narrow),下栏卡片不渲染,\n 点卡片 = @row-click,从底部抽屉看字典项(抽屉里也是同一套列的 SmartTable 卡片列表,底部固定「批量删除 / 新增字典项」)。\n 工具栏里不放表名:选中的是哪个类型由类型表的行高亮表达,字典项表上方也不再写类型名。\n (注释里别写带尖括号的标签名:listSearch.spec.ts 的正则会把它当成一张表而误判。) -->\n <div ref=\"layoutRef\" class=\"dict-layout fill-page fill-page--soft fill-split\">\n <SmartTable\n :toolbar=\"TYPE_TOOLBAR\"\n ref=\"typeTableRef\"\n :columns=\"typeColumns\"\n :fetcher=\"dictAdminApi.typePage\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n :search=\"{ container: 'table' }\"\n storage-key=\"sys-dict-type\"\n :active-row-key=\"selectedType?.id ?? null\"\n :row-props=\"() => ({ style: 'cursor: pointer' })\"\n :checked-row-keys=\"typeCheckedKeys\"\n @row-click=\"(row: SysDictType) => onTypeClick(row)\"\n @update:checked-row-keys=\"(keys: (string | number)[]) => (typeCheckedKeys = keys)\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #pagination-prefix=\"{ itemCount }\">\n <TableTotal :count=\"itemCount\" />\n </template>\n <template #toolbar-right>\n <n-button v-auth=\"'POST:/api/v1/sys/dict/type'\" type=\"primary\" @click=\"openTypeAdd\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n </template>\n <!-- 勾选后工具栏换成批量栏(本页全选 + 已选 N 项 + 这里的按钮 + 取消选择),按钮出现即代表有勾选 -->\n <template #batch>\n <n-button\n v-auth=\"'POST:/api/v1/sys/dict/type/batch-delete'\"\n secondary\n type=\"error\"\n @click=\"typeBatchDelete\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('common.batchDelete') }}\n </n-button>\n </template>\n </SmartTable>\n\n <SmartTable\n v-if=\"!narrow && selectedType\"\n :columns=\"itemColumns\"\n :data=\"items\"\n row-key=\"id\"\n :loading=\"itemsLoading\"\n :toolbar=\"TYPE_TOOLBAR\"\n :search=\"{ container: 'table' }\"\n :checked-row-keys=\"itemCheckedKeys\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n storage-key=\"sys-dict-item\"\n @update:checked-row-keys=\"(keys: (string | number)[]) => (itemCheckedKeys = keys)\"\n >\n <template #pagination-prefix=\"{ itemCount }\">\n <TableTotal :count=\"itemCount\" />\n </template>\n <template #toolbar-right>\n <n-button v-auth=\"'POST:/api/v1/sys/dict/item'\" type=\"primary\" @click=\"openItemAdd\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('dict.addItem') }}\n </n-button>\n </template>\n <template #batch>\n <n-button\n v-auth=\"'POST:/api/v1/sys/dict/item/batch-delete'\"\n secondary\n type=\"error\"\n @click=\"itemBatchDelete\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('common.batchDelete') }}\n </n-button>\n </template>\n </SmartTable>\n <n-card v-else-if=\"!narrow\" class=\"dict-pane fill-main\" :bordered=\"true\">\n <n-empty :description=\"t('dict.selectTypeHint')\" style=\"padding: 48px 0; margin: auto\" />\n </n-card>\n </div>\n\n <!-- 窄档:字典项底部抽屉。卡片里的开关 / 勾选 / 编辑 / 删除与宽档表格行是同一套请求与权限 -->\n <n-drawer\n :show=\"itemSheet && narrow && !!selectedType\"\n placement=\"bottom\"\n height=\"85vh\"\n style=\"border-radius: 16px 16px 0 0\"\n @update:show=\"(v: boolean) => (itemSheet = v)\"\n >\n <n-drawer-content\n :title=\"\n selectedType ? t('dict.itemsOf', { name: selectedType.name }) : t('dict.itemsSheetTitle')\n \"\n closable\n >\n <SmartTable\n :columns=\"itemColumns\"\n :data=\"items\"\n row-key=\"id\"\n :loading=\"itemsLoading\"\n :toolbar=\"TYPE_TOOLBAR\"\n :search=\"{ container: 'table' }\"\n :checked-row-keys=\"itemCheckedKeys\"\n card-on-narrow\n storage-key=\"sys-dict-item-sheet\"\n @update:checked-row-keys=\"(keys: (string | number)[]) => (itemCheckedKeys = keys)\"\n >\n <template #pagination-prefix=\"{ itemCount }\">\n <TableTotal :count=\"itemCount\" />\n </template>\n </SmartTable>\n <template #footer>\n <div class=\"sheet-foot\">\n <n-button\n v-auth=\"'POST:/api/v1/sys/dict/item/batch-delete'\"\n secondary\n type=\"error\"\n size=\"large\"\n :disabled=\"!itemHasSelection\"\n @click=\"itemBatchDelete\"\n >\n {{ t('common.batchDelete') }}\n </n-button>\n <n-button\n v-auth=\"'POST:/api/v1/sys/dict/item'\"\n type=\"primary\"\n size=\"large\"\n @click=\"openItemAdd\"\n >\n {{ t('dict.addItem') }}\n </n-button>\n </div>\n </template>\n </n-drawer-content>\n </n-drawer>\n\n <FormContainer\n v-model:show=\"typeShow\"\n :title=\"typeEditingId === null ? t('dict.addTypeTitle') : t('dict.editTypeTitle')\"\n :width=\"480\"\n :on-confirm=\"saveType\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form\n ref=\"typeFormRef\"\n :model=\"typeForm\"\n :rules=\"typeRules\"\n require-mark-placement=\"left\"\n v-bind=\"formLayout\"\n >\n <n-form-item :label=\"t('dict.code')\" path=\"code\">\n <n-input\n v-model:value=\"typeForm.code\"\n class=\"mono\"\n :placeholder=\"t('dict.code')\"\n :disabled=\"typeEditingId !== null\"\n />\n <!-- 反馈槽只在编辑时有内容;新增时槽为空,校验提示照常显示 -->\n <template #feedback>\n <span v-if=\"typeEditingId !== null\" class=\"field-hint\">\n {{ t('dict.codeImmutable') }}\n </span>\n </template>\n </n-form-item>\n <n-form-item :label=\"t('dict.name')\" path=\"name\">\n <n-input v-model:value=\"typeForm.name\" :placeholder=\"t('dict.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('dict.sort')\">\n <n-input-number v-model:value=\"typeForm.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('dict.remark')\">\n <n-input\n v-model:value=\"typeForm.remark as string\"\n type=\"textarea\"\n :autosize=\"{ minRows: 2 }\"\n />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"typeForm.enabled\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n\n <FormContainer\n v-model:show=\"itemShow\"\n :title=\"itemEditingId === null ? t('dict.addItemTitle') : t('dict.editItemTitle')\"\n :width=\"480\"\n :on-confirm=\"saveItem\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form\n ref=\"itemFormRef\"\n :model=\"itemForm\"\n :rules=\"itemRules\"\n require-mark-placement=\"left\"\n v-bind=\"formLayout\"\n >\n <n-form-item :label=\"t('dict.itemLabel')\" path=\"label\">\n <n-input v-model:value=\"itemForm.label\" :placeholder=\"t('dict.itemLabel')\" />\n </n-form-item>\n <n-form-item :label=\"t('dict.itemValue')\" path=\"value\">\n <n-input v-model:value=\"itemForm.value\" class=\"mono\" :placeholder=\"t('dict.itemValue')\" />\n </n-form-item>\n <n-form-item :label=\"t('dict.sort')\">\n <n-input-number v-model:value=\"itemForm.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"itemForm.enabled\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n</template>\n\n<style scoped>\n/* 上下均分、整屏高度都在 styles/layout.css(.fill-page / .fill-split),这里只给每栏一个最小高度:\n 矮屏时整页滚动,而不是把表压扁。 */\n.dict-layout > :deep(.smart-table),\n.dict-pane {\n min-width: 0;\n min-height: 280px;\n}\n\n/* 单元格里的辅助字样:编码 / 值用等宽,序号 / 排序用等宽数字。\n 表格单元格由库与 naive 渲染,要 :deep 才够得着;抽屉卡片是自己的元素,直接命中。 */\n.mono,\n:deep(.mono) {\n font-family: var(--font-mono);\n font-size: 13.5px;\n letter-spacing: 0;\n}\n.muted,\n:deep(.muted) {\n color: var(--text-2);\n}\n.faint,\n:deep(.faint) {\n color: var(--text-3);\n}\n.num,\n:deep(.num) {\n font-variant-numeric: tabular-nums;\n}\n\n.sheet-foot {\n display: flex;\n gap: 10px;\n width: 100%;\n}\n.sheet-foot .n-button {\n flex: 1;\n}\n\n/* 表单里的字段提示(编码创建后不可改) */\n.field-hint {\n font-size: 13px;\n color: var(--text-3);\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","dictStore","useDictStore","typeTableRef","ref","TYPE_TOOLBAR","TABLE_TOOLBAR","layoutRef","layoutWidth","useElementSize","narrow","computed","itemSheet","narrowForm","useMediaQuery","formLayout","selectedType","items","itemsLoading","loadItems","code","_a","list","dictAdminApi","_b","e","_c","translateError","_d","selectType","r","onTypeClick","typeCheckedKeys","typeBatchDelete","useBatchDelete","itemCheckedKeys","itemHasSelection","itemBatchDelete","typeToInput","typeColumns","h","SEARCH_ACTIONS","StatusSwitch","next","v","NSpace","NButton","openTypeEdit","NPopconfirm","ok","deriveHeaderFilters","typeShow","typeFormRef","typeEditingId","typeRules","blankType","typeForm","reactive","openTypeAdd","saveType","itemToInput","itemEnabledRequest","onItemEnabled","removeItem","itemColumns","openItemEdit","itemShow","itemFormRef","itemEditingId","itemRules","blankItem","itemForm","openItemAdd","saveItem","_createElementVNode","_createVNode","_unref","SmartTable","TABLE_MIN_ROW_HEIGHT","_cache","row","keys","_withCtx","itemCount","TableTotal","_createBlock","AppIcon","_createTextVNode","NCard","NEmpty","NDrawer","NDrawerContent","_hoisted_1","FormContainer","$event","_mergeProps","NFormItem","_createElementBlock","_hoisted_2","_toDisplayString","NInput","NInputNumber","NSwitch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,EAAE,GAAAA,EAAA,IAAMC,GAAA,GACRC,IAAUC,GAAA,GACV,EAAE,KAAAC,EAAA,IAAQC,GAAA,GACVC,IAAYC,GAAA,GACZC,IAAYC,GAAA,GACZC,IAAeC,EAAA,GAGfC,IAAe,EAAE,GAAGC,IAAe,UAAU,GAAA,GAK7CC,IAAYH,EAAA,GACZ,EAAE,OAAOI,MAAgBC,GAAeF,CAAS,GACjDG,IAASC,GAAS,MAAMH,EAAY,QAAQ,KAAKA,EAAY,QAAQ,GAAG,GACxEI,IAAYR,EAAI,EAAK,GAGrBS,KAAaC,GAAc,oBAAoB,GAC/CC,IAAaJ;AAAA,MAAS,MAC1BE,GAAW,QACP,EAAE,gBAAgB,OAAgB,YAAY,OAAA,IAC9C,EAAE,gBAAgB,QAAiB,YAAY,GAAA;AAAA,IAAG,GAIlDG,IAAeZ,EAAwB,IAAI,GAC3Ca,IAAQb,EAAmB,EAAE,GAC7Bc,IAAed,EAAI,EAAK;AAE9B,mBAAee,IAAY;;AACzB,YAAMC,KAAOC,IAAAL,EAAa,UAAb,gBAAAK,EAAoB;AACjC,UAAI,CAACD,GAAM;AACT,QAAAH,EAAM,QAAQ,CAAA;AACd;AAAA,MACF;AACA,MAAAC,EAAa,QAAQ;AACrB,UAAI;AACF,cAAMI,IAAO,MAAMC,EAAa,MAAMH,CAAI;AAE1C,UAAII,IAAAR,EAAa,UAAb,gBAAAQ,EAAoB,UAASJ,QAAY,QAAQE;AAAA,MACvD,SAASG,GAAG;AACV,UAAIC,IAAAV,EAAa,UAAb,gBAAAU,EAAoB,UAASN,MAC/BzB,EAAQ,MAAMgC,EAAeF,CAAC,CAAC,GAC/BR,EAAM,QAAQ,CAAA;AAAA,MAElB,UAAA;AACE,UAAIW,IAAAZ,EAAa,UAAb,gBAAAY,EAAoB,UAASR,QAAmB,QAAQ;AAAA,MAC9D;AAAA,IACF;AACA,mBAAeS,GAAWC,GAAgB;AACxC,MAAAd,EAAa,QAAQc,GACrB,MAAMX,EAAA;AAAA,IACR;AAEA,aAASY,GAAYD,GAAgB;AACnC,aAAIpB,EAAO,UAAOE,EAAU,QAAQ,KAC7BiB,GAAWC,CAAC;AAAA,IACrB;AAGA,UAAM,EAAE,aAAaE,GAAiB,KAAKC,GAAA,IAAoBC,GAAe;AAAA,MAC5E,QAAQX,EAAa;AAAA,MACrB,SAAS,MAAM;;AACb,QAAAP,EAAa,QAAQ,MACrBC,EAAM,QAAQ,CAAA,GACdhB,EAAU,WAAA,IACVoB,IAAAlB,EAAa,UAAb,QAAAkB,EAAoB;AAAA,MACtB;AAAA,MACA,YAAY5B,EAAE,kBAAkB;AAAA,IAAA,CACjC,GACK;AAAA,MACJ,aAAa0C;AAAA,MACb,cAAcC;AAAA,MACd,KAAKC;AAAA,IAAA,IACHH,GAAe;AAAA,MACjB,QAAQX,EAAa;AAAA,MACrB,SAAS,MAAM;AACb,QAAAtB,EAAU,WAAA,GACVkB,EAAA;AAAA,MACF;AAAA,MACA,YAAY1B,EAAE,kBAAkB;AAAA,IAAA,CACjC,GAIK6C,IAAc,CAACR,OAAmC;AAAA,MACtD,MAAMA,EAAE;AAAA,MACR,MAAMA,EAAE;AAAA,MACR,MAAMA,EAAE;AAAA,MACR,SAASA,EAAE;AAAA,MACX,QAAQA,EAAE,UAAU;AAAA,IAAA,IAEhBS,IAA+C;AAAA,MACnD,EAAE,MAAM,YAAA;AAAA,MACR,EAAE,MAAM,SAAS,OAAO,MAAM9C,EAAE,cAAc,GAAG,OAAO,IAAI,OAAO,SAAA;AAAA,MACnE;AAAA,QACE,KAAK;AAAA,QACL,OAAO,MAAMA,EAAE,WAAW;AAAA,QAC1B,QAAQ,OAAK+C,EAAE,QAAQ,EAAE,OAAO,gBAAgBV,EAAE,IAAI;AAAA,MAAA;AAAA;AAAA,MAGxD;AAAA,QACE,KAAK;AAAA,QACL,OAAO,MAAMrC,EAAE,WAAW;AAAA,QAC1B,MAAM;AAAA,QACN,QAAQ,EAAE,SAASgD,GAAe,MAAA;AAAA,MAAM;AAAA,MAE1C;AAAA,QACE,KAAK;AAAA,QACL,OAAO,MAAMhD,EAAE,WAAW;AAAA,QAC1B,OAAO;AAAA,QACP,QAAQ,OAAK+C,EAAE,QAAQ,EAAE,OAAO,eAAeV,EAAE,IAAI;AAAA,MAAA;AAAA,MAEvD;AAAA,QACE,KAAK;AAAA,QACL,OAAO,MAAMrC,EAAE,eAAe;AAAA,QAC9B,OAAO;AAAA;AAAA,QAEP,QAAQ,CAAAqC,MACNU,EAAE,OAAO,EAAE,SAAS,CAACf,MAAaA,EAAE,gBAAA,KAAqB;AAAA,UACvDe,EAAEE,IAAc;AAAA,YACd,OAAOZ,EAAE;AAAA,YACT,SAAS,CAACa,MACRpB,EAAa,WAAWO,EAAE,IAAI,EAAE,GAAGQ,EAAYR,CAAC,GAAG,SAASa,GAAM;AAAA,YACpE,kBAAkB,CAACC,MAAe;AAChC,cAAAd,EAAE,UAAUc,GACZ3C,EAAU,WAAW6B,EAAE,IAAI;AAAA,YAC7B;AAAA,UAAA,CACD;AAAA,QAAA,CACF;AAAA,MAAA;AAAA,MAEL;AAAA,QACE,KAAK;AAAA,QACL,OAAO,MAAMrC,EAAE,kBAAkB;AAAA,QACjC,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,QACP,eAAe;AAAA;AAAA,QAEf,QAAQ,CAAAqC,MACNU;AAAA,UACEK;AAAA,UACA,EAAE,MAAM,GAAG,SAAS,OAAO,UAAU,IAAO,SAAS,CAACpB,MAAaA,EAAE,gBAAA,EAAgB;AAAA,UACrF,MAAM;AAAA,YACJ1B,EAAU,QAAQ,gCAAgC,IAC9CyC;AAAA,cACEM;AAAA,cACA;AAAA,gBACE,MAAM;AAAA,gBACN,YAAY;AAAA,gBACZ,MAAM;AAAA,gBACN,SAAS,MAAMC,GAAajB,CAAC;AAAA,cAAA;AAAA,cAE/B,MAAMrC,EAAE,aAAa;AAAA,YAAA,IAEvB;AAAA,YACJM,EAAU,QAAQ,mCAAmC,IACjDyC;AAAA,cACEQ;AAAA,cACA;AAAA,gBACE,iBAAiB,MACfnD,EAAI,MAAM0B,EAAa,WAAWO,EAAE,EAAE,GAAGrC,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAAwD,MAAM;;AACzE,kBAAKA,MACLhD,EAAU,WAAW6B,EAAE,IAAI,KACvBT,IAAAL,EAAa,UAAb,gBAAAK,EAAoB,QAAOS,EAAE,OAC/Bd,EAAa,QAAQ,MACrBC,EAAM,QAAQ,CAAA,KAEhBO,IAAArB,EAAa,UAAb,QAAAqB,EAAoB;AAAA,gBACtB,CAAC;AAAA,cAAA;AAAA,cAEL;AAAA,gBACE,SAAS,MACPgB;AAAA,kBAAEM;AAAA,kBAAS,EAAE,MAAM,SAAS,YAAY,IAAM,MAAM,QAAA;AAAA,kBAAW,MAC7DrD,EAAE,eAAe;AAAA,gBAAA;AAAA,gBAErB,SAAS,MAAMA,EAAE,0BAA0B,EAAE,MAAMqC,EAAE,MAAM;AAAA,cAAA;AAAA,YAC7D,IAEF;AAAA,UAAA;AAAA,QACN;AAAA,MACF;AAAA,IACJ;AAEF,IAAAoB,GAAoBX,CAAW;AAG/B,UAAMY,IAAW/C,EAAI,EAAK,GACpBgD,IAAchD,EAAqB,IAAI,GACvCiD,IAAgBjD,EAAmB,IAAI,GACvCkD,KAAuB;AAAA,MAC3B,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,MAAM7D,EAAE,mBAAmB;AAAA,QACpC,SAAS,CAAC,SAAS,MAAM;AAAA,MAAA;AAAA,MAE3B,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,MAAMA,EAAE,mBAAmB;AAAA,QACpC,SAAS,CAAC,SAAS,MAAM;AAAA,MAAA;AAAA,IAC3B,GAEI8D,IAAY,OAAsB,EAAE,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,IAAM,QAAQ,GAAA,IACxFC,IAAWC,GAAwBF,GAAW;AAEpD,aAASG,KAAc;AACrB,MAAAL,EAAc,QAAQ,MACtB,OAAO,OAAOG,GAAUD,GAAW,GACnCJ,EAAS,QAAQ;AAAA,IACnB;AACA,aAASJ,GAAajB,GAAgB;AACpC,MAAAuB,EAAc,QAAQvB,EAAE,IACxB,OAAO,OAAO0B,GAAUlB,EAAYR,CAAC,CAAC,GACtCqB,EAAS,QAAQ;AAAA,IACnB;AACA,mBAAeQ,KAAW;;AACxB,cAAMtC,IAAA+B,EAAY,UAAZ,gBAAA/B,EAAmB;AACzB,UAAI;AACF,QAAIgC,EAAc,UAAU,OAAM,MAAM9B,EAAa,QAAQ,EAAE,GAAGiC,GAAU,IACvE,MAAMjC,EAAa,WAAW8B,EAAc,OAAO,EAAE,GAAGG,GAAU,GACvEvD,EAAU,WAAWuD,EAAS,IAAI,GAClC7D,EAAQ,QAAQF,EAAE,gBAAgB,CAAC,GACnC,QAAM+B,IAAArB,EAAa,UAAb,gBAAAqB,EAAoB,cAEtBE,IAAAV,EAAa,UAAb,gBAAAU,EAAoB,QAAO2B,EAAc,SAC3C,OAAO,OAAOrC,EAAa,OAAO,EAAE,MAAMwC,EAAS,MAAM;AAAA,MAC7D,SAAS/B,GAAG;AACV,eAAA9B,EAAQ,MAAMgC,EAAeF,CAAC,CAAC,GACxB;AAAA,MACT;AAAA,IACF;AAGA,UAAMmC,KAAc,CAAC9B,OAAmC;AAAA,MACtD,cAAcA,EAAE;AAAA,MAChB,OAAOA,EAAE;AAAA,MACT,OAAOA,EAAE;AAAA,MACT,MAAMA,EAAE;AAAA,MACR,SAASA,EAAE;AAAA,IAAA,IAGP+B,KAAqB,CAAC/B,MAAmB,CAACa,MAC9CpB,EAAa,WAAWO,EAAE,IAAI,EAAE,GAAG8B,GAAY9B,CAAC,GAAG,SAASa,GAAM;AACpE,aAASmB,GAAchC,GAAgBc,GAAY;AACjD,MAAAd,EAAE,UAAUc,GACZ3C,EAAU,WAAW6B,EAAE,YAAY;AAAA,IACrC;AAEA,UAAMiC,KAAa,CAACjC,MAClBjC,EAAI,MAAM0B,EAAa,WAAWO,EAAE,EAAE,GAAGrC,EAAE,kBAAkB,CAAC,EAAE,KAAK,CAAAwD,MAAM;AACzE,MAAKA,MACLhD,EAAU,WAAW6B,EAAE,YAAY,GACnCX,EAAA;AAAA,IACF,CAAC,GAEG6C,IAA+C;AAAA,MACnD,EAAE,MAAM,YAAA;AAAA,MACR,EAAE,MAAM,SAAS,OAAO,MAAMvE,EAAE,cAAc,GAAG,OAAO,IAAI,OAAO,SAAA;AAAA,MACnE,EAAE,OAAO,MAAMA,EAAE,gBAAgB,GAAG,KAAK,SAAS,MAAM,SAAS,QAAQ,GAAC;AAAA,MAC1E;AAAA,QACE,OAAO,MAAMA,EAAE,gBAAgB;AAAA,QAC/B,KAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR,QAAQ,OAAK+C,EAAE,QAAQ,EAAE,OAAO,gBAAgBV,EAAE,KAAK;AAAA,MAAA;AAAA,MAEzD;AAAA,QACE,OAAO,MAAMrC,EAAE,WAAW;AAAA,QAC1B,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,OAAK+C,EAAE,QAAQ,EAAE,OAAO,eAAeV,EAAE,IAAI;AAAA,MAAA;AAAA,MAEvD;AAAA,QACE,OAAO,MAAMrC,EAAE,eAAe;AAAA,QAC9B,KAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAAAqC,MACNU,EAAEE,IAAc;AAAA,UACd,OAAOZ,EAAE;AAAA,UACT,SAAS+B,GAAmB/B,CAAC;AAAA,UAC7B,kBAAkB,CAACc,MAAekB,GAAchC,GAAGc,CAAC;AAAA,QAAA,CACrD;AAAA,MAAA;AAAA,MAEL;AAAA,QACE,OAAO,MAAMnD,EAAE,kBAAkB;AAAA,QACjC,KAAK;AAAA,QACL,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,QACP,eAAe;AAAA,QACf,QAAQ,CAAAqC,MACNU,EAAEK,IAAQ,EAAE,MAAM,GAAG,SAAS,OAAO,UAAU,GAAA,GAAS,MAAM;AAAA,UAC5D9C,EAAU,QAAQ,gCAAgC,IAC9CyC;AAAA,YACEM;AAAA,YACA,EAAE,MAAM,SAAS,YAAY,IAAM,MAAM,WAAW,SAAS,MAAMmB,GAAanC,CAAC,EAAA;AAAA,YACjF,MAAMrC,EAAE,aAAa;AAAA,UAAA,IAEvB;AAAA,UACJM,EAAU,QAAQ,mCAAmC,IACjDyC;AAAA,YACEQ;AAAA,YACA,EAAE,iBAAiB,MAAMe,GAAWjC,CAAC,EAAA;AAAA,YACrC;AAAA,cACE,SAAS,MACPU;AAAA,gBAAEM;AAAA,gBAAS,EAAE,MAAM,SAAS,YAAY,IAAM,MAAM,QAAA;AAAA,gBAAW,MAC7DrD,EAAE,eAAe;AAAA,cAAA;AAAA,cAErB,SAAS,MAAMA,EAAE,0BAA0B,EAAE,OAAOqC,EAAE,OAAO;AAAA,YAAA;AAAA,UAC/D,IAEF;AAAA,QAAA,CACL;AAAA,MAAA;AAAA,IACL;AAEF,IAAAoB,GAAoBc,CAAW;AAG/B,UAAME,IAAW9D,EAAI,EAAK,GACpB+D,KAAc/D,EAAqB,IAAI,GACvCgE,IAAgBhE,EAAmB,IAAI,GACvCiE,KAAuB;AAAA,MAC3B,OAAO;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,MAAM5E,EAAE,wBAAwB;AAAA,QACzC,SAAS,CAAC,SAAS,MAAM;AAAA,MAAA;AAAA,MAE3B,OAAO;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,MAAMA,EAAE,wBAAwB;AAAA,QACzC,SAAS,CAAC,SAAS,MAAM;AAAA,MAAA;AAAA,IAC3B,GAEI6E,KAAY,OAAsB;AAAA,MACtC,cAAc;AAAA,MACd,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,IAELC,IAAWd,GAAwBa,IAAW;AAEpD,aAASE,KAAc;AACrB,MAAKxD,EAAa,UAClBoD,EAAc,QAAQ,MACtB,OAAO,OAAOG,GAAUD,GAAA,GAAa,EAAE,cAActD,EAAa,MAAM,MAAM,GAC9EkD,EAAS,QAAQ;AAAA,IACnB;AACA,aAASD,GAAanC,GAAgB;AACpC,MAAAsC,EAAc,QAAQtC,EAAE,IACxB,OAAO,OAAOyC,GAAUX,GAAY9B,CAAC,CAAC,GACtCoC,EAAS,QAAQ;AAAA,IACnB;AACA,mBAAeO,KAAW;;AACxB,cAAMpD,IAAA8C,GAAY,UAAZ,gBAAA9C,EAAmB;AACzB,UAAI;AACF,QAAI+C,EAAc,UAAU,OAAM,MAAM7C,EAAa,QAAQ,EAAE,GAAGgD,GAAU,IACvE,MAAMhD,EAAa,WAAW6C,EAAc,OAAO,EAAE,GAAGG,GAAU,GACvEtE,EAAU,WAAWsE,EAAS,YAAY,GAC1C5E,EAAQ,QAAQF,EAAE,gBAAgB,CAAC,GACnC,MAAM0B,EAAA;AAAA,MACR,SAASM,GAAG;AACV,eAAA9B,EAAQ,MAAMgC,EAAeF,CAAC,CAAC,GACxB;AAAA,MACT;AAAA,IACF;;;;;QAaEiD,GA+EM,OAAA;AAAA,mBA/EG;AAAA,UAAJ,KAAInE;AAAA,UAAY,OAAM;AAAA,QAAA;UACzBoE,EAsCaC,EAAAC,CAAA,GAAA;AAAA,YArCV,SAASxE;AAAA,qBACN;AAAA,YAAJ,KAAIF;AAAA,YACH,SAASoC;AAAA,YACT,SAASqC,EAAArD,CAAA,EAAa;AAAA,YACvB,eAAA;AAAA,YACC,kBAAgBqD,EAAAE,EAAA;AAAA,YACjB,kBAAA;AAAA,YACC,QAAQ,EAAA,WAAA,QAAA;AAAA,YACT,eAAY;AAAA,YACX,oBAAgBzD,IAAAL,EAAA,UAAA,gBAAAK,EAAc,OAAE;AAAA,YAChC,aAAW,OAAA,EAAA,OAAA;YACX,oBAAkBuD,EAAA5C,CAAA;AAAA,YAClB,YAAS+C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGC,MAAqBjD,GAAYiD,CAAG;AAAA,YAChD,2BAAuBD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGE,MAA+BjD,EAAA,QAAkBiD;AAAA,YAC3E,SAAKF,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAE,CAAAtD,MAAKmD,EAAAjF,CAAA,EAAQ,MAAMiF,EAAAjD,CAAA,EAAeF,CAAC,CAAA;AAAA,UAAA;YAEhC,qBAAiByD,EAC1B,CAAiC,EADH,WAAAC,QAAS;AAAA,cACvCR,EAAiCS,GAAA,EAApB,OAAOD,EAAA,GAAS,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,YAAA;YAEpB,mBACT,MAGW;AAAA,sBAHXE,EAGWT,EAAA9B,CAAA,GAAA;AAAA,gBAHqC,MAAK;AAAA,gBAAW,SAAOY;AAAA,cAAA;gBAC1D,QAAK,MAAqC;AAAA,kBAArCiB,EAAqCW,GAAA;AAAA,oBAA5B,MAAK;AAAA,oBAAW,MAAM;AAAA,kBAAA;;2BAAiB,MAChE;AAAA,kBADgEC,EAAA,QAC7DX,EAAAnF,CAAA,EAAC,YAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;oBAFY,4BAA4B;AAAA,cAAA;;YAMrC,SACT,MAQW;AAAA,sBARX4F,EAQWT,EAAA9B,CAAA,GAAA;AAAA,gBANT,WAAA;AAAA,gBACA,MAAK;AAAA,gBACJ,SAAO8B,EAAA3C,EAAA;AAAA,cAAA;gBAEG,QAAK,MAAsC;AAAA,kBAAtC0C,EAAsCW,GAAA;AAAA,oBAA7B,MAAK;AAAA,oBAAY,MAAM;AAAA,kBAAA;;2BAAiB,MACjE;AAAA,kBADiEC,EAAA,QAC9DX,EAAAnF,CAAA,EAAC,oBAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;oBANI,yCAAyC;AAAA,cAAA;;;;UAY9C,CAAAiB,EAAA,SAAUM,EAAA,cADnBqE,EAkCaT,EAAAC,CAAA,GAAA;AAAA;YAhCV,SAASb;AAAA,YACT,MAAM/C,EAAA;AAAA,YACP,WAAQ;AAAA,YACP,SAASC,EAAA;AAAA,YACT,SAASb;AAAA,YACT,QAAQ,EAAA,WAAA,QAAA;AAAA,YACR,oBAAkBuE,EAAAzC,CAAA;AAAA,YACnB,eAAA;AAAA,YACC,kBAAgByC,EAAAE,EAAA;AAAA,YACjB,eAAY;AAAA,YACX,2BAAuBC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGE,MAA+B9C,EAAA,QAAkB8C;AAAA,UAAA;YAEjE,qBAAiBC,EAC1B,CAAiC,EADH,WAAAC,QAAS;AAAA,cACvCR,EAAiCS,GAAA,EAApB,OAAOD,EAAA,GAAS,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,YAAA;YAEpB,mBACT,MAGW;AAAA,sBAHXE,EAGWT,EAAA9B,CAAA,GAAA;AAAA,gBAHqC,MAAK;AAAA,gBAAW,SAAO0B;AAAA,cAAA;gBAC1D,QAAK,MAAqC;AAAA,kBAArCG,EAAqCW,GAAA;AAAA,oBAA5B,MAAK;AAAA,oBAAW,MAAM;AAAA,kBAAA;;2BAAiB,MAChE;AAAA,kBADgEC,EAAA,QAC7DX,EAAAnF,CAAA,EAAC,cAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;oBAFY,4BAA4B;AAAA,cAAA;;YAKrC,SACT,MAQW;AAAA,sBARX4F,EAQWT,EAAA9B,CAAA,GAAA;AAAA,gBANT,WAAA;AAAA,gBACA,MAAK;AAAA,gBACJ,SAAO8B,EAAAvC,CAAA;AAAA,cAAA;gBAEG,QAAK,MAAsC;AAAA,kBAAtCsC,EAAsCW,GAAA;AAAA,oBAA7B,MAAK;AAAA,oBAAY,MAAM;AAAA,kBAAA;;2BAAiB,MACjE;AAAA,kBADiEC,EAAA,QAC9DX,EAAAnF,CAAA,EAAC,oBAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;oBANI,yCAAyC;AAAA,cAAA;;;8EAUnCiB,EAAA,2BAApB2E,EAEST,EAAAY,EAAA,GAAA;AAAA;YAFmB,OAAM;AAAA,YAAuB,UAAU;AAAA,UAAA;uBACjE,MAAyF;AAAA,cAAzFb,EAAyFC,EAAAa,EAAA,GAAA;AAAA,gBAA/E,aAAab,EAAAnF,CAAA,EAAC,qBAAA;AAAA,gBAAyB,OAAA,EAAA,SAAA,UAAA,QAAA,OAAA;AAAA,cAAA;;;;;QAKrDkF,EAoDWC,EAAAc,EAAA,GAAA;AAAA,UAnDR,MAAM9E,EAAA,SAAaF,EAAA,WAAYM,EAAA;AAAA,UAChC,WAAU;AAAA,UACV,QAAO;AAAA,UACP,OAAA,EAAA,iBAAA,gBAAA;AAAA,UACC,iBAAW+D,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGnC,MAAgBhC,EAAA,QAAYgC;AAAA,QAAA;qBAE3C,MA4CmB;AAAA,YA5CnB+B,EA4CmBC,EAAAe,EAAA,GAAA;AAAA,cA3ChB,OAAgB3E,EAAA,QAAe4D,EAAAnF,CAAA,EAAC,gBAAA,EAAA,MAAyBuB,QAAa,KAAA,KAAU4D,EAAAnF,CAAA,EAAC,sBAAA;AAAA,cAGlF,UAAA;AAAA,YAAA;cAkBW,UACT,MAmBM;AAAA,gBAnBNiF,GAmBM,OAnBNkB,IAmBM;AAAA,0BAlBJP,EASWT,EAAA9B,CAAA,GAAA;AAAA,oBAPT,WAAA;AAAA,oBACA,MAAK;AAAA,oBACL,MAAK;AAAA,oBACJ,WAAW8B,EAAAxC,EAAA;AAAA,oBACX,SAAOwC,EAAAvC,CAAA;AAAA,kBAAA;+BAER,MAA6B;AAAA,0BAA1BuC,EAAAnF,CAAA,EAAC,oBAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;wBAPI,yCAAyC;AAAA,kBAAA;0BASnD4F,EAOWT,EAAA9B,CAAA,GAAA;AAAA,oBALT,MAAK;AAAA,oBACL,MAAK;AAAA,oBACJ,SAAO0B;AAAA,kBAAA;+BAER,MAAuB;AAAA,0BAApBI,EAAAnF,CAAA,EAAC,cAAA,CAAA,GAAA,CAAA;AAAA,oBAAA;;;wBALI,4BAA4B;AAAA,kBAAA;;;yBA7B1C,MAea;AAAA,gBAfbkF,EAeaC,EAAAC,CAAA,GAAA;AAAA,kBAdV,SAASb;AAAA,kBACT,MAAM/C,EAAA;AAAA,kBACP,WAAQ;AAAA,kBACP,SAASC,EAAA;AAAA,kBACT,SAASb;AAAA,kBACT,QAAQ,EAAA,WAAA,QAAA;AAAA,kBACR,oBAAkBuE,EAAAzC,CAAA;AAAA,kBACnB,kBAAA;AAAA,kBACA,eAAY;AAAA,kBACX,2BAAuB4C,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAGE,MAA+B9C,EAAA,QAAkB8C;AAAA,gBAAA;kBAEjE,qBAAiBC,EAC1B,CAAiC,EADH,WAAAC,QAAS;AAAA,oBACvCR,EAAiCS,GAAA,EAApB,OAAOD,EAAA,GAAS,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,kBAAA;;;;;;;;;QA4BrCR,EA6CgBkB,IAAA;AAAA,UA5CN,MAAM1C,EAAA;AAAA,oDAAAA,EAAQ,QAAA2C;AAAA,UACrB,OAAOzC,EAAA,UAAa,OAAYuB,EAAAnF,CAAA,yBAAyBmF,EAAAnF,CAAA,EAAC,oBAAA;AAAA,UAC1D,OAAO;AAAA,UACP,cAAYkE;AAAA,UACZ,gBAAciB,EAAAnF,CAAA,EAAC,aAAA;AAAA,QAAA;qBAEhB,MAqCS;AAAA,YArCTkF,EAqCSC,OArCTmB,GAqCS;AAAA,uBApCH;AAAA,cAAJ,KAAI3C;AAAA,cACH,OAAOI;AAAA,cACP,OAAOF;AAAA,cACR,0BAAuB;AAAA,YAAA,GACfvC,EAAA,KAAU,GAAA;AAAA,yBAElB,MAac;AAAA,gBAbd4D,EAacC,EAAAoB,CAAA,GAAA;AAAA,kBAbA,OAAOpB,EAAAnF,CAAA,EAAC,WAAA;AAAA,kBAAe,MAAK;AAAA,gBAAA;kBAQ7B,YACT,MAEO;AAAA,oBAFK4D,EAAA,UAAa,aAAzB4C,GAEO,QAFPC,IAEOC,EADFvB,EAAAnF,CAAA,EAAC,oBAAA,CAAA,GAAA,CAAA;;6BATR,MAKE;AAAA,oBALFkF,EAKEC,EAAAwB,CAAA,GAAA;AAAA,sBAJQ,OAAO5C,EAAS;AAAA,sBAAT,kBAAAuB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAe,MAAAtC,EAAS,OAAIsC;AAAA,sBAC5B,OAAM;AAAA,sBACL,aAAalB,EAAAnF,CAAA,EAAC,WAAA;AAAA,sBACd,UAAU4D,EAAA,UAAa;AAAA,oBAAA;;;;gBAS5BsB,EAEcC,EAAAoB,CAAA,GAAA;AAAA,kBAFA,OAAOpB,EAAAnF,CAAA,EAAC,WAAA;AAAA,kBAAe,MAAK;AAAA,gBAAA;6BACxC,MAAuE;AAAA,oBAAvEkF,EAAuEC,EAAAwB,CAAA,GAAA;AAAA,sBAAtD,OAAO5C,EAAS;AAAA,sBAAT,kBAAAuB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAe,MAAAtC,EAAS,OAAIsC;AAAA,sBAAG,aAAalB,EAAAnF,CAAA,EAAC,WAAA;AAAA,oBAAA;;;;gBAExDkF,EAEcC,EAAAoB,CAAA,GAAA;AAAA,kBAFA,OAAOpB,EAAAnF,CAAA,EAAC,WAAA;AAAA,gBAAA;6BACpB,MAA8E;AAAA,oBAA9EkF,EAA8EC,EAAAyB,EAAA,GAAA;AAAA,sBAAtD,OAAO7C,EAAS;AAAA,sBAAT,kBAAAuB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAe,MAAAtC,EAAS,OAAIsC;AAAA,sBAAG,KAAK;AAAA,sBAAG,OAAA,EAAA,OAAA,QAAA;AAAA,oBAAA;;;;gBAEzDnB,EAMcC,EAAAoB,CAAA,GAAA;AAAA,kBANA,OAAOpB,EAAAnF,CAAA,EAAC,aAAA;AAAA,gBAAA;6BACpB,MAIE;AAAA,oBAJFkF,EAIEC,EAAAwB,CAAA,GAAA;AAAA,sBAHQ,OAAO5C,EAAS;AAAA,sBAAT,kBAAAuB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAe,MAAAtC,EAAS,SAAMsC;AAAA,sBAC9B,MAAK;AAAA,sBACJ,UAAU,EAAA,SAAA,EAAA;AAAA,oBAAA;;;;gBAGfnB,EAEcC,EAAAoB,CAAA,GAAA;AAAA,kBAFA,OAAOpB,EAAAnF,CAAA,EAAC,eAAA;AAAA,gBAAA;6BACpB,MAA6C;AAAA,oBAA7CkF,EAA6CC,EAAA0B,EAAA,GAAA;AAAA,sBAA3B,OAAO9C,EAAS;AAAA,sBAAT,kBAAAuB,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAe,MAAAtC,EAAS,UAAOsC;AAAA,oBAAA;;;;;;;;;;QAK/CnB,EA2BgBkB,IAAA;AAAA,UA1BN,MAAM3B,EAAA;AAAA,oDAAAA,EAAQ,QAAA4B;AAAA,UACrB,OAAO1B,EAAA,UAAa,OAAYQ,EAAAnF,CAAA,yBAAyBmF,EAAAnF,CAAA,EAAC,oBAAA;AAAA,UAC1D,OAAO;AAAA,UACP,cAAYgF;AAAA,UACZ,gBAAcG,EAAAnF,CAAA,EAAC,aAAA;AAAA,QAAA;qBAEhB,MAmBS;AAAA,YAnBTkF,EAmBSC,OAnBTmB,GAmBS;AAAA,uBAlBH;AAAA,cAAJ,KAAI5B;AAAA,cACH,OAAOI;AAAA,cACP,OAAOF;AAAA,cACR,0BAAuB;AAAA,YAAA,GACftD,EAAA,KAAU,GAAA;AAAA,yBAElB,MAEc;AAAA,gBAFd4D,EAEcC,EAAAoB,CAAA,GAAA;AAAA,kBAFA,OAAOpB,EAAAnF,CAAA,EAAC,gBAAA;AAAA,kBAAoB,MAAK;AAAA,gBAAA;6BAC7C,MAA6E;AAAA,oBAA7EkF,EAA6EC,EAAAwB,CAAA,GAAA;AAAA,sBAA5D,OAAO7B,EAAS;AAAA,sBAAT,kBAAAQ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAe,MAAAvB,EAAS,QAAKuB;AAAA,sBAAG,aAAalB,EAAAnF,CAAA,EAAC,gBAAA;AAAA,oBAAA;;;;gBAEzDkF,EAEcC,EAAAoB,CAAA,GAAA;AAAA,kBAFA,OAAOpB,EAAAnF,CAAA,EAAC,gBAAA;AAAA,kBAAoB,MAAK;AAAA,gBAAA;6BAC7C,MAA0F;AAAA,oBAA1FkF,EAA0FC,EAAAwB,CAAA,GAAA;AAAA,sBAAzE,OAAO7B,EAAS;AAAA,sBAAT,kBAAAQ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAe,MAAAvB,EAAS,QAAKuB;AAAA,sBAAE,OAAM;AAAA,sBAAQ,aAAalB,EAAAnF,CAAA,EAAC,gBAAA;AAAA,oBAAA;;;;gBAEtEkF,EAEcC,EAAAoB,CAAA,GAAA;AAAA,kBAFA,OAAOpB,EAAAnF,CAAA,EAAC,WAAA;AAAA,gBAAA;6BACpB,MAA8E;AAAA,oBAA9EkF,EAA8EC,EAAAyB,EAAA,GAAA;AAAA,sBAAtD,OAAO9B,EAAS;AAAA,sBAAT,kBAAAQ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAe,MAAAvB,EAAS,OAAIuB;AAAA,sBAAG,KAAK;AAAA,sBAAG,OAAA,EAAA,OAAA,QAAA;AAAA,oBAAA;;;;gBAEzDnB,EAEcC,EAAAoB,CAAA,GAAA;AAAA,kBAFA,OAAOpB,EAAAnF,CAAA,EAAC,eAAA;AAAA,gBAAA;6BACpB,MAA6C;AAAA,oBAA7CkF,EAA6CC,EAAA0B,EAAA,GAAA;AAAA,sBAA3B,OAAO/B,EAAS;AAAA,sBAAT,kBAAAQ,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA,CAAAe,MAAAvB,EAAS,UAAOuB;AAAA,oBAAA;;;;;;;;;;;;;;"}
|
|
@@ -1,90 +1,98 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useMessage as
|
|
1
|
+
import { defineComponent as N, ref as R, h as l, resolveDirective as S, openBlock as d, createBlock as f, unref as o, withCtx as r, withDirectives as y, createTextVNode as k, toDisplayString as w, createVNode as s } from "vue";
|
|
2
|
+
import { useMessage as B, NSpace as O, NButton as c, NPopconfirm as D } from "naive-ui";
|
|
3
3
|
import { useI18n as L } from "vue-i18n";
|
|
4
|
-
import { SmartTable as
|
|
4
|
+
import { SmartTable as A } from "smart-naive-table";
|
|
5
5
|
import p from "../../../components/AppIcon.vue.js";
|
|
6
6
|
import b from "../../../components/FileUpload/index.vue.js";
|
|
7
|
-
import { useConfirm as
|
|
8
|
-
import { useBatchDelete as
|
|
9
|
-
import { useAuthStore as
|
|
7
|
+
import { useConfirm as P } from "../../../composables/useConfirm.js";
|
|
8
|
+
import { useBatchDelete as I } from "../../../composables/useBatchDelete.js";
|
|
9
|
+
import { useAuthStore as U } from "../../../stores/auth.js";
|
|
10
10
|
import { fileApi as u } from "../../../api/index.js";
|
|
11
|
-
import { translateError as
|
|
12
|
-
import {
|
|
13
|
-
|
|
11
|
+
import { translateError as x } from "../../../utils/error.js";
|
|
12
|
+
import { SEARCH_ACTIONS as H, deriveHeaderFilters as M } from "../../../utils/tableFilter.js";
|
|
13
|
+
import { TABLE_MIN_ROW_HEIGHT as j, TABLE_TOOLBAR as q } from "../../../utils/tableToolbar.js";
|
|
14
|
+
import G from "../../../components/TableTotal/index.vue.js";
|
|
15
|
+
import { fmtBytes as K, fmtDateTime as V } from "../../../utils/format.js";
|
|
16
|
+
const se = /* @__PURE__ */ N({
|
|
14
17
|
__name: "index",
|
|
15
|
-
setup(
|
|
16
|
-
const { t } = L(), h =
|
|
17
|
-
checkedKeys: _,
|
|
18
|
-
hasSelection: z,
|
|
19
|
-
run: C
|
|
20
|
-
} = j({
|
|
18
|
+
setup($) {
|
|
19
|
+
const { t } = L(), h = B(), { run: z } = P(), _ = U(), m = R(), { checkedKeys: T, run: C } = I({
|
|
21
20
|
remove: u.batchRemove,
|
|
22
21
|
refresh: () => {
|
|
23
22
|
var e;
|
|
24
|
-
return (e =
|
|
23
|
+
return (e = m.value) == null ? void 0 : e.refresh();
|
|
25
24
|
},
|
|
26
25
|
successMsg: t("file.deleted")
|
|
27
26
|
});
|
|
28
|
-
function
|
|
27
|
+
function v() {
|
|
29
28
|
var e;
|
|
30
|
-
h.success(t("file.uploaded")), (e =
|
|
29
|
+
h.success(t("file.uploaded")), (e = m.value) == null || e.refresh();
|
|
31
30
|
}
|
|
32
|
-
async function
|
|
31
|
+
async function E(e) {
|
|
33
32
|
try {
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
} catch (
|
|
37
|
-
h.error(
|
|
33
|
+
const n = await u.download(e.id), a = URL.createObjectURL(n), i = document.createElement("a");
|
|
34
|
+
i.href = a, i.download = e.originalName, document.body.appendChild(i), i.click(), i.remove(), URL.revokeObjectURL(a);
|
|
35
|
+
} catch (n) {
|
|
36
|
+
h.error(x(n));
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
|
-
const
|
|
39
|
+
const g = [
|
|
41
40
|
{ type: "selection" },
|
|
42
41
|
{ type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
|
|
43
|
-
{
|
|
42
|
+
{
|
|
43
|
+
key: "originalName",
|
|
44
|
+
title: () => t("file.name"),
|
|
45
|
+
search: { actions: H.fuzzy },
|
|
46
|
+
ellipsis: { tooltip: !0 }
|
|
47
|
+
},
|
|
44
48
|
{
|
|
45
49
|
key: "extension",
|
|
46
50
|
title: () => t("file.extension"),
|
|
47
51
|
width: 90,
|
|
48
|
-
render: (e) => e.extension
|
|
52
|
+
render: (e) => e.extension ? l("span", { class: "mono muted" }, e.extension) : "—"
|
|
49
53
|
},
|
|
50
54
|
{
|
|
51
55
|
key: "sizeBytes",
|
|
52
56
|
title: () => t("file.size"),
|
|
53
57
|
width: 110,
|
|
54
|
-
render: (e) =>
|
|
58
|
+
render: (e) => l("span", { class: "num" }, K(e.sizeBytes))
|
|
55
59
|
},
|
|
56
60
|
{
|
|
57
61
|
key: "contentType",
|
|
58
62
|
title: () => t("file.contentType"),
|
|
59
63
|
ellipsis: { tooltip: !0 },
|
|
60
|
-
render: (e) => e.contentType || "—"
|
|
64
|
+
render: (e) => l("span", { class: "muted" }, e.contentType || "—")
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
key: "createTime",
|
|
68
|
+
title: () => t("file.uploadTime"),
|
|
69
|
+
render: (e) => l("span", { class: "num muted", style: "white-space: nowrap" }, V(e.createTime))
|
|
61
70
|
},
|
|
62
|
-
{ key: "createTime", title: () => t("file.uploadTime"), format: "datetime" },
|
|
63
71
|
{
|
|
64
72
|
key: "op",
|
|
65
73
|
title: () => t("common.operation"),
|
|
66
74
|
width: 140,
|
|
67
75
|
fixed: "right",
|
|
68
76
|
hideInSetting: !0,
|
|
69
|
-
render: (e) =>
|
|
70
|
-
|
|
77
|
+
render: (e) => l(O, { size: 4, wrapItem: !1 }, () => [
|
|
78
|
+
_.hasPerm("GET:/api/v1/sys/file/{id}/download") ? l(
|
|
71
79
|
c,
|
|
72
|
-
{ size: "small", quaternary: !0, type: "primary", onClick: () =>
|
|
80
|
+
{ size: "small", quaternary: !0, type: "primary", onClick: () => E(e) },
|
|
73
81
|
{
|
|
74
82
|
default: () => t("file.download"),
|
|
75
|
-
icon: () =>
|
|
83
|
+
icon: () => l(p, { icon: "ph:download-simple", size: 15 })
|
|
76
84
|
}
|
|
77
85
|
) : null,
|
|
78
|
-
|
|
79
|
-
|
|
86
|
+
_.hasPerm("DELETE:/api/v1/sys/file/{id}") ? l(
|
|
87
|
+
D,
|
|
80
88
|
{
|
|
81
|
-
onPositiveClick: () =>
|
|
82
|
-
var
|
|
83
|
-
|
|
89
|
+
onPositiveClick: () => z(() => u.remove(e.id), t("file.deleted")).then((n) => {
|
|
90
|
+
var a;
|
|
91
|
+
n && ((a = m.value) == null || a.refresh());
|
|
84
92
|
})
|
|
85
93
|
},
|
|
86
94
|
{
|
|
87
|
-
trigger: () =>
|
|
95
|
+
trigger: () => l(
|
|
88
96
|
c,
|
|
89
97
|
{ size: "small", quaternary: !0, type: "error" },
|
|
90
98
|
() => t("common.delete")
|
|
@@ -95,92 +103,99 @@ const ee = /* @__PURE__ */ R({
|
|
|
95
103
|
])
|
|
96
104
|
}
|
|
97
105
|
];
|
|
98
|
-
return (e,
|
|
99
|
-
const
|
|
100
|
-
return
|
|
101
|
-
|
|
106
|
+
return M(g), (e, n) => {
|
|
107
|
+
const a = S("auth");
|
|
108
|
+
return d(), f(o(A), {
|
|
109
|
+
toolbar: o(q),
|
|
102
110
|
ref_key: "tableRef",
|
|
103
|
-
ref:
|
|
104
|
-
columns:
|
|
111
|
+
ref: m,
|
|
112
|
+
columns: g,
|
|
105
113
|
fetcher: o(u).page,
|
|
106
|
-
|
|
107
|
-
"
|
|
114
|
+
search: { container: "table" },
|
|
115
|
+
"fill-height": "",
|
|
116
|
+
"min-row-height": o(j),
|
|
117
|
+
"card-on-narrow": "",
|
|
108
118
|
"storage-key": "sys-file",
|
|
109
|
-
"checked-row-keys": o(
|
|
110
|
-
"onUpdate:checkedRowKeys":
|
|
111
|
-
onError:
|
|
119
|
+
"checked-row-keys": o(T),
|
|
120
|
+
"onUpdate:checkedRowKeys": n[0] || (n[0] = (i) => T.value = i),
|
|
121
|
+
onError: n[1] || (n[1] = (i) => o(h).error(o(x)(i)))
|
|
112
122
|
}, {
|
|
113
|
-
|
|
114
|
-
|
|
123
|
+
"pagination-prefix": r(({ itemCount: i }) => [
|
|
124
|
+
s(G, { count: i }, null, 8, ["count"])
|
|
125
|
+
]),
|
|
126
|
+
"toolbar-right": r(() => [
|
|
127
|
+
y((d(), f(b, {
|
|
115
128
|
"show-file-list": !1,
|
|
116
|
-
onUploaded:
|
|
129
|
+
onUploaded: v
|
|
117
130
|
}, {
|
|
118
|
-
default:
|
|
131
|
+
default: r(() => [
|
|
119
132
|
s(o(c), { type: "primary" }, {
|
|
120
|
-
icon:
|
|
133
|
+
icon: r(() => [
|
|
121
134
|
s(p, {
|
|
122
135
|
icon: "ph:upload-simple",
|
|
123
136
|
size: 16
|
|
124
137
|
})
|
|
125
138
|
]),
|
|
126
|
-
default:
|
|
127
|
-
k(" " +
|
|
139
|
+
default: r(() => [
|
|
140
|
+
k(" " + w(o(t)("file.upload")), 1)
|
|
128
141
|
]),
|
|
129
142
|
_: 1
|
|
130
143
|
})
|
|
131
144
|
]),
|
|
132
145
|
_: 1
|
|
133
146
|
})), [
|
|
134
|
-
[
|
|
147
|
+
[a, "POST:/api/v1/sys/file/upload"]
|
|
135
148
|
]),
|
|
136
|
-
y((
|
|
149
|
+
y((d(), f(b, {
|
|
137
150
|
chunked: "",
|
|
138
151
|
"show-file-list": !1,
|
|
139
|
-
onUploaded:
|
|
152
|
+
onUploaded: v
|
|
140
153
|
}, {
|
|
141
|
-
default:
|
|
142
|
-
s(o(c),
|
|
143
|
-
icon:
|
|
154
|
+
default: r(() => [
|
|
155
|
+
s(o(c), { secondary: "" }, {
|
|
156
|
+
icon: r(() => [
|
|
144
157
|
s(p, {
|
|
145
158
|
icon: "ph:stack",
|
|
146
159
|
size: 16
|
|
147
160
|
})
|
|
148
161
|
]),
|
|
149
|
-
default:
|
|
150
|
-
k(" " +
|
|
162
|
+
default: r(() => [
|
|
163
|
+
k(" " + w(o(t)("file.uploadChunked")), 1)
|
|
151
164
|
]),
|
|
152
165
|
_: 1
|
|
153
166
|
})
|
|
154
167
|
]),
|
|
155
168
|
_: 1
|
|
156
169
|
})), [
|
|
157
|
-
[
|
|
158
|
-
])
|
|
159
|
-
|
|
170
|
+
[a, "POST:/api/v1/sys/file/chunk/init"]
|
|
171
|
+
])
|
|
172
|
+
]),
|
|
173
|
+
batch: r(() => [
|
|
174
|
+
y((d(), f(o(c), {
|
|
175
|
+
secondary: "",
|
|
160
176
|
type: "error",
|
|
161
|
-
disabled: !o(z),
|
|
162
177
|
onClick: o(C)
|
|
163
178
|
}, {
|
|
164
|
-
icon:
|
|
179
|
+
icon: r(() => [
|
|
165
180
|
s(p, {
|
|
166
181
|
icon: "ph:trash",
|
|
167
182
|
size: 16
|
|
168
183
|
})
|
|
169
184
|
]),
|
|
170
|
-
default:
|
|
171
|
-
k(" " +
|
|
185
|
+
default: r(() => [
|
|
186
|
+
k(" " + w(o(t)("common.batchDelete")), 1)
|
|
172
187
|
]),
|
|
173
188
|
_: 1
|
|
174
|
-
}, 8, ["
|
|
175
|
-
[
|
|
189
|
+
}, 8, ["onClick"])), [
|
|
190
|
+
[a, "POST:/api/v1/sys/file/batch-delete"]
|
|
176
191
|
])
|
|
177
192
|
]),
|
|
178
193
|
_: 1
|
|
179
|
-
}, 8, ["fetcher", "checked-row-keys"]);
|
|
194
|
+
}, 8, ["toolbar", "fetcher", "min-row-height", "checked-row-keys"]);
|
|
180
195
|
};
|
|
181
196
|
}
|
|
182
197
|
});
|
|
183
198
|
export {
|
|
184
|
-
|
|
199
|
+
se as default
|
|
185
200
|
};
|
|
186
201
|
//# sourceMappingURL=index2.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/file/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 文件管理 = 只读 SmartTable(搜索 originalName→FileName)+ 工具栏 FileUpload 触发器 + 行内下载/删除。\n// 下载走 blob(Bearer 自动带)→ createObjectURL + <a download> + revoke;删除走 useConfirm。\nimport { h, ref } from 'vue'\nimport { NButton, NSpace, NPopconfirm, useMessage } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport FileUpload from '#/components/FileUpload/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useBatchDelete } from '#/composables/useBatchDelete'\nimport { useAuthStore } from '#/stores/auth'\nimport { fileApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport { fmtBytes } from '#/utils/format'\nimport type { SysFile } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysFile>>()\nconst {\n checkedKeys,\n hasSelection,\n run: batchDelete,\n} = useBatchDelete({\n remove: fileApi.batchRemove,\n refresh: () => tableRef.value?.refresh(),\n successMsg: t('file.deleted'),\n})\n\nfunction onUploaded() {\n message.success(t('file.uploaded'))\n tableRef.value?.refresh()\n}\n\nasync function download(r: SysFile) {\n try {\n const blob = await fileApi.download(r.id)\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = r.originalName\n document.body.appendChild(a)\n a.click()\n a.remove()\n URL.revokeObjectURL(url)\n } catch (e) {\n message.error(translateError(e))\n }\n}\n\nconst columns: SmartTableColumn<SysFile>[] = [\n { type: 'selection' },\n\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n { key: 'originalName', title: () => t('file.name'), search: true, ellipsis: { tooltip: true } },\n {\n key: 'extension',\n title: () => t('file.extension'),\n width: 90,\n render: r => r.extension || '—',\n },\n {\n key: 'sizeBytes',\n title: () => t('file.size'),\n width: 110,\n render: r => fmtBytes(r.sizeBytes),\n },\n {\n key: 'contentType',\n title: () => t('file.contentType'),\n ellipsis: { tooltip: true },\n render: r => r.contentType || '—',\n },\n { key: 'createTime', title: () => t('file.uploadTime'), format: 'datetime' },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 140,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 4, wrapItem: false }, () => [\n authStore.hasPerm('GET:/api/v1/sys/file/{id}/download')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => download(r) },\n {\n default: () => t('file.download'),\n icon: () => h(AppIcon, { icon: 'ph:download-simple', size: 15 }),\n },\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/file/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => fileApi.remove(r.id), t('file.deleted')).then(ok => {\n if (ok) tableRef.value?.refresh()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('file.deleteConfirm', { name: r.originalName }),\n },\n )\n : null,\n ]),\n },\n]\n</script>\n\n<template>\n <SmartTable\n :default-page-size=\"100\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"fileApi.page\"\n flex-height\n virtual-scroll\n storage-key=\"sys-file\"\n :checked-row-keys=\"checkedKeys\"\n @update:checked-row-keys=\"(keys: (string | number)[]) => (checkedKeys = keys)\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <FileUpload\n v-auth=\"'POST:/api/v1/sys/file/upload'\"\n :show-file-list=\"false\"\n @uploaded=\"onUploaded\"\n >\n <n-button type=\"primary\">\n <template #icon><AppIcon icon=\"ph:upload-simple\" :size=\"16\" /></template>\n {{ t('file.upload') }}\n </n-button>\n </FileUpload>\n <FileUpload\n v-auth=\"'POST:/api/v1/sys/file/chunk/init'\"\n chunked\n :show-file-list=\"false\"\n @uploaded=\"onUploaded\"\n >\n <n-button>\n <template #icon><AppIcon icon=\"ph:stack\" :size=\"16\" /></template>\n {{ t('file.uploadChunked') }}\n </n-button>\n </FileUpload>\n <n-button\n v-auth=\"'POST:/api/v1/sys/file/batch-delete'\"\n type=\"error\"\n :disabled=\"!hasSelection\"\n @click=\"batchDelete\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('common.batchDelete') }}\n </n-button>\n </template>\n </SmartTable>\n</template>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","tableRef","ref","checkedKeys","hasSelection","batchDelete","useBatchDelete","fileApi","_a","onUploaded","download","r","blob","url","a","e","translateError","columns","fmtBytes","h","NSpace","NButton","AppIcon","NPopconfirm","ok","_createBlock","_unref","SmartTable","_cache","keys","FileUpload","_createVNode","_createTextVNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/file/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 文件管理 = 只读 SmartTable(搜索 originalName→FileName)+ 工具栏 FileUpload 触发器 + 行内下载/删除。\n// 下载走 blob(Bearer 自动带)→ createObjectURL + <a download> + revoke;删除走 useConfirm。\nimport { h, ref } from 'vue'\nimport { NButton, NSpace, NPopconfirm, useMessage } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport FileUpload from '#/components/FileUpload/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useBatchDelete } from '#/composables/useBatchDelete'\nimport { useAuthStore } from '#/stores/auth'\nimport { fileApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport { SEARCH_ACTIONS, deriveHeaderFilters } from '#/utils/tableFilter'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport TableTotal from '#/components/TableTotal/index.vue'\nimport { fmtBytes, fmtDateTime } from '#/utils/format'\nimport type { SysFile } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysFile>>()\nconst { checkedKeys, run: batchDelete } = useBatchDelete({\n remove: fileApi.batchRemove,\n refresh: () => tableRef.value?.refresh(),\n successMsg: t('file.deleted'),\n})\n\nfunction onUploaded() {\n message.success(t('file.uploaded'))\n tableRef.value?.refresh()\n}\n\nasync function download(r: SysFile) {\n try {\n const blob = await fileApi.download(r.id)\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = r.originalName\n document.body.appendChild(a)\n a.click()\n a.remove()\n URL.revokeObjectURL(url)\n } catch (e) {\n message.error(translateError(e))\n }\n}\n\nconst columns: SmartTableColumn<SysFile>[] = [\n { type: 'selection' },\n\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'originalName',\n title: () => t('file.name'),\n search: { actions: SEARCH_ACTIONS.fuzzy },\n ellipsis: { tooltip: true },\n },\n {\n key: 'extension',\n title: () => t('file.extension'),\n width: 90,\n render: r => (r.extension ? h('span', { class: 'mono muted' }, r.extension) : '—'),\n },\n {\n key: 'sizeBytes',\n title: () => t('file.size'),\n width: 110,\n render: r => h('span', { class: 'num' }, fmtBytes(r.sizeBytes)),\n },\n {\n key: 'contentType',\n title: () => t('file.contentType'),\n ellipsis: { tooltip: true },\n render: r => h('span', { class: 'muted' }, r.contentType || '—'),\n },\n {\n key: 'createTime',\n title: () => t('file.uploadTime'),\n render: r =>\n h('span', { class: 'num muted', style: 'white-space: nowrap' }, fmtDateTime(r.createTime)),\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 140,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 4, wrapItem: false }, () => [\n authStore.hasPerm('GET:/api/v1/sys/file/{id}/download')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => download(r) },\n {\n default: () => t('file.download'),\n icon: () => h(AppIcon, { icon: 'ph:download-simple', size: 15 }),\n },\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/file/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => fileApi.remove(r.id), t('file.deleted')).then(ok => {\n if (ok) tableRef.value?.refresh()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('file.deleteConfirm', { name: r.originalName }),\n },\n )\n : null,\n ]),\n },\n]\nderiveHeaderFilters(columns)\n</script>\n\n<template>\n <SmartTable\n :toolbar=\"TABLE_TOOLBAR\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"fileApi.page\"\n :search=\"{ container: 'table' }\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"sys-file\"\n :checked-row-keys=\"checkedKeys\"\n @update:checked-row-keys=\"(keys: (string | number)[]) => (checkedKeys = keys)\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #pagination-prefix=\"{ itemCount }\">\n <TableTotal :count=\"itemCount\" />\n </template>\n <template #toolbar-right>\n <FileUpload\n v-auth=\"'POST:/api/v1/sys/file/upload'\"\n :show-file-list=\"false\"\n @uploaded=\"onUploaded\"\n >\n <n-button type=\"primary\">\n <template #icon><AppIcon icon=\"ph:upload-simple\" :size=\"16\" /></template>\n {{ t('file.upload') }}\n </n-button>\n </FileUpload>\n <FileUpload\n v-auth=\"'POST:/api/v1/sys/file/chunk/init'\"\n chunked\n :show-file-list=\"false\"\n @uploaded=\"onUploaded\"\n >\n <n-button secondary>\n <template #icon><AppIcon icon=\"ph:stack\" :size=\"16\" /></template>\n {{ t('file.uploadChunked') }}\n </n-button>\n </FileUpload>\n </template>\n <!-- 勾选后工具栏换成批量栏(本页全选 + 已选 N 项 + 这里的按钮 + 取消选择),按钮出现即代表有勾选 -->\n <template #batch>\n <n-button\n v-auth=\"'POST:/api/v1/sys/file/batch-delete'\"\n secondary\n type=\"error\"\n @click=\"batchDelete\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('common.batchDelete') }}\n </n-button>\n </template>\n </SmartTable>\n</template>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","tableRef","ref","checkedKeys","batchDelete","useBatchDelete","fileApi","_a","onUploaded","download","r","blob","url","a","e","translateError","columns","SEARCH_ACTIONS","h","fmtBytes","fmtDateTime","NSpace","NButton","AppIcon","NPopconfirm","ok","deriveHeaderFilters","_createBlock","_unref","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_cache","keys","_withCtx","itemCount","_createVNode","TableTotal","FileUpload","_createTextVNode"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import o from "./index2.vue.js";
|
|
2
2
|
/* empty css */
|
|
3
|
-
import
|
|
4
|
-
const
|
|
3
|
+
import t from "../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const e = /* @__PURE__ */ t(o, [["__scopeId", "data-v-86d6feda"]]);
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
e as default
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=index.vue.js.map
|