smart-admin-web 10.15.0 → 10.20.1

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.
Files changed (432) hide show
  1. package/README.md +1 -1
  2. package/dist/api/index.d.ts +4 -2
  3. package/dist/api/index.js +1 -1
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/schema.d.ts +39 -5
  6. package/dist/assets/icons/ph-subset.json.js +5 -5
  7. package/dist/components/AppIcon.vue.js +9 -9
  8. package/dist/components/AppIcon.vue.js.map +1 -1
  9. package/dist/components/AppWatermark.vue.d.ts +14 -0
  10. package/dist/components/AppWatermark.vue.js +38 -0
  11. package/dist/components/AppWatermark.vue.js.map +1 -0
  12. package/dist/components/AppWatermark2.vue.js +5 -0
  13. package/dist/components/AppWatermark2.vue.js.map +1 -0
  14. package/dist/components/Chart/PieChart.vue.d.ts +1 -1
  15. package/dist/components/Chart/echarts.js +15 -20
  16. package/dist/components/Chart/echarts.js.map +1 -1
  17. package/dist/components/CronEditor/index.vue.js +1 -1
  18. package/dist/components/CronEditor/index2.vue.js +2 -1
  19. package/dist/components/CronEditor/index2.vue.js.map +1 -1
  20. package/dist/components/DetailPage/index.vue.js +2 -2
  21. package/dist/components/DetailPage/index2.vue.js.map +1 -1
  22. package/dist/components/DictTag/index.vue.js.map +1 -1
  23. package/dist/components/ErrorBoundary/index.vue.js +2 -2
  24. package/dist/components/ErrorBoundary/index2.vue.js +1 -1
  25. package/dist/components/ErrorBoundary/index2.vue.js.map +1 -1
  26. package/dist/components/FormContainer/index.vue.js +91 -56
  27. package/dist/components/FormContainer/index.vue.js.map +1 -1
  28. package/dist/components/ImportWizard/index.vue.js +1 -1
  29. package/dist/components/ImportWizard/index2.vue.js +44 -41
  30. package/dist/components/ImportWizard/index2.vue.js.map +1 -1
  31. package/dist/components/MenuSearch.vue.js +2 -2
  32. package/dist/components/MenuSearch2.vue.js +19 -18
  33. package/dist/components/MenuSearch2.vue.js.map +1 -1
  34. package/dist/components/PasswordStrength/index.vue.js +2 -2
  35. package/dist/components/PasswordStrength/index2.vue.js +20 -18
  36. package/dist/components/PasswordStrength/index2.vue.js.map +1 -1
  37. package/dist/components/TableTotal/index.vue.d.ts +6 -0
  38. package/dist/components/{SelectTable → TableTotal}/index.vue.js +1 -1
  39. package/dist/components/TableTotal/index2.vue.js +16 -0
  40. package/dist/components/TableTotal/index2.vue.js.map +1 -0
  41. package/dist/components/TableZoomButton/index.vue.js.map +1 -1
  42. package/dist/components/UserPicker/index.vue.js +2 -2
  43. package/dist/components/UserPicker/index2.vue.js +176 -117
  44. package/dist/components/UserPicker/index2.vue.js.map +1 -1
  45. package/dist/composables/useBatchDelete.js.map +1 -1
  46. package/dist/composables/useLayoutMenu.js +17 -16
  47. package/dist/composables/useLayoutMenu.js.map +1 -1
  48. package/dist/composables/useModule.js +39 -29
  49. package/dist/composables/useModule.js.map +1 -1
  50. package/dist/composables/useShellBreakpoint.d.ts +19 -0
  51. package/dist/composables/useShellBreakpoint.js +37 -0
  52. package/dist/composables/useShellBreakpoint.js.map +1 -0
  53. package/dist/composables/useSite.d.ts +15 -0
  54. package/dist/composables/useSite.js +16 -14
  55. package/dist/composables/useSite.js.map +1 -1
  56. package/dist/composables/useTabTitle.js.map +1 -1
  57. package/dist/composables/useTableTitle.d.ts +6 -0
  58. package/dist/composables/useTableTitle.js +11 -0
  59. package/dist/composables/useTableTitle.js.map +1 -0
  60. package/dist/composables/useTableZoom.d.ts +5 -0
  61. package/dist/composables/useTableZoom.js.map +1 -1
  62. package/dist/composables/useTheme.d.ts +2 -2
  63. package/dist/composables/useTheme.js +23 -20
  64. package/dist/composables/useTheme.js.map +1 -1
  65. package/dist/createSmartAdmin.d.ts +12 -2
  66. package/dist/createSmartAdmin.js +72 -60
  67. package/dist/createSmartAdmin.js.map +1 -1
  68. package/dist/index.d.ts +5 -2
  69. package/dist/index.js +219 -205
  70. package/dist/index.js.map +1 -1
  71. package/dist/layouts/AccentPicker.vue.js +8 -0
  72. package/dist/layouts/AccentPicker.vue.js.map +1 -0
  73. package/dist/layouts/AccentPicker2.vue.js +131 -0
  74. package/dist/layouts/AccentPicker2.vue.js.map +1 -0
  75. package/dist/layouts/AppHeader.vue.d.ts +8 -1
  76. package/dist/layouts/AppHeader.vue.js +2 -2
  77. package/dist/layouts/AppHeader2.vue.js +317 -235
  78. package/dist/layouts/AppHeader2.vue.js.map +1 -1
  79. package/dist/layouts/NoticeBell.vue.js +2 -2
  80. package/dist/layouts/NoticeBell2.vue.js +19 -18
  81. package/dist/layouts/NoticeBell2.vue.js.map +1 -1
  82. package/dist/layouts/PersonalLayout.vue.js +2 -2
  83. package/dist/layouts/PersonalLayout2.vue.js +69 -47
  84. package/dist/layouts/PersonalLayout2.vue.js.map +1 -1
  85. package/dist/layouts/SettingsDrawer.vue.js +3 -3
  86. package/dist/layouts/SettingsDrawer2.vue.js +261 -325
  87. package/dist/layouts/SettingsDrawer2.vue.js.map +1 -1
  88. package/dist/layouts/TabsBar.vue.js +2 -2
  89. package/dist/layouts/TabsBar2.vue.js +97 -69
  90. package/dist/layouts/TabsBar2.vue.js.map +1 -1
  91. package/dist/layouts/components/SideNav.vue.d.ts +3 -0
  92. package/dist/layouts/components/SideNav.vue.js +1 -1
  93. package/dist/layouts/components/SideNav2.vue.js +54 -26
  94. package/dist/layouts/components/SideNav2.vue.js.map +1 -1
  95. package/dist/layouts/default.vue.js +1 -1
  96. package/dist/layouts/default2.vue.js +170 -140
  97. package/dist/layouts/default2.vue.js.map +1 -1
  98. package/dist/lib/loginHero.d.ts +2 -2
  99. package/dist/lib/loginHero.js.map +1 -1
  100. package/dist/lib/runtime.js +1 -1
  101. package/dist/lib/watermark.d.ts +110 -0
  102. package/dist/lib/watermark.js +151 -0
  103. package/dist/lib/watermark.js.map +1 -0
  104. package/dist/locales/en-US.d.ts +221 -15
  105. package/dist/locales/en-US.js +230 -21
  106. package/dist/locales/en-US.js.map +1 -1
  107. package/dist/locales/kernelMenuTitles.d.ts +1 -0
  108. package/dist/locales/kernelMenuTitles.js +128 -0
  109. package/dist/locales/kernelMenuTitles.js.map +1 -0
  110. package/dist/locales/menuTitle.d.ts +3 -0
  111. package/dist/locales/menuTitle.js +14 -12
  112. package/dist/locales/menuTitle.js.map +1 -1
  113. package/dist/locales/zh-CN.d.ts +221 -15
  114. package/dist/locales/zh-CN.js +238 -28
  115. package/dist/locales/zh-CN.js.map +1 -1
  116. package/dist/router/index.js +41 -32
  117. package/dist/router/index.js.map +1 -1
  118. package/dist/router/namedPage.d.ts +4 -0
  119. package/dist/router/namedPage.js +7 -7
  120. package/dist/router/namedPage.js.map +1 -1
  121. package/dist/router/viewRegistry.js +8 -8
  122. package/dist/router/viewRegistry.js.map +1 -1
  123. package/dist/stores/app.d.ts +0 -12
  124. package/dist/stores/app.js +11 -12
  125. package/dist/stores/app.js.map +1 -1
  126. package/dist/stores/tabs.js.map +1 -1
  127. package/dist/stores/user.d.ts +10 -0
  128. package/dist/stores/user.js.map +1 -1
  129. package/dist/style.css +1 -1
  130. package/dist/theme/accentTokens.d.ts +27 -0
  131. package/dist/theme/accentTokens.js +54 -0
  132. package/dist/theme/accentTokens.js.map +1 -0
  133. package/dist/theme/accents.d.ts +21 -1
  134. package/dist/theme/accents.js +11 -2
  135. package/dist/theme/accents.js.map +1 -1
  136. package/dist/theme/mix.d.ts +58 -7
  137. package/dist/theme/mix.js +115 -30
  138. package/dist/theme/mix.js.map +1 -1
  139. package/dist/theme/naive-theme.d.ts +5 -2
  140. package/dist/theme/naive-theme.js +407 -75
  141. package/dist/theme/naive-theme.js.map +1 -1
  142. package/dist/utils/jwt.d.ts +8 -0
  143. package/dist/utils/jwt.js +14 -0
  144. package/dist/utils/jwt.js.map +1 -0
  145. package/dist/utils/menuIcon.d.ts +2 -0
  146. package/dist/utils/menuIcon.js +8 -0
  147. package/dist/utils/menuIcon.js.map +1 -0
  148. package/dist/utils/oauthBrand.js.map +1 -1
  149. package/dist/utils/tableFilter.d.ts +88 -0
  150. package/dist/utils/tableFilter.js +116 -0
  151. package/dist/utils/tableFilter.js.map +1 -0
  152. package/dist/utils/tableToolbar.d.ts +18 -0
  153. package/dist/utils/tableToolbar.js +11 -0
  154. package/dist/utils/tableToolbar.js.map +1 -0
  155. package/dist/utils/treeFilter.d.ts +20 -0
  156. package/dist/utils/treeFilter.js +24 -0
  157. package/dist/utils/treeFilter.js.map +1 -0
  158. package/dist/views/dashboard/ShortcutPicker.vue.js +1 -1
  159. package/dist/views/dashboard/ShortcutPicker2.vue.js +73 -48
  160. package/dist/views/dashboard/ShortcutPicker2.vue.js.map +1 -1
  161. package/dist/views/dashboard/biz.vue.js +1 -1
  162. package/dist/views/dashboard/biz2.vue.js +310 -257
  163. package/dist/views/dashboard/biz2.vue.js.map +1 -1
  164. package/dist/views/dashboard/workbench.vue.js +2 -2
  165. package/dist/views/dashboard/workbench2.vue.js +141 -155
  166. package/dist/views/dashboard/workbench2.vue.js.map +1 -1
  167. package/dist/views/embed/iframe.vue.js +2 -2
  168. package/dist/views/embed/iframe2.vue.js +22 -15
  169. package/dist/views/embed/iframe2.vue.js.map +1 -1
  170. package/dist/views/error/404.vue.js +2 -2
  171. package/dist/views/error/4042.vue.js +33 -24
  172. package/dist/views/error/4042.vue.js.map +1 -1
  173. package/dist/views/error/BootError.vue.js +1 -1
  174. package/dist/views/error/BootError2.vue.js +59 -48
  175. package/dist/views/error/BootError2.vue.js.map +1 -1
  176. package/dist/views/error/MissingRoute.vue.js +2 -2
  177. package/dist/views/error/MissingRoute2.vue.js +34 -15
  178. package/dist/views/error/MissingRoute2.vue.js.map +1 -1
  179. package/dist/views/login/LoginForm.vue.d.ts +7 -1
  180. package/dist/views/login/LoginForm.vue.js +2 -2
  181. package/dist/views/login/LoginForm2.vue.js +580 -488
  182. package/dist/views/login/LoginForm2.vue.js.map +1 -1
  183. package/dist/views/login/components/LoginDesk.vue.d.ts +36 -0
  184. package/dist/views/login/components/LoginDesk.vue.js +9 -0
  185. package/dist/views/login/components/LoginDesk.vue.js.map +1 -0
  186. package/dist/views/login/components/LoginDesk2.vue.js +100 -0
  187. package/dist/views/login/components/LoginDesk2.vue.js.map +1 -0
  188. package/dist/views/login/components/LoginHeroPanel.vue.js +3 -3
  189. package/dist/views/login/components/LoginHeroPanel2.vue.js +34 -39
  190. package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -1
  191. package/dist/views/login/index.vue.js +1 -1
  192. package/dist/views/login/index2.vue.js +141 -71
  193. package/dist/views/login/index2.vue.js.map +1 -1
  194. package/dist/views/login/layout.d.ts +11 -0
  195. package/dist/views/login/layout.js +27 -0
  196. package/dist/views/login/layout.js.map +1 -0
  197. package/dist/views/mfa/index.vue.js +2 -2
  198. package/dist/views/mfa/index2.vue.js +367 -321
  199. package/dist/views/mfa/index2.vue.js.map +1 -1
  200. package/dist/views/module/index.vue.js +2 -2
  201. package/dist/views/module/index2.vue.js +132 -99
  202. package/dist/views/module/index2.vue.js.map +1 -1
  203. package/dist/views/oauth/callback.vue.js +2 -2
  204. package/dist/views/oauth/callback2.vue.js +65 -51
  205. package/dist/views/oauth/callback2.vue.js.map +1 -1
  206. package/dist/views/personal/bindings.vue.js +2 -2
  207. package/dist/views/personal/bindings2.vue.js +98 -94
  208. package/dist/views/personal/bindings2.vue.js.map +1 -1
  209. package/dist/views/personal/notice2.vue.js +103 -76
  210. package/dist/views/personal/notice2.vue.js.map +1 -1
  211. package/dist/views/personal/password2.vue.js +47 -40
  212. package/dist/views/personal/password2.vue.js.map +1 -1
  213. package/dist/views/personal/profile.vue.js +3 -3
  214. package/dist/views/personal/profile2.vue.js +24 -18
  215. package/dist/views/personal/profile2.vue.js.map +1 -1
  216. package/dist/views/personal/security.vue.js +2 -2
  217. package/dist/views/personal/security2.vue.js +65 -53
  218. package/dist/views/personal/security2.vue.js.map +1 -1
  219. package/dist/views/personal/sessions.vue.js +2 -2
  220. package/dist/views/personal/sessions2.vue.js +67 -62
  221. package/dist/views/personal/sessions2.vue.js.map +1 -1
  222. package/dist/views/system/ai-model/components/ProviderCard.vue.js +2 -2
  223. package/dist/views/system/ai-model/components/ProviderCard2.vue.js +142 -130
  224. package/dist/views/system/ai-model/components/ProviderCard2.vue.js.map +1 -1
  225. package/dist/views/system/ai-model/components/ProviderForm.vue.js +2 -2
  226. package/dist/views/system/ai-model/components/ProviderForm2.vue.js +71 -70
  227. package/dist/views/system/ai-model/components/ProviderForm2.vue.js.map +1 -1
  228. package/dist/views/system/ai-model/index.vue.js +2 -2
  229. package/dist/views/system/ai-model/index2.vue.js +99 -99
  230. package/dist/views/system/ai-model/index2.vue.js.map +1 -1
  231. package/dist/views/system/ai-model/presets.d.ts +1 -1
  232. package/dist/views/system/ai-model/presets.js +18 -18
  233. package/dist/views/system/ai-model/presets.js.map +1 -1
  234. package/dist/views/system/ai-usage/index.vue.js +2 -2
  235. package/dist/views/system/ai-usage/index2.vue.js +356 -258
  236. package/dist/views/system/ai-usage/index2.vue.js.map +1 -1
  237. package/dist/views/system/api-docs/index.vue.js +5 -2
  238. package/dist/views/system/api-docs/index.vue.js.map +1 -1
  239. package/dist/views/system/api-docs/index2.vue.js +92 -42
  240. package/dist/views/system/api-docs/index2.vue.js.map +1 -1
  241. package/dist/views/system/cache/index.vue.js +2 -2
  242. package/dist/views/system/cache/index2.vue.js +74 -80
  243. package/dist/views/system/cache/index2.vue.js.map +1 -1
  244. package/dist/views/system/config/components/AdminMock.vue.js +2 -2
  245. package/dist/views/system/config/components/AdminMock2.vue.js +60 -43
  246. package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -1
  247. package/dist/views/system/config/components/AdvancedSection.vue.js +5 -2
  248. package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -1
  249. package/dist/views/system/config/components/AdvancedSection2.vue.js +98 -70
  250. package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -1
  251. package/dist/views/system/config/components/BrandSection.vue.js +2 -2
  252. package/dist/views/system/config/components/BrandSection2.vue.js +121 -119
  253. package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -1
  254. package/dist/views/system/config/components/CfgGroup.vue.js +3 -3
  255. package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -1
  256. package/dist/views/system/config/components/CfgRow.vue.js +1 -1
  257. package/dist/views/system/config/components/CfgRow2.vue.js +24 -23
  258. package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -1
  259. package/dist/views/system/config/components/CfgSegment.vue.js +1 -1
  260. package/dist/views/system/config/components/CfgSegment2.vue.js +16 -15
  261. package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -1
  262. package/dist/views/system/config/components/ConfigFormModal.vue.js +2 -2
  263. package/dist/views/system/config/components/ConfigFormModal2.vue.js +35 -33
  264. package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
  265. package/dist/views/system/config/components/JobSection.vue.js +2 -2
  266. package/dist/views/system/config/components/JobSection2.vue.js +46 -44
  267. package/dist/views/system/config/components/JobSection2.vue.js.map +1 -1
  268. package/dist/views/system/config/components/LoginMock.vue.js +3 -3
  269. package/dist/views/system/config/components/LoginMock2.vue.js +83 -72
  270. package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -1
  271. package/dist/views/system/config/components/LogoCropper.vue.js +1 -1
  272. package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -1
  273. package/dist/views/system/config/components/LogoEditor.vue.js +2 -2
  274. package/dist/views/system/config/components/LogoEditor2.vue.js +11 -13
  275. package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -1
  276. package/dist/views/system/config/components/ProviderSheet.vue.js +3 -3
  277. package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -1
  278. package/dist/views/system/config/components/SectionLayout.vue.d.ts +4 -2
  279. package/dist/views/system/config/components/SectionLayout.vue.js +2 -2
  280. package/dist/views/system/config/components/SectionLayout2.vue.js +51 -27
  281. package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -1
  282. package/dist/views/system/config/components/SecuritySection.vue.js +2 -2
  283. package/dist/views/system/config/components/SecuritySection2.vue.js +207 -206
  284. package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -1
  285. package/dist/views/system/config/components/SensitiveSection.vue.js +2 -2
  286. package/dist/views/system/config/components/SensitiveSection2.vue.js +107 -102
  287. package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -1
  288. package/dist/views/system/config/components/UploadSection.vue.js +2 -2
  289. package/dist/views/system/config/components/UploadSection2.vue.js +86 -77
  290. package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -1
  291. package/dist/views/system/config/components/WatermarkSection.vue.js +8 -0
  292. package/dist/views/system/config/components/WatermarkSection.vue.js.map +1 -0
  293. package/dist/views/system/config/components/WatermarkSection2.vue.js +284 -0
  294. package/dist/views/system/config/components/WatermarkSection2.vue.js.map +1 -0
  295. package/dist/views/system/config/draft.d.ts +2 -2
  296. package/dist/views/system/config/draft.js.map +1 -1
  297. package/dist/views/system/config/groups.d.ts +4 -1
  298. package/dist/views/system/config/groups.js +54 -49
  299. package/dist/views/system/config/groups.js.map +1 -1
  300. package/dist/views/system/config/index.vue.js +3 -2
  301. package/dist/views/system/config/index.vue.js.map +1 -1
  302. package/dist/views/system/config/index2.vue.js +173 -148
  303. package/dist/views/system/config/index2.vue.js.map +1 -1
  304. package/dist/views/system/config/layoutMode.d.ts +23 -0
  305. package/dist/views/system/config/layoutMode.js +28 -0
  306. package/dist/views/system/config/layoutMode.js.map +1 -0
  307. package/dist/views/system/dict/index.vue.js +2 -2
  308. package/dist/views/system/dict/index2.vue.js +471 -366
  309. package/dist/views/system/dict/index2.vue.js.map +1 -1
  310. package/dist/views/system/file/index2.vue.js +91 -76
  311. package/dist/views/system/file/index2.vue.js.map +1 -1
  312. package/dist/views/system/job/index.vue.js +3 -3
  313. package/dist/views/system/job/index2.vue.js +897 -828
  314. package/dist/views/system/job/index2.vue.js.map +1 -1
  315. package/dist/views/system/job-log/components/AttemptTable.vue.d.ts +8 -0
  316. package/dist/views/system/job-log/components/AttemptTable.vue.js +5 -0
  317. package/dist/views/system/job-log/components/AttemptTable.vue.js.map +1 -0
  318. package/dist/views/system/job-log/components/AttemptTable2.vue.js +54 -0
  319. package/dist/views/system/job-log/components/AttemptTable2.vue.js.map +1 -0
  320. package/dist/views/system/job-log/index.vue.js +2 -2
  321. package/dist/views/system/job-log/index2.vue.js +193 -207
  322. package/dist/views/system/job-log/index2.vue.js.map +1 -1
  323. package/dist/views/system/job-log/runStatus.d.ts +13 -0
  324. package/dist/views/system/job-log/runStatus.js +26 -0
  325. package/dist/views/system/job-log/runStatus.js.map +1 -0
  326. package/dist/views/system/job-monitor/index.vue.js +2 -2
  327. package/dist/views/system/job-monitor/index2.vue.js +172 -180
  328. package/dist/views/system/job-monitor/index2.vue.js.map +1 -1
  329. package/dist/views/system/log/exception/index.vue.js +2 -2
  330. package/dist/views/system/log/exception/index2.vue.js +135 -96
  331. package/dist/views/system/log/exception/index2.vue.js.map +1 -1
  332. package/dist/views/system/log/login/index2.vue.js +62 -41
  333. package/dist/views/system/log/login/index2.vue.js.map +1 -1
  334. package/dist/views/system/log/op/index.vue.js +2 -2
  335. package/dist/views/system/log/op/index2.vue.js +200 -162
  336. package/dist/views/system/log/op/index2.vue.js.map +1 -1
  337. package/dist/views/system/menu/components/ButtonManager.vue.js +2 -2
  338. package/dist/views/system/menu/components/ButtonManager2.vue.js +206 -190
  339. package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -1
  340. package/dist/views/system/menu/components/MenuFormModal.vue.js +2 -2
  341. package/dist/views/system/menu/components/MenuFormModal2.vue.js +127 -118
  342. package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -1
  343. package/dist/views/system/menu/index.vue.js +1 -1
  344. package/dist/views/system/menu/index2.vue.js +216 -183
  345. package/dist/views/system/menu/index2.vue.js.map +1 -1
  346. package/dist/views/system/module/index.vue.js +1 -1
  347. package/dist/views/system/module/index2.vue.js +177 -144
  348. package/dist/views/system/module/index2.vue.js.map +1 -1
  349. package/dist/views/system/monitor/index.vue.js +2 -2
  350. package/dist/views/system/monitor/index2.vue.js +134 -149
  351. package/dist/views/system/monitor/index2.vue.js.map +1 -1
  352. package/dist/views/system/notice/index.vue.js +1 -1
  353. package/dist/views/system/notice/index2.vue.js +209 -181
  354. package/dist/views/system/notice/index2.vue.js.map +1 -1
  355. package/dist/views/system/org/index.vue.js +1 -1
  356. package/dist/views/system/org/index2.vue.js +278 -248
  357. package/dist/views/system/org/index2.vue.js.map +1 -1
  358. package/dist/views/system/position/index.vue.js +5 -2
  359. package/dist/views/system/position/index.vue.js.map +1 -1
  360. package/dist/views/system/position/index2.vue.js +128 -92
  361. package/dist/views/system/position/index2.vue.js.map +1 -1
  362. package/dist/views/system/recycle/index.vue.js +2 -2
  363. package/dist/views/system/recycle/index2.vue.js +90 -67
  364. package/dist/views/system/recycle/index2.vue.js.map +1 -1
  365. package/dist/views/system/role/components/GrantMenuSheet.vue.d.ts +20 -0
  366. package/dist/views/system/role/components/GrantMenuSheet.vue.js +8 -0
  367. package/dist/views/system/role/components/GrantMenuSheet.vue.js.map +1 -0
  368. package/dist/views/system/role/components/GrantMenuSheet2.vue.js +117 -0
  369. package/dist/views/system/role/components/GrantMenuSheet2.vue.js.map +1 -0
  370. package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +6 -4
  371. package/dist/views/system/role/components/GrantMenuTable.vue.js +2 -2
  372. package/dist/views/system/role/components/GrantMenuTable2.vue.js +279 -177
  373. package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -1
  374. package/dist/views/system/role/components/MatchText.vue.d.ts +7 -0
  375. package/dist/views/system/role/components/MatchText.vue.js +8 -0
  376. package/dist/views/system/role/components/MatchText.vue.js.map +1 -0
  377. package/dist/views/system/role/components/MatchText2.vue.js +29 -0
  378. package/dist/views/system/role/components/MatchText2.vue.js.map +1 -0
  379. package/dist/views/system/role/components/grantMenuGroups.d.ts +36 -0
  380. package/dist/views/system/role/components/grantMenuGroups.js +110 -48
  381. package/dist/views/system/role/components/grantMenuGroups.js.map +1 -1
  382. package/dist/views/system/role/index.vue.js +5 -2
  383. package/dist/views/system/role/index.vue.js.map +1 -1
  384. package/dist/views/system/role/index2.vue.js +181 -165
  385. package/dist/views/system/role/index2.vue.js.map +1 -1
  386. package/dist/views/system/session/index2.vue.js +75 -49
  387. package/dist/views/system/session/index2.vue.js.map +1 -1
  388. package/dist/views/system/user/components/ResetPasswordModal.vue.js +2 -2
  389. package/dist/views/system/user/components/ResetPasswordModal2.vue.js +2 -0
  390. package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -1
  391. package/dist/views/system/user/components/UserFormModal.vue.js +2 -2
  392. package/dist/views/system/user/components/UserFormModal2.vue.js +77 -76
  393. package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -1
  394. package/dist/views/system/user/index.vue.js +2 -2
  395. package/dist/views/system/user/index2.vue.js +362 -275
  396. package/dist/views/system/user/index2.vue.js.map +1 -1
  397. package/package.json +3 -5
  398. package/dist/components/SelectTable/index.vue.d.ts +0 -76
  399. package/dist/components/SelectTable/index2.vue.js +0 -256
  400. package/dist/components/SelectTable/index2.vue.js.map +0 -1
  401. package/dist/composables/useTableRowSort.d.ts +0 -20
  402. package/dist/composables/useTableRowSort.js +0 -59
  403. package/dist/composables/useTableRowSort.js.map +0 -1
  404. package/dist/layouts/LayoutModeCards.vue.js +0 -8
  405. package/dist/layouts/LayoutModeCards.vue.js.map +0 -1
  406. package/dist/layouts/LayoutModeCards2.vue.js +0 -67
  407. package/dist/layouts/LayoutModeCards2.vue.js.map +0 -1
  408. package/dist/layouts/SettingRow.vue.d.ts +0 -16
  409. package/dist/layouts/SettingRow.vue.js +0 -8
  410. package/dist/layouts/SettingRow.vue.js.map +0 -1
  411. package/dist/layouts/SettingRow2.vue.js +0 -23
  412. package/dist/layouts/SettingRow2.vue.js.map +0 -1
  413. package/dist/views/login/skins/AuroraGlass.vue.js +0 -8
  414. package/dist/views/login/skins/AuroraGlass.vue.js.map +0 -1
  415. package/dist/views/login/skins/AuroraGlass2.vue.js +0 -80
  416. package/dist/views/login/skins/AuroraGlass2.vue.js.map +0 -1
  417. package/dist/views/login/skins/SplitPanel.vue.d.ts +0 -3
  418. package/dist/views/login/skins/SplitPanel.vue.js +0 -8
  419. package/dist/views/login/skins/SplitPanel.vue.js.map +0 -1
  420. package/dist/views/login/skins/SplitPanel2.vue.js +0 -65
  421. package/dist/views/login/skins/SplitPanel2.vue.js.map +0 -1
  422. package/dist/views/login/skins/Spotlight.vue.d.ts +0 -3
  423. package/dist/views/login/skins/Spotlight.vue.js +0 -8
  424. package/dist/views/login/skins/Spotlight.vue.js.map +0 -1
  425. package/dist/views/login/skins/Spotlight2.vue.js +0 -36
  426. package/dist/views/login/skins/Spotlight2.vue.js.map +0 -1
  427. package/dist/views/login/skins.d.ts +0 -8
  428. package/dist/views/login/skins.js +0 -13
  429. package/dist/views/login/skins.js.map +0 -1
  430. /package/dist/components/{SelectTable → TableTotal}/index.vue.js.map +0 -0
  431. /package/dist/layouts/{LayoutModeCards.vue.d.ts → AccentPicker.vue.d.ts} +0 -0
  432. /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 H, computed as h, ref as w, resolveDirective as R, openBlock as l, createBlock as m, unref as e, normalizeClass as P, withCtx as d, createElementVNode as s, normalizeStyle as F, createVNode as u, toDisplayString as t, createTextVNode as n, createElementBlock as p, createCommentVNode as g, Fragment as I, withDirectives as C } from "vue";
