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,384 +1,492 @@
1
- import { defineComponent as oe, ref as n, onMounted as ne, computed as d, watch as Q, h as p, openBlock as i, createElementBlock as m, createVNode as r, unref as l, withCtx as u, createElementVNode as o, toDisplayString as c, createTextVNode as N, Fragment as M, renderList as Y, createBlock as L, createCommentVNode as ie } from "vue";
2
- import { useMessage as ue, NProgress as de, NCard as $, NDatePicker as ce, NButton as z, NSelect as j, NInput as ve, NGrid as pe, NGi as me, NSkeleton as H, NNumberAnimation as ye, NTabs as ge, NTabPane as fe, NDataTable as ke, NTag as J } from "naive-ui";
3
- import { useI18n as he } from "vue-i18n";
4
- import { SmartTable as be } from "smart-naive-table";
5
- import Ue from "../../../components/Chart/LineChart.vue.js";
6
- import { aiProviderApi as _e, aiUsageApi as B } from "../../../api/index.js";
7
- import { AI_USAGE_GROUP_BY as b, AI_USAGE_SOURCE as Te } from "../../../types/api.js";
8
- import { translateError as E } from "../../../utils/error.js";
9
- import { fmtDateTime as we } from "../../../utils/format.js";
10
- const Se = { class: "view" }, Ce = { class: "filter-bar" }, xe = { class: "filter-item" }, Ne = { class: "filter-label" }, Me = { class: "date-filter-row" }, Le = { class: "quick-range" }, $e = { class: "filter-item" }, De = { class: "filter-label" }, Pe = { class: "filter-item" }, Re = { class: "filter-label" }, Ae = { class: "filter-item" }, Ie = { class: "filter-label" }, qe = { class: "metric-body" }, ze = {
1
+ import { defineComponent as ce, ref as o, onMounted as de, computed as d, watch as W, h as n, openBlock as u, createElementBlock as v, createVNode as r, unref as l, withCtx as c, createElementVNode as i, toDisplayString as p, createTextVNode as N, Fragment as $, renderList as Y, createBlock as A, createCommentVNode as pe } from "vue";
2
+ import { useMessage as me, NProgress as ve, NTag as j, NCard as R, NDatePicker as ge, NButton as q, NSelect as J, NInput as fe, NSkeleton as X, NNumberAnimation as ye, NTabs as he, NTabPane as ke } from "naive-ui";
3
+ import { useI18n as be } from "vue-i18n";
4
+ import { SmartTable as Z } from "smart-naive-table";
5
+ import Ue from "../../../components/AppIcon.vue.js";
6
+ import _e from "../../../components/Chart/LineChart.vue.js";
7
+ import { aiProviderApi as Te, aiUsageApi as E } from "../../../api/index.js";
8
+ import { AI_USAGE_GROUP_BY as h, AI_USAGE_SOURCE as we } from "../../../types/api.js";
9
+ import { translateError as K } from "../../../utils/error.js";
10
+ import { fmtDateTime as xe } from "../../../utils/format.js";
11
+ import { SEARCH_ACTIONS as Ce, deriveHeaderFilters as Se } from "../../../utils/tableFilter.js";
12
+ import { TABLE_TOOLBAR as ee } from "../../../utils/tableToolbar.js";
13
+ import ae from "../../../components/TableTotal/index.vue.js";
14
+ const Me = { class: "view" }, Ne = { class: "filter-bar" }, $e = { class: "filter-item filter-item--range" }, Ae = { class: "filter-label faint" }, Re = { class: "date-filter-row" }, ze = { class: "quick-range" }, Le = { class: "filter-item" }, Pe = { class: "filter-label faint" }, De = { class: "filter-item" }, Be = { class: "filter-label faint" }, Ie = { class: "filter-item" }, qe = { class: "filter-label faint" }, Ee = { class: "metrics" }, Ke = { class: "metric-body" }, Oe = { class: "metric-main" }, Ve = {
11
15
  key: 1,
12
16
  class: "metric-val tabular"
13
- }, Be = {
17
+ }, Fe = {
14
18
  key: 0,
15
19
  class: "metric-suffix"
16
- }, Ee = { class: "metric-label" }, We = /* @__PURE__ */ oe({
20
+ }, Ge = { class: "metric-label muted" }, He = {
21
+ class: "metric-icon",
22
+ "aria-hidden": "true"
23
+ }, ia = /* @__PURE__ */ ce({
17
24
  __name: "index",
18
- setup(Ge) {
19
- const { t } = he(), D = ue();
20
- function G(e) {
21
- const a = e.getFullYear(), s = String(e.getMonth() + 1).padStart(2, "0"), v = String(e.getDate()).padStart(2, "0");
22
- return `${a}-${s}-${v}`;
23
- }
24
- function K(e) {
25
- const a = /* @__PURE__ */ new Date();
26
- return a.setDate(a.getDate() - e), a;
25
+ setup(Qe) {
26
+ const { t: a } = be(), z = me();
27
+ function O(e) {
28
+ const t = e.getFullYear(), s = String(e.getMonth() + 1).padStart(2, "0"), m = String(e.getDate()).padStart(2, "0");
29
+ return `${t}-${s}-${m}`;
27
30
  }
28
31
  function V(e) {
29
- return [G(K(e - 1)), G(K(0))];
32
+ const t = /* @__PURE__ */ new Date();
33
+ return t.setDate(t.getDate() - e), t;
34
+ }
35
+ function F(e) {
36
+ return [O(V(e - 1)), O(V(0))];
30
37
  }
31
- const g = n(V(7)), f = n(7);
32
- function P(e) {
33
- g.value = V(e), f.value = e;
38
+ const k = o(F(7)), b = o(7);
39
+ function L(e) {
40
+ k.value = F(e), b.value = e;
34
41
  }
35
- function W(e) {
36
- e && (g.value = e, f.value = null);
42
+ function te(e) {
43
+ e && (k.value = e, b.value = null);
37
44
  }
38
- const U = n(null), _ = n(null), T = n(null), F = n([]);
39
- ne(async () => {
45
+ const _ = o(null), T = o(null), w = o(null), G = o([]);
46
+ de(async () => {
40
47
  try {
41
- const { items: e } = await _e.page({ page: 1, pageSize: 100 });
42
- F.value = e.map((a) => ({ label: a.name, value: a.code }));
48
+ const { items: e } = await Te.page({ page: 1, pageSize: 100 });
49
+ G.value = e.map((t) => ({ label: t.name, value: t.code }));
43
50
  } catch {
44
51
  }
45
52
  });
46
- const k = d(() => {
53
+ const U = d(() => {
47
54
  const e = {
48
- from: `${g.value[0]}T00:00:00`,
49
- to: `${g.value[1]}T23:59:59`
55
+ from: `${k.value[0]}T00:00:00`,
56
+ to: `${k.value[1]}T23:59:59`
50
57
  };
51
- return U.value && (e.providerCode = U.value), _.value && (e.model = _.value), T.value && (e.scene = T.value), e;
52
- }), O = [
53
- { value: b.Provider, labelKey: "provider" },
54
- { value: b.Model, labelKey: "model" },
55
- { value: b.Scene, labelKey: "scene" },
56
- { value: b.User, labelKey: "user" }
57
- ], h = n(b.Provider), R = n(null), w = n(!0);
58
- let S = 0;
59
- async function X() {
60
- const e = ++S;
61
- w.value = !0;
58
+ return _.value && (e.providerCode = _.value), T.value && (e.model = T.value), w.value && (e.scene = w.value), e;
59
+ }), H = [
60
+ { value: h.Provider, labelKey: "provider" },
61
+ { value: h.Model, labelKey: "model" },
62
+ { value: h.Scene, labelKey: "scene" },
63
+ { value: h.User, labelKey: "user" }
64
+ ], g = o(h.Provider), P = o(null), x = o(!0);
65
+ let C = 0;
66
+ async function le() {
67
+ const e = ++C;
68
+ x.value = !0;
62
69
  try {
63
- const a = await B.summary({ ...k.value, groupBy: h.value });
64
- if (e !== S) return;
65
- R.value = a;
66
- } catch (a) {
67
- if (e !== S) return;
68
- D.error(E(a));
70
+ const t = await E.summary({ ...U.value, groupBy: g.value });
71
+ if (e !== C) return;
72
+ P.value = t;
73
+ } catch (t) {
74
+ if (e !== C) return;
75
+ z.error(K(t));
69
76
  } finally {
70
- e === S && (w.value = !1);
77
+ e === C && (x.value = !1);
71
78
  }
72
79
  }
73
- Q([k, h], X, { immediate: !0 });
74
- const y = d(() => {
80
+ W([U, g], le, { immediate: !0 });
81
+ const f = d(() => {
75
82
  var e;
76
- return ((e = R.value) == null ? void 0 : e.totals) ?? null;
77
- }), A = d(() => {
83
+ return ((e = P.value) == null ? void 0 : e.totals) ?? null;
84
+ }), D = d(() => {
78
85
  var e;
79
- return ((e = R.value) == null ? void 0 : e.groups) ?? [];
80
- }), I = d(() => {
81
- const e = A.value.reduce((s, v) => s + v.callCount, 0);
82
- return e ? A.value.reduce((s, v) => s + v.avgLatencyMs * v.callCount, 0) / e : null;
83
- }), Z = d(() => {
84
- var e, a, s;
86
+ return ((e = P.value) == null ? void 0 : e.groups) ?? [];
87
+ }), B = d(() => {
88
+ const e = D.value.reduce((s, m) => s + m.callCount, 0);
89
+ return e ? D.value.reduce((s, m) => s + m.avgLatencyMs * m.callCount, 0) / e : null;
90
+ }), se = d(() => {
91
+ var e, t, s;
85
92
  return [
86
- { key: "totalTokens", value: ((e = y.value) == null ? void 0 : e.totalTokens) ?? 0, empty: !y.value },
87
- { key: "totalCalls", value: ((a = y.value) == null ? void 0 : a.callCount) ?? 0, empty: !y.value },
88
- { key: "failureCount", value: ((s = y.value) == null ? void 0 : s.failureCount) ?? 0, empty: !y.value },
93
+ {
94
+ key: "totalTokens",
95
+ icon: "ph:coins",
96
+ value: ((e = f.value) == null ? void 0 : e.totalTokens) ?? 0,
97
+ empty: !f.value
98
+ },
99
+ {
100
+ key: "totalCalls",
101
+ icon: "ph:lightning",
102
+ value: ((t = f.value) == null ? void 0 : t.callCount) ?? 0,
103
+ empty: !f.value
104
+ },
105
+ {
106
+ key: "failureCount",
107
+ icon: "ph:warning-circle",
108
+ value: ((s = f.value) == null ? void 0 : s.failureCount) ?? 0,
109
+ empty: !f.value
110
+ },
89
111
  {
90
112
  key: "avgLatency",
91
- value: I.value != null ? Math.round(I.value) : 0,
113
+ icon: "ph:timer",
114
+ value: B.value != null ? Math.round(B.value) : 0,
92
115
  suffix: "ms",
93
- empty: I.value == null
116
+ empty: B.value == null
94
117
  }
95
118
  ];
96
- }), ee = d(() => {
97
- const e = O.find((a) => a.value === h.value);
98
- return t(`aiUsage.groupBy.${(e == null ? void 0 : e.labelKey) ?? "provider"}`);
99
- }), te = d(() => [
100
- { title: () => ee.value, key: "label", render: (e) => e.label ?? e.key },
119
+ }), re = d(() => {
120
+ const e = H.find((t) => t.value === g.value);
121
+ return a(`aiUsage.groupBy.${(e == null ? void 0 : e.labelKey) ?? "provider"}`);
122
+ }), y = (e) => n("span", { class: "num" }, e.toLocaleString()), ne = d(() => [
123
+ {
124
+ title: () => re.value,
125
+ key: "label",
126
+ minWidth: 160,
127
+ search: {},
128
+ // 静态数据:条件由 SmartTable 前端求值
129
+ // 厂商 / 模型 / 场景是编码类文本,等宽;用户维度是姓名,保持正文
130
+ render: (e) => n(
131
+ "span",
132
+ { class: g.value === h.User ? "" : "mono" },
133
+ e.label ?? e.key
134
+ )
135
+ },
101
136
  {
102
- title: () => t("aiUsage.trend.inputTokens"),
137
+ title: () => a("aiUsage.trend.inputTokens"),
103
138
  key: "inputTokens",
104
- render: (e) => e.inputTokens.toLocaleString()
139
+ width: 120,
140
+ align: "right",
141
+ render: (e) => y(e.inputTokens)
105
142
  },
106
143
  {
107
- title: () => t("aiUsage.trend.outputTokens"),
144
+ title: () => a("aiUsage.trend.outputTokens"),
108
145
  key: "outputTokens",
109
- render: (e) => e.outputTokens.toLocaleString()
146
+ width: 120,
147
+ align: "right",
148
+ render: (e) => y(e.outputTokens)
110
149
  },
111
150
  {
112
- title: () => t("aiUsage.metric.totalCalls"),
151
+ title: () => a("aiUsage.metric.totalCalls"),
113
152
  key: "callCount",
114
- render: (e) => e.callCount.toLocaleString()
153
+ width: 110,
154
+ align: "right",
155
+ render: (e) => y(e.callCount)
115
156
  },
116
157
  {
117
- title: () => t("aiUsage.table.latency"),
158
+ title: () => a("aiUsage.table.latency"),
118
159
  key: "avgLatencyMs",
119
- render: (e) => `${Math.round(e.avgLatencyMs)} ms`
160
+ width: 100,
161
+ align: "right",
162
+ render: (e) => n("span", { class: "num" }, `${Math.round(e.avgLatencyMs)} ms`)
120
163
  },
121
164
  {
122
- title: () => t("aiUsage.share"),
165
+ title: () => a("aiUsage.share"),
123
166
  key: "sharePercent",
124
- render: (e) => p("div", { class: "share-cell" }, [
125
- p("div", { class: "share-bar" }, [
126
- p(de, {
167
+ minWidth: 200,
168
+ render: (e) => n("div", { class: "share-cell" }, [
169
+ n("div", { class: "share-bar" }, [
170
+ n(ve, {
127
171
  type: "line",
128
172
  percentage: Math.round(e.sharePercent),
129
173
  showIndicator: !1,
130
174
  height: 6
131
175
  })
132
176
  ]),
133
- p("span", { class: "share-text" }, `${e.sharePercent.toFixed(1)}%`)
177
+ n("span", { class: "share-text num muted" }, `${e.sharePercent.toFixed(1)}%`)
134
178
  ])
135
179
  }
136
- ]), C = n([]), q = n(!0);
137
- let x = 0;
138
- async function ae() {
139
- const e = ++x;
140
- q.value = !0;
180
+ ]), S = o([]), I = o(!0);
181
+ let M = 0;
182
+ async function ie() {
183
+ const e = ++M;
184
+ I.value = !0;
141
185
  try {
142
- const a = await B.trend(k.value);
143
- if (e !== x) return;
144
- C.value = a;
145
- } catch (a) {
146
- if (e !== x) return;
147
- D.error(E(a));
186
+ const t = await E.trend(U.value);
187
+ if (e !== M) return;
188
+ S.value = t;
189
+ } catch (t) {
190
+ if (e !== M) return;
191
+ z.error(K(t));
148
192
  } finally {
149
- e === x && (q.value = !1);
193
+ e === M && (I.value = !1);
150
194
  }
151
195
  }
152
- Q(k, ae, { immediate: !0 });
153
- const le = d(() => C.value.map((e) => e.date)), se = d(() => [
154
- { name: t("aiUsage.trend.inputTokens"), data: C.value.map((e) => e.inputTokens) },
155
- { name: t("aiUsage.trend.outputTokens"), data: C.value.map((e) => e.outputTokens) }
156
- ]), re = [
196
+ W(U, ie, { immediate: !0 });
197
+ const oe = d(() => S.value.map((e) => e.date)), ue = d(() => [
198
+ { name: a("aiUsage.trend.inputTokens"), data: S.value.map((e) => e.inputTokens) },
199
+ { name: a("aiUsage.trend.outputTokens"), data: S.value.map((e) => e.outputTokens) }
200
+ ]), Q = [
157
201
  {
158
202
  key: "createTime",
159
- title: () => t("aiUsage.table.createTime"),
203
+ title: () => a("aiUsage.table.createTime"),
160
204
  width: 170,
161
- render: (e) => we(e.createTime)
205
+ render: (e) => n("span", { class: "num muted", style: "white-space: nowrap" }, xe(e.createTime))
206
+ },
207
+ {
208
+ key: "providerCode",
209
+ title: () => a("aiUsage.table.provider"),
210
+ width: 120,
211
+ render: (e) => n("span", { class: "mono" }, e.providerCode)
212
+ },
213
+ {
214
+ key: "model",
215
+ title: () => a("aiUsage.table.model"),
216
+ width: 140,
217
+ ellipsis: { tooltip: !0 },
218
+ render: (e) => n("span", { class: "mono" }, e.model)
219
+ },
220
+ {
221
+ key: "scene",
222
+ title: () => a("aiUsage.table.scene"),
223
+ width: 120,
224
+ render: (e) => n("span", { class: "mono muted" }, e.scene || "—")
162
225
  },
163
- { key: "providerCode", title: () => t("aiUsage.table.provider"), width: 120 },
164
- { key: "model", title: () => t("aiUsage.table.model"), width: 140, ellipsis: { tooltip: !0 } },
165
- { key: "scene", title: () => t("aiUsage.table.scene"), width: 120, render: (e) => e.scene || "—" },
166
226
  {
167
227
  key: "userId",
168
- title: () => t("aiUsage.table.user"),
228
+ title: () => a("aiUsage.table.user"),
169
229
  width: 90,
170
- render: (e) => e.userId != null ? String(e.userId) : "—"
230
+ render: (e) => n("span", { class: "num" }, e.userId != null ? String(e.userId) : "—")
171
231
  },
172
232
  {
173
233
  key: "inputTokens",
174
- title: () => t("aiUsage.table.inputTokens"),
234
+ title: () => a("aiUsage.table.inputTokens"),
175
235
  width: 110,
176
- render: (e) => e.inputTokens.toLocaleString()
236
+ align: "right",
237
+ render: (e) => y(e.inputTokens)
177
238
  },
178
239
  {
179
240
  key: "outputTokens",
180
- title: () => t("aiUsage.table.outputTokens"),
241
+ title: () => a("aiUsage.table.outputTokens"),
181
242
  width: 110,
182
- render: (e) => e.outputTokens.toLocaleString()
243
+ align: "right",
244
+ render: (e) => y(e.outputTokens)
183
245
  },
184
246
  {
185
247
  key: "totalTokens",
186
- title: () => t("aiUsage.table.totalTokens"),
248
+ title: () => a("aiUsage.table.totalTokens"),
187
249
  width: 110,
188
- render: (e) => e.totalTokens.toLocaleString()
250
+ align: "right",
251
+ render: (e) => y(e.totalTokens)
189
252
  },
190
253
  {
191
254
  key: "latencyMs",
192
- title: () => t("aiUsage.table.latency"),
193
- width: 90,
194
- render: (e) => `${e.latencyMs} ms`
255
+ title: () => a("aiUsage.table.latency"),
256
+ width: 100,
257
+ align: "right",
258
+ render: (e) => n("span", { class: "num" }, `${e.latencyMs.toLocaleString()} ms`)
195
259
  },
196
260
  {
197
261
  key: "success",
198
- title: () => t("aiUsage.table.status"),
262
+ title: () => a("aiUsage.table.status"),
199
263
  width: 90,
264
+ // options 只给搜索控件当下拉选项(单元格仍走下面的 render);后端 Success == 精确匹配,所以只开「等于」
265
+ options: [
266
+ { label: () => a("aiUsage.table.success"), value: !0 },
267
+ { label: () => a("aiUsage.table.failed"), value: !1 }
268
+ ],
269
+ search: { actions: Ce.exact },
200
270
  // 失败行用原生 title 兜底展示 errorMessage,不必为一个只读明细表再引入 NTooltip
201
- render: (e) => p("span", { title: !e.success && e.errorMessage ? e.errorMessage : void 0 }, [
202
- p(
203
- J,
271
+ render: (e) => n("span", { title: !e.success && e.errorMessage ? e.errorMessage : void 0 }, [
272
+ n(
273
+ j,
204
274
  { size: "small", bordered: !1, type: e.success ? "success" : "error" },
205
- () => e.success ? t("aiUsage.table.success") : t("aiUsage.table.failed")
275
+ () => e.success ? a("aiUsage.table.success") : a("aiUsage.table.failed")
206
276
  )
207
277
  ])
208
278
  },
209
279
  {
210
280
  key: "streamed",
211
- title: () => t("aiUsage.table.streamed"),
281
+ title: () => a("aiUsage.table.streamed"),
212
282
  width: 80,
213
- render: (e) => p(
214
- J,
283
+ render: (e) => n(
284
+ j,
215
285
  { size: "small", bordered: !1 },
216
- () => e.streamed ? t("common.yes") : t("common.no")
286
+ () => e.streamed ? a("common.yes") : a("common.no")
217
287
  )
218
288
  },
219
289
  {
220
290
  key: "usageSource",
221
- title: () => t("aiUsage.table.usageSource"),
291
+ title: () => a("aiUsage.table.usageSource"),
222
292
  width: 110,
223
- render: (e) => e.usageSource === Te.Reported ? t("aiUsage.table.usageSourceReported") : t("aiUsage.table.usageSourceMissing")
293
+ render: (e) => e.usageSource === we.Reported ? a("aiUsage.table.usageSourceReported") : a("aiUsage.table.usageSourceMissing")
224
294
  }
225
295
  ];
226
- return (e, a) => (i(), m("div", Se, [
227
- r(l($), { bordered: !0 }, {
228
- default: u(() => [
229
- o("div", Ce, [
230
- o("div", xe, [
231
- o("span", Ne, c(l(t)("aiUsage.filter.dateRange")), 1),
232
- o("div", Me, [
233
- r(l(ce), {
234
- "formatted-value": g.value,
296
+ return Se(Q), (e, t) => (u(), v("div", Me, [
297
+ r(l(R), {
298
+ class: "a-card",
299
+ size: "small",
300
+ bordered: !0,
301
+ "content-style": "padding: 12px 14px"
302
+ }, {
303
+ default: c(() => [
304
+ i("div", Ne, [
305
+ i("div", $e, [
306
+ i("span", Ae, p(l(a)("aiUsage.filter.dateRange")), 1),
307
+ i("div", Re, [
308
+ r(l(ge), {
309
+ "formatted-value": k.value,
235
310
  type: "daterange",
236
311
  "value-format": "yyyy-MM-dd",
237
- style: { width: "240px" },
238
- "onUpdate:formattedValue": W
312
+ class: "date-picker",
313
+ "onUpdate:formattedValue": te
239
314
  }, null, 8, ["formatted-value"]),
240
- o("div", Le, [
241
- r(l(z), {
315
+ i("div", ze, [
316
+ r(l(q), {
242
317
  size: "small",
243
318
  quaternary: "",
244
- type: f.value === 1 ? "primary" : "default",
245
- onClick: a[0] || (a[0] = (s) => P(1))
319
+ type: b.value === 1 ? "primary" : "default",
320
+ onClick: t[0] || (t[0] = (s) => L(1))
246
321
  }, {
247
- default: u(() => [
248
- N(c(l(t)("aiUsage.filter.today")), 1)
322
+ default: c(() => [
323
+ N(p(l(a)("aiUsage.filter.today")), 1)
249
324
  ]),
250
325
  _: 1
251
326
  }, 8, ["type"]),
252
- r(l(z), {
327
+ r(l(q), {
253
328
  size: "small",
254
329
  quaternary: "",
255
- type: f.value === 7 ? "primary" : "default",
256
- onClick: a[1] || (a[1] = (s) => P(7))
330
+ type: b.value === 7 ? "primary" : "default",
331
+ onClick: t[1] || (t[1] = (s) => L(7))
257
332
  }, {
258
- default: u(() => [
259
- N(c(l(t)("aiUsage.filter.last7Days")), 1)
333
+ default: c(() => [
334
+ N(p(l(a)("aiUsage.filter.last7Days")), 1)
260
335
  ]),
261
336
  _: 1
262
337
  }, 8, ["type"]),
263
- r(l(z), {
338
+ r(l(q), {
264
339
  size: "small",
265
340
  quaternary: "",
266
- type: f.value === 30 ? "primary" : "default",
267
- onClick: a[2] || (a[2] = (s) => P(30))
341
+ type: b.value === 30 ? "primary" : "default",
342
+ onClick: t[2] || (t[2] = (s) => L(30))
268
343
  }, {
269
- default: u(() => [
270
- N(c(l(t)("aiUsage.filter.last30Days")), 1)
344
+ default: c(() => [
345
+ N(p(l(a)("aiUsage.filter.last30Days")), 1)
271
346
  ]),
272
347
  _: 1
273
348
  }, 8, ["type"])
274
349
  ])
275
350
  ])
276
351
  ]),
277
- o("div", $e, [
278
- o("span", De, c(l(t)("aiUsage.filter.provider")), 1),
279
- r(l(j), {
280
- value: U.value,
281
- "onUpdate:value": a[3] || (a[3] = (s) => U.value = s),
282
- options: F.value,
352
+ i("div", Le, [
353
+ i("span", Pe, p(l(a)("aiUsage.filter.provider")), 1),
354
+ r(l(J), {
355
+ value: _.value,
356
+ "onUpdate:value": t[3] || (t[3] = (s) => _.value = s),
357
+ options: G.value,
283
358
  clearable: "",
284
359
  filterable: "",
285
- style: { width: "180px" },
286
- placeholder: l(t)("aiUsage.filter.providerAll")
360
+ class: "filter-ctl",
361
+ placeholder: l(a)("aiUsage.filter.providerAll")
287
362
  }, null, 8, ["value", "options", "placeholder"])
288
363
  ]),
289
- o("div", Pe, [
290
- o("span", Re, c(l(t)("aiUsage.filter.model")), 1),
291
- r(l(j), {
292
- value: _.value,
293
- "onUpdate:value": a[4] || (a[4] = (s) => _.value = s),
364
+ i("div", De, [
365
+ i("span", Be, p(l(a)("aiUsage.filter.model")), 1),
366
+ r(l(J), {
367
+ value: T.value,
368
+ "onUpdate:value": t[4] || (t[4] = (s) => T.value = s),
294
369
  options: [],
295
370
  filterable: "",
296
371
  tag: "",
297
372
  clearable: "",
298
- style: { width: "180px" },
299
- placeholder: l(t)("aiUsage.filter.modelAll")
373
+ class: "filter-ctl",
374
+ placeholder: l(a)("aiUsage.filter.modelAll")
300
375
  }, null, 8, ["value", "placeholder"])
301
376
  ]),
302
- o("div", Ae, [
303
- o("span", Ie, c(l(t)("aiUsage.filter.scene")), 1),
304
- r(l(ve), {
305
- value: T.value,
306
- "onUpdate:value": a[5] || (a[5] = (s) => T.value = s),
377
+ i("div", Ie, [
378
+ i("span", qe, p(l(a)("aiUsage.filter.scene")), 1),
379
+ r(l(fe), {
380
+ value: w.value,
381
+ "onUpdate:value": t[5] || (t[5] = (s) => w.value = s),
307
382
  clearable: "",
308
- style: { width: "180px" },
309
- placeholder: l(t)("aiUsage.filter.scenePlaceholder")
383
+ class: "filter-ctl",
384
+ placeholder: l(a)("aiUsage.filter.scenePlaceholder")
310
385
  }, null, 8, ["value", "placeholder"])
311
386
  ])
312
387
  ])
313
388
  ]),
314
389
  _: 1
315
390
  }),
316
- r(l(pe), {
317
- cols: "1 s:2 l:4",
318
- responsive: "screen",
319
- "x-gap": 16,
320
- "y-gap": 16
391
+ i("div", Ee, [
392
+ (u(!0), v($, null, Y(se.value, (s) => (u(), A(l(R), {
393
+ key: s.key,
394
+ class: "a-card",
395
+ size: "small",
396
+ bordered: !0,
397
+ "content-style": "padding: 12px 14px"
398
+ }, {
399
+ default: c(() => [
400
+ i("div", Ke, [
401
+ i("div", Oe, [
402
+ x.value ? (u(), A(l(X), {
403
+ key: 0,
404
+ text: "",
405
+ width: "72px",
406
+ height: "34px"
407
+ })) : (u(), v("div", Ve, [
408
+ s.empty ? (u(), v($, { key: 0 }, [
409
+ N("—")
410
+ ], 64)) : (u(), v($, { key: 1 }, [
411
+ r(l(ye), {
412
+ from: 0,
413
+ to: s.value,
414
+ "show-separator": ""
415
+ }, null, 8, ["to"]),
416
+ s.suffix ? (u(), v("small", Fe, p(" " + s.suffix), 1)) : pe("", !0)
417
+ ], 64))
418
+ ])),
419
+ i("div", Ge, p(l(a)(`aiUsage.metric.${s.key}`)), 1)
420
+ ]),
421
+ i("div", He, [
422
+ r(Ue, {
423
+ icon: s.icon,
424
+ size: 15
425
+ }, null, 8, ["icon"])
426
+ ])
427
+ ])
428
+ ]),
429
+ _: 2
430
+ }, 1024))), 128))
431
+ ]),
432
+ r(l(R), {
433
+ title: l(a)("aiUsage.trend.title"),
434
+ class: "a-card",
435
+ size: "small",
436
+ bordered: !0,
437
+ "content-style": "padding: 8px 14px 12px"
321
438
  }, {
322
- default: u(() => [
323
- (i(!0), m(M, null, Y(Z.value, (s) => (i(), L(l(me), {
324
- key: s.key
325
- }, {
326
- default: u(() => [
327
- r(l($), { bordered: !0 }, {
328
- default: u(() => [
329
- o("div", qe, [
330
- w.value ? (i(), L(l(H), {
331
- key: 0,
332
- text: "",
333
- width: "72px",
334
- height: "34px"
335
- })) : (i(), m("div", ze, [
336
- s.empty ? (i(), m(M, { key: 0 }, [
337
- N("—")
338
- ], 64)) : (i(), m(M, { key: 1 }, [
339
- r(l(ye), {
340
- from: 0,
341
- to: s.value,
342
- "show-separator": ""
343
- }, null, 8, ["to"]),
344
- s.suffix ? (i(), m("span", Be, c(" " + s.suffix), 1)) : ie("", !0)
345
- ], 64))
346
- ])),
347
- o("div", Ee, c(l(t)(`aiUsage.metric.${s.key}`)), 1)
348
- ])
349
- ]),
350
- _: 2
351
- }, 1024)
352
- ]),
353
- _: 2
354
- }, 1024))), 128))
439
+ default: c(() => [
440
+ I.value ? (u(), A(l(X), {
441
+ key: 0,
442
+ height: "320px",
443
+ sharp: !1
444
+ })) : (u(), A(_e, {
445
+ key: 1,
446
+ categories: oe.value,
447
+ series: ue.value
448
+ }, null, 8, ["categories", "series"]))
355
449
  ]),
356
450
  _: 1
357
- }),
358
- r(l($), { bordered: !0 }, {
359
- default: u(() => [
360
- r(l(ge), {
361
- value: h.value,
362
- "onUpdate:value": a[6] || (a[6] = (s) => h.value = s),
451
+ }, 8, ["title"]),
452
+ r(l(R), {
453
+ class: "a-card",
454
+ size: "small",
455
+ bordered: !0,
456
+ "content-style": "padding: 4px 14px 12px"
457
+ }, {
458
+ default: c(() => [
459
+ r(l(he), {
460
+ value: g.value,
461
+ "onUpdate:value": t[6] || (t[6] = (s) => g.value = s),
363
462
  type: "line",
364
463
  animated: ""
365
464
  }, {
366
- default: u(() => [
367
- (i(), m(M, null, Y(O, (s) => r(l(fe), {
465
+ default: c(() => [
466
+ (u(), v($, null, Y(H, (s) => r(l(ke), {
368
467
  key: s.value,
369
468
  name: s.value,
370
- tab: l(t)(`aiUsage.groupBy.${s.labelKey}`),
469
+ tab: l(a)(`aiUsage.groupBy.${s.labelKey}`),
371
470
  "display-directive": "show:lazy"
372
471
  }, {
373
- default: u(() => [
374
- r(l(ke), {
375
- columns: te.value,
376
- data: A.value,
377
- loading: w.value,
378
- "row-key": (v) => v.key,
379
- bordered: !1,
380
- size: "small"
381
- }, null, 8, ["columns", "data", "loading", "row-key"])
472
+ default: c(() => [
473
+ r(l(Z), {
474
+ columns: ne.value,
475
+ data: D.value,
476
+ "row-key": "key",
477
+ loading: x.value,
478
+ search: { container: "table" },
479
+ toolbar: l(ee),
480
+ "card-props": { bordered: !1 },
481
+ "scroll-x": 720,
482
+ "card-on-narrow": "",
483
+ "storage-key": "sys-ai-usage-group"
484
+ }, {
485
+ "pagination-prefix": c(({ itemCount: m }) => [
486
+ r(ae, { count: m }, null, 8, ["count"])
487
+ ]),
488
+ _: 1
489
+ }, 8, ["columns", "data", "loading", "toolbar"])
382
490
  ]),
383
491
  _: 1
384
492
  }, 8, ["name", "tab"])), 64))
@@ -388,36 +496,26 @@ const Se = { class: "view" }, Ce = { class: "filter-bar" }, xe = { class: "filte
388
496
  ]),
389
497
  _: 1
390
498
  }),
391
- r(l($), {
392
- title: l(t)("aiUsage.trend.title"),
393
- bordered: !0
499
+ r(l(Z), {
500
+ columns: Q,
501
+ fetcher: l(E).page,
502
+ params: U.value,
503
+ search: { container: "table" },
504
+ toolbar: l(ee),
505
+ "default-page-size": 20,
506
+ "card-on-narrow": "",
507
+ "storage-key": "sys-ai-usage",
508
+ onError: t[7] || (t[7] = (s) => l(z).error(l(K)(s)))
394
509
  }, {
395
- default: u(() => [
396
- q.value ? (i(), L(l(H), {
397
- key: 0,
398
- height: "320px",
399
- sharp: !1
400
- })) : (i(), L(Ue, {
401
- key: 1,
402
- categories: le.value,
403
- series: se.value
404
- }, null, 8, ["categories", "series"]))
510
+ "pagination-prefix": c(({ itemCount: s }) => [
511
+ r(ae, { count: s }, null, 8, ["count"])
405
512
  ]),
406
513
  _: 1
407
- }, 8, ["title"]),
408
- r(l(be), {
409
- columns: re,
410
- fetcher: l(B).page,
411
- params: k.value,
412
- search: !1,
413
- "default-page-size": 20,
414
- "storage-key": "sys-ai-usage",
415
- onError: a[7] || (a[7] = (s) => l(D).error(l(E)(s)))
416
- }, null, 8, ["fetcher", "params"])
514
+ }, 8, ["fetcher", "params", "toolbar"])
417
515
  ]));
418
516
  }
419
517
  });
420
518
  export {
421
- We as default
519
+ ia as default
422
520
  };
423
521
  //# sourceMappingURL=index2.vue.js.map