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/job-log/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 执行记录 = 只读 SmartTable + 详情抽屉 + 终止/清空两个动作。\n// 「运行中」没有独立状态字段,判据是 endTime 为空(任务无 Running 态,全靠未闭合记录推导);\n// 终止是跨节点写旗标,目标节点最迟 KillPollSeconds 后停——所以文案说\"已请求终止\"而非\"已终止\"。\n// 详情抽屉里带同 fireInstanceId 的各次尝试列表:走后端的 fireInstanceId 查询参数直取,\n// 不按 jobId 拉一页再前端过滤——翻到老触发时那一页里根本没有它的兄弟行,列表会静默缺项。\nimport { computed, h, ref, watch } from 'vue'\nimport {\n NButton,\n NTag,\n NSelect,\n NSpace,\n NDataTable,\n NDrawer,\n NDrawerContent,\n NDescriptions,\n NDescriptionsItem,\n useMessage,\n type DataTableColumns,\n} from 'naive-ui'\nimport { useRoute } from 'vue-router'\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 { useConfirm } from '#/composables/useConfirm'\nimport { useAuthStore } from '#/stores/auth'\nimport { jobApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport { fmtDateTime } from '#/utils/format'\nimport { JobFireMode, JobRunStatus, type SysJobLog } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { confirm } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysJobLog>>()\n\n// 任务下拉(筛选用):拉一页足量。ponytail: 200 覆盖绝大多数系统,真超再上远程搜索\nconst jobOptions = ref<{ label: string; value: number }[]>([])\nasync function loadJobOptions() {\n try {\n const { items } = await jobApi.page({ page: 1, pageSize: 200 })\n jobOptions.value = items.map(j => ({ label: j.name, value: j.id }))\n } catch {\n // 静默:任务下拉是筛选辅助,拉取失败不打断列表\n }\n}\nvoid loadJobOptions()\n\nconst fireModeOptions = [\n {\n label: () => t('job.log.fireModeSchedule'),\n value: JobFireMode.Schedule,\n tagType: 'default' as const,\n },\n { label: () => t('job.log.fireModeManual'), value: JobFireMode.Manual, tagType: 'info' as const },\n {\n label: () => t('job.log.fireModeBackfill'),\n value: JobFireMode.Misfire,\n tagType: 'warning' as const,\n },\n {\n label: () => t('job.log.fireModeMisfireSkip'),\n value: JobFireMode.MissedSkipped,\n tagType: 'default' as const,\n },\n]\nconst runStatusOptions = [\n { label: () => t('job.log.running'), value: JobRunStatus.Running, tagType: 'info' as const },\n { label: () => t('job.log.success'), value: JobRunStatus.Success, tagType: 'success' as const },\n { label: () => t('job.log.failed'), value: JobRunStatus.Failed, tagType: 'error' as const },\n { label: () => t('job.log.timeout'), value: JobRunStatus.Timeout, tagType: 'warning' as const },\n {\n label: () => t('job.log.cancelled'),\n value: JobRunStatus.Cancelled,\n tagType: 'default' as const,\n },\n { label: () => t('job.log.skipped'), value: JobRunStatus.Skipped, tagType: 'default' as const },\n]\n\n/** 运行中(endTime 空)的行还没有耗时;已结束的显示毫秒。 */\nconst isAlive = (r: SysJobLog) => r.endTime == null\n\nconst columns: SmartTableColumn<SysJobLog>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'jobId',\n title: () => t('job.log.job'),\n hideInTable: true, // 只作搜索项:表格里已有任务名快照列\n options: jobOptions,\n search: { props: { clearable: true, filterable: true } },\n },\n { key: 'jobName', title: () => t('job.log.job'), minWidth: 140, ellipsis: { tooltip: true } },\n {\n key: 'fireMode',\n title: () => t('job.log.fireMode'),\n width: 100,\n tag: true,\n options: fireModeOptions,\n },\n { key: 'scheduledTime', title: () => t('job.log.scheduledTime'), width: 160, format: 'datetime' },\n {\n key: 'startTime',\n title: () => t('job.log.startTime'),\n width: 160,\n format: 'datetime',\n // 时间范围筛选:daterange 回传 [开始, 结束] 日期串,api 层拆成 StartFrom/StartTo 并补秒\n search: { type: 'daterange', key: 'startRange' },\n },\n {\n key: 'elapsedMs',\n title: () => t('job.log.elapsed'),\n width: 110,\n render: r =>\n isAlive(r)\n ? h(NTag, { size: 'small', type: 'info', bordered: false }, () => t('job.log.running'))\n : h('span', { class: 'tabular' }, `${r.elapsedMs} ms`),\n },\n {\n key: 'runStatus',\n title: () => t('job.log.runStatus'),\n width: 100,\n tag: true,\n search: true,\n options: runStatusOptions,\n },\n {\n key: 'retryIndex',\n title: () => t('job.log.retryIndex'),\n width: 90,\n align: 'center',\n render: r => (r.retryIndex > 0 ? r.retryIndex : '—'),\n },\n { key: 'nodeName', title: () => t('job.log.node'), width: 140, ellipsis: { tooltip: true } },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 130,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 4, wrapItem: false }, () => [\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openDetail(r) },\n () => t('common.detail'),\n ),\n isAlive(r) && authStore.hasPerm('POST:/api/v1/sys/job/log/{id}/kill')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'error', onClick: () => killRun(r) },\n () => t('job.log.kill'),\n )\n : null,\n ]),\n },\n]\n\n// 从任务页「记录」跳来时带 ?jobId=,自动带上筛选。\n// watch 而非 onMounted:页面被 keep-alive,标签开着时再跳一次只换 query,onMounted 不会再触发;\n// tableRef 一起纳入监听源,冷启动时实例就绪后补上筛选(immediate 在 setup 期 ref 还是空)。\nconst route = useRoute()\nwatch(\n [tableRef, () => route.query.jobId],\n ([inst, jobId]) => {\n if (!inst) return\n // route 是全局的:切到别的页面时 query.jobId 变 undefined,本页被 keep-alive 着的 watcher 照样会响。\n // 不守卫就等于「离开本页 = 清掉筛选并后台发一次没人看的请求」,切回来筛选还没了。\n if (route.path !== '/system/job-log') return\n const next = jobId == null ? undefined : Number(jobId)\n if (inst.params.jobId === next) return\n inst.params.jobId = next\n inst.search()\n },\n { immediate: true },\n)\n\n// ── 详情抽屉(行数据直填 + 同 fireInstanceId 的各次尝试) ──\nconst showDetail = ref(false)\nconst detailRow = ref<SysJobLog | null>(null)\nconst attempts = ref<SysJobLog[]>([])\nconst attemptsLoading = ref(false)\n\nconst runStatusTagType = {\n [JobRunStatus.Running]: 'info',\n [JobRunStatus.Success]: 'success',\n [JobRunStatus.Failed]: 'error',\n [JobRunStatus.Timeout]: 'warning',\n [JobRunStatus.Cancelled]: 'default',\n [JobRunStatus.Skipped]: 'default',\n} as const\nconst runStatusText = (s: JobRunStatus) => {\n const key = {\n 1: 'running',\n 2: 'success',\n 3: 'failed',\n 4: 'timeout',\n 5: 'cancelled',\n 6: 'skipped',\n }[s]\n return key ? t(`job.log.${key}`) : String(s)\n}\n\nconst attemptColumns: DataTableColumns<SysJobLog> = [\n {\n key: 'rowNo',\n title: () => t('common.rowNo'),\n width: 64,\n align: 'center',\n render: (_row, index) => index + 1,\n },\n {\n title: () => t('job.log.retryIndex'),\n key: 'retryIndex',\n width: 110,\n render: r =>\n r.retryIndex === 0 ? t('job.log.firstTry') : t('job.log.retryN', { n: r.retryIndex }),\n },\n {\n title: () => t('job.log.runStatus'),\n key: 'runStatus',\n width: 90,\n render: r =>\n h(NTag, { size: 'small', bordered: false, type: runStatusTagType[r.runStatus] }, () =>\n runStatusText(r.runStatus),\n ),\n },\n {\n title: () => t('job.log.startTime'),\n key: 'startTime',\n render: r => fmtDateTime(r.startTime),\n },\n {\n title: () => t('job.log.elapsed'),\n key: 'elapsedMs',\n width: 100,\n render: r => (isAlive(r) ? '—' : `${r.elapsedMs} ms`),\n },\n]\n\nasync function openDetail(r: SysJobLog) {\n detailRow.value = r\n showDetail.value = true\n attempts.value = []\n attemptsLoading.value = true\n try {\n const { items } = await jobApi.logPage({\n page: 1,\n pageSize: 100,\n fireInstanceId: r.fireInstanceId,\n })\n attempts.value = items.toSorted((a, b) => a.retryIndex - b.retryIndex)\n } catch {\n // 静默:尝试列表是详情的补充信息,拉不到不挡主体\n } finally {\n attemptsLoading.value = false\n }\n}\n\nfunction killRun(r: SysJobLog) {\n confirm({\n type: 'error',\n content: t('job.log.killConfirm', { name: r.jobName }),\n action: () => jobApi.kill(r.id),\n successMsg: t('job.log.killed'),\n }).then(ok => {\n if (ok) tableRef.value?.refresh()\n })\n}\n\n// ── 清空(弹窗选 beforeDays;0 = 全部) ──\nconst clearShow = ref(false)\nconst clearBeforeDays = ref(0)\n// computed:切语言时选项文案即时生效\nconst clearOptions = computed(() => [\n { label: t('job.log.clearAll'), value: 0 },\n ...[7, 30, 90].map(n => ({ label: t('job.log.beforeDays', { n }), value: n })),\n])\n\nasync function doClear() {\n try {\n const n = await jobApi.logClear({\n beforeDays: clearBeforeDays.value === 0 ? null : clearBeforeDays.value,\n })\n message.success(t('job.log.cleared', { n }))\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=\"jobApi.logPage\"\n flex-height\n virtual-scroll\n storage-key=\"sys-job-log\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button\n v-auth=\"'POST:/api/v1/sys/job/log/clear'\"\n type=\"error\"\n secondary\n @click=\"clearShow = true\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('job.log.clear') }}\n </n-button>\n </template>\n </SmartTable>\n\n <!-- 清空:选范围后执行,回报删除行数 -->\n <FormContainer\n v-model:show=\"clearShow\"\n :title=\"t('job.log.clearTitle')\"\n :width=\"420\"\n :on-confirm=\"doClear\"\n :confirm-text=\"t('common.confirm')\"\n >\n <div class=\"clear-body\">\n <n-select v-model:value=\"clearBeforeDays\" :options=\"clearOptions\" />\n <div class=\"clear-hint\">{{ t('job.log.clearHint') }}</div>\n </div>\n </FormContainer>\n\n <n-drawer v-model:show=\"showDetail\" :width=\"600\" placement=\"right\">\n <n-drawer-content :title=\"t('common.detail')\" closable>\n <template v-if=\"detailRow\">\n <n-descriptions label-placement=\"left\" :column=\"1\" bordered size=\"small\">\n <n-descriptions-item :label=\"t('job.log.job')\">\n {{ detailRow.jobName }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.fireMode')\">\n {{\n detailRow.fireMode === JobFireMode.Manual\n ? t('job.log.fireModeManual')\n : detailRow.fireMode === JobFireMode.Misfire\n ? t('job.log.fireModeBackfill')\n : detailRow.fireMode === JobFireMode.MissedSkipped\n ? t('job.log.fireModeMisfireSkip')\n : t('job.log.fireModeSchedule')\n }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.runStatus')\">\n <n-tag size=\"small\" :bordered=\"false\" :type=\"runStatusTagType[detailRow.runStatus]\">\n {{ runStatusText(detailRow.runStatus) }}\n </n-tag>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.scheduledTime')\">\n {{ fmtDateTime(detailRow.scheduledTime) }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.startTime')\">\n {{ fmtDateTime(detailRow.startTime) }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.elapsed')\">\n {{ detailRow.endTime == null ? t('job.log.running') : `${detailRow.elapsedMs} ms` }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.node')\">\n {{ detailRow.nodeName || '—' }}\n </n-descriptions-item>\n <n-descriptions-item v-if=\"detailRow.messageText\" :label=\"t('job.log.message')\">\n <pre class=\"log-output\">{{ detailRow.messageText }}</pre>\n </n-descriptions-item>\n <n-descriptions-item v-if=\"detailRow.errorText\" :label=\"t('job.log.error')\">\n <pre class=\"log-output log-error\">{{ detailRow.errorText }}</pre>\n </n-descriptions-item>\n </n-descriptions>\n\n <div class=\"attempts-title\">{{ t('job.log.attempts') }}</div>\n <n-data-table\n size=\"small\"\n :columns=\"attemptColumns\"\n :data=\"attempts\"\n :loading=\"attemptsLoading\"\n :row-key=\"(r: SysJobLog) => r.id\"\n :pagination=\"false\"\n />\n </template>\n </n-drawer-content>\n </n-drawer>\n</template>\n\n<style scoped>\n.clear-body {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n.clear-hint {\n font-size: 12px;\n color: var(--color-text-tertiary);\n}\n.attempts-title {\n margin: 16px 0 8px;\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.log-output {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-all;\n font-family: var(--font-family-mono, ui-monospace, monospace);\n font-size: 12px;\n line-height: 1.5;\n}\n.log-error {\n color: var(--color-danger);\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","confirm","useConfirm","authStore","useAuthStore","tableRef","ref","jobOptions","loadJobOptions","items","jobApi","j","fireModeOptions","JobFireMode","runStatusOptions","JobRunStatus","isAlive","r","columns","h","NTag","NSpace","NButton","openDetail","killRun","route","useRoute","watch","inst","jobId","next","showDetail","detailRow","attempts","attemptsLoading","runStatusTagType","runStatusText","s","key","attemptColumns","_row","index","fmtDateTime","a","b","ok","_a","clearShow","clearBeforeDays","clearOptions","computed","n","doClear","e","translateError","_createVNode","_unref","SmartTable","_cache","_createBlock","AppIcon","_createTextVNode","FormContainer","$event","_createElementVNode","_hoisted_1","NSelect","_hoisted_2","_toDisplayString","NDrawer","NDrawerContent","_createElementBlock","_Fragment","NDescriptions","NDescriptionsItem","_hoisted_3","_hoisted_4","_hoisted_5","NDataTable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/job-log/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 执行记录 = 只读 SmartTable + 详情抽屉 + 终止/清空两个动作。\n// 「运行中」没有独立状态字段,判据是 endTime 为空(任务无 Running 态,全靠未闭合记录推导);\n// 终止是跨节点写旗标,目标节点最迟 KillPollSeconds 后停——所以文案说\"已请求终止\"而非\"已终止\"。\n// 详情抽屉里带同 fireInstanceId 的各次尝试列表:走后端的 fireInstanceId 查询参数直取,\n// 不按 jobId 拉一页再前端过滤——翻到老触发时那一页里根本没有它的兄弟行,列表会静默缺项。\nimport { computed, h, ref, watch } from 'vue'\nimport { useShellBreakpoint } from '#/composables/useShellBreakpoint'\nimport {\n NButton,\n NTag,\n NSelect,\n NSpace,\n NDrawer,\n NDrawerContent,\n NDescriptions,\n NDescriptionsItem,\n NForm,\n NFormItem,\n useMessage,\n} from 'naive-ui'\nimport { useRoute } from 'vue-router'\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 { useConfirm } from '#/composables/useConfirm'\nimport { useAuthStore } from '#/stores/auth'\nimport { jobApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport {\n SEARCH_ACTIONS,\n createFlatFilterSerializer,\n presetEqualFilter,\n deriveHeaderFilters,\n} from '#/utils/tableFilter'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport TableTotal from '#/components/TableTotal/index.vue'\nimport AttemptTable from './components/AttemptTable.vue'\nimport { isAlive, runStatusLabel, runStatusTagType } from './runStatus'\nimport { fmtDateTime } from '#/utils/format'\nimport { JobFireMode, JobRunStatus, type SysJobLog } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { confirm } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysJobLog>>()\n// 壳层窄档(内容区 < 600,与表格卡片列表同阈值):详情抽屉改底部抽屉,尝试子表改卡片列表\nconst { bp } = useShellBreakpoint()\nconst narrow = computed(() => bp.value === 'narrow')\n\n// 任务下拉(筛选用):拉一页足量。ponytail: 200 覆盖绝大多数系统,真超再上远程搜索\nconst jobOptions = ref<{ label: string; value: number }[]>([])\nasync function loadJobOptions() {\n try {\n const { items } = await jobApi.page({ page: 1, pageSize: 200 })\n jobOptions.value = items.map(j => ({ label: j.name, value: j.id }))\n } catch {\n // 静默:任务下拉是筛选辅助,拉取失败不打断列表\n }\n}\nvoid loadJobOptions()\n\nconst fireModeOptions = [\n {\n label: () => t('job.log.fireModeSchedule'),\n value: JobFireMode.Schedule,\n tagType: 'default' as const,\n },\n { label: () => t('job.log.fireModeManual'), value: JobFireMode.Manual, tagType: 'info' as const },\n {\n label: () => t('job.log.fireModeBackfill'),\n value: JobFireMode.Misfire,\n tagType: 'warning' as const,\n },\n {\n label: () => t('job.log.fireModeMisfireSkip'),\n value: JobFireMode.MissedSkipped,\n tagType: 'default' as const,\n },\n]\nconst runStatusOptions = [\n { label: () => t('job.log.running'), value: JobRunStatus.Running, tagType: 'info' as const },\n { label: () => t('job.log.success'), value: JobRunStatus.Success, tagType: 'success' as const },\n { label: () => t('job.log.failed'), value: JobRunStatus.Failed, tagType: 'error' as const },\n { label: () => t('job.log.timeout'), value: JobRunStatus.Timeout, tagType: 'warning' as const },\n {\n label: () => t('job.log.cancelled'),\n value: JobRunStatus.Cancelled,\n tagType: 'default' as const,\n },\n { label: () => t('job.log.skipped'), value: JobRunStatus.Skipped, tagType: 'default' as const },\n]\n\n// 条件构造器下 search.key 被忽略,过滤键就是列 key;后端参数叫 startRange(api 层 logPage 再拆成 StartFrom/StartTo 并补秒),\n// 所以 startTime 要改名,并按日期区间字段处理(同字段的 gte + lte 合并成 [起, 止])。\nconst filterSerializer = createFlatFilterSerializer({\n ranges: ['startTime'],\n rename: { startTime: 'startRange' },\n})\n\nconst columns: SmartTableColumn<SysJobLog>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'jobId',\n title: () => t('job.log.job'),\n hideInTable: true, // 只作搜索项:表格里已有任务名快照列\n options: jobOptions,\n search: { actions: SEARCH_ACTIONS.exact, props: { clearable: true, filterable: true } },\n },\n {\n key: 'jobName',\n title: () => t('job.log.job'),\n minWidth: 140,\n ellipsis: { tooltip: true },\n card: 'title',\n },\n {\n key: 'fireMode',\n title: () => t('job.log.fireMode'),\n width: 100,\n tag: true,\n options: fireModeOptions,\n },\n { key: 'scheduledTime', title: () => t('job.log.scheduledTime'), width: 160, format: 'datetime' },\n {\n key: 'startTime',\n title: () => t('job.log.startTime'),\n width: 160,\n format: 'datetime',\n // 时间范围筛选:条件构造器里是同一字段的两行(大于等于 + 小于等于),序列化器合并成 [起, 止],\n // api 层再拆成 StartFrom/StartTo 并补秒\n search: { type: 'daterange', actions: SEARCH_ACTIONS.dayRange },\n },\n {\n key: 'elapsedMs',\n title: () => t('job.log.elapsed'),\n width: 110,\n render: r =>\n isAlive(r)\n ? h(NTag, { size: 'small', type: 'info', bordered: false }, () => t('job.log.running'))\n : h('span', { class: 'tabular' }, `${r.elapsedMs} ms`),\n },\n {\n key: 'runStatus',\n title: () => t('job.log.runStatus'),\n width: 100,\n tag: true,\n search: { actions: SEARCH_ACTIONS.exact },\n options: runStatusOptions,\n },\n {\n key: 'retryIndex',\n title: () => t('job.log.retryIndex'),\n width: 90,\n align: 'center',\n render: r => (r.retryIndex > 0 ? r.retryIndex : '—'),\n },\n { key: 'nodeName', title: () => t('job.log.node'), width: 140, ellipsis: { tooltip: true } },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 130,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 4, wrapItem: false }, () => [\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openDetail(r) },\n () => t('common.detail'),\n ),\n isAlive(r) && authStore.hasPerm('POST:/api/v1/sys/job/log/{id}/kill')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'error', onClick: () => killRun(r) },\n () => t('job.log.kill'),\n )\n : null,\n ]),\n },\n]\nderiveHeaderFilters(columns)\n\n// 从任务页「记录」跳来时带 ?jobId=,自动带上筛选。\n// watch 而非 onMounted:页面被 keep-alive,标签开着时再跳一次只换 query,onMounted 不会再触发;\n// tableRef 一起纳入监听源,冷启动时实例就绪后补上筛选(immediate 在 setup 期 ref 还是空)。\nconst route = useRoute()\nwatch(\n [tableRef, () => route.query.jobId],\n ([inst, jobId]) => {\n if (!inst) return\n // route 是全局的:切到别的页面时 query.jobId 变 undefined,本页被 keep-alive 着的 watcher 照样会响。\n // 不守卫就等于「离开本页 = 清掉筛选并后台发一次没人看的请求」,切回来筛选还没了。\n if (route.path !== '/system/job-log') return\n // 值没变 presetEqualFilter 不写;远程模式下 setFilter 自己会回第 1 页重查\n presetEqualFilter(inst, 'jobId', jobId == null ? undefined : Number(jobId))\n },\n { immediate: true },\n)\n\n// ── 详情抽屉(行数据直填 + 同 fireInstanceId 的各次尝试) ──\nconst showDetail = ref(false)\nconst detailRow = ref<SysJobLog | null>(null)\nconst attempts = ref<SysJobLog[]>([])\nconst attemptsLoading = ref(false)\n\nconst runStatusText = (s: JobRunStatus) => runStatusLabel(t, s)\n\nasync function openDetail(r: SysJobLog) {\n detailRow.value = r\n showDetail.value = true\n attempts.value = []\n attemptsLoading.value = true\n try {\n const { items } = await jobApi.logPage({\n page: 1,\n pageSize: 100,\n fireInstanceId: r.fireInstanceId,\n })\n attempts.value = items.toSorted((a, b) => a.retryIndex - b.retryIndex)\n } catch {\n // 静默:尝试列表是详情的补充信息,拉不到不挡主体\n } finally {\n attemptsLoading.value = false\n }\n}\n\nfunction killRun(r: SysJobLog) {\n confirm({\n type: 'error',\n content: t('job.log.killConfirm', { name: r.jobName }),\n action: () => jobApi.kill(r.id),\n successMsg: t('job.log.killed'),\n }).then(ok => {\n if (ok) tableRef.value?.refresh()\n })\n}\n\n// ── 清空(弹窗选 beforeDays;0 = 全部) ──\nconst clearShow = ref(false)\nconst clearBeforeDays = ref(0)\n// computed:切语言时选项文案即时生效\nconst clearOptions = computed(() => [\n { label: t('job.log.clearAll'), value: 0 },\n ...[7, 30, 90].map(n => ({ label: t('job.log.beforeDays', { n }), value: n })),\n])\n\nasync function doClear() {\n try {\n const n = await jobApi.logClear({\n beforeDays: clearBeforeDays.value === 0 ? null : clearBeforeDays.value,\n })\n message.success(t('job.log.cleared', { n }))\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=\"jobApi.logPage\"\n :search=\"{ container: 'table' }\"\n :filter-serializer=\"filterSerializer\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"sys-job-log\"\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\n v-auth=\"'POST:/api/v1/sys/job/log/clear'\"\n type=\"error\"\n secondary\n @click=\"clearShow = true\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('job.log.clear') }}\n </n-button>\n </template>\n </SmartTable>\n\n <!-- 清空:选范围后执行,回报删除行数 -->\n <FormContainer\n v-model:show=\"clearShow\"\n :title=\"t('job.log.clearTitle')\"\n :width=\"420\"\n :on-confirm=\"doClear\"\n :confirm-text=\"t('common.confirm')\"\n >\n <n-form label-placement=\"left\" :label-width=\"60\" require-mark-placement=\"left\">\n <n-form-item :label=\"t('job.log.clearRange')\" required>\n <n-select v-model:value=\"clearBeforeDays\" :options=\"clearOptions\" />\n </n-form-item>\n <div class=\"clear-hint\">{{ t('job.log.clearHint') }}</div>\n </n-form>\n </FormContainer>\n\n <!-- 详情抽屉:右侧 600 宽;窄档改底部抽屉(上圆角,最高 85vh) -->\n <n-drawer\n v-model:show=\"showDetail\"\n :placement=\"narrow ? 'bottom' : 'right'\"\n :width=\"narrow ? undefined : 'min(600px, 100vw)'\"\n :height=\"narrow ? 'auto' : undefined\"\n :class=\"{ 'st-sheet': narrow }\"\n :style=\"narrow ? 'max-height: 85vh' : undefined\"\n >\n <n-drawer-content :title=\"t('common.detail')\" closable :native-scrollbar=\"narrow\">\n <template v-if=\"detailRow\">\n <n-descriptions\n label-placement=\"left\"\n :column=\"1\"\n bordered\n size=\"small\"\n label-style=\"width: 100px\"\n >\n <n-descriptions-item :label=\"t('job.log.job')\">\n {{ detailRow.jobName }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.fireMode')\">\n {{\n detailRow.fireMode === JobFireMode.Manual\n ? t('job.log.fireModeManual')\n : detailRow.fireMode === JobFireMode.Misfire\n ? t('job.log.fireModeBackfill')\n : detailRow.fireMode === JobFireMode.MissedSkipped\n ? t('job.log.fireModeMisfireSkip')\n : t('job.log.fireModeSchedule')\n }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.runStatus')\">\n <n-tag size=\"small\" :bordered=\"false\" :type=\"runStatusTagType[detailRow.runStatus]\">\n {{ runStatusText(detailRow.runStatus) }}\n </n-tag>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.scheduledTime')\">\n {{ fmtDateTime(detailRow.scheduledTime) }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.startTime')\">\n {{ fmtDateTime(detailRow.startTime) }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.elapsed')\">\n {{ detailRow.endTime == null ? t('job.log.running') : `${detailRow.elapsedMs} ms` }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('job.log.node')\">\n {{ detailRow.nodeName || '—' }}\n </n-descriptions-item>\n <n-descriptions-item v-if=\"detailRow.messageText\" :label=\"t('job.log.message')\">\n <pre class=\"log-output\">{{ detailRow.messageText }}</pre>\n </n-descriptions-item>\n <n-descriptions-item v-if=\"detailRow.errorText\" :label=\"t('job.log.error')\">\n <pre class=\"log-output log-error\">{{ detailRow.errorText }}</pre>\n </n-descriptions-item>\n </n-descriptions>\n\n <div class=\"attempts-title\">{{ t('job.log.attempts') }}</div>\n <AttemptTable :rows=\"attempts\" :loading=\"attemptsLoading\" />\n </template>\n </n-drawer-content>\n </n-drawer>\n</template>\n\n<style scoped>\n.clear-hint {\n font-size: 13px;\n line-height: 1.6;\n color: var(--text-3);\n}\n/* 小标题:同描述列表拉开距离 */\n.attempts-title {\n margin: 16px 0 6px 2px;\n font-size: 13px;\n font-weight: 500;\n letter-spacing: -0.01em;\n color: var(--text-3);\n}\n.log-output {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-all;\n font-family: var(--font-mono, ui-monospace, 'SFMono-Regular', Menlo, Consolas, monospace);\n font-size: 12px;\n line-height: 1.55;\n}\n.log-error {\n color: var(--err);\n}\n\n/* 窄档:底部抽屉 */\n.st-sheet {\n display: flex;\n flex-direction: column;\n border-radius: var(--radius-xl) var(--radius-xl) 0 0;\n}\n.st-sheet :deep(.n-drawer-content-wrapper) {\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","confirm","useConfirm","authStore","useAuthStore","tableRef","ref","bp","useShellBreakpoint","narrow","computed","jobOptions","loadJobOptions","items","jobApi","j","fireModeOptions","JobFireMode","runStatusOptions","JobRunStatus","filterSerializer","createFlatFilterSerializer","columns","SEARCH_ACTIONS","r","isAlive","h","NTag","NSpace","NButton","openDetail","killRun","deriveHeaderFilters","route","useRoute","watch","inst","jobId","presetEqualFilter","showDetail","detailRow","attempts","attemptsLoading","runStatusText","s","runStatusLabel","a","b","ok","_a","clearShow","clearBeforeDays","clearOptions","n","doClear","e","translateError","_createVNode","_unref","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_cache","_withCtx","itemCount","TableTotal","_createBlock","AppIcon","_createTextVNode","FormContainer","$event","NForm","NFormItem","NSelect","_createElementVNode","_hoisted_1","_toDisplayString","NDrawer","_normalizeStyle","NDrawerContent","_createElementBlock","_Fragment","NDescriptions","NDescriptionsItem","runStatusTagType","fmtDateTime","_hoisted_2","_hoisted_3","_hoisted_4","AttemptTable"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { JobRunStatus, SysJobLog } from '../../../types/api';
|
|
2
|
+
/** 运行中(endTime 空)的行还没有耗时;已结束的显示毫秒。 */
|
|
3
|
+
export declare const isAlive: (r: SysJobLog) => boolean;
|
|
4
|
+
export declare const runStatusTagType: {
|
|
5
|
+
readonly 1: "info";
|
|
6
|
+
readonly 2: "success";
|
|
7
|
+
readonly 3: "error";
|
|
8
|
+
readonly 4: "warning";
|
|
9
|
+
readonly 5: "default";
|
|
10
|
+
readonly 6: "default";
|
|
11
|
+
};
|
|
12
|
+
/** 状态文案;`t` 由调用方传入(这里不绑定 i18n 实例)。 */
|
|
13
|
+
export declare function runStatusLabel(t: (key: string) => string, s: JobRunStatus): string;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { JobRunStatus as e } from "../../../types/api.js";
|
|
2
|
+
const o = (n) => n.endTime == null, c = {
|
|
3
|
+
[e.Running]: "info",
|
|
4
|
+
[e.Success]: "success",
|
|
5
|
+
[e.Failed]: "error",
|
|
6
|
+
[e.Timeout]: "warning",
|
|
7
|
+
[e.Cancelled]: "default",
|
|
8
|
+
[e.Skipped]: "default"
|
|
9
|
+
}, i = {
|
|
10
|
+
1: "running",
|
|
11
|
+
2: "success",
|
|
12
|
+
3: "failed",
|
|
13
|
+
4: "timeout",
|
|
14
|
+
5: "cancelled",
|
|
15
|
+
6: "skipped"
|
|
16
|
+
};
|
|
17
|
+
function l(n, t) {
|
|
18
|
+
const u = i[t];
|
|
19
|
+
return u ? n(`job.log.${u}`) : String(t);
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
o as isAlive,
|
|
23
|
+
l as runStatusLabel,
|
|
24
|
+
c as runStatusTagType
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=runStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runStatus.js","sources":["../../../../src/views/system/job-log/runStatus.ts"],"sourcesContent":["// 执行记录的「运行状态」共用件:主表、详情抽屉、尝试子表(components/AttemptTable.vue)三处用同一套。\nimport { JobRunStatus, type SysJobLog } from '#/types/api'\n\n/** 运行中(endTime 空)的行还没有耗时;已结束的显示毫秒。 */\nexport const isAlive = (r: SysJobLog) => r.endTime == null\n\nexport const runStatusTagType = {\n [JobRunStatus.Running]: 'info',\n [JobRunStatus.Success]: 'success',\n [JobRunStatus.Failed]: 'error',\n [JobRunStatus.Timeout]: 'warning',\n [JobRunStatus.Cancelled]: 'default',\n [JobRunStatus.Skipped]: 'default',\n} as const\n\nconst RUN_STATUS_KEY: Record<number, string> = {\n 1: 'running',\n 2: 'success',\n 3: 'failed',\n 4: 'timeout',\n 5: 'cancelled',\n 6: 'skipped',\n}\n\n/** 状态文案;`t` 由调用方传入(这里不绑定 i18n 实例)。 */\nexport function runStatusLabel(t: (key: string) => string, s: JobRunStatus): string {\n const key = RUN_STATUS_KEY[s]\n return key ? t(`job.log.${key}`) : String(s)\n}\n"],"names":["isAlive","r","runStatusTagType","JobRunStatus","RUN_STATUS_KEY","runStatusLabel","t","s","key"],"mappings":";AAIO,MAAMA,IAAU,CAACC,MAAiBA,EAAE,WAAW,MAEzCC,IAAmB;AAAA,EAC9B,CAACC,EAAa,OAAO,GAAG;AAAA,EACxB,CAACA,EAAa,OAAO,GAAG;AAAA,EACxB,CAACA,EAAa,MAAM,GAAG;AAAA,EACvB,CAACA,EAAa,OAAO,GAAG;AAAA,EACxB,CAACA,EAAa,SAAS,GAAG;AAAA,EAC1B,CAACA,EAAa,OAAO,GAAG;AAC1B,GAEMC,IAAyC;AAAA,EAC7C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAGO,SAASC,EAAeC,GAA4BC,GAAyB;AAClF,QAAMC,IAAMJ,EAAeG,CAAC;AAC5B,SAAOC,IAAMF,EAAE,WAAWE,CAAG,EAAE,IAAI,OAAOD,CAAC;AAC7C;"}
|
|
@@ -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 _ = /* @__PURE__ */ t(o, [["__scopeId", "data-v-4d98120b"]]);
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
_ as default
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=index.vue.js.map
|
|
@@ -1,253 +1,245 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useMessage as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
|
|
1
|
+
import { defineComponent as z, computed as u, ref as j, onMounted as J, onActivated as V, onDeactivated as G, onUnmounted as U, openBlock as g, createElementBlock as _, normalizeClass as b, createElementVNode as l, normalizeStyle as y, Fragment as W, renderList as q, createBlock as K, unref as r, withCtx as p, createVNode as c, toDisplayString as T, h as N } from "vue";
|
|
2
|
+
import { useMessage as P, NCard as A, NSpin as Q, NTag as X } from "naive-ui";
|
|
3
|
+
import { SmartTable as C } from "smart-naive-table";
|
|
4
|
+
import { Icon as Y } from "@iconify/vue";
|
|
5
|
+
import { useShellBreakpoint as Z } from "../../../composables/useShellBreakpoint.js";
|
|
6
|
+
import { useI18n as ee } from "vue-i18n";
|
|
7
|
+
import te from "../../../components/Chart/index.vue.js";
|
|
8
|
+
import { jobApi as oe } from "../../../api/index.js";
|
|
9
|
+
import { translateError as ae } from "../../../utils/error.js";
|
|
10
|
+
import { fmtDateTime as ne } from "../../../utils/format.js";
|
|
11
|
+
import { TABLE_MIN_ROW_HEIGHT as I, TABLE_TOOLBAR as S } from "../../../utils/tableToolbar.js";
|
|
12
|
+
import B from "../../../components/TableTotal/index.vue.js";
|
|
13
|
+
const re = { class: "stat" }, ie = { class: "stat-val tabular" }, le = { class: "stat-label" }, ke = /* @__PURE__ */ z({
|
|
10
14
|
__name: "index",
|
|
11
|
-
setup(
|
|
12
|
-
const { t } =
|
|
13
|
-
|
|
15
|
+
setup(se) {
|
|
16
|
+
const { t } = ee(), L = P(), { bp: M, width: h } = Z(), i = u(() => M.value === "narrow"), E = u(() => h.value < 520 ? 1 : h.value < 1e3 ? 2 : 4), H = u(() => {
|
|
17
|
+
const e = h.value < 1e3, a = e ? 488 : 240;
|
|
18
|
+
return {
|
|
19
|
+
flex: `1 1 ${a}px`,
|
|
20
|
+
minHeight: `${a}px`,
|
|
21
|
+
gridTemplateColumns: e ? "minmax(0, 1fr)" : "repeat(2, minmax(0, 1fr))",
|
|
22
|
+
gridTemplateRows: e ? "repeat(2, minmax(0, 1fr))" : "minmax(0, 1fr)"
|
|
23
|
+
};
|
|
24
|
+
}), s = j(null), f = j(!0);
|
|
25
|
+
async function w(e = !0) {
|
|
14
26
|
try {
|
|
15
|
-
|
|
16
|
-
} catch (
|
|
17
|
-
|
|
27
|
+
s.value = await oe.dashboard();
|
|
28
|
+
} catch (a) {
|
|
29
|
+
e || L.error(ae(a));
|
|
18
30
|
} finally {
|
|
19
|
-
|
|
31
|
+
f.value = !1;
|
|
20
32
|
}
|
|
21
33
|
}
|
|
22
34
|
let d = null;
|
|
23
|
-
function
|
|
24
|
-
d == null && (d = window.setInterval(() => void
|
|
35
|
+
function k() {
|
|
36
|
+
d == null && (d = window.setInterval(() => void w(), 15e3));
|
|
25
37
|
}
|
|
26
|
-
function
|
|
38
|
+
function x() {
|
|
27
39
|
d != null && (window.clearInterval(d), d = null);
|
|
28
40
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}),
|
|
32
|
-
const
|
|
33
|
-
var
|
|
41
|
+
J(() => {
|
|
42
|
+
w(!1), k();
|
|
43
|
+
}), V(k), G(x), U(x);
|
|
44
|
+
const v = (e) => e === void 0 ? "—" : e, R = u(() => {
|
|
45
|
+
var e, a, o, m;
|
|
34
46
|
return [
|
|
35
47
|
{
|
|
36
48
|
key: "todaySuccess",
|
|
37
|
-
icon: "ph:check-circle
|
|
38
|
-
value:
|
|
39
|
-
color: "var(--
|
|
49
|
+
icon: "ph:check-circle",
|
|
50
|
+
value: v((e = s.value) == null ? void 0 : e.todaySuccess),
|
|
51
|
+
color: "var(--ok)"
|
|
40
52
|
},
|
|
41
53
|
{
|
|
42
54
|
key: "todayFailed",
|
|
43
|
-
icon: "ph:x-circle
|
|
44
|
-
value:
|
|
45
|
-
color: "var(--
|
|
55
|
+
icon: "ph:x-circle",
|
|
56
|
+
value: v((a = s.value) == null ? void 0 : a.todayFailed),
|
|
57
|
+
color: "var(--err)"
|
|
46
58
|
},
|
|
47
59
|
{
|
|
48
60
|
key: "running",
|
|
49
|
-
icon: "ph:circle-notch
|
|
50
|
-
value:
|
|
61
|
+
icon: "ph:circle-notch",
|
|
62
|
+
value: v((o = s.value) == null ? void 0 : o.running),
|
|
51
63
|
color: "var(--color-info)"
|
|
52
64
|
},
|
|
53
65
|
{
|
|
54
66
|
key: "totalJobs",
|
|
55
|
-
icon: "ph:clock-countdown
|
|
56
|
-
value:
|
|
57
|
-
color: "var(--
|
|
67
|
+
icon: "ph:clock-countdown",
|
|
68
|
+
value: v((m = s.value) == null ? void 0 : m.totalJobs),
|
|
69
|
+
color: "var(--signal)"
|
|
58
70
|
}
|
|
59
71
|
];
|
|
60
|
-
}),
|
|
61
|
-
var
|
|
62
|
-
const
|
|
72
|
+
}), $ = u(() => {
|
|
73
|
+
var a;
|
|
74
|
+
const e = ((a = s.value) == null ? void 0 : a.trend) ?? [];
|
|
63
75
|
return {
|
|
64
76
|
tooltip: { trigger: "axis" },
|
|
65
|
-
// 图例位置写死在顶部:留给默认值时它会落到绘图区底部、压在 x
|
|
77
|
+
// 图例位置写死在顶部:留给默认值时它会落到绘图区底部、压在 x 轴日期标签上。
|
|
66
78
|
// grid.top 的 32 就是给它留的位置。
|
|
67
79
|
legend: { top: 0 },
|
|
68
80
|
grid: { left: 8, right: 16, bottom: 8, top: 32, containLabel: !0 },
|
|
69
|
-
xAxis: { type: "category", data:
|
|
81
|
+
xAxis: { type: "category", data: e.map((o) => o.date.slice(5)) },
|
|
70
82
|
// MM-dd 足够,14 天跨年概率忽略
|
|
71
83
|
yAxis: { type: "value", minInterval: 1 },
|
|
72
84
|
series: [
|
|
73
|
-
{ name: t("job.monitor.trendSuccess"), type: "bar", data:
|
|
85
|
+
{ name: t("job.monitor.trendSuccess"), type: "bar", data: e.map((o) => o.success) },
|
|
74
86
|
{
|
|
75
87
|
name: t("job.monitor.trendFailed"),
|
|
76
88
|
type: "line",
|
|
77
89
|
smooth: !0,
|
|
78
|
-
data:
|
|
90
|
+
data: e.map((o) => o.failed)
|
|
79
91
|
}
|
|
80
92
|
]
|
|
81
93
|
};
|
|
82
94
|
});
|
|
83
|
-
function
|
|
84
|
-
const
|
|
85
|
-
return
|
|
95
|
+
function D(e) {
|
|
96
|
+
const a = Math.max(0, Date.now() - new Date(e).getTime()), o = Math.floor(a / 1e3);
|
|
97
|
+
return o < 10 ? t("job.monitor.justNow") : o < 60 ? t("job.monitor.secondsAgo", { n: o }) : o < 3600 ? t("job.monitor.minutesAgo", { n: Math.floor(o / 60) }) : t("job.monitor.hoursAgo", { n: Math.floor(o / 3600) });
|
|
86
98
|
}
|
|
87
|
-
const
|
|
99
|
+
const F = [
|
|
100
|
+
{ type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
|
|
88
101
|
{
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
title: () => t("job.monitor.upcomingJob"),
|
|
103
|
+
key: "name",
|
|
104
|
+
ellipsis: { tooltip: !0 },
|
|
105
|
+
search: {}
|
|
106
|
+
// 静态数据:条件由 SmartTable 前端求值
|
|
94
107
|
},
|
|
95
|
-
{ title: () => t("job.monitor.upcomingJob"), key: "name", ellipsis: { tooltip: !0 } },
|
|
96
108
|
{
|
|
97
109
|
title: () => t("job.monitor.upcomingTime"),
|
|
98
110
|
key: "nextRunTime",
|
|
99
111
|
width: 170,
|
|
100
|
-
render: (
|
|
112
|
+
render: (e) => N("span", { class: "tabular" }, ne(e.nextRunTime, { empty: "—" }))
|
|
101
113
|
}
|
|
102
|
-
],
|
|
114
|
+
], O = [
|
|
115
|
+
{ type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
|
|
103
116
|
{
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
render: (o, l) => l + 1
|
|
117
|
+
title: () => t("job.monitor.nodeName"),
|
|
118
|
+
key: "nodeName",
|
|
119
|
+
ellipsis: { tooltip: !0 },
|
|
120
|
+
search: {}
|
|
109
121
|
},
|
|
110
|
-
{ title: () => t("job.monitor.nodeName"), key: "nodeName", ellipsis: { tooltip: !0 } },
|
|
111
122
|
{
|
|
112
123
|
title: () => t("job.monitor.role"),
|
|
113
124
|
key: "isLeader",
|
|
114
125
|
width: 90,
|
|
115
|
-
render: (
|
|
116
|
-
|
|
117
|
-
{ size: "small", bordered: !1, type:
|
|
118
|
-
() => t(
|
|
126
|
+
render: (e) => N(
|
|
127
|
+
X,
|
|
128
|
+
{ size: "small", bordered: !1, type: e.isLeader ? "primary" : "default" },
|
|
129
|
+
() => t(e.isLeader ? "job.monitor.leader" : "job.monitor.standby")
|
|
119
130
|
)
|
|
120
131
|
},
|
|
121
132
|
{
|
|
122
133
|
title: () => t("job.monitor.lastHeartbeat"),
|
|
123
134
|
key: "lastHeartbeat",
|
|
124
135
|
width: 110,
|
|
125
|
-
render: (
|
|
136
|
+
render: (e) => D(e.lastHeartbeat)
|
|
126
137
|
},
|
|
127
138
|
{ title: () => t("job.monitor.workerId"), key: "workerId", width: 90, align: "center" },
|
|
128
139
|
{ title: () => t("job.monitor.pid"), key: "pid", width: 90, align: "center" }
|
|
129
140
|
];
|
|
130
|
-
return (
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
"
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
141
|
+
return (e, a) => {
|
|
142
|
+
var o, m;
|
|
143
|
+
return g(), _("div", {
|
|
144
|
+
class: b(["view", { "fill-page fill-page--soft": !i.value }])
|
|
145
|
+
}, [
|
|
146
|
+
l("div", {
|
|
147
|
+
class: "stats",
|
|
148
|
+
style: y({ gridTemplateColumns: `repeat(${E.value}, minmax(0, 1fr))` })
|
|
149
|
+
}, [
|
|
150
|
+
(g(!0), _(W, null, q(R.value, (n) => (g(), K(r(A), {
|
|
151
|
+
key: n.key,
|
|
152
|
+
bordered: !0,
|
|
153
|
+
class: "a-card",
|
|
154
|
+
"content-style": "padding: 14px 16px"
|
|
140
155
|
}, {
|
|
141
|
-
default:
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
])
|
|
158
|
-
])
|
|
159
|
-
]),
|
|
160
|
-
_: 2
|
|
161
|
-
}, 1024)
|
|
156
|
+
default: p(() => [
|
|
157
|
+
l("div", re, [
|
|
158
|
+
l("div", {
|
|
159
|
+
class: "stat-ico",
|
|
160
|
+
style: y({ color: n.color })
|
|
161
|
+
}, [
|
|
162
|
+
c(r(Y), {
|
|
163
|
+
icon: n.icon,
|
|
164
|
+
width: 28
|
|
165
|
+
}, null, 8, ["icon"])
|
|
166
|
+
], 4),
|
|
167
|
+
l("div", null, [
|
|
168
|
+
l("div", ie, T(n.value), 1),
|
|
169
|
+
l("div", le, T(r(t)(`job.monitor.${n.key}`)), 1)
|
|
170
|
+
])
|
|
171
|
+
])
|
|
162
172
|
]),
|
|
163
173
|
_: 2
|
|
164
174
|
}, 1024))), 128))
|
|
165
|
-
]),
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
data: ((e = i.value) == null ? void 0 : e.nodes) ?? [],
|
|
231
|
-
loading: u.value,
|
|
232
|
-
"row-key": (s) => s.nodeName,
|
|
233
|
-
pagination: !1,
|
|
234
|
-
"flex-height": "",
|
|
235
|
-
"virtual-scroll": ""
|
|
236
|
-
}, null, 8, ["data", "loading", "row-key"])
|
|
237
|
-
];
|
|
238
|
-
}),
|
|
239
|
-
_: 1
|
|
240
|
-
}, 8, ["title"])
|
|
241
|
-
]),
|
|
242
|
-
_: 1
|
|
243
|
-
})
|
|
244
|
-
]),
|
|
245
|
-
_: 1
|
|
246
|
-
})
|
|
247
|
-
]));
|
|
175
|
+
], 4),
|
|
176
|
+
c(r(A), {
|
|
177
|
+
title: r(t)("job.monitor.trendTitle"),
|
|
178
|
+
bordered: !0,
|
|
179
|
+
class: "a-card"
|
|
180
|
+
}, {
|
|
181
|
+
default: p(() => [
|
|
182
|
+
c(r(Q), { show: f.value }, {
|
|
183
|
+
default: p(() => [
|
|
184
|
+
c(te, { option: $.value }, null, 8, ["option"])
|
|
185
|
+
]),
|
|
186
|
+
_: 1
|
|
187
|
+
}, 8, ["show"])
|
|
188
|
+
]),
|
|
189
|
+
_: 1
|
|
190
|
+
}, 8, ["title"]),
|
|
191
|
+
l("div", {
|
|
192
|
+
class: b(["job-tables", { "fill-main": !i.value }]),
|
|
193
|
+
style: y(i.value ? void 0 : H.value)
|
|
194
|
+
}, [
|
|
195
|
+
l("div", {
|
|
196
|
+
class: b(["job-table", { "fill-main": !i.value }])
|
|
197
|
+
}, [
|
|
198
|
+
c(r(C), {
|
|
199
|
+
columns: F,
|
|
200
|
+
data: ((o = s.value) == null ? void 0 : o.upcoming) ?? [],
|
|
201
|
+
"row-key": (n) => `${n.jobId}-${n.nextRunTime}`,
|
|
202
|
+
loading: f.value,
|
|
203
|
+
search: { container: "table" },
|
|
204
|
+
toolbar: r(S),
|
|
205
|
+
"fill-height": !i.value,
|
|
206
|
+
"min-row-height": r(I),
|
|
207
|
+
"card-on-narrow": i.value,
|
|
208
|
+
"storage-key": "sys-job-monitor-upcoming"
|
|
209
|
+
}, {
|
|
210
|
+
"pagination-prefix": p(({ itemCount: n }) => [
|
|
211
|
+
c(B, { count: n }, null, 8, ["count"])
|
|
212
|
+
]),
|
|
213
|
+
_: 1
|
|
214
|
+
}, 8, ["data", "row-key", "loading", "toolbar", "fill-height", "min-row-height", "card-on-narrow"])
|
|
215
|
+
], 2),
|
|
216
|
+
l("div", {
|
|
217
|
+
class: b(["job-table", { "fill-main": !i.value }])
|
|
218
|
+
}, [
|
|
219
|
+
c(r(C), {
|
|
220
|
+
columns: O,
|
|
221
|
+
data: ((m = s.value) == null ? void 0 : m.nodes) ?? [],
|
|
222
|
+
"row-key": "nodeName",
|
|
223
|
+
loading: f.value,
|
|
224
|
+
search: { container: "table" },
|
|
225
|
+
toolbar: r(S),
|
|
226
|
+
"fill-height": !i.value,
|
|
227
|
+
"min-row-height": r(I),
|
|
228
|
+
"card-on-narrow": i.value,
|
|
229
|
+
"storage-key": "sys-job-monitor-nodes"
|
|
230
|
+
}, {
|
|
231
|
+
"pagination-prefix": p(({ itemCount: n }) => [
|
|
232
|
+
c(B, { count: n }, null, 8, ["count"])
|
|
233
|
+
]),
|
|
234
|
+
_: 1
|
|
235
|
+
}, 8, ["data", "loading", "toolbar", "fill-height", "min-row-height", "card-on-narrow"])
|
|
236
|
+
], 2)
|
|
237
|
+
], 6)
|
|
238
|
+
], 2);
|
|
239
|
+
};
|
|
248
240
|
}
|
|
249
241
|
});
|
|
250
242
|
export {
|
|
251
|
-
|
|
243
|
+
ke as default
|
|
252
244
|
};
|
|
253
245
|
//# sourceMappingURL=index2.vue.js.map
|