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,218 +1,230 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useMessage as
|
|
3
|
-
import { useI18n as
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { useConfirm as
|
|
7
|
-
import { useAuthStore as
|
|
1
|
+
import { defineComponent as I, computed as m, ref as M, resolveDirective as L, openBlock as i, createBlock as c, unref as e, normalizeClass as A, withCtx as n, createElementVNode as a, createElementBlock as f, Fragment as K, createTextVNode as d, toDisplayString as t, createVNode as _, createCommentVNode as b, withDirectives as w } from "vue";
|
|
2
|
+
import { useMessage as O, NCard as Y, NTag as P, NAlert as j, NSpace as G, NPopover as J, NButton as C } from "naive-ui";
|
|
3
|
+
import { useI18n as Q } from "vue-i18n";
|
|
4
|
+
import S from "../../../../components/AppIcon.vue.js";
|
|
5
|
+
import W from "../../../../components/StatusSwitch/index.vue.js";
|
|
6
|
+
import { useConfirm as X } from "../../../../composables/useConfirm.js";
|
|
7
|
+
import { useAuthStore as Z } from "../../../../stores/auth.js";
|
|
8
8
|
import { aiProviderApi as T } from "../../../../api/index.js";
|
|
9
|
-
import { translateError as
|
|
10
|
-
import { resolvePresetMeta as
|
|
11
|
-
const
|
|
9
|
+
import { translateError as ee } from "../../../../utils/error.js";
|
|
10
|
+
import { resolvePresetMeta as te } from "../presets.js";
|
|
11
|
+
const se = { class: "card-head" }, ae = {
|
|
12
|
+
class: "badge",
|
|
13
|
+
"aria-hidden": "true"
|
|
14
|
+
}, oe = { class: "head-meta" }, ie = { class: "name-row" }, le = ["title"], de = { class: "code mono" }, re = { class: "card-body" }, ne = { class: "row" }, ce = { class: "label faint" }, ue = ["title"], ve = { class: "row" }, me = { class: "label faint" }, pe = { class: "value muted" }, fe = {
|
|
12
15
|
key: 0,
|
|
13
|
-
class: "
|
|
14
|
-
},
|
|
15
|
-
key: 0,
|
|
16
|
-
class: "mask"
|
|
17
|
-
}, pe = { class: "row" }, fe = { class: "label" }, he = { class: "value" }, ye = { class: "card-actions" }, ge = { class: "switch-group" }, _e = { class: "switch-text" }, ke = {
|
|
16
|
+
class: "mono"
|
|
17
|
+
}, he = { class: "row" }, ye = { class: "label faint" }, _e = { class: "value ellipsis muted" }, be = { class: "card-actions" }, ge = { class: "switch-group" }, ke = { class: "switch-text muted" }, Me = {
|
|
18
18
|
key: 0,
|
|
19
19
|
class: "test-result"
|
|
20
|
-
},
|
|
20
|
+
}, we = { class: "test-row" }, Ce = { class: "mono" }, Te = { class: "test-row" }, ze = {
|
|
21
21
|
key: 0,
|
|
22
22
|
class: "test-row"
|
|
23
|
-
},
|
|
23
|
+
}, Ne = { class: "num" }, xe = { class: "num" }, Ae = {
|
|
24
24
|
key: 1,
|
|
25
25
|
class: "test-row test-error"
|
|
26
|
-
},
|
|
26
|
+
}, He = /* @__PURE__ */ I({
|
|
27
27
|
__name: "ProviderCard",
|
|
28
28
|
props: {
|
|
29
29
|
provider: {}
|
|
30
30
|
},
|
|
31
31
|
emits: ["edit", "deleted"],
|
|
32
|
-
setup(
|
|
33
|
-
const r =
|
|
32
|
+
setup(o, { emit: D }) {
|
|
33
|
+
const r = o, z = D, { t: s } = Q(), E = O(), { confirm: U } = X(), q = Z(), N = m(() => te(r.provider.preset)), $ = m(() => r.provider.preset === "custom" || N.value.abbr === "Cu"), u = m(
|
|
34
34
|
() => !r.provider.hasApiKey && r.provider.authScheme !== "none"
|
|
35
|
-
),
|
|
36
|
-
|
|
35
|
+
), B = m(() => u.value ? "pending" : r.provider.enabled ? "enabled" : "disabled"), V = m(
|
|
36
|
+
() => u.value ? s("aiModel.pendingConfig") : r.provider.enabled ? s("aiModel.enabled") : s("aiModel.disabled")
|
|
37
|
+
), x = m(() => r.provider.models.find((h) => h.isDefault) ?? null), H = m(() => q.hasPerm("PUT:/api/v1/sys/ai/provider/{id}"));
|
|
38
|
+
async function R() {
|
|
37
39
|
await U({
|
|
38
40
|
type: "warning",
|
|
39
|
-
content:
|
|
41
|
+
content: s("aiModel.deleteConfirm", { name: r.provider.name }),
|
|
40
42
|
action: () => T.remove(r.provider.id),
|
|
41
|
-
successMsg:
|
|
42
|
-
}) &&
|
|
43
|
+
successMsg: s("aiModel.deleted")
|
|
44
|
+
}) && z("deleted");
|
|
43
45
|
}
|
|
44
|
-
const y =
|
|
45
|
-
async function
|
|
46
|
+
const y = M(!1), g = M(!1), l = M(null);
|
|
47
|
+
async function F() {
|
|
46
48
|
y.value = !0;
|
|
47
49
|
try {
|
|
48
|
-
|
|
49
|
-
} catch (
|
|
50
|
-
E.error(
|
|
50
|
+
l.value = await T.test(r.provider.id), g.value = !0;
|
|
51
|
+
} catch (h) {
|
|
52
|
+
E.error(ee(h));
|
|
51
53
|
} finally {
|
|
52
54
|
y.value = !1;
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
|
-
return (
|
|
56
|
-
const
|
|
57
|
-
return
|
|
57
|
+
return (h, p) => {
|
|
58
|
+
const k = L("auth");
|
|
59
|
+
return i(), c(e(Y), {
|
|
58
60
|
size: "small",
|
|
59
61
|
bordered: !0,
|
|
60
|
-
|
|
62
|
+
"content-style": "padding: 12px 14px",
|
|
63
|
+
class: A(["a-card provider-card", `provider-card--${B.value}`])
|
|
61
64
|
}, {
|
|
62
|
-
default:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
u(_, {
|
|
69
|
-
icon: S.value.icon,
|
|
65
|
+
default: n(() => [
|
|
66
|
+
a("div", se, [
|
|
67
|
+
a("span", ae, [
|
|
68
|
+
$.value ? (i(), c(S, {
|
|
69
|
+
key: 0,
|
|
70
|
+
icon: "ph:puzzle-piece",
|
|
70
71
|
size: 22
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
})) : (i(), f(K, { key: 1 }, [
|
|
73
|
+
d(t(N.value.abbr), 1)
|
|
74
|
+
], 64))
|
|
75
|
+
]),
|
|
76
|
+
a("div", oe, [
|
|
77
|
+
a("div", ie, [
|
|
78
|
+
a("span", {
|
|
79
|
+
class: "name",
|
|
80
|
+
title: o.provider.name
|
|
81
|
+
}, t(o.provider.name), 9, le),
|
|
82
|
+
_(e(P), {
|
|
77
83
|
size: "small",
|
|
78
|
-
bordered: !1
|
|
84
|
+
bordered: !1,
|
|
85
|
+
class: "protocol"
|
|
79
86
|
}, {
|
|
80
|
-
default:
|
|
81
|
-
|
|
87
|
+
default: n(() => [
|
|
88
|
+
d(t(o.provider.protocol), 1)
|
|
82
89
|
]),
|
|
83
90
|
_: 1
|
|
84
91
|
})
|
|
85
92
|
]),
|
|
86
|
-
|
|
93
|
+
a("code", de, t(o.provider.code), 1)
|
|
87
94
|
])
|
|
88
95
|
]),
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
n(
|
|
95
|
-
|
|
96
|
-
s("div", le, [
|
|
97
|
-
s("div", de, [
|
|
98
|
-
s("span", re, t(e(o)("aiModel.provider.baseUrl")), 1),
|
|
99
|
-
s("span", {
|
|
100
|
-
class: "value ellipsis",
|
|
101
|
-
title: a.provider.baseUrl
|
|
102
|
-
}, t(a.provider.baseUrl), 9, ne)
|
|
96
|
+
u.value ? (i(), c(e(j), {
|
|
97
|
+
key: 0,
|
|
98
|
+
type: "warning",
|
|
99
|
+
bordered: !1
|
|
100
|
+
}, {
|
|
101
|
+
default: n(() => [
|
|
102
|
+
d(t(e(s)("aiModel.pendingConfigTip")), 1)
|
|
103
103
|
]),
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
104
|
+
_: 1
|
|
105
|
+
})) : b("", !0),
|
|
106
|
+
a("div", re, [
|
|
107
|
+
a("div", ne, [
|
|
108
|
+
a("span", ce, t(e(s)("aiModel.provider.baseUrl")), 1),
|
|
109
|
+
a("span", {
|
|
110
|
+
class: "value ellipsis muted",
|
|
111
|
+
title: o.provider.baseUrl
|
|
112
|
+
}, t(o.provider.baseUrl), 9, ue)
|
|
113
|
+
]),
|
|
114
|
+
a("div", ve, [
|
|
115
|
+
a("span", me, t(e(s)("aiModel.provider.apiKey")), 1),
|
|
116
|
+
a("span", pe, [
|
|
117
|
+
d(t(o.provider.hasApiKey ? e(s)("aiModel.provider.hasApiKeyYes") : e(s)("aiModel.provider.hasApiKeyNo")) + " ", 1),
|
|
118
|
+
o.provider.hasApiKey && o.provider.apiKeyHint ? (i(), f("span", fe, " **** " + t(o.provider.apiKeyHint), 1)) : b("", !0)
|
|
109
119
|
])
|
|
110
120
|
]),
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
121
|
+
a("div", he, [
|
|
122
|
+
a("span", ye, t(e(s)("aiModel.model.title")), 1),
|
|
123
|
+
a("span", _e, t(o.provider.models.length) + " · " + t(x.value ? x.value.displayName : e(s)("aiModel.model.noDefault")), 1)
|
|
114
124
|
])
|
|
115
125
|
]),
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
126
|
+
a("div", be, [
|
|
127
|
+
a("div", ge, [
|
|
128
|
+
H.value ? (i(), c(W, {
|
|
119
129
|
key: 0,
|
|
120
|
-
value:
|
|
121
|
-
disabled:
|
|
122
|
-
confirm: (
|
|
123
|
-
request: (
|
|
124
|
-
"onUpdate:value":
|
|
125
|
-
}, null, 8, ["value", "disabled", "confirm", "request"])) : (
|
|
130
|
+
value: o.provider.enabled && !u.value,
|
|
131
|
+
disabled: u.value,
|
|
132
|
+
confirm: (v) => v ? null : e(s)("aiModel.provider.disableConfirm", { name: o.provider.name }),
|
|
133
|
+
request: (v) => e(T).setEnabled(o.provider.id, v),
|
|
134
|
+
"onUpdate:value": p[0] || (p[0] = (v) => o.provider.enabled = v)
|
|
135
|
+
}, null, 8, ["value", "disabled", "confirm", "request"])) : (i(), c(e(P), {
|
|
126
136
|
key: 1,
|
|
127
137
|
size: "small",
|
|
128
138
|
bordered: !1,
|
|
129
|
-
type:
|
|
139
|
+
type: o.provider.enabled && !u.value ? "success" : "default"
|
|
130
140
|
}, {
|
|
131
|
-
default:
|
|
132
|
-
|
|
141
|
+
default: n(() => [
|
|
142
|
+
d(t(o.provider.enabled && !u.value ? e(s)("common.enabled") : e(s)("common.disabled")), 1)
|
|
133
143
|
]),
|
|
134
144
|
_: 1
|
|
135
145
|
}, 8, ["type"])),
|
|
136
|
-
|
|
146
|
+
a("span", ke, t(V.value), 1)
|
|
137
147
|
]),
|
|
138
|
-
|
|
139
|
-
size:
|
|
148
|
+
_(e(G), {
|
|
149
|
+
size: 2,
|
|
140
150
|
"wrap-item": !1
|
|
141
151
|
}, {
|
|
142
|
-
default:
|
|
143
|
-
|
|
152
|
+
default: n(() => [
|
|
153
|
+
_(e(J), {
|
|
144
154
|
trigger: "manual",
|
|
145
|
-
show:
|
|
155
|
+
show: g.value,
|
|
146
156
|
placement: "top",
|
|
147
157
|
width: 260,
|
|
148
|
-
onClickoutside:
|
|
158
|
+
onClickoutside: p[1] || (p[1] = (v) => g.value = !1)
|
|
149
159
|
}, {
|
|
150
|
-
trigger:
|
|
151
|
-
|
|
160
|
+
trigger: n(() => [
|
|
161
|
+
w((i(), c(e(C), {
|
|
152
162
|
size: "small",
|
|
153
163
|
quaternary: "",
|
|
154
164
|
loading: y.value,
|
|
155
|
-
onClick:
|
|
165
|
+
onClick: F
|
|
156
166
|
}, {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
icon: "ph:lightning",
|
|
160
|
-
size: 14
|
|
161
|
-
})
|
|
162
|
-
]),
|
|
163
|
-
default: d(() => [
|
|
164
|
-
n(" " + t(y.value ? e(o)("aiModel.test.testing") : e(o)("aiModel.test.action")), 1)
|
|
167
|
+
default: n(() => [
|
|
168
|
+
d(t(y.value ? e(s)("aiModel.test.testing") : e(s)("aiModel.test.action")), 1)
|
|
165
169
|
]),
|
|
166
170
|
_: 1
|
|
167
171
|
}, 8, ["loading"])), [
|
|
168
|
-
[
|
|
172
|
+
[k, "POST:/api/v1/sys/ai/provider/{id}/test"]
|
|
169
173
|
])
|
|
170
174
|
]),
|
|
171
|
-
default:
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
class:
|
|
175
|
+
default: n(() => [
|
|
176
|
+
l.value ? (i(), f("div", Me, [
|
|
177
|
+
a("div", {
|
|
178
|
+
class: A(["test-head", l.value.ok ? "ok" : "fail"])
|
|
175
179
|
}, [
|
|
176
|
-
|
|
177
|
-
icon:
|
|
178
|
-
size:
|
|
180
|
+
_(S, {
|
|
181
|
+
icon: l.value.ok ? "ph:check-circle" : "ph:x-circle",
|
|
182
|
+
size: 17
|
|
179
183
|
}, null, 8, ["icon"]),
|
|
180
|
-
|
|
184
|
+
d(" " + t(l.value.ok ? e(s)("aiModel.test.ok") : e(s)("aiModel.test.failed")), 1)
|
|
181
185
|
], 2),
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
l.value.ok ? (i(), f(K, { key: 0 }, [
|
|
187
|
+
a("div", we, [
|
|
188
|
+
d(t(e(s)("aiModel.test.model")) + ": ", 1),
|
|
189
|
+
a("span", Ce, t(l.value.model), 1)
|
|
190
|
+
]),
|
|
191
|
+
a("div", Te, t(e(s)("aiModel.test.latency", { ms: l.value.latencyMs })), 1),
|
|
192
|
+
l.value.usage ? (i(), f("div", ze, [
|
|
193
|
+
d(t(e(s)("aiModel.test.usage")) + ": " + t(e(s)("aiModel.test.inputTokens")) + " ", 1),
|
|
194
|
+
a("span", Ne, t(l.value.usage.inputTokens), 1),
|
|
195
|
+
d(" / " + t(e(s)("aiModel.test.outputTokens")) + " ", 1),
|
|
196
|
+
a("span", xe, t(l.value.usage.outputTokens), 1)
|
|
197
|
+
])) : b("", !0)
|
|
198
|
+
], 64)) : (i(), f("div", Ae, t(e(s)("aiModel.test.error")) + ":" + t(l.value.error), 1))
|
|
199
|
+
])) : b("", !0)
|
|
188
200
|
]),
|
|
189
201
|
_: 1
|
|
190
202
|
}, 8, ["show"]),
|
|
191
|
-
|
|
203
|
+
w((i(), c(e(C), {
|
|
192
204
|
size: "small",
|
|
193
205
|
quaternary: "",
|
|
194
206
|
type: "primary",
|
|
195
|
-
onClick:
|
|
207
|
+
onClick: p[2] || (p[2] = (v) => z("edit"))
|
|
196
208
|
}, {
|
|
197
|
-
default:
|
|
198
|
-
|
|
209
|
+
default: n(() => [
|
|
210
|
+
d(t(e(s)("common.edit")), 1)
|
|
199
211
|
]),
|
|
200
212
|
_: 1
|
|
201
213
|
})), [
|
|
202
|
-
[
|
|
214
|
+
[k, "PUT:/api/v1/sys/ai/provider/{id}"]
|
|
203
215
|
]),
|
|
204
|
-
|
|
216
|
+
w((i(), c(e(C), {
|
|
205
217
|
size: "small",
|
|
206
218
|
quaternary: "",
|
|
207
219
|
type: "error",
|
|
208
|
-
onClick:
|
|
220
|
+
onClick: R
|
|
209
221
|
}, {
|
|
210
|
-
default:
|
|
211
|
-
|
|
222
|
+
default: n(() => [
|
|
223
|
+
d(t(e(s)("common.delete")), 1)
|
|
212
224
|
]),
|
|
213
225
|
_: 1
|
|
214
226
|
})), [
|
|
215
|
-
[
|
|
227
|
+
[k, "DELETE:/api/v1/sys/ai/provider/{id}"]
|
|
216
228
|
])
|
|
217
229
|
]),
|
|
218
230
|
_: 1
|
|
@@ -225,6 +237,6 @@ const ee = { class: "card-head" }, te = { class: "head-meta" }, oe = { class: "n
|
|
|
225
237
|
}
|
|
226
238
|
});
|
|
227
239
|
export {
|
|
228
|
-
|
|
240
|
+
He as default
|
|
229
241
|
};
|
|
230
242
|
//# sourceMappingURL=ProviderCard2.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderCard2.vue.js","sources":["../../../../../src/views/system/ai-model/components/ProviderCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 单个厂商卡片:三态视觉(启用/停用/待配置 Key)+ 启停开关 + 编辑入口 + 删除 + 测试连接。\n// 待配置态判据:authScheme != 'none' 却没配 Key —— 没 Key 不可能真正启用成功(后端 SetEnabledAsync\n// 会拒 49004),即便库里 enabled=true 也按「待配置」显示,三态互斥、待配置优先。\nimport { computed, ref } from 'vue'\nimport { NButton, NCard, NPopover, NSpace, NTag, useMessage } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useAuthStore } from '#/stores/auth'\nimport { aiProviderApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport type { AiProviderView, AiTestResult } from '#/types/api'\nimport { resolvePresetMeta } from '../presets'\n\nconst props = defineProps<{ provider: AiProviderView }>()\nconst emit = defineEmits<{ (e: 'edit'): void; (e: 'deleted'): void }>()\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { confirm } = useConfirm()\nconst authStore = useAuthStore()\n\nconst meta = computed(() => resolvePresetMeta(props.provider.preset))\n/** 没配 Key 就不可能真正启用成功,即便库里 enabled=true 也按「待配置」显示,优先于启用/停用视觉。 */\nconst pendingConfig = computed(\n () => !props.provider.hasApiKey && props.provider.authScheme !== 'none',\n)\nconst cardState = computed(() => {\n if (pendingConfig.value) return 'pending'\n return props.provider.enabled ? 'enabled' : 'disabled'\n})\nconst defaultModel = computed(() => props.provider.models.find(m => m.isDefault) ?? null)\n\nconst canUpdate = computed(() => authStore.hasPerm('PUT:/api/v1/sys/ai/provider/{id}'))\n\nasync function onDelete() {\n const ok = await confirm({\n type: 'warning',\n content: t('aiModel.deleteConfirm', { name: props.provider.name }),\n action: () => aiProviderApi.remove(props.provider.id),\n successMsg: t('aiModel.deleted'),\n })\n if (ok) emit('deleted')\n}\n\n// ── 测试连接:结果在返回体里(ok=false 不代表接口失败),不走 translateError,\n// 只有网络层/其它异常才兜底 message.error。结果用 manual 触发的 popover 展示。 ──\nconst testing = ref(false)\nconst testResultShow = ref(false)\nconst testResult = ref<AiTestResult | null>(null)\nasync function onTest() {\n testing.value = true\n try {\n testResult.value = await aiProviderApi.test(props.provider.id)\n testResultShow.value = true\n } catch (e) {\n message.error(translateError(e))\n } finally {\n testing.value = false\n }\n}\n</script>\n\n<template>\n <n-card\n size=\"small\"\n :bordered=\"true\"\n class=\"provider-card\"\n :class=\"`provider-card--${cardState}`\"\n >\n <div class=\"card-head\">\n <span class=\"badge\" :style=\"{ color: meta.color }\">\n <AppIcon :icon=\"meta.icon\" :size=\"22\" />\n </span>\n <div class=\"head-meta\">\n <div class=\"name-row\">\n <span class=\"name\">{{ provider.name }}</span>\n <n-tag size=\"small\" :bordered=\"false\">{{ provider.protocol }}</n-tag>\n </div>\n <code class=\"code\">{{ provider.code }}</code>\n </div>\n </div>\n\n <div v-if=\"pendingConfig\" class=\"pending-tip\">\n <AppIcon icon=\"ph:warning-circle-duotone\" :size=\"14\" />\n {{ t('aiModel.pendingConfigTip') }}\n </div>\n\n <div class=\"card-body\">\n <div class=\"row\">\n <span class=\"label\">{{ t('aiModel.provider.baseUrl') }}</span>\n <span class=\"value ellipsis\" :title=\"provider.baseUrl\">{{ provider.baseUrl }}</span>\n </div>\n <div class=\"row\">\n <span class=\"label\">{{ t('aiModel.provider.apiKey') }}</span>\n <span class=\"value\">\n {{\n provider.hasApiKey\n ? t('aiModel.provider.hasApiKeyYes')\n : t('aiModel.provider.hasApiKeyNo')\n }}\n <span v-if=\"provider.hasApiKey && provider.apiKeyHint\" class=\"mask\">\n **** {{ provider.apiKeyHint }}\n </span>\n </span>\n </div>\n <div class=\"row\">\n <span class=\"label\">{{ t('aiModel.model.title') }}</span>\n <span class=\"value\">\n {{ provider.models.length }} ·\n {{ defaultModel ? defaultModel.displayName : t('aiModel.model.noDefault') }}\n </span>\n </div>\n </div>\n\n <div class=\"card-actions\">\n <div class=\"switch-group\">\n <StatusSwitch\n v-if=\"canUpdate\"\n :value=\"provider.enabled\"\n :disabled=\"pendingConfig\"\n :confirm=\"\n (next: boolean) =>\n next ? null : t('aiModel.provider.disableConfirm', { name: provider.name })\n \"\n :request=\"(next: boolean) => aiProviderApi.setEnabled(provider.id, next)\"\n @update:value=\"(v: boolean) => (provider.enabled = v)\"\n />\n <n-tag\n v-else\n size=\"small\"\n :bordered=\"false\"\n :type=\"provider.enabled ? 'success' : 'default'\"\n >\n {{ provider.enabled ? t('common.enabled') : t('common.disabled') }}\n </n-tag>\n <span class=\"switch-text\">\n {{ provider.enabled ? t('aiModel.enabled') : t('aiModel.disabled') }}\n </span>\n </div>\n\n <n-space :size=\"4\" :wrap-item=\"false\">\n <n-popover\n trigger=\"manual\"\n :show=\"testResultShow\"\n placement=\"top\"\n :width=\"260\"\n @clickoutside=\"testResultShow = false\"\n >\n <template #trigger>\n <n-button\n v-auth=\"'POST:/api/v1/sys/ai/provider/{id}/test'\"\n size=\"small\"\n quaternary\n :loading=\"testing\"\n @click=\"onTest\"\n >\n <template #icon><AppIcon icon=\"ph:lightning\" :size=\"14\" /></template>\n {{ testing ? t('aiModel.test.testing') : t('aiModel.test.action') }}\n </n-button>\n </template>\n <div v-if=\"testResult\" class=\"test-result\">\n <div class=\"test-head\" :class=\"testResult.ok ? 'ok' : 'fail'\">\n <AppIcon\n :icon=\"testResult.ok ? 'ph:check-circle-duotone' : 'ph:x-circle-duotone'\"\n :size=\"16\"\n />\n {{ testResult.ok ? t('aiModel.test.ok') : t('aiModel.test.failed') }}\n </div>\n <template v-if=\"testResult.ok\">\n <div class=\"test-row\">{{ t('aiModel.test.model') }}:{{ testResult.model }}</div>\n <div class=\"test-row\">\n {{ t('aiModel.test.latency', { ms: testResult.latencyMs }) }}\n </div>\n <div v-if=\"testResult.usage\" class=\"test-row\">\n {{ t('aiModel.test.usage') }}: {{ t('aiModel.test.inputTokens') }}\n {{ testResult.usage.inputTokens }} / {{ t('aiModel.test.outputTokens') }}\n {{ testResult.usage.outputTokens }}\n </div>\n </template>\n <div v-else class=\"test-row test-error\">\n {{ t('aiModel.test.error') }}:{{ testResult.error }}\n </div>\n </div>\n </n-popover>\n\n <n-button\n v-auth=\"'PUT:/api/v1/sys/ai/provider/{id}'\"\n size=\"small\"\n quaternary\n type=\"primary\"\n @click=\"emit('edit')\"\n >\n {{ t('common.edit') }}\n </n-button>\n <n-button\n v-auth=\"'DELETE:/api/v1/sys/ai/provider/{id}'\"\n size=\"small\"\n quaternary\n type=\"error\"\n @click=\"onDelete\"\n >\n {{ t('common.delete') }}\n </n-button>\n </n-space>\n </div>\n </n-card>\n</template>\n\n<style scoped>\n.provider-card {\n border-radius: var(--radius-lg);\n transition:\n border-color 0.15s,\n background-color 0.15s,\n opacity 0.15s;\n}\n.provider-card :deep(.n-card-content) {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n/* 状态着色必须压过 naive 的 .n-card.n-card--bordered(同权重,加载顺序不确定),\n 故修饰类与 .provider-card 复合写,靠权重取胜。 */\n.provider-card.provider-card--enabled {\n border-color: color-mix(in srgb, var(--color-primary) 45%, var(--color-border));\n background: color-mix(in srgb, var(--color-primary) 4%, var(--color-bg-container));\n}\n.provider-card.provider-card--disabled {\n opacity: 0.72;\n}\n.provider-card.provider-card--pending {\n border-style: dashed;\n border-color: color-mix(in srgb, var(--color-warning) 55%, var(--color-border));\n}\n.card-head {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n min-width: 0;\n}\n.badge {\n flex-shrink: 0;\n width: 42px;\n height: 42px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, currentColor 14%, transparent);\n}\n.head-meta {\n min-width: 0;\n flex: 1;\n}\n.name-row {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n.name {\n font-size: 15px;\n font-weight: 600;\n color: var(--color-text-primary);\n line-height: 1.3;\n}\n.code {\n display: inline-block;\n margin-top: 4px;\n font-size: 12px;\n color: var(--color-text-tertiary);\n background: var(--color-fill);\n padding: 1px 6px;\n border-radius: 4px;\n}\n.pending-tip {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n border-radius: var(--radius-sm);\n background: var(--color-warning-bg);\n color: var(--color-warning);\n font-size: 12px;\n}\n.card-body {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.row {\n display: flex;\n align-items: baseline;\n gap: 8px;\n font-size: 12px;\n min-width: 0;\n}\n.label {\n flex-shrink: 0;\n color: var(--color-text-tertiary);\n width: 66px;\n}\n.value {\n min-width: 0;\n color: var(--color-text-secondary);\n}\n.value.ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n display: block;\n}\n.mask {\n margin-left: 4px;\n color: var(--color-text-tertiary);\n}\n.card-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 8px;\n padding-top: 8px;\n border-top: 1px dashed var(--color-border);\n}\n.switch-group {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.switch-text {\n font-size: 12px;\n color: var(--color-text-tertiary);\n}\n.test-result {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 12px;\n}\n.test-head {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n margin-bottom: 2px;\n}\n.test-head.ok {\n color: var(--color-success);\n}\n.test-head.fail {\n color: var(--color-danger);\n}\n.test-row {\n color: var(--color-text-secondary);\n}\n.test-error {\n color: var(--color-danger);\n}\n</style>\n"],"names":["props","__props","emit","__emit","t","useI18n","message","useMessage","confirm","useConfirm","authStore","useAuthStore","meta","computed","resolvePresetMeta","pendingConfig","cardState","defaultModel","m","canUpdate","onDelete","aiProviderApi","testing","ref","testResultShow","testResult","onTest","e","translateError","_createBlock","_unref","NCard","_normalizeClass","_createElementVNode","_hoisted_1","_normalizeStyle","_createVNode","AppIcon","_hoisted_2","_hoisted_3","_hoisted_4","_toDisplayString","NTag","_createTextVNode","_hoisted_5","_openBlock","_createElementBlock","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","StatusSwitch","next","v","_hoisted_20","NSpace","NPopover","NButton","_hoisted_21","_Fragment","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProviderCard2.vue.js","sources":["../../../../../src/views/system/ai-model/components/ProviderCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 单个厂商卡片:三态视觉(启用/停用/待配置 Key)+ 启停开关 + 编辑入口 + 删除 + 测试连接。\n// 待配置态判据:authScheme != 'none' 却没配 Key —— 没 Key 不可能真正启用成功(后端 SetEnabledAsync\n// 会拒 49004),即便库里 enabled=true 也按「待配置」显示,三态互斥、待配置优先。\nimport { computed, ref } from 'vue'\nimport { NAlert, NButton, NCard, NPopover, NSpace, NTag, useMessage } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useAuthStore } from '#/stores/auth'\nimport { aiProviderApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport type { AiProviderView, AiTestResult } from '#/types/api'\nimport { resolvePresetMeta } from '../presets'\n\nconst props = defineProps<{ provider: AiProviderView }>()\nconst emit = defineEmits<{ (e: 'edit'): void; (e: 'deleted'): void }>()\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { confirm } = useConfirm()\nconst authStore = useAuthStore()\n\nconst meta = computed(() => resolvePresetMeta(props.provider.preset))\n// 徽标:自定义厂商(含未登记的预设,resolvePresetMeta 兜底成 custom)画拼图图标,其余用 2 字缩写;\n// 颜色只取强调色衍生(启用)或中性色,不为每个厂商写品牌色\nconst isCustom = computed(() => props.provider.preset === 'custom' || meta.value.abbr === 'Cu')\n/** 没配 Key 就不可能真正启用成功,即便库里 enabled=true 也按「待配置」显示,优先于启用/停用视觉。 */\nconst pendingConfig = computed(\n () => !props.provider.hasApiKey && props.provider.authScheme !== 'none',\n)\nconst cardState = computed(() => {\n if (pendingConfig.value) return 'pending'\n return props.provider.enabled ? 'enabled' : 'disabled'\n})\n// 展示:待配置卡开关显示为关并写「待配置」(只改展示,provider.enabled 的真实值与保存逻辑不变)\nconst switchText = computed(() =>\n pendingConfig.value\n ? t('aiModel.pendingConfig')\n : props.provider.enabled\n ? t('aiModel.enabled')\n : t('aiModel.disabled'),\n)\nconst defaultModel = computed(() => props.provider.models.find(m => m.isDefault) ?? null)\n\nconst canUpdate = computed(() => authStore.hasPerm('PUT:/api/v1/sys/ai/provider/{id}'))\n\nasync function onDelete() {\n const ok = await confirm({\n type: 'warning',\n content: t('aiModel.deleteConfirm', { name: props.provider.name }),\n action: () => aiProviderApi.remove(props.provider.id),\n successMsg: t('aiModel.deleted'),\n })\n if (ok) emit('deleted')\n}\n\n// ── 测试连接:结果在返回体里(ok=false 不代表接口失败),不走 translateError,\n// 只有网络层/其它异常才兜底 message.error。结果用 manual 触发的 popover 展示。 ──\nconst testing = ref(false)\nconst testResultShow = ref(false)\nconst testResult = ref<AiTestResult | null>(null)\nasync function onTest() {\n testing.value = true\n try {\n testResult.value = await aiProviderApi.test(props.provider.id)\n testResultShow.value = true\n } catch (e) {\n message.error(translateError(e))\n } finally {\n testing.value = false\n }\n}\n</script>\n\n<template>\n <n-card\n size=\"small\"\n :bordered=\"true\"\n content-style=\"padding: 12px 14px\"\n class=\"a-card provider-card\"\n :class=\"`provider-card--${cardState}`\"\n >\n <div class=\"card-head\">\n <span class=\"badge\" aria-hidden=\"true\">\n <AppIcon v-if=\"isCustom\" icon=\"ph:puzzle-piece\" :size=\"22\" />\n <template v-else>{{ meta.abbr }}</template>\n </span>\n <div class=\"head-meta\">\n <div class=\"name-row\">\n <span class=\"name\" :title=\"provider.name\">{{ provider.name }}</span>\n <n-tag size=\"small\" :bordered=\"false\" class=\"protocol\">{{ provider.protocol }}</n-tag>\n </div>\n <code class=\"code mono\">{{ provider.code }}</code>\n </div>\n </div>\n\n <n-alert v-if=\"pendingConfig\" type=\"warning\" :bordered=\"false\">\n {{ t('aiModel.pendingConfigTip') }}\n </n-alert>\n\n <div class=\"card-body\">\n <div class=\"row\">\n <span class=\"label faint\">{{ t('aiModel.provider.baseUrl') }}</span>\n <span class=\"value ellipsis muted\" :title=\"provider.baseUrl\">{{ provider.baseUrl }}</span>\n </div>\n <div class=\"row\">\n <span class=\"label faint\">{{ t('aiModel.provider.apiKey') }}</span>\n <span class=\"value muted\">\n {{\n provider.hasApiKey\n ? t('aiModel.provider.hasApiKeyYes')\n : t('aiModel.provider.hasApiKeyNo')\n }}\n <span v-if=\"provider.hasApiKey && provider.apiKeyHint\" class=\"mono\">\n **** {{ provider.apiKeyHint }}\n </span>\n </span>\n </div>\n <div class=\"row\">\n <span class=\"label faint\">{{ t('aiModel.model.title') }}</span>\n <span class=\"value ellipsis muted\">\n {{ provider.models.length }} ·\n {{ defaultModel ? defaultModel.displayName : t('aiModel.model.noDefault') }}\n </span>\n </div>\n </div>\n\n <div class=\"card-actions\">\n <div class=\"switch-group\">\n <StatusSwitch\n v-if=\"canUpdate\"\n :value=\"provider.enabled && !pendingConfig\"\n :disabled=\"pendingConfig\"\n :confirm=\"\n (next: boolean) =>\n next ? null : t('aiModel.provider.disableConfirm', { name: provider.name })\n \"\n :request=\"(next: boolean) => aiProviderApi.setEnabled(provider.id, next)\"\n @update:value=\"(v: boolean) => (provider.enabled = v)\"\n />\n <n-tag\n v-else\n size=\"small\"\n :bordered=\"false\"\n :type=\"provider.enabled && !pendingConfig ? 'success' : 'default'\"\n >\n {{ provider.enabled && !pendingConfig ? t('common.enabled') : t('common.disabled') }}\n </n-tag>\n <span class=\"switch-text muted\">\n {{ switchText }}\n </span>\n </div>\n\n <n-space :size=\"2\" :wrap-item=\"false\">\n <n-popover\n trigger=\"manual\"\n :show=\"testResultShow\"\n placement=\"top\"\n :width=\"260\"\n @clickoutside=\"testResultShow = false\"\n >\n <template #trigger>\n <n-button\n v-auth=\"'POST:/api/v1/sys/ai/provider/{id}/test'\"\n size=\"small\"\n quaternary\n :loading=\"testing\"\n @click=\"onTest\"\n >\n {{ testing ? t('aiModel.test.testing') : t('aiModel.test.action') }}\n </n-button>\n </template>\n <div v-if=\"testResult\" class=\"test-result\">\n <div class=\"test-head\" :class=\"testResult.ok ? 'ok' : 'fail'\">\n <AppIcon :icon=\"testResult.ok ? 'ph:check-circle' : 'ph:x-circle'\" :size=\"17\" />\n {{ testResult.ok ? t('aiModel.test.ok') : t('aiModel.test.failed') }}\n </div>\n <template v-if=\"testResult.ok\">\n <div class=\"test-row\">\n {{ t('aiModel.test.model') }}:\n <span class=\"mono\">{{ testResult.model }}</span>\n </div>\n <div class=\"test-row\">\n {{ t('aiModel.test.latency', { ms: testResult.latencyMs }) }}\n </div>\n <div v-if=\"testResult.usage\" class=\"test-row\">\n {{ t('aiModel.test.usage') }}: {{ t('aiModel.test.inputTokens') }}\n <span class=\"num\">{{ testResult.usage.inputTokens }}</span>\n /\n {{ t('aiModel.test.outputTokens') }}\n <span class=\"num\">{{ testResult.usage.outputTokens }}</span>\n </div>\n </template>\n <div v-else class=\"test-row test-error\">\n {{ t('aiModel.test.error') }}:{{ testResult.error }}\n </div>\n </div>\n </n-popover>\n\n <n-button\n v-auth=\"'PUT:/api/v1/sys/ai/provider/{id}'\"\n size=\"small\"\n quaternary\n type=\"primary\"\n @click=\"emit('edit')\"\n >\n {{ t('common.edit') }}\n </n-button>\n <n-button\n v-auth=\"'DELETE:/api/v1/sys/ai/provider/{id}'\"\n size=\"small\"\n quaternary\n type=\"error\"\n @click=\"onDelete\"\n >\n {{ t('common.delete') }}\n </n-button>\n </n-space>\n </div>\n </n-card>\n</template>\n\n<style scoped>\n.provider-card {\n display: flex;\n flex-direction: column;\n transition:\n border-color var(--transition-fast),\n background-color var(--transition-fast),\n opacity var(--transition-fast);\n}\n.provider-card :deep(.n-card-content) {\n display: flex;\n flex: 1;\n flex-direction: column;\n gap: 10px;\n}\n/* 三态:状态着色必须压过 naive 的 .n-card.n-card--bordered(同权重,加载顺序不确定),\n 故修饰类与 .provider-card 复合写,靠权重取胜。启用 = 选中态令牌(淡底 + 1px 描边),\n 待配置 = 虚线警告色边框,停用 = 整卡 0.72 透明度。 */\n.provider-card.provider-card--enabled {\n border: 1px solid var(--sel-ring);\n background-image: linear-gradient(var(--sel-bg), var(--sel-bg));\n}\n.provider-card.provider-card--disabled {\n opacity: 0.72;\n}\n.provider-card.provider-card--pending {\n border: 1px dashed var(--warn);\n}\n.card-head {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n/* 徽标:缩写色块只取强调色衍生(启用)或中性色 */\n.badge {\n flex: none;\n width: 42px;\n height: 42px;\n border-radius: var(--radius-lg);\n display: grid;\n place-items: center;\n font-size: 15px;\n font-weight: 600;\n letter-spacing: 0.02em;\n color: var(--text-2);\n background: var(--glass-strong);\n box-shadow: inset 0 0 0 1px var(--hairline);\n}\n.provider-card--enabled .badge {\n color: var(--sel-fg);\n background: var(--sel-bg);\n box-shadow: inset 0 0 0 1px var(--sel-ring);\n}\n.head-meta {\n min-width: 0;\n flex: 1;\n}\n.name-row {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n.name {\n font-size: 15px;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--text-1);\n}\n.protocol {\n flex: none;\n}\n.code {\n display: inline-block;\n margin-top: 4px;\n padding: 0 6px;\n border-radius: 6px;\n background: var(--fill);\n color: var(--text-2);\n}\n.card-body {\n display: flex;\n flex-direction: column;\n gap: 6px;\n font-size: 14px;\n}\n.row {\n display: flex;\n gap: 8px;\n min-width: 0;\n}\n.label {\n flex: none;\n width: 66px;\n}\n.value {\n min-width: 0;\n}\n.value.ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.card-actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 4px 8px;\n margin-top: auto;\n padding-top: 10px;\n border-top: 1px dashed var(--hairline-strong);\n}\n.switch-group {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.switch-text {\n font-size: 13.5px;\n}\n.test-result {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-size: 13.5px;\n}\n.test-head {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n}\n.test-head.ok {\n color: var(--ok);\n}\n.test-head.fail {\n color: var(--err);\n}\n.test-error {\n color: var(--err);\n}\n</style>\n"],"names":["props","__props","emit","__emit","t","useI18n","message","useMessage","confirm","useConfirm","authStore","useAuthStore","meta","computed","resolvePresetMeta","isCustom","pendingConfig","cardState","switchText","defaultModel","m","canUpdate","onDelete","aiProviderApi","testing","ref","testResultShow","testResult","onTest","e","translateError","_createBlock","_unref","NCard","_normalizeClass","_createElementVNode","_hoisted_1","_hoisted_2","AppIcon","_createElementBlock","_Fragment","_createTextVNode","_toDisplayString","_hoisted_3","_hoisted_4","_hoisted_5","_createVNode","NTag","_hoisted_6","NAlert","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_openBlock","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","StatusSwitch","next","_hoisted_20","NSpace","NPopover","NButton","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import o from "./ProviderForm2.vue.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import r from "../../../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const
|
|
4
|
+
const p = /* @__PURE__ */ r(o, [["__scopeId", "data-v-8a40830a"]]);
|
|
5
5
|
export {
|
|
6
|
-
|
|
6
|
+
p as default
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=ProviderForm.vue.js.map
|