2
- import { useMessage as L, NCard as O, NTag as A, NSpace as Y, NPopover as j, NButton as z } from "naive-ui";
3
- import { useI18n as G } from "vue-i18n";
4
- import _ from "../../../../components/AppIcon.vue.js";
5
- import J from "../../../../components/StatusSwitch/index.vue.js";
6
- import { useConfirm as Q } from "../../../../composables/useConfirm.js";
7
- import { useAuthStore as W } from "../../../../stores/auth.js";
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 X } from "../../../../utils/error.js";
10
- import { resolvePresetMeta as Z } from "../presets.js";
11
- const ee = { class: "card-head" }, te = { class: "head-meta" }, oe = { class: "name-row" }, se = { class: "name" }, ae = { class: "code" }, ie = {
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: "pending-tip"
14
- }, le = { class: "card-body" }, de = { class: "row" }, re = { class: "label" }, ne = ["title"], ce = { class: "row" }, ue = { class: "label" }, ve = { class: "value" }, me = {
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
- }, be = { class: "test-row" }, Me = { class: "test-row" }, we = {
20
+ }, we = { class: "test-row" }, Ce = { class: "mono" }, Te = { class: "test-row" }, ze = {
21
21
  key: 0,
22
22
  class: "test-row"
23
- }, Ce = {
23
+ }, Ne = { class: "num" }, xe = { class: "num" }, Ae = {
24
24
  key: 1,
25
25
  class: "test-row test-error"
26
- }, xe = /* @__PURE__ */ H({
26
+ }, He = /* @__PURE__ */ I({
27
27
  __name: "ProviderCard",
28
28
  props: {
29
29
  provider: {}
30
30
  },
31
31
  emits: ["edit", "deleted"],
32
- setup(a, { emit: D }) {
33
- const r = a, N = D, { t: o } = G(), E = L(), { confirm: U } = Q(), x = W(), S = h(() => Z(r.provider.preset)), k = h(
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
- ), q = h(() => k.value ? "pending" : r.provider.enabled ? "enabled" : "disabled"), K = h(() => r.provider.models.find((f) => f.isDefault) ?? null), $ = h(() => x.hasPerm("PUT:/api/v1/sys/ai/provider/{id}"));
36
- async function B() {
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: o("aiModel.deleteConfirm", { name: r.provider.name }),
41
+ content: s("aiModel.deleteConfirm", { name: r.provider.name }),
40
42
  action: () => T.remove(r.provider.id),
41
- successMsg: o("aiModel.deleted")
42
- }) && N("deleted");
43
+ successMsg: s("aiModel.deleted")
44
+ }) && z("deleted");
43
45
  }
