smart-admin-web 10.15.0 → 10.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api/index.d.ts +4 -2
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.d.ts +39 -5
- package/dist/assets/icons/ph-subset.json.js +5 -5
- package/dist/components/AppIcon.vue.js +9 -9
- package/dist/components/AppIcon.vue.js.map +1 -1
- package/dist/components/AppWatermark.vue.d.ts +14 -0
- package/dist/components/AppWatermark.vue.js +38 -0
- package/dist/components/AppWatermark.vue.js.map +1 -0
- package/dist/components/AppWatermark2.vue.js +5 -0
- package/dist/components/AppWatermark2.vue.js.map +1 -0
- package/dist/components/Chart/PieChart.vue.d.ts +1 -1
- package/dist/components/Chart/echarts.js +15 -20
- package/dist/components/Chart/echarts.js.map +1 -1
- package/dist/components/CronEditor/index.vue.js +1 -1
- package/dist/components/CronEditor/index2.vue.js +2 -1
- package/dist/components/CronEditor/index2.vue.js.map +1 -1
- package/dist/components/DetailPage/index.vue.js +2 -2
- package/dist/components/DetailPage/index2.vue.js.map +1 -1
- package/dist/components/DictTag/index.vue.js.map +1 -1
- package/dist/components/ErrorBoundary/index.vue.js +2 -2
- package/dist/components/ErrorBoundary/index2.vue.js +1 -1
- package/dist/components/ErrorBoundary/index2.vue.js.map +1 -1
- package/dist/components/FormContainer/index.vue.js +91 -56
- package/dist/components/FormContainer/index.vue.js.map +1 -1
- package/dist/components/ImportWizard/index.vue.js +1 -1
- package/dist/components/ImportWizard/index2.vue.js +44 -41
- package/dist/components/ImportWizard/index2.vue.js.map +1 -1
- package/dist/components/MenuSearch.vue.js +2 -2
- package/dist/components/MenuSearch2.vue.js +19 -18
- package/dist/components/MenuSearch2.vue.js.map +1 -1
- package/dist/components/PasswordStrength/index.vue.js +2 -2
- package/dist/components/PasswordStrength/index2.vue.js +20 -18
- package/dist/components/PasswordStrength/index2.vue.js.map +1 -1
- package/dist/components/TableTotal/index.vue.d.ts +6 -0
- package/dist/components/{SelectTable → TableTotal}/index.vue.js +1 -1
- package/dist/components/TableTotal/index2.vue.js +16 -0
- package/dist/components/TableTotal/index2.vue.js.map +1 -0
- package/dist/components/TableZoomButton/index.vue.js.map +1 -1
- package/dist/components/UserPicker/index.vue.js +2 -2
- package/dist/components/UserPicker/index2.vue.js +176 -117
- package/dist/components/UserPicker/index2.vue.js.map +1 -1
- package/dist/composables/useBatchDelete.js.map +1 -1
- package/dist/composables/useLayoutMenu.js +17 -16
- package/dist/composables/useLayoutMenu.js.map +1 -1
- package/dist/composables/useModule.js +39 -29
- package/dist/composables/useModule.js.map +1 -1
- package/dist/composables/useShellBreakpoint.d.ts +19 -0
- package/dist/composables/useShellBreakpoint.js +37 -0
- package/dist/composables/useShellBreakpoint.js.map +1 -0
- package/dist/composables/useSite.d.ts +15 -0
- package/dist/composables/useSite.js +16 -14
- package/dist/composables/useSite.js.map +1 -1
- package/dist/composables/useTabTitle.js.map +1 -1
- package/dist/composables/useTableTitle.d.ts +6 -0
- package/dist/composables/useTableTitle.js +11 -0
- package/dist/composables/useTableTitle.js.map +1 -0
- package/dist/composables/useTableZoom.d.ts +5 -0
- package/dist/composables/useTableZoom.js.map +1 -1
- package/dist/composables/useTheme.d.ts +2 -2
- package/dist/composables/useTheme.js +23 -20
- package/dist/composables/useTheme.js.map +1 -1
- package/dist/createSmartAdmin.d.ts +12 -2
- package/dist/createSmartAdmin.js +72 -60
- package/dist/createSmartAdmin.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +219 -205
- package/dist/index.js.map +1 -1
- package/dist/layouts/AccentPicker.vue.js +8 -0
- package/dist/layouts/AccentPicker.vue.js.map +1 -0
- package/dist/layouts/AccentPicker2.vue.js +131 -0
- package/dist/layouts/AccentPicker2.vue.js.map +1 -0
- package/dist/layouts/AppHeader.vue.d.ts +8 -1
- package/dist/layouts/AppHeader.vue.js +2 -2
- package/dist/layouts/AppHeader2.vue.js +317 -235
- package/dist/layouts/AppHeader2.vue.js.map +1 -1
- package/dist/layouts/NoticeBell.vue.js +2 -2
- package/dist/layouts/NoticeBell2.vue.js +1 -1
- package/dist/layouts/NoticeBell2.vue.js.map +1 -1
- package/dist/layouts/PersonalLayout.vue.js +2 -2
- package/dist/layouts/PersonalLayout2.vue.js +69 -47
- package/dist/layouts/PersonalLayout2.vue.js.map +1 -1
- package/dist/layouts/SettingsDrawer.vue.js +3 -3
- package/dist/layouts/SettingsDrawer2.vue.js +261 -325
- package/dist/layouts/SettingsDrawer2.vue.js.map +1 -1
- package/dist/layouts/TabsBar.vue.js +2 -2
- package/dist/layouts/TabsBar2.vue.js +97 -69
- package/dist/layouts/TabsBar2.vue.js.map +1 -1
- package/dist/layouts/components/SideNav.vue.d.ts +3 -0
- package/dist/layouts/components/SideNav.vue.js +1 -1
- package/dist/layouts/components/SideNav2.vue.js +54 -26
- package/dist/layouts/components/SideNav2.vue.js.map +1 -1
- package/dist/layouts/default.vue.js +1 -1
- package/dist/layouts/default2.vue.js +170 -140
- package/dist/layouts/default2.vue.js.map +1 -1
- package/dist/lib/loginHero.d.ts +2 -2
- package/dist/lib/loginHero.js.map +1 -1
- package/dist/lib/runtime.js +1 -1
- package/dist/lib/watermark.d.ts +110 -0
- package/dist/lib/watermark.js +151 -0
- package/dist/lib/watermark.js.map +1 -0
- package/dist/locales/en-US.d.ts +221 -15
- package/dist/locales/en-US.js +230 -21
- package/dist/locales/en-US.js.map +1 -1
- package/dist/locales/kernelMenuTitles.d.ts +1 -0
- package/dist/locales/kernelMenuTitles.js +128 -0
- package/dist/locales/kernelMenuTitles.js.map +1 -0
- package/dist/locales/menuTitle.d.ts +3 -0
- package/dist/locales/menuTitle.js +14 -12
- package/dist/locales/menuTitle.js.map +1 -1
- package/dist/locales/zh-CN.d.ts +221 -15
- package/dist/locales/zh-CN.js +238 -28
- package/dist/locales/zh-CN.js.map +1 -1
- package/dist/router/index.js +41 -32
- package/dist/router/index.js.map +1 -1
- package/dist/router/namedPage.d.ts +4 -0
- package/dist/router/namedPage.js +7 -7
- package/dist/router/namedPage.js.map +1 -1
- package/dist/router/viewRegistry.js +8 -8
- package/dist/router/viewRegistry.js.map +1 -1
- package/dist/stores/app.d.ts +0 -12
- package/dist/stores/app.js +11 -12
- package/dist/stores/app.js.map +1 -1
- package/dist/stores/tabs.js.map +1 -1
- package/dist/stores/user.d.ts +10 -0
- package/dist/stores/user.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/theme/accentTokens.d.ts +27 -0
- package/dist/theme/accentTokens.js +54 -0
- package/dist/theme/accentTokens.js.map +1 -0
- package/dist/theme/accents.d.ts +21 -1
- package/dist/theme/accents.js +11 -2
- package/dist/theme/accents.js.map +1 -1
- package/dist/theme/mix.d.ts +58 -7
- package/dist/theme/mix.js +115 -30
- package/dist/theme/mix.js.map +1 -1
- package/dist/theme/naive-theme.d.ts +5 -2
- package/dist/theme/naive-theme.js +405 -75
- package/dist/theme/naive-theme.js.map +1 -1
- package/dist/utils/jwt.d.ts +8 -0
- package/dist/utils/jwt.js +14 -0
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/menuIcon.d.ts +2 -0
- package/dist/utils/menuIcon.js +8 -0
- package/dist/utils/menuIcon.js.map +1 -0
- package/dist/utils/oauthBrand.js.map +1 -1
- package/dist/utils/tableFilter.d.ts +88 -0
- package/dist/utils/tableFilter.js +116 -0
- package/dist/utils/tableFilter.js.map +1 -0
- package/dist/utils/tableToolbar.d.ts +18 -0
- package/dist/utils/tableToolbar.js +11 -0
- package/dist/utils/tableToolbar.js.map +1 -0
- package/dist/utils/treeFilter.d.ts +20 -0
- package/dist/utils/treeFilter.js +24 -0
- package/dist/utils/treeFilter.js.map +1 -0
- package/dist/views/dashboard/ShortcutPicker.vue.js +1 -1
- package/dist/views/dashboard/ShortcutPicker2.vue.js +73 -48
- package/dist/views/dashboard/ShortcutPicker2.vue.js.map +1 -1
- package/dist/views/dashboard/biz.vue.js +1 -1
- package/dist/views/dashboard/biz2.vue.js +310 -257
- package/dist/views/dashboard/biz2.vue.js.map +1 -1
- package/dist/views/dashboard/workbench.vue.js +2 -2
- package/dist/views/dashboard/workbench2.vue.js +141 -155
- package/dist/views/dashboard/workbench2.vue.js.map +1 -1
- package/dist/views/embed/iframe.vue.js +2 -2
- package/dist/views/embed/iframe2.vue.js +22 -15
- package/dist/views/embed/iframe2.vue.js.map +1 -1
- package/dist/views/error/404.vue.js +2 -2
- package/dist/views/error/4042.vue.js +33 -24
- package/dist/views/error/4042.vue.js.map +1 -1
- package/dist/views/error/BootError.vue.js +1 -1
- package/dist/views/error/BootError2.vue.js +59 -48
- package/dist/views/error/BootError2.vue.js.map +1 -1
- package/dist/views/error/MissingRoute.vue.js +2 -2
- package/dist/views/error/MissingRoute2.vue.js +34 -15
- package/dist/views/error/MissingRoute2.vue.js.map +1 -1
- package/dist/views/login/LoginForm.vue.d.ts +7 -1
- package/dist/views/login/LoginForm.vue.js +2 -2
- package/dist/views/login/LoginForm2.vue.js +580 -488
- package/dist/views/login/LoginForm2.vue.js.map +1 -1
- package/dist/views/login/components/LoginDesk.vue.d.ts +36 -0
- package/dist/views/login/components/LoginDesk.vue.js +9 -0
- package/dist/views/login/components/LoginDesk.vue.js.map +1 -0
- package/dist/views/login/components/LoginDesk2.vue.js +100 -0
- package/dist/views/login/components/LoginDesk2.vue.js.map +1 -0
- package/dist/views/login/components/LoginHeroPanel.vue.js +3 -3
- package/dist/views/login/components/LoginHeroPanel2.vue.js +34 -39
- package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -1
- package/dist/views/login/index.vue.js +1 -1
- package/dist/views/login/index2.vue.js +141 -71
- package/dist/views/login/index2.vue.js.map +1 -1
- package/dist/views/login/layout.d.ts +11 -0
- package/dist/views/login/layout.js +27 -0
- package/dist/views/login/layout.js.map +1 -0
- package/dist/views/mfa/index.vue.js +2 -2
- package/dist/views/mfa/index2.vue.js +367 -321
- package/dist/views/mfa/index2.vue.js.map +1 -1
- package/dist/views/module/index.vue.js +2 -2
- package/dist/views/module/index2.vue.js +132 -99
- package/dist/views/module/index2.vue.js.map +1 -1
- package/dist/views/oauth/callback.vue.js +2 -2
- package/dist/views/oauth/callback2.vue.js +65 -51
- package/dist/views/oauth/callback2.vue.js.map +1 -1
- package/dist/views/personal/bindings.vue.js +2 -2
- package/dist/views/personal/bindings2.vue.js +98 -94
- package/dist/views/personal/bindings2.vue.js.map +1 -1
- package/dist/views/personal/notice2.vue.js +103 -76
- package/dist/views/personal/notice2.vue.js.map +1 -1
- package/dist/views/personal/password2.vue.js +47 -40
- package/dist/views/personal/password2.vue.js.map +1 -1
- package/dist/views/personal/profile.vue.js +3 -3
- package/dist/views/personal/profile2.vue.js +24 -18
- package/dist/views/personal/profile2.vue.js.map +1 -1
- package/dist/views/personal/security.vue.js +2 -2
- package/dist/views/personal/security2.vue.js +65 -53
- package/dist/views/personal/security2.vue.js.map +1 -1
- package/dist/views/personal/sessions.vue.js +2 -2
- package/dist/views/personal/sessions2.vue.js +67 -62
- package/dist/views/personal/sessions2.vue.js.map +1 -1
- package/dist/views/system/ai-model/components/ProviderCard.vue.js +2 -2
- package/dist/views/system/ai-model/components/ProviderCard2.vue.js +142 -130
- package/dist/views/system/ai-model/components/ProviderCard2.vue.js.map +1 -1
- package/dist/views/system/ai-model/components/ProviderForm.vue.js +2 -2
- package/dist/views/system/ai-model/components/ProviderForm2.vue.js +71 -70
- package/dist/views/system/ai-model/components/ProviderForm2.vue.js.map +1 -1
- package/dist/views/system/ai-model/index.vue.js +2 -2
- package/dist/views/system/ai-model/index2.vue.js +99 -99
- package/dist/views/system/ai-model/index2.vue.js.map +1 -1
- package/dist/views/system/ai-model/presets.d.ts +1 -1
- package/dist/views/system/ai-model/presets.js +18 -18
- package/dist/views/system/ai-model/presets.js.map +1 -1
- package/dist/views/system/ai-usage/index.vue.js +2 -2
- package/dist/views/system/ai-usage/index2.vue.js +356 -258
- package/dist/views/system/ai-usage/index2.vue.js.map +1 -1
- package/dist/views/system/api-docs/index.vue.js +5 -2
- package/dist/views/system/api-docs/index.vue.js.map +1 -1
- package/dist/views/system/api-docs/index2.vue.js +92 -42
- package/dist/views/system/api-docs/index2.vue.js.map +1 -1
- package/dist/views/system/cache/index.vue.js +2 -2
- package/dist/views/system/cache/index2.vue.js +74 -80
- package/dist/views/system/cache/index2.vue.js.map +1 -1
- package/dist/views/system/config/components/AdminMock.vue.js +2 -2
- package/dist/views/system/config/components/AdminMock2.vue.js +60 -43
- package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -1
- package/dist/views/system/config/components/AdvancedSection.vue.js +5 -2
- package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -1
- package/dist/views/system/config/components/AdvancedSection2.vue.js +98 -70
- package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/BrandSection.vue.js +2 -2
- package/dist/views/system/config/components/BrandSection2.vue.js +121 -119
- package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/CfgGroup.vue.js +3 -3
- package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -1
- package/dist/views/system/config/components/CfgRow.vue.js +1 -1
- package/dist/views/system/config/components/CfgRow2.vue.js +24 -23
- package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -1
- package/dist/views/system/config/components/CfgSegment.vue.js +1 -1
- package/dist/views/system/config/components/CfgSegment2.vue.js +16 -15
- package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -1
- package/dist/views/system/config/components/ConfigFormModal.vue.js +2 -2
- package/dist/views/system/config/components/ConfigFormModal2.vue.js +35 -33
- package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
- package/dist/views/system/config/components/JobSection.vue.js +2 -2
- package/dist/views/system/config/components/JobSection2.vue.js +46 -44
- package/dist/views/system/config/components/JobSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/LoginMock.vue.js +3 -3
- package/dist/views/system/config/components/LoginMock2.vue.js +83 -72
- package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -1
- package/dist/views/system/config/components/LogoCropper.vue.js +1 -1
- package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -1
- package/dist/views/system/config/components/LogoEditor.vue.js +2 -2
- package/dist/views/system/config/components/LogoEditor2.vue.js +11 -13
- package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -1
- package/dist/views/system/config/components/ProviderSheet.vue.js +3 -3
- package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -1
- package/dist/views/system/config/components/SectionLayout.vue.d.ts +4 -2
- package/dist/views/system/config/components/SectionLayout.vue.js +2 -2
- package/dist/views/system/config/components/SectionLayout2.vue.js +51 -27
- package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -1
- package/dist/views/system/config/components/SecuritySection.vue.js +2 -2
- package/dist/views/system/config/components/SecuritySection2.vue.js +207 -206
- package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -1
- package/dist/views/system/config/components/SensitiveSection.vue.js +2 -2
- package/dist/views/system/config/components/SensitiveSection2.vue.js +107 -102
- package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/UploadSection.vue.js +2 -2
- package/dist/views/system/config/components/UploadSection2.vue.js +86 -77
- package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -1
- package/dist/views/system/config/components/WatermarkSection.vue.js +8 -0
- package/dist/views/system/config/components/WatermarkSection.vue.js.map +1 -0
- package/dist/views/system/config/components/WatermarkSection2.vue.js +284 -0
- package/dist/views/system/config/components/WatermarkSection2.vue.js.map +1 -0
- package/dist/views/system/config/draft.d.ts +2 -2
- package/dist/views/system/config/draft.js.map +1 -1
- package/dist/views/system/config/groups.d.ts +4 -1
- package/dist/views/system/config/groups.js +54 -49
- package/dist/views/system/config/groups.js.map +1 -1
- package/dist/views/system/config/index.vue.js +3 -2
- package/dist/views/system/config/index.vue.js.map +1 -1
- package/dist/views/system/config/index2.vue.js +173 -148
- package/dist/views/system/config/index2.vue.js.map +1 -1
- package/dist/views/system/config/layoutMode.d.ts +23 -0
- package/dist/views/system/config/layoutMode.js +28 -0
- package/dist/views/system/config/layoutMode.js.map +1 -0
- package/dist/views/system/dict/index.vue.js +2 -2
- package/dist/views/system/dict/index2.vue.js +471 -366
- package/dist/views/system/dict/index2.vue.js.map +1 -1
- package/dist/views/system/file/index2.vue.js +91 -76
- package/dist/views/system/file/index2.vue.js.map +1 -1
- package/dist/views/system/job/index.vue.js +3 -3
- package/dist/views/system/job/index2.vue.js +897 -828
- package/dist/views/system/job/index2.vue.js.map +1 -1
- package/dist/views/system/job-log/components/AttemptTable.vue.d.ts +8 -0
- package/dist/views/system/job-log/components/AttemptTable.vue.js +5 -0
- package/dist/views/system/job-log/components/AttemptTable.vue.js.map +1 -0
- package/dist/views/system/job-log/components/AttemptTable2.vue.js +54 -0
- package/dist/views/system/job-log/components/AttemptTable2.vue.js.map +1 -0
- package/dist/views/system/job-log/index.vue.js +2 -2
- package/dist/views/system/job-log/index2.vue.js +193 -207
- package/dist/views/system/job-log/index2.vue.js.map +1 -1
- package/dist/views/system/job-log/runStatus.d.ts +13 -0
- package/dist/views/system/job-log/runStatus.js +26 -0
- package/dist/views/system/job-log/runStatus.js.map +1 -0
- package/dist/views/system/job-monitor/index.vue.js +2 -2
- package/dist/views/system/job-monitor/index2.vue.js +172 -180
- package/dist/views/system/job-monitor/index2.vue.js.map +1 -1
- package/dist/views/system/log/exception/index.vue.js +2 -2
- package/dist/views/system/log/exception/index2.vue.js +135 -96
- package/dist/views/system/log/exception/index2.vue.js.map +1 -1
- package/dist/views/system/log/login/index2.vue.js +62 -41
- package/dist/views/system/log/login/index2.vue.js.map +1 -1
- package/dist/views/system/log/op/index.vue.js +2 -2
- package/dist/views/system/log/op/index2.vue.js +200 -162
- package/dist/views/system/log/op/index2.vue.js.map +1 -1
- package/dist/views/system/menu/components/ButtonManager.vue.js +2 -2
- package/dist/views/system/menu/components/ButtonManager2.vue.js +206 -190
- package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -1
- package/dist/views/system/menu/components/MenuFormModal.vue.js +2 -2
- package/dist/views/system/menu/components/MenuFormModal2.vue.js +127 -118
- package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -1
- package/dist/views/system/menu/index.vue.js +1 -1
- package/dist/views/system/menu/index2.vue.js +216 -183
- package/dist/views/system/menu/index2.vue.js.map +1 -1
- package/dist/views/system/module/index.vue.js +1 -1
- package/dist/views/system/module/index2.vue.js +177 -144
- package/dist/views/system/module/index2.vue.js.map +1 -1
- package/dist/views/system/monitor/index.vue.js +2 -2
- package/dist/views/system/monitor/index2.vue.js +134 -149
- package/dist/views/system/monitor/index2.vue.js.map +1 -1
- package/dist/views/system/notice/index.vue.js +1 -1
- package/dist/views/system/notice/index2.vue.js +209 -181
- package/dist/views/system/notice/index2.vue.js.map +1 -1
- package/dist/views/system/org/index.vue.js +1 -1
- package/dist/views/system/org/index2.vue.js +278 -248
- package/dist/views/system/org/index2.vue.js.map +1 -1
- package/dist/views/system/position/index.vue.js +5 -2
- package/dist/views/system/position/index.vue.js.map +1 -1
- package/dist/views/system/position/index2.vue.js +128 -92
- package/dist/views/system/position/index2.vue.js.map +1 -1
- package/dist/views/system/recycle/index.vue.js +2 -2
- package/dist/views/system/recycle/index2.vue.js +90 -67
- package/dist/views/system/recycle/index2.vue.js.map +1 -1
- package/dist/views/system/role/components/GrantMenuSheet.vue.d.ts +20 -0
- package/dist/views/system/role/components/GrantMenuSheet.vue.js +8 -0
- package/dist/views/system/role/components/GrantMenuSheet.vue.js.map +1 -0
- package/dist/views/system/role/components/GrantMenuSheet2.vue.js +117 -0
- package/dist/views/system/role/components/GrantMenuSheet2.vue.js.map +1 -0
- package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +6 -4
- package/dist/views/system/role/components/GrantMenuTable.vue.js +2 -2
- package/dist/views/system/role/components/GrantMenuTable2.vue.js +279 -177
- package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -1
- package/dist/views/system/role/components/MatchText.vue.d.ts +7 -0
- package/dist/views/system/role/components/MatchText.vue.js +8 -0
- package/dist/views/system/role/components/MatchText.vue.js.map +1 -0
- package/dist/views/system/role/components/MatchText2.vue.js +29 -0
- package/dist/views/system/role/components/MatchText2.vue.js.map +1 -0
- package/dist/views/system/role/components/grantMenuGroups.d.ts +36 -0
- package/dist/views/system/role/components/grantMenuGroups.js +110 -48
- package/dist/views/system/role/components/grantMenuGroups.js.map +1 -1
- package/dist/views/system/role/index.vue.js +5 -2
- package/dist/views/system/role/index.vue.js.map +1 -1
- package/dist/views/system/role/index2.vue.js +181 -165
- package/dist/views/system/role/index2.vue.js.map +1 -1
- package/dist/views/system/session/index2.vue.js +75 -49
- package/dist/views/system/session/index2.vue.js.map +1 -1
- package/dist/views/system/user/components/ResetPasswordModal.vue.js +2 -2
- package/dist/views/system/user/components/ResetPasswordModal2.vue.js +2 -0
- package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -1
- package/dist/views/system/user/components/UserFormModal.vue.js +2 -2
- package/dist/views/system/user/components/UserFormModal2.vue.js +77 -76
- package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -1
- package/dist/views/system/user/index.vue.js +2 -2
- package/dist/views/system/user/index2.vue.js +362 -275
- package/dist/views/system/user/index2.vue.js.map +1 -1
- package/package.json +3 -5
- package/dist/components/SelectTable/index.vue.d.ts +0 -76
- package/dist/components/SelectTable/index2.vue.js +0 -256
- package/dist/components/SelectTable/index2.vue.js.map +0 -1
- package/dist/composables/useTableRowSort.d.ts +0 -20
- package/dist/composables/useTableRowSort.js +0 -59
- package/dist/composables/useTableRowSort.js.map +0 -1
- package/dist/layouts/LayoutModeCards.vue.js +0 -8
- package/dist/layouts/LayoutModeCards.vue.js.map +0 -1
- package/dist/layouts/LayoutModeCards2.vue.js +0 -67
- package/dist/layouts/LayoutModeCards2.vue.js.map +0 -1
- package/dist/layouts/SettingRow.vue.d.ts +0 -16
- package/dist/layouts/SettingRow.vue.js +0 -8
- package/dist/layouts/SettingRow.vue.js.map +0 -1
- package/dist/layouts/SettingRow2.vue.js +0 -23
- package/dist/layouts/SettingRow2.vue.js.map +0 -1
- package/dist/views/login/skins/AuroraGlass.vue.js +0 -8
- package/dist/views/login/skins/AuroraGlass.vue.js.map +0 -1
- package/dist/views/login/skins/AuroraGlass2.vue.js +0 -80
- package/dist/views/login/skins/AuroraGlass2.vue.js.map +0 -1
- package/dist/views/login/skins/SplitPanel.vue.d.ts +0 -3
- package/dist/views/login/skins/SplitPanel.vue.js +0 -8
- package/dist/views/login/skins/SplitPanel.vue.js.map +0 -1
- package/dist/views/login/skins/SplitPanel2.vue.js +0 -65
- package/dist/views/login/skins/SplitPanel2.vue.js.map +0 -1
- package/dist/views/login/skins/Spotlight.vue.d.ts +0 -3
- package/dist/views/login/skins/Spotlight.vue.js +0 -8
- package/dist/views/login/skins/Spotlight.vue.js.map +0 -1
- package/dist/views/login/skins/Spotlight2.vue.js +0 -36
- package/dist/views/login/skins/Spotlight2.vue.js.map +0 -1
- package/dist/views/login/skins.d.ts +0 -8
- package/dist/views/login/skins.js +0 -13
- package/dist/views/login/skins.js.map +0 -1
- /package/dist/components/{SelectTable → TableTotal}/index.vue.js.map +0 -0
- /package/dist/layouts/{LayoutModeCards.vue.d.ts → AccentPicker.vue.d.ts} +0 -0
- /package/dist/views/{login/skins/AuroraGlass.vue.d.ts → system/config/components/WatermarkSection.vue.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/org/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 机构管理 = 树表:SmartTable 静态数据 + children 树模式(无分页)。\n// org list 平铺 → buildTree 拼 children;上级机构用 OrgTreeSelect(剪自身子树防成环);\n// 无独立启停端点,StatusSwitch 走全量 update;删除有子机构后端拒,前端照调由 translateError 弹码。\nimport { computed, h, onMounted, reactive, ref, shallowRef, watch } from 'vue'\nimport {\n NButton,\n NSpace,\n NForm,\n NFormItem,\n NInput,\n NInputNumber,\n NSwitch,\n NDropdown,\n NModal,\n NCard,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { SmartTable, type SmartTableColumn } from 'smart-naive-table'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport DictSelect from '#/components/DictSelect/index.vue'\nimport DictTag from '#/components/DictTag/index.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport OrgTreeSelect from '#/components/OrgTreeSelect/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { orgApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { translateError } from '#/utils/error'\nimport { buildTree, expandableIds, filterTree, type Tree } from '#/utils/tree'\nimport type { OrgInput, SysOrg } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run, confirm } = useConfirm()\nconst authStore = useAuthStore()\n\nconst loading = ref(false)\n// 整份替换 + 只读(行内改动一律重拉 load(),不往节点上写值),不需要深响应\nconst tree = shallowRef<Tree<SysOrg>[]>([])\n\nasync function load() {\n loading.value = true\n try {\n tree.value = buildTree(await orgApi.list())\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\nonMounted(load)\n\n// ── 搜索 + 展开控制 ───────────────────────────────────────────────\n// SmartTable 静态 data 模式不做任何前端过滤(它只在 fetcher 模式下发请求),所以过滤得自己算。\n// 关键字放 #toolbar 而不是用列的 search 配置:树表没有分页,搜索卡片会白占一整块高度。\nconst keyword = ref('')\nconst filteredTree = computed(() => {\n const kw = keyword.value.trim().toLowerCase()\n if (!kw) return tree.value\n return filterTree(\n tree.value,\n n => n.name.toLowerCase().includes(kw) || n.code.toLowerCase().includes(kw),\n )\n})\n\n// 展开受控:一旦传了 expanded-row-keys,naive 就以它为准,default-expand-all 会被初始值直接覆盖成\"全折叠\",\n// 所以\"默认全展开\"得自己播种。data 变了受控 keys 也不会自动跟着变 —— 搜索后要重算,否则命中结果藏在折叠的祖先里看不见。\nconst expandedKeys = ref<number[]>([])\nwatch(filteredTree, next => (expandedKeys.value = expandableIds(next)), { immediate: true })\n\nconst allExpanded = computed(() => expandedKeys.value.length > 0)\nconst toggleExpandAll = () =>\n (expandedKeys.value = allExpanded.value ? [] : expandableIds(filteredTree.value))\n\n// ── 弹窗表单(parentId 可空:OrgTreeSelect clearable → null,save 时归一为 0=根)──\ninterface OrgForm {\n parentId: number | null\n name: string\n code: string\n category: string | null\n sort: number\n enabled: boolean\n}\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n name: {\n required: true,\n whitespace: true,\n message: () => t('org.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): OrgForm => ({\n parentId: 0,\n name: '',\n code: '',\n category: null,\n sort: 0,\n enabled: true,\n})\nconst form = reactive<OrgForm>(blank())\n\n// 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。\nconst toInput = (r: SysOrg): OrgInput => ({\n parentId: r.parentId,\n name: r.name,\n code: r.code,\n category: r.category ?? null,\n sort: r.sort,\n enabled: r.enabled,\n})\n\nfunction openAdd(parentId = 0) {\n editingId.value = null\n Object.assign(form, blank(), { parentId })\n show.value = true\n}\nfunction openEdit(r: SysOrg) {\n editingId.value = r.id\n Object.assign(form, toInput(r))\n show.value = true\n}\n\n/** FormContainer onConfirm:校验失败 reject / API 失败 return false → 弹层不关;成功正常返回自动关。 */\nasync function save() {\n await formRef.value?.validate()\n try {\n const payload: OrgInput = { ...form, parentId: form.parentId ?? 0 }\n if (editingId.value === null) await orgApi.add(payload)\n else await orgApi.update(editingId.value, payload)\n message.success(t('org.saved'))\n await load()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n\n// ── 复制弹窗 ──────────────────────────────────────────────────────\nconst copyShow = ref(false)\nconst copyId = ref(0)\nconst copySourceName = ref('')\nconst copyName = ref('')\n\nfunction openCopy(r: SysOrg) {\n copyId.value = r.id\n copySourceName.value = r.name\n copyName.value = r.name + t('common.copySuffix')\n copyShow.value = true\n}\nasync function confirmCopy() {\n const ok = await run(() => orgApi.copy(copyId.value, { name: copyName.value }), t('org.copied'))\n if (ok) {\n copyShow.value = false\n load()\n }\n}\n\n/** 删除:下拉菜单项不适合内联 popconfirm,走 useConfirm().confirm 的 dialog(它的设计用途)。 */\nconst onDelete = (r: SysOrg) =>\n confirm({\n content: t('org.deleteConfirm', { name: r.name }),\n type: 'error',\n action: () => orgApi.remove(r.id),\n successMsg: t('org.deleted'),\n }).then(ok => {\n if (ok) load()\n })\n\nconst columns: SmartTableColumn<Tree<SysOrg>>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n // 树列左对齐,展开缩进才好读;fixed 是为了横向滚动时不丢失「这是哪一行」。\n {\n title: () => t('org.name'),\n key: 'name',\n align: 'left',\n minWidth: 220,\n fixed: 'left',\n ellipsis: { tooltip: true },\n },\n { title: () => t('org.code'), key: 'code', ellipsis: { tooltip: true } },\n {\n title: () => t('org.category'),\n key: 'category',\n width: 100,\n render: r => h(DictTag, { typeCode: 'org_category', value: r.category }),\n },\n { title: () => t('org.sort'), key: 'sort', width: 80 },\n {\n title: () => t('common.status'),\n key: 'enabled',\n width: 90,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n disabled: !authStore.hasPerm('PUT:/api/v1/sys/org/{id}'),\n request: (next: boolean) => orgApi.update(r.id, { ...toInput(r), enabled: next }),\n // 重拉而非往行对象上写:搜索态下的祖先行是 filterTree 的浅拷贝,写它不会回到源树(开关会弹回去)。\n // StatusSwitch 是悲观更新(请求成功才 emit),所以这里重拉一次就是最终态,和本页其余变更的做法一致。\n 'onUpdate:value': () => load(),\n }),\n },\n // 操作收敛成「编辑 + 更多▾」:4 个操作塞 260px 会换行、行高参差,且没 fixed 时横向滚动够不着。\n {\n title: () => t('common.operation'),\n key: 'op',\n width: 150,\n fixed: 'right',\n render: r => {\n // 每个操作按各自权限码显隐;更多▾下拉只保留已授权项,全无则不出下拉。\n const dropdownOptions = [\n authStore.hasPerm('POST:/api/v1/sys/org/add')\n ? { key: 'addChild', label: t('org.addChild') }\n : null,\n authStore.hasPerm('POST:/api/v1/sys/org/{id}/copy')\n ? { key: 'copy', label: t('org.copy') }\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/org/{id}')\n ? { key: 'delete', label: t('common.delete') }\n : null,\n ].filter((o): o is { key: string; label: string } => o !== null)\n return h(NSpace, { size: 2, wrapItem: false, justify: 'center' }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/org/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n dropdownOptions.length\n ? h(\n NDropdown,\n {\n trigger: 'click',\n options: dropdownOptions,\n onSelect: (key: string) => {\n if (key === 'addChild') openAdd(r.id)\n else if (key === 'copy') openCopy(r)\n else onDelete(r)\n },\n },\n () => h(NButton, { size: 'small', quaternary: true }, () => t('common.more')),\n )\n : null,\n ])\n },\n },\n]\n</script>\n\n<template>\n <div class=\"view fill-page\">\n <!-- expanded-row-keys / update:expanded-row-keys 不是 SmartTable 的 prop —— 它 inheritAttrs:false + v-bind=\"attrs\",\n 未声明的 attr 原样透传给内层 n-data-table(:loading 走的也是这条路)。 -->\n <SmartTable\n :default-page-size=\"100\"\n :columns=\"columns\"\n :data=\"filteredTree\"\n :loading=\"loading\"\n row-key=\"id\"\n :pagination=\"false\"\n :toolbar=\"{ refresh: false }\"\n flex-height\n virtual-scroll\n storage-key=\"sys-org\"\n :expanded-row-keys=\"expandedKeys\"\n @update:expanded-row-keys=\"(keys: number[]) => (expandedKeys = keys)\"\n >\n <template #toolbar>\n <n-input\n v-model:value=\"keyword\"\n clearable\n :placeholder=\"t('org.searchPlaceholder')\"\n style=\"width: 220px\"\n >\n <template #prefix><AppIcon icon=\"ph:magnifying-glass\" :size=\"16\" /></template>\n </n-input>\n <n-button quaternary :loading=\"loading\" @click=\"load\">\n <template #icon><AppIcon icon=\"ph:arrow-clockwise\" :size=\"16\" /></template>\n </n-button>\n <n-button quaternary @click=\"toggleExpandAll\">\n <template #icon>\n <AppIcon\n :icon=\"allExpanded ? 'ph:arrows-in-line-vertical' : 'ph:arrows-out-line-vertical'\"\n :size=\"16\"\n />\n </template>\n {{ allExpanded ? t('common.collapseAll') : t('common.expandAll') }}\n </n-button>\n <n-button v-auth=\"'POST:/api/v1/sys/org/add'\" type=\"primary\" @click=\"openAdd(0)\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n </template>\n </SmartTable>\n\n <FormContainer\n v-model:show=\"show\"\n :title=\"editingId === null ? t('org.addTitle') : t('org.editTitle')\"\n :width=\"480\"\n :on-confirm=\"save\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form ref=\"formRef\" :model=\"form\" :rules=\"rules\" label-placement=\"left\" :label-width=\"80\">\n <n-form-item :label=\"t('org.parent')\">\n <OrgTreeSelect\n v-model:value=\"form.parentId\"\n clearable\n :exclude-subtree-of=\"editingId\"\n :placeholder=\"t('org.parentPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('org.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('org.code')\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('org.codePlaceholder')\"\n :disabled=\"editingId !== null\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.category')\">\n <DictSelect\n v-model:value=\"form.category\"\n type-code=\"org_category\"\n clearable\n :placeholder=\"t('org.categoryPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.sort')\">\n <n-input-number v-model:value=\"form.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"form.enabled\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n\n <n-modal v-model:show=\"copyShow\" :mask-closable=\"false\">\n <n-card\n :title=\"t('org.copyTitle')\"\n style=\"width: 420px\"\n :bordered=\"false\"\n closable\n @close=\"copyShow = false\"\n >\n <p style=\"margin: 0 0 12px\">{{ t('org.copyConfirm', { name: copySourceName }) }}</p>\n <n-input v-model:value=\"copyName\" :placeholder=\"t('org.copyNameLabel')\" />\n <template #action>\n <n-space justify=\"end\">\n <n-button @click=\"copyShow = false\">{{ t('common.cancel') }}</n-button>\n <n-button type=\"primary\" @click=\"confirmCopy\">{{ t('common.confirm') }}</n-button>\n </n-space>\n </template>\n </n-card>\n </n-modal>\n </div>\n</template>\n\n<style scoped>\n/* display / flex-direction / 整屏高度链都在 styles/layout.css 的 .fill-page,这里只留卡片间距。 */\n.view {\n gap: var(--gap-card);\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","run","confirm","useConfirm","authStore","useAuthStore","loading","ref","tree","shallowRef","load","buildTree","orgApi","e","translateError","onMounted","keyword","filteredTree","computed","kw","filterTree","n","expandedKeys","watch","next","expandableIds","allExpanded","toggleExpandAll","show","formRef","editingId","rules","blank","form","reactive","toInput","r","openAdd","parentId","openEdit","save","_a","payload","copyShow","copyId","copySourceName","copyName","openCopy","confirmCopy","onDelete","ok","columns","h","DictTag","StatusSwitch","dropdownOptions","o","NSpace","NButton","NDropdown","key","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","SmartTable","_cache","keys","NInput","$event","AppIcon","_createTextVNode","_toDisplayString","_createBlock","FormContainer","NForm","NFormItem","OrgTreeSelect","DictSelect","NInputNumber","NSwitch","NModal","NCard","_createElementVNode","_hoisted_2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/org/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 机构管理 = 树表:SmartTable 远程模式(fetcher)+ children 树模式(无分页)。\n// org list 平铺 → buildTree 拼 children;上级机构用 OrgTreeSelect(剪自身子树防成环);\n// 无独立启停端点,StatusSwitch 走全量 update;删除有子机构后端拒,前端照调由 translateError 弹码。\nimport { computed, h, reactive, ref, shallowRef } from 'vue'\nimport {\n NButton,\n NSpace,\n NForm,\n NFormItem,\n NInput,\n NInputNumber,\n NSwitch,\n NDropdown,\n NModal,\n useMessage,\n type DropdownDividerOption,\n type DropdownOption,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport {\n SmartTable,\n type SmartTableColumn,\n type SmartTableFetcher,\n type SmartTableInst,\n} from 'smart-naive-table'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport DictSelect from '#/components/DictSelect/index.vue'\nimport DictTag from '#/components/DictTag/index.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport OrgTreeSelect from '#/components/OrgTreeSelect/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { orgApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { translateError } from '#/utils/error'\nimport { SEARCH_ACTIONS, deriveHeaderFilters } from '#/utils/tableFilter'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport { buildTree, expandableIds, type Tree } from '#/utils/tree'\nimport { filterTreeByParams, type TreeSearchFields } from '#/utils/treeFilter'\nimport type { OrgInput, SysOrg } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run, confirm } = useConfirm()\nconst authStore = useAuthStore()\n\nconst loading = ref(false)\n// 整份替换 + 只读(行内改动一律重拉,不往节点上写值),不需要深响应\nconst tree = shallowRef<Tree<SysOrg>[]>([])\n\n/** 从服务端拉全量机构并拼成树。只由 treeFetcher 调用:增删改后一律走 `reload()`(让表格重新取数),不要直接调它。 */\nasync function load() {\n loading.value = true\n try {\n tree.value = buildTree(await orgApi.list())\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\n\n// ── 取数 + 搜索 + 展开控制 ─────────────────────────────────────────\n// 树表用远程模式:3.0 静态模式的条件过滤是平铺的 rows.filter,不递归 children,在树上只会命中顶层行。\n// 所以 fetcher 自己递归过滤,条件构造器只负责收集条件(全局序列化器摊平成 { name, code })。\n// 取数器每次都重新拉一遍服务端:工具栏内置的刷新图标只会重新调 fetcher,\n// 如果这里只过滤内存里的旧树,点刷新就是假刷新(别人新建的机构永远出不来)。机构是全量小表,多拉一次无所谓。\n// 首次进入也由它取数(immediate),所以页面不需要 onMounted(load),也就没有「树还没加载就先过滤出空表」的窗口。\nconst tableRef = ref<SmartTableInst<Tree<SysOrg>>>()\nconst reload = () => tableRef.value?.refresh()\n\nconst SEARCH_FIELDS: TreeSearchFields<Tree<SysOrg>> = {\n name: n => n.name,\n code: n => n.code,\n}\nconst treeFetcher: SmartTableFetcher<Tree<SysOrg>> = async params => {\n await load()\n const items = filterTreeByParams(tree.value, params, SEARCH_FIELDS)\n return { items, total: items.length }\n}\n\n// 展开受控:一旦传了 expanded-row-keys,naive 就以它为准,default-expand-all 会被初始值直接覆盖成\"全折叠\",\n// 所以\"默认全展开\"得自己播种。每次取数完成(首次进入、搜索、清除条件、增删改后重拉)都按结果重算,\n// 否则命中结果藏在折叠的祖先里看不见 —— filterTree 保留的祖先链就是靠它全部展开的。\nconst expandedKeys = ref<number[]>([])\n// 取数器返回的(已过滤的)树:「展开全部」要按它算,而不是按整棵树。\nconst visibleTree = shallowRef<Tree<SysOrg>[]>([])\nfunction onLoaded(rows: Tree<SysOrg>[]) {\n visibleTree.value = rows\n expandedKeys.value = expandableIds(rows)\n}\n\nconst allExpanded = computed(() => expandedKeys.value.length > 0)\nconst toggleExpandAll = () =>\n (expandedKeys.value = allExpanded.value ? [] : expandableIds(visibleTree.value))\n\n// ── 弹窗表单(parentId 可空:OrgTreeSelect clearable → null,save 时归一为 0=根)──\ninterface OrgForm {\n parentId: number | null\n name: string\n code: string\n category: string | null\n sort: number\n enabled: boolean\n}\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n name: {\n required: true,\n whitespace: true,\n message: () => t('org.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): OrgForm => ({\n parentId: 0,\n name: '',\n code: '',\n category: null,\n sort: 0,\n enabled: true,\n})\nconst form = reactive<OrgForm>(blank())\n\n// 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。\nconst toInput = (r: SysOrg): OrgInput => ({\n parentId: r.parentId,\n name: r.name,\n code: r.code,\n category: r.category ?? null,\n sort: r.sort,\n enabled: r.enabled,\n})\n\nfunction openAdd(parentId = 0) {\n editingId.value = null\n Object.assign(form, blank(), { parentId })\n show.value = true\n}\nfunction openEdit(r: SysOrg) {\n editingId.value = r.id\n Object.assign(form, toInput(r))\n show.value = true\n}\n\n/** FormContainer onConfirm:校验失败 reject / API 失败 return false → 弹层不关;成功正常返回自动关。 */\nasync function save() {\n await formRef.value?.validate()\n try {\n const payload: OrgInput = { ...form, parentId: form.parentId ?? 0 }\n if (editingId.value === null) await orgApi.add(payload)\n else await orgApi.update(editingId.value, payload)\n message.success(t('org.saved'))\n await reload()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n\n// ── 复制弹窗 ──────────────────────────────────────────────────────\nconst copyShow = ref(false)\nconst copyId = ref(0)\nconst copySourceName = ref('')\nconst copyName = ref('')\n\nfunction openCopy(r: SysOrg) {\n copyId.value = r.id\n copySourceName.value = r.name\n copyName.value = r.name + t('common.copySuffix')\n copyShow.value = true\n}\nasync function confirmCopy() {\n const ok = await run(() => orgApi.copy(copyId.value, { name: copyName.value }), t('org.copied'))\n if (ok) {\n copyShow.value = false\n reload()\n }\n}\n\n/** 删除:下拉菜单项不适合内联 popconfirm,走 useConfirm().confirm 的 dialog(它的设计用途)。 */\nconst onDelete = (r: SysOrg) =>\n confirm({\n content: t('org.deleteConfirm', { name: r.name }),\n type: 'error',\n action: () => orgApi.remove(r.id),\n successMsg: t('org.deleted'),\n }).then(ok => {\n if (ok) reload()\n })\n\n// 下拉菜单项的线条图标\nconst menuIcon = (name: string) => () => h(AppIcon, { icon: name, size: 16 })\n\nconst columns: SmartTableColumn<Tree<SysOrg>>[] = [\n // 序号与树列同固定左侧:固定列必须在最左连续,否则横向滚动时树列会压在序号列上。\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center', fixed: 'left' },\n // 树列左对齐,展开缩进才好读;fixed 是为了横向滚动时不丢失「这是哪一行」。\n {\n title: () => t('org.name'),\n key: 'name',\n align: 'left',\n minWidth: 260,\n fixed: 'left',\n ellipsis: { tooltip: true },\n search: { actions: SEARCH_ACTIONS.fuzzy },\n },\n {\n title: () => t('org.code'),\n key: 'code',\n ellipsis: { tooltip: true },\n render: r => h('span', { class: 'mono muted' }, r.code),\n search: { actions: SEARCH_ACTIONS.fuzzy },\n },\n {\n title: () => t('org.category'),\n key: 'category',\n width: 100,\n render: r => h(DictTag, { typeCode: 'org_category', value: r.category }),\n },\n {\n title: () => t('org.sort'),\n key: 'sort',\n width: 80,\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 disabled: !authStore.hasPerm('PUT:/api/v1/sys/org/{id}'),\n request: (next: boolean) => orgApi.update(r.id, { ...toInput(r), enabled: next }),\n // 重拉而非往行对象上写:搜索态下的祖先行是 filterTree 的浅拷贝,写它不会回到源树(开关会弹回去)。\n // StatusSwitch 是悲观更新(请求成功才 emit),所以这里重拉一次就是最终态,和本页其余变更的做法一致。\n 'onUpdate:value': () => reload(),\n }),\n },\n // 操作收敛成「编辑 + 更多▾」:4 个操作塞 260px 会换行、行高参差,且没 fixed 时横向滚动够不着。\n {\n title: () => t('common.operation'),\n key: 'op',\n width: 150,\n fixed: 'right',\n render: r => {\n // 每个操作按各自权限码显隐;更多▾下拉只保留已授权项,全无则不出下拉。\n // 菜单项带线条图标;删除是破坏性操作,前面隔一条分割线并用错误色。\n const canAdd = authStore.hasPerm('POST:/api/v1/sys/org/add')\n const canCopy = authStore.hasPerm('POST:/api/v1/sys/org/{id}/copy')\n const canDelete = authStore.hasPerm('DELETE:/api/v1/sys/org/{id}')\n const rawOptions: (DropdownOption | DropdownDividerOption | null)[] = [\n canAdd ? { key: 'addChild', label: t('org.addChild'), icon: menuIcon('ph:plus') } : null,\n canCopy ? { key: 'copy', label: t('org.copy'), icon: menuIcon('ph:copy') } : null,\n (canAdd || canCopy) && canDelete ? { type: 'divider', key: 'divider' } : null,\n canDelete\n ? {\n key: 'delete',\n label: t('common.delete'),\n icon: menuIcon('ph:trash'),\n props: { style: 'color: var(--err)' },\n }\n : null,\n ]\n const dropdownOptions = rawOptions.filter(\n (o): o is DropdownOption | DropdownDividerOption => o !== null,\n )\n return h(NSpace, { size: 2, wrapItem: false, justify: 'center' }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/org/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n dropdownOptions.length\n ? h(\n NDropdown,\n {\n trigger: 'click',\n options: dropdownOptions,\n onSelect: (key: string) => {\n if (key === 'addChild') openAdd(r.id)\n else if (key === 'copy') openCopy(r)\n else onDelete(r)\n },\n },\n () =>\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', iconPlacement: 'right' },\n {\n default: () => t('common.more'),\n icon: () => h(AppIcon, { icon: 'ph:caret-down', size: 12 }),\n },\n ),\n )\n : null,\n ])\n },\n },\n]\nderiveHeaderFilters(columns)\n</script>\n\n<template>\n <div class=\"view fill-page\">\n <!-- expanded-row-keys / update:expanded-row-keys 不是 SmartTable 的 prop —— 它 inheritAttrs:false + v-bind=\"attrs\",\n 未声明的 attr 原样透传给内层 n-data-table(:loading 走的也是这条路)。\n card-on-narrow:卡片宽 < 600 换成卡片列表(树的缩进与展开状态库照旧带上,expanded-row-keys 照常生效)。 -->\n <SmartTable\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"treeFetcher\"\n :loading=\"loading\"\n row-key=\"id\"\n :pagination=\"false\"\n :search=\"{ container: 'table' }\"\n :toolbar=\"TABLE_TOOLBAR\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"sys-org\"\n :expanded-row-keys=\"expandedKeys\"\n @update:expanded-row-keys=\"(keys: number[]) => (expandedKeys = keys)\"\n @loaded=\"onLoaded\"\n >\n <template #toolbar-right>\n <n-button secondary @click=\"toggleExpandAll\">\n <template #icon>\n <AppIcon\n :icon=\"allExpanded ? 'ph:arrows-in-line-vertical' : 'ph:arrows-out-line-vertical'\"\n :size=\"16\"\n />\n </template>\n {{ allExpanded ? t('common.collapseAll') : t('common.expandAll') }}\n </n-button>\n <n-button v-auth=\"'POST:/api/v1/sys/org/add'\" type=\"primary\" @click=\"openAdd(0)\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n </template>\n </SmartTable>\n\n <FormContainer\n v-model:show=\"show\"\n :title=\"editingId === null ? t('org.addTitle') : t('org.editTitle')\"\n :width=\"480\"\n :on-confirm=\"save\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form ref=\"formRef\" :model=\"form\" :rules=\"rules\" label-placement=\"left\" :label-width=\"80\">\n <n-form-item :label=\"t('org.parent')\">\n <OrgTreeSelect\n v-model:value=\"form.parentId\"\n clearable\n :exclude-subtree-of=\"editingId\"\n :placeholder=\"t('org.parentPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('org.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('org.code')\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('org.codePlaceholder')\"\n :disabled=\"editingId !== null\"\n />\n <template v-if=\"editingId !== null\" #feedback>\n <span class=\"form-hint\">{{ t('org.codeImmutableHint') }}</span>\n </template>\n </n-form-item>\n <n-form-item :label=\"t('org.category')\">\n <DictSelect\n v-model:value=\"form.category\"\n type-code=\"org_category\"\n clearable\n :placeholder=\"t('org.categoryPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.sort')\">\n <n-input-number v-model:value=\"form.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"form.enabled\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n\n <!-- 复制机构:居中小弹窗,遮罩不可关,右上角 × 可关 -->\n <n-modal\n v-model:show=\"copyShow\"\n preset=\"card\"\n :title=\"t('org.copyTitle')\"\n style=\"width: min(420px, calc(100vw - 24px))\"\n :bordered=\"false\"\n :mask-closable=\"false\"\n :segmented=\"{ footer: 'soft' }\"\n >\n <p class=\"copy-tip\">{{ t('org.copyConfirm', { name: copySourceName }) }}</p>\n <n-form label-placement=\"top\" require-mark-placement=\"left\">\n <n-form-item :label=\"t('org.copyNameLabel')\">\n <n-input v-model:value=\"copyName\" :placeholder=\"t('org.copyNameLabel')\" />\n </n-form-item>\n </n-form>\n <template #footer>\n <n-space justify=\"end\">\n <n-button secondary @click=\"copyShow = false\">{{ t('common.cancel') }}</n-button>\n <n-button type=\"primary\" @click=\"confirmCopy\">{{ t('common.confirm') }}</n-button>\n </n-space>\n </template>\n </n-modal>\n </div>\n</template>\n\n<style scoped>\n/* display / flex-direction / 整屏高度链都在 styles/layout.css 的 .fill-page,这里只留卡片间距。 */\n.view {\n gap: var(--gap-card);\n}\n\n/* 编码「创建后不可修改」提示,挂在表单项的 feedback 位 */\n.form-hint {\n font-size: 13px;\n color: var(--text-3);\n}\n\n/* 复制弹窗说明文字 */\n.copy-tip {\n margin: 0 0 14px;\n font-size: 14px;\n line-height: 1.6;\n color: var(--text-2);\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","run","confirm","useConfirm","authStore","useAuthStore","loading","ref","tree","shallowRef","load","buildTree","orgApi","translateError","tableRef","reload","_a","SEARCH_FIELDS","n","treeFetcher","params","items","filterTreeByParams","expandedKeys","visibleTree","onLoaded","rows","expandableIds","allExpanded","computed","toggleExpandAll","show","formRef","editingId","rules","blank","form","reactive","toInput","r","openAdd","parentId","openEdit","save","payload","e","copyShow","copyId","copySourceName","copyName","openCopy","confirmCopy","onDelete","ok","menuIcon","name","h","AppIcon","columns","SEARCH_ACTIONS","DictTag","StatusSwitch","next","canAdd","canCopy","canDelete","dropdownOptions","o","NSpace","NButton","NDropdown","key","deriveHeaderFilters","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_cache","keys","_createTextVNode","_toDisplayString","_createBlock","FormContainer","$event","NForm","NFormItem","OrgTreeSelect","NInput","_createElementVNode","_hoisted_2","DictSelect","NInputNumber","NSwitch","NModal","_hoisted_3"],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import o from "./index2.vue.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import t from "../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
+
const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-73d8eaa2"]]);
|
|
2
5
|
export {
|
|
3
|
-
|
|
6
|
+
m as default
|
|
4
7
|
};
|
|
5
8
|
//# sourceMappingURL=index.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,60 +1,81 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useMessage as
|
|
3
|
-
import { useI18n as
|
|
4
|
-
import { SmartTable as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { defineComponent as R, ref as c, h as m, reactive as U, resolveDirective as B, openBlock as T, createElementBlock as O, Fragment as z, createVNode as r, unref as e, withCtx as l, withDirectives as q, createBlock as H, createTextVNode as D, toDisplayString as N, createSlots as F, createElementVNode as L } from "vue";
|
|
2
|
+
import { useMessage as j, NSpace as V, NButton as y, NPopconfirm as $, NForm as M, NFormItem as f, NInput as E, NInputNumber as G, NSwitch as W } from "naive-ui";
|
|
3
|
+
import { useI18n as J } from "vue-i18n";
|
|
4
|
+
import { SmartTable as K } from "smart-naive-table";
|
|
5
|
+
import Q from "../../../components/AppIcon.vue.js";
|
|
6
|
+
import X from "../../../components/FormContainer/index.vue.js";
|
|
7
7
|
/* empty css */
|
|
8
|
-
import
|
|
9
|
-
import { useConfirm as
|
|
8
|
+
import Y from "../../../components/StatusSwitch/index.vue.js";
|
|
9
|
+
import { useConfirm as Z } from "../../../composables/useConfirm.js";
|
|
10
10
|
import { positionApi as u } from "../../../api/index.js";
|
|
11
|
-
import { useAuthStore as
|
|
12
|
-
import { translateError as
|
|
13
|
-
|
|
11
|
+
import { useAuthStore as ee } from "../../../stores/auth.js";
|
|
12
|
+
import { translateError as I } from "../../../utils/error.js";
|
|
13
|
+
import { SEARCH_ACTIONS as te, deriveHeaderFilters as oe } from "../../../utils/tableFilter.js";
|
|
14
|
+
import { TABLE_MIN_ROW_HEIGHT as ae, TABLE_TOOLBAR as ie } from "../../../utils/tableToolbar.js";
|
|
15
|
+
import ne from "../../../components/TableTotal/index.vue.js";
|
|
16
|
+
const re = { class: "form-hint" }, Te = /* @__PURE__ */ R({
|
|
14
17
|
__name: "index",
|
|
15
|
-
setup(
|
|
16
|
-
const { t } =
|
|
17
|
-
name:
|
|
18
|
-
code:
|
|
19
|
-
sort:
|
|
20
|
-
enabled:
|
|
21
|
-
}),
|
|
18
|
+
setup(le) {
|
|
19
|
+
const { t } = J(), v = j(), { run: x } = Z(), h = ee(), b = c(), g = (o) => ({
|
|
20
|
+
name: o.name,
|
|
21
|
+
code: o.code,
|
|
22
|
+
sort: o.sort,
|
|
23
|
+
enabled: o.enabled
|
|
24
|
+
}), w = [
|
|
22
25
|
{ type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
|
|
23
|
-
{
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
{
|
|
27
|
+
key: "name",
|
|
28
|
+
title: () => t("position.name"),
|
|
29
|
+
search: { actions: te.fuzzy },
|
|
30
|
+
sorter: !0
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
key: "code",
|
|
34
|
+
title: () => t("position.code"),
|
|
35
|
+
sorter: !0,
|
|
36
|
+
render: (o) => m("span", { class: "mono muted" }, o.code)
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: "sort",
|
|
40
|
+
title: () => t("position.sort"),
|
|
41
|
+
width: 80,
|
|
42
|
+
sorter: !0,
|
|
43
|
+
render: (o) => m("span", { class: "num muted" }, o.sort)
|
|
44
|
+
},
|
|
26
45
|
{
|
|
27
46
|
key: "enabled",
|
|
28
47
|
title: () => t("common.status"),
|
|
29
48
|
width: 90,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
49
|
+
sorter: !0,
|
|
50
|
+
render: (o) => m(Y, {
|
|
51
|
+
value: o.enabled,
|
|
52
|
+
disabled: !h.hasPerm("PUT:/api/v1/sys/position/{id}"),
|
|
53
|
+
request: (a) => u.update(o.id, { ...g(o), enabled: a }),
|
|
54
|
+
"onUpdate:value": (a) => {
|
|
55
|
+
o.enabled = a;
|
|
36
56
|
}
|
|
37
57
|
})
|
|
38
58
|
},
|
|
39
|
-
{ key: "createTime", title: () => t("common.createTime"), format: "datetime" },
|
|
59
|
+
{ key: "createTime", title: () => t("common.createTime"), format: "datetime", sorter: !0 },
|
|
40
60
|
{
|
|
41
61
|
key: "op",
|
|
42
62
|
title: () => t("common.operation"),
|
|
43
63
|
width: 140,
|
|
64
|
+
align: "right",
|
|
44
65
|
fixed: "right",
|
|
45
66
|
hideInSetting: !0,
|
|
46
|
-
render: (
|
|
47
|
-
|
|
67
|
+
render: (o) => m(V, { size: 2, wrapItem: !1, justify: "end" }, () => [
|
|
68
|
+
h.hasPerm("PUT:/api/v1/sys/position/{id}") ? m(
|
|
48
69
|
y,
|
|
49
|
-
{ size: "small", quaternary: !0, type: "primary", onClick: () =>
|
|
70
|
+
{ size: "small", quaternary: !0, type: "primary", onClick: () => P(o) },
|
|
50
71
|
() => t("common.edit")
|
|
51
72
|
) : null,
|
|
52
|
-
|
|
53
|
-
|
|
73
|
+
h.hasPerm("DELETE:/api/v1/sys/position/{id}") ? m(
|
|
74
|
+
$,
|
|
54
75
|
{
|
|
55
|
-
onPositiveClick: () =>
|
|
76
|
+
onPositiveClick: () => x(() => u.remove(o.id), t("position.deleted")).then((a) => {
|
|
56
77
|
var d;
|
|
57
|
-
|
|
78
|
+
a && ((d = b.value) == null || d.refresh());
|
|
58
79
|
})
|
|
59
80
|
},
|
|
60
81
|
{
|
|
@@ -63,61 +84,68 @@ const pe = /* @__PURE__ */ E({
|
|
|
63
84
|
{ size: "small", quaternary: !0, type: "error" },
|
|
64
85
|
() => t("common.delete")
|
|
65
86
|
),
|
|
66
|
-
default: () => t("position.deleteConfirm", { name:
|
|
87
|
+
default: () => t("position.deleteConfirm", { name: o.name })
|
|
67
88
|
}
|
|
68
89
|
) : null
|
|
69
90
|
])
|
|
70
91
|
}
|
|
71
|
-
]
|
|
92
|
+
];
|
|
93
|
+
oe(w);
|
|
94
|
+
const p = c(!1), _ = c(null), s = c(null), S = {
|
|
72
95
|
name: {
|
|
73
96
|
required: !0,
|
|
74
97
|
whitespace: !0,
|
|
75
98
|
message: () => t("position.nameRequired"),
|
|
76
99
|
trigger: ["input", "blur"]
|
|
77
100
|
}
|
|
78
|
-
}, k = () => ({ name: "", code: "", sort: 0, enabled: !0 }), i =
|
|
79
|
-
function
|
|
101
|
+
}, k = () => ({ name: "", code: "", sort: 0, enabled: !0 }), i = U(k());
|
|
102
|
+
function C() {
|
|
80
103
|
s.value = null, Object.assign(i, k()), p.value = !0;
|
|
81
104
|
}
|
|
82
|
-
function
|
|
83
|
-
s.value =
|
|
105
|
+
function P(o) {
|
|
106
|
+
s.value = o.id, Object.assign(i, g(o)), p.value = !0;
|
|
84
107
|
}
|
|
85
|
-
async function
|
|
86
|
-
var
|
|
87
|
-
await ((
|
|
108
|
+
async function A() {
|
|
109
|
+
var o, a;
|
|
110
|
+
await ((o = _.value) == null ? void 0 : o.validate());
|
|
88
111
|
try {
|
|
89
|
-
s.value === null ? await u.add({ ...i }) : await u.update(s.value, { ...i }), v.success(t("position.saved")), await ((
|
|
112
|
+
s.value === null ? await u.add({ ...i }) : await u.update(s.value, { ...i }), v.success(t("position.saved")), await ((a = b.value) == null ? void 0 : a.refresh());
|
|
90
113
|
} catch (d) {
|
|
91
|
-
return v.error(
|
|
114
|
+
return v.error(I(d)), !1;
|
|
92
115
|
}
|
|
93
116
|
}
|
|
94
|
-
return (
|
|
95
|
-
const d =
|
|
96
|
-
return
|
|
97
|
-
|
|
98
|
-
|
|
117
|
+
return (o, a) => {
|
|
118
|
+
const d = B("auth");
|
|
119
|
+
return T(), O(z, null, [
|
|
120
|
+
r(e(K), {
|
|
121
|
+
toolbar: e(ie),
|
|
99
122
|
ref_key: "tableRef",
|
|
100
|
-
ref:
|
|
101
|
-
columns:
|
|
123
|
+
ref: b,
|
|
124
|
+
columns: w,
|
|
102
125
|
fetcher: e(u).page,
|
|
103
|
-
|
|
104
|
-
"
|
|
126
|
+
search: { container: "table" },
|
|
127
|
+
"fill-height": "",
|
|
128
|
+
"min-row-height": e(ae),
|
|
129
|
+
"card-on-narrow": "",
|
|
105
130
|
"storage-key": "sys-position",
|
|
106
|
-
onError:
|
|
131
|
+
onError: a[0] || (a[0] = (n) => e(v).error(e(I)(n)))
|
|
107
132
|
}, {
|
|
108
|
-
|
|
109
|
-
|
|
133
|
+
"pagination-prefix": l(({ itemCount: n }) => [
|
|
134
|
+
r(ne, { count: n }, null, 8, ["count"])
|
|
135
|
+
]),
|
|
136
|
+
"toolbar-right": l(() => [
|
|
137
|
+
q((T(), H(e(y), {
|
|
110
138
|
type: "primary",
|
|
111
|
-
onClick:
|
|
139
|
+
onClick: C
|
|
112
140
|
}, {
|
|
113
|
-
icon:
|
|
114
|
-
|
|
141
|
+
icon: l(() => [
|
|
142
|
+
r(Q, {
|
|
115
143
|
icon: "ph:plus",
|
|
116
144
|
size: 16
|
|
117
145
|
})
|
|
118
146
|
]),
|
|
119
|
-
default:
|
|
120
|
-
|
|
147
|
+
default: l(() => [
|
|
148
|
+
D(" " + N(e(t)("common.add")), 1)
|
|
121
149
|
]),
|
|
122
150
|
_: 1
|
|
123
151
|
})), [
|
|
@@ -125,72 +153,80 @@ const pe = /* @__PURE__ */ E({
|
|
|
125
153
|
])
|
|
126
154
|
]),
|
|
127
155
|
_: 1
|
|
128
|
-
}, 8, ["fetcher"]),
|
|
129
|
-
|
|
156
|
+
}, 8, ["toolbar", "fetcher", "min-row-height"]),
|
|
157
|
+
r(X, {
|
|
130
158
|
show: p.value,
|
|
131
|
-
"onUpdate:show":
|
|
159
|
+
"onUpdate:show": a[5] || (a[5] = (n) => p.value = n),
|
|
132
160
|
title: s.value === null ? e(t)("position.addTitle") : e(t)("position.editTitle"),
|
|
133
161
|
width: 480,
|
|
134
|
-
"on-confirm":
|
|
162
|
+
"on-confirm": A,
|
|
135
163
|
"confirm-text": e(t)("common.save")
|
|
136
164
|
}, {
|
|
137
|
-
default:
|
|
138
|
-
|
|
165
|
+
default: l(() => [
|
|
166
|
+
r(e(M), {
|
|
139
167
|
ref_key: "formRef",
|
|
140
|
-
ref:
|
|
168
|
+
ref: _,
|
|
141
169
|
model: i,
|
|
142
|
-
rules:
|
|
170
|
+
rules: S,
|
|
143
171
|
"label-placement": "left",
|
|
144
172
|
"label-width": 80
|
|
145
173
|
}, {
|
|
146
|
-
default:
|
|
147
|
-
|
|
174
|
+
default: l(() => [
|
|
175
|
+
r(e(f), {
|
|
148
176
|
label: e(t)("position.name"),
|
|
149
177
|
path: "name"
|
|
150
178
|
}, {
|
|
151
|
-
default:
|
|
152
|
-
|
|
179
|
+
default: l(() => [
|
|
180
|
+
r(e(E), {
|
|
153
181
|
value: i.name,
|
|
154
|
-
"onUpdate:value":
|
|
182
|
+
"onUpdate:value": a[1] || (a[1] = (n) => i.name = n),
|
|
155
183
|
placeholder: e(t)("position.name")
|
|
156
184
|
}, null, 8, ["value", "placeholder"])
|
|
157
185
|
]),
|
|
158
186
|
_: 1
|
|
159
187
|
}, 8, ["label"]),
|
|
160
|
-
|
|
188
|
+
r(e(f), {
|
|
161
189
|
label: e(t)("position.code"),
|
|
162
190
|
path: "code"
|
|
163
|
-
}, {
|
|
164
|
-
default:
|
|
165
|
-
|
|
191
|
+
}, F({
|
|
192
|
+
default: l(() => [
|
|
193
|
+
r(e(E), {
|
|
166
194
|
value: i.code,
|
|
167
|
-
"onUpdate:value":
|
|
195
|
+
"onUpdate:value": a[2] || (a[2] = (n) => i.code = n),
|
|
168
196
|
placeholder: e(t)("position.codePlaceholder"),
|
|
169
197
|
disabled: s.value !== null
|
|
170
198
|
}, null, 8, ["value", "placeholder", "disabled"])
|
|
171
199
|
]),
|
|
172
|
-
_:
|
|
173
|
-
},
|
|
174
|
-
|
|
200
|
+
_: 2
|
|
201
|
+
}, [
|
|
202
|
+
s.value !== null ? {
|
|
203
|
+
name: "feedback",
|
|
204
|
+
fn: l(() => [
|
|
205
|
+
L("span", re, N(e(t)("position.codeImmutableHint")), 1)
|
|
206
|
+
]),
|
|
207
|
+
key: "0"
|
|
208
|
+
} : void 0
|
|
209
|
+
]), 1032, ["label"]),
|
|
210
|
+
r(e(f), {
|
|
175
211
|
label: e(t)("position.sort")
|
|
176
212
|
}, {
|
|
177
|
-
default:
|
|
178
|
-
|
|
213
|
+
default: l(() => [
|
|
214
|
+
r(e(G), {
|
|
179
215
|
value: i.sort,
|
|
180
|
-
"onUpdate:value":
|
|
216
|
+
"onUpdate:value": a[3] || (a[3] = (n) => i.sort = n),
|
|
181
217
|
min: 0,
|
|
182
218
|
style: { width: "160px" }
|
|
183
219
|
}, null, 8, ["value"])
|
|
184
220
|
]),
|
|
185
221
|
_: 1
|
|
186
222
|
}, 8, ["label"]),
|
|
187
|
-
|
|
223
|
+
r(e(f), {
|
|
188
224
|
label: e(t)("common.status")
|
|
189
225
|
}, {
|
|
190
|
-
default:
|
|
191
|
-
|
|
226
|
+
default: l(() => [
|
|
227
|
+
r(e(W), {
|
|
192
228
|
value: i.enabled,
|
|
193
|
-
"onUpdate:value":
|
|
229
|
+
"onUpdate:value": a[4] || (a[4] = (n) => i.enabled = n)
|
|
194
230
|
}, null, 8, ["value"])
|
|
195
231
|
]),
|
|
196
232
|
_: 1
|
|
@@ -206,6 +242,6 @@ const pe = /* @__PURE__ */ E({
|
|
|
206
242
|
}
|
|
207
243
|
});
|
|
208
244
|
export {
|
|
209
|
-
|
|
245
|
+
Te as default
|
|
210
246
|
};
|
|
211
247
|
//# sourceMappingURL=index2.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/position/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 岗位管理 = 普通 SmartTable CRUD + 行内启停。岗位与机构无关联(PositionInput 无 orgId)。\n// 后端无独立启停端点 → StatusSwitch 走全量 update(同 module 页);code 编辑禁用。\nimport { h, reactive, ref } from 'vue'\nimport {\n NButton,\n NSpace,\n NInput,\n NInputNumber,\n NPopconfirm,\n NForm,\n NFormItem,\n NSwitch,\n useMessage,\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 { positionApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { translateError } from '#/utils/error'\nimport type { PositionInput, SysPosition } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysPosition>>()\n\n// 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。\nconst toInput = (r: SysPosition): PositionInput => ({\n name: r.name,\n code: r.code,\n sort: r.sort,\n enabled: r.enabled,\n})\n\nconst columns: SmartTableColumn<SysPosition>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n { key: 'name', title: () => t('position.name'), search: true },\n { key: 'code', title: () => t('position.code') },\n { key: 'sort', title: () => t('position.sort'), width: 80 },\n {\n key: 'enabled',\n title: () => t('common.status'),\n width: 90,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n disabled: !authStore.hasPerm('PUT:/api/v1/sys/position/{id}'),\n request: (next: boolean) => positionApi.update(r.id, { ...toInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n },\n }),\n },\n { key: 'createTime', title: () => t('common.createTime'), 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('PUT:/api/v1/sys/position/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/position/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => positionApi.remove(r.id), t('position.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('position.deleteConfirm', { name: r.name }),\n },\n )\n : null,\n ]),\n },\n]\n\n// ── 新增/编辑弹窗 ──\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n name: {\n required: true,\n whitespace: true,\n message: () => t('position.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): PositionInput => ({ name: '', code: '', sort: 0, enabled: true })\nconst form = reactive<PositionInput>(blank())\n\nfunction openAdd() {\n editingId.value = null\n Object.assign(form, blank())\n show.value = true\n}\nfunction openEdit(r: SysPosition) {\n editingId.value = r.id\n Object.assign(form, toInput(r))\n show.value = true\n}\nasync function save() {\n await formRef.value?.validate()\n try {\n if (editingId.value === null) await positionApi.add({ ...form })\n else await positionApi.update(editingId.value, { ...form })\n message.success(t('position.saved'))\n await tableRef.value?.refresh()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n</script>\n\n<template>\n <SmartTable\n :default-page-size=\"100\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"positionApi.page\"\n flex-height\n virtual-scroll\n storage-key=\"sys-position\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button v-auth=\"'POST:/api/v1/sys/position/add'\" type=\"primary\" @click=\"openAdd\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n </template>\n </SmartTable>\n\n <FormContainer\n v-model:show=\"show\"\n :title=\"editingId === null ? t('position.addTitle') : t('position.editTitle')\"\n :width=\"480\"\n :on-confirm=\"save\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form ref=\"formRef\" :model=\"form\" :rules=\"rules\" label-placement=\"left\" :label-width=\"80\">\n <n-form-item :label=\"t('position.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('position.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('position.code')\" path=\"code\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('position.codePlaceholder')\"\n :disabled=\"editingId !== null\"\n />\n </n-form-item>\n <n-form-item :label=\"t('position.sort')\">\n <n-input-number v-model:value=\"form.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"form.enabled\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n</template>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","tableRef","ref","toInput","r","columns","h","StatusSwitch","next","positionApi","v","NSpace","NButton","openEdit","NPopconfirm","ok","_a","show","formRef","editingId","rules","blank","form","reactive","openAdd","save","_b","e","translateError","_createVNode","_unref","SmartTable","_cache","_createBlock","AppIcon","_createTextVNode","FormContainer","$event","NForm","NFormItem","NInput","NInputNumber","NSwitch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/position/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 岗位管理 = 普通 SmartTable CRUD + 行内启停。岗位与机构无关联(PositionInput 无 orgId)。\n// 后端无独立启停端点 → StatusSwitch 走全量 update(同 module 页);code 编辑禁用。\nimport { h, reactive, ref } from 'vue'\nimport {\n NButton,\n NSpace,\n NInput,\n NInputNumber,\n NPopconfirm,\n NForm,\n NFormItem,\n NSwitch,\n useMessage,\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 { positionApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\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 { PositionInput, SysPosition } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysPosition>>()\n\n// 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。\nconst toInput = (r: SysPosition): PositionInput => ({\n name: r.name,\n code: r.code,\n sort: r.sort,\n enabled: r.enabled,\n})\n\nconst columns: SmartTableColumn<SysPosition>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'name',\n title: () => t('position.name'),\n search: { actions: SEARCH_ACTIONS.fuzzy },\n sorter: true,\n },\n {\n key: 'code',\n title: () => t('position.code'),\n sorter: true,\n render: r => h('span', { class: 'mono muted' }, r.code),\n },\n {\n key: 'sort',\n title: () => t('position.sort'),\n width: 80,\n sorter: true,\n render: r => h('span', { class: 'num muted' }, r.sort),\n },\n {\n key: 'enabled',\n title: () => t('common.status'),\n width: 90,\n sorter: true,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n disabled: !authStore.hasPerm('PUT:/api/v1/sys/position/{id}'),\n request: (next: boolean) => positionApi.update(r.id, { ...toInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n },\n }),\n },\n { key: 'createTime', title: () => t('common.createTime'), format: 'datetime', sorter: true },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 140,\n align: 'right',\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 2, wrapItem: false, justify: 'end' }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/position/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/position/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => positionApi.remove(r.id), t('position.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('position.deleteConfirm', { name: r.name }),\n },\n )\n : null,\n ]),\n },\n]\nderiveHeaderFilters(columns)\n\n// ── 新增/编辑弹窗 ──\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n name: {\n required: true,\n whitespace: true,\n message: () => t('position.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): PositionInput => ({ name: '', code: '', sort: 0, enabled: true })\nconst form = reactive<PositionInput>(blank())\n\nfunction openAdd() {\n editingId.value = null\n Object.assign(form, blank())\n show.value = true\n}\nfunction openEdit(r: SysPosition) {\n editingId.value = r.id\n Object.assign(form, toInput(r))\n show.value = true\n}\nasync function save() {\n await formRef.value?.validate()\n try {\n if (editingId.value === null) await positionApi.add({ ...form })\n else await positionApi.update(editingId.value, { ...form })\n message.success(t('position.saved'))\n await tableRef.value?.refresh()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n</script>\n\n<template>\n <SmartTable\n :toolbar=\"TABLE_TOOLBAR\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"positionApi.page\"\n :search=\"{ container: 'table' }\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"sys-position\"\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/position/add'\" type=\"primary\" @click=\"openAdd\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n </template>\n </SmartTable>\n\n <FormContainer\n v-model:show=\"show\"\n :title=\"editingId === null ? t('position.addTitle') : t('position.editTitle')\"\n :width=\"480\"\n :on-confirm=\"save\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form ref=\"formRef\" :model=\"form\" :rules=\"rules\" label-placement=\"left\" :label-width=\"80\">\n <n-form-item :label=\"t('position.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('position.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('position.code')\" path=\"code\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('position.codePlaceholder')\"\n :disabled=\"editingId !== null\"\n />\n <template v-if=\"editingId !== null\" #feedback>\n <span class=\"form-hint\">{{ t('position.codeImmutableHint') }}</span>\n </template>\n </n-form-item>\n <n-form-item :label=\"t('position.sort')\">\n <n-input-number v-model:value=\"form.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"form.enabled\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n</template>\n\n<style scoped>\n/* 编码「创建后不可修改」提示,挂在表单项的 feedback 位 */\n.form-hint {\n font-size: 13px;\n color: var(--text-3);\n}\n</style>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","tableRef","ref","toInput","r","columns","SEARCH_ACTIONS","h","StatusSwitch","next","positionApi","v","NSpace","NButton","openEdit","NPopconfirm","ok","_a","deriveHeaderFilters","show","formRef","editingId","rules","blank","form","reactive","openAdd","save","_b","e","translateError","_createVNode","_unref","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_cache","_withCtx","itemCount","TableTotal","_createBlock","AppIcon","_createTextVNode","FormContainer","$event","NForm","NFormItem","NInput","_createElementVNode","_hoisted_1","_toDisplayString","NInputNumber","NSwitch"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import o from "./index2.vue.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import t from "../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const
|
|
4
|
+
const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-701398fc"]]);
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
p as default
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=index.vue.js.map
|