44
- const y = w(!1), b = w(!1), i = w(null);
45
- async function V() {
46
+ const y = M(!1), g = M(!1), l = M(null);
47
+ async function F() {
46
48
  y.value = !0;
47
49
  try {
48
- i.value = await T.test(r.provider.id), b.value = !0;
49
- } catch (f) {
50
- E.error(X(f));
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 (f, v) => {
56
- const M = R("auth");
57
- return l(), m(e(O), {
57
+ return (h, p) => {
58
+ const k = L("auth");
59
+ return i(), c(e(Y), {
58
60
  size: "small",
59
61
  bordered: !0,
60
- class: P(["provider-card", `provider-card--${q.value}`])
62
+ "content-style": "padding: 12px 14px",
63
+ class: A(["a-card provider-card", `provider-card--${B.value}`])
61
64
  }, {
62
- default: d(() => [
63
- s("div", ee, [
64
- s("span", {
65
- class: "badge",
66
- style: F({ color: S.value.color })
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
- }, null, 8, ["icon"])
72
- ], 4),
73
- s("div", te, [
74
- s("div", oe, [
75
- s("span", se, t(a.provider.name), 1),
76
- u(e(A), {
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: d(() => [
81
- n(t(a.provider.protocol), 1)
87
+ default: n(() => [
88
+ d(t(o.provider.protocol), 1)
82
89
  ]),
83
90
  _: 1
84
91
  })
85
92
  ]),
86
- s("code", ae, t(a.provider.code), 1)
93
+ a("code", de, t(o.provider.code), 1)
87
94
  ])
88
95
  ]),
89
- k.value ? (l(), p("div", ie, [
90
- u(_, {
91
- icon: "ph:warning-circle-duotone",
92
- size: 14
93
- }),
94
- n(" " + t(e(o)("aiModel.pendingConfigTip")), 1)
95
- ])) : g("", !0),
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
- s("div", ce, [
105
- s("span", ue, t(e(o)("aiModel.provider.apiKey")), 1),
106
- s("span", ve, [
107
- n(t(a.provider.hasApiKey ? e(o)("aiModel.provider.hasApiKeyYes") : e(o)("aiModel.provider.hasApiKeyNo")) + " ", 1),
108
- a.provider.hasApiKey && a.provider.apiKeyHint ? (l(), p("span", me, " **** " + t(a.provider.apiKeyHint), 1)) : g("", !0)
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
- s("div", pe, [
112
- s("span", fe, t(e(o)("aiModel.model.title")), 1),
113
- s("span", he, t(a.provider.models.length) + " · " + t(K.value ? K.value.displayName : e(o)("aiModel.model.noDefault")), 1)
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
- s("div", ye, [
117
- s("div", ge, [
118
- $.value ? (l(), m(J, {
126
+ a("div", be, [
127
+ a("div", ge, [
128
+ H.value ? (i(), c(W, {
119
129
  key: 0,
120
- value: a.provider.enabled,
121
- disabled: k.value,
122
- confirm: (c) => c ? null : e(o)("aiModel.provider.disableConfirm", { name: a.provider.name }),
123
- request: (c) => e(T).setEnabled(a.provider.id, c),
124
- "onUpdate:value": v[0] || (v[0] = (c) => a.provider.enabled = c)
125
- }, null, 8, ["value", "disabled", "confirm", "request"])) : (l(), m(e(A), {
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: a.provider.enabled ? "success" : "default"
139
+ type: o.provider.enabled && !u.value ? "success" : "default"
130
140
  }, {
131
- default: d(() => [
132
- n(t(a.provider.enabled ? e(o)("common.enabled") : e(o)("common.disabled")), 1)
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
- s("span", _e, t(a.provider.enabled ? e(o)("aiModel.enabled") : e(o)("aiModel.disabled")), 1)
146
+ a("span", ke, t(V.value), 1)
137
147
  ]),
138
- u(e(Y), {
139
- size: 4,
148
+ _(e(G), {
149
+ size: 2,
140
150
  "wrap-item": !1
141
151
  }, {
142
- default: d(() => [
143
- u(e(j), {
152
+ default: n(() => [
153
+ _(e(J), {
144
154
  trigger: "manual",
145
- show: b.value,
155
+ show: g.value,
146
156
  placement: "top",
147
157
  width: 260,
148
- onClickoutside: v[1] || (v[1] = (c) => b.value = !1)
158
+ onClickoutside: p[1] || (p[1] = (v) => g.value = !1)
149
159
  }, {
150
- trigger: d(() => [
151
- C((l(), m(e(z), {
160
+ trigger: n(() => [
161
+ w((i(), c(e(C), {
152
162
  size: "small",
153
163
  quaternary: "",
154
164
  loading: y.value,
155
- onClick: V
165
+ onClick: F
156
166
  }, {
157
- icon: d(() => [
158
- u(_, {
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
- [M, "POST:/api/v1/sys/ai/provider/{id}/test"]
172
+ [k, "POST:/api/v1/sys/ai/provider/{id}/test"]
169
173
  ])
170
174
  ]),
171
- default: d(() => [
172
- i.value ? (l(), p("div", ke, [
173
- s("div", {
174
- class: P(["test-head", i.value.ok ? "ok" : "fail"])
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
- u(_, {
177
- icon: i.value.ok ? "ph:check-circle-duotone" : "ph:x-circle-duotone",
178
- size: 16
180
+ _(S, {
181
+ icon: l.value.ok ? "ph:check-circle" : "ph:x-circle",
182
+ size: 17
179
183
  }, null, 8, ["icon"]),
180
- n(" " + t(i.value.ok ? e(o)("aiModel.test.ok") : e(o)("aiModel.test.failed")), 1)
184
+ d(" " + t(l.value.ok ? e(s)("aiModel.test.ok") : e(s)("aiModel.test.failed")), 1)
181
185
  ], 2),
182
- i.value.ok ? (l(), p(I, { key: 0 }, [
183
- s("div", be, t(e(o)("aiModel.test.model")) + ":" + t(i.value.model), 1),
184
- s("div", Me, t(e(o)("aiModel.test.latency", { ms: i.value.latencyMs })), 1),
185
- i.value.usage ? (l(), p("div", we, t(e(o)("aiModel.test.usage")) + ": " + t(e(o)("aiModel.test.inputTokens")) + " " + t(i.value.usage.inputTokens) + " / " + t(e(o)("aiModel.test.outputTokens")) + " " + t(i.value.usage.outputTokens), 1)) : g("", !0)
186
- ], 64)) : (l(), p("div", Ce, t(e(o)("aiModel.test.error")) + ":" + t(i.value.error), 1))
187
- ])) : g("", !0)
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
- C((l(), m(e(z), {
203
+ w((i(), c(e(C), {
192
204
  size: "small",
193
205
  quaternary: "",
194
206
  type: "primary",
195
- onClick: v[2] || (v[2] = (c) => N("edit"))
207
+ onClick: p[2] || (p[2] = (v) => z("edit"))
196
208
  }, {
197
- default: d(() => [
198
- n(t(e(o)("common.edit")), 1)
209
+ default: n(() => [
210
+ d(t(e(s)("common.edit")), 1)
199
211
  ]),
200
212
  _: 1
201
213
  })), [
202
- [M, "PUT:/api/v1/sys/ai/provider/{id}"]
214
+ [k, "PUT:/api/v1/sys/ai/provider/{id}"]
203
215
  ]),
204
- C((l(), m(e(z), {
216
+ w((i(), c(e(C), {
205
217
  size: "small",
206
218
  quaternary: "",
207
219
  type: "error",
208
- onClick: B
220
+ onClick: R
209
221
  }, {
210
- default: d(() => [
211
- n(t(e(o)("common.delete")), 1)
222
+ default: n(() => [
223
+ d(t(e(s)("common.delete")), 1)
212
224
  ]),
213
225
  _: 1
214
226
  })), [
215
- [M, "DELETE:/api/v1/sys/ai/provider/{id}"]
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
- xe as default
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 e = /* @__PURE__ */ r(o, [["__scopeId", "data-v-adc0e948"]]);
4
+ const p = /* @__PURE__ */ r(o, [["__scopeId", "data-v-8a40830a"]]);
5
5
  export {
6
- e as default
6
+ p as default
7
7
  };
8
8
  //# sourceMappingURL=ProviderForm.vue.js.map