smart-admin-web 10.15.0 → 10.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +1 -1
  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 +405 -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 +1 @@
1
- {"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/job-monitor/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 任务监控 = 4 张 stat 卡 + 近 14 日成败趋势 + 即将执行 + 集群节点,整页吃一个 dashboard 端点。\n// 15 秒轮询:页面被 keep-alive,切走的标签没必要继续打点 → onDeactivated 也要停,回来再启;\n// onUnmounted 兜底清定时器,防组件销毁后计时器泄漏还在发请求。\nimport { computed, h, onActivated, onDeactivated, onMounted, onUnmounted, ref } from 'vue'\nimport {\n NGrid,\n NGi,\n NCard,\n NSpin,\n NTag,\n NDataTable,\n useMessage,\n type DataTableColumns,\n} from 'naive-ui'\nimport { Icon } from '@iconify/vue'\nimport { useI18n } from 'vue-i18n'\nimport BaseChart from '#/components/Chart/index.vue'\nimport type { EChartsOption } from 'echarts'\nimport { jobApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport { fmtDateTime } from '#/utils/format'\nimport type { JobDashboard, JobNodeItem, JobUpcomingItem } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\n\nconst data = ref<JobDashboard | null>(null)\nconst loading = ref(true)\n\nasync function load(silent = true) {\n try {\n data.value = await jobApi.dashboard()\n } catch (e) {\n // 首次失败要让用户知道;轮询失败静默(网络抖一下不必每 15 秒糊一脸红)\n if (!silent) message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\n\nlet timer: number | null = null\nfunction start() {\n if (timer != null) return\n timer = window.setInterval(() => void load(), 15_000)\n}\nfunction stop() {\n if (timer != null) {\n window.clearInterval(timer)\n timer = null\n }\n}\nonMounted(() => {\n void load(false)\n start()\n})\nonActivated(start)\nonDeactivated(stop)\nonUnmounted(stop)\n\n/** 计数未到位时显示 —,而不是先闪个 0。 */\nconst num = (v: number | undefined) => (v === undefined ? '—' : v)\nconst stats = computed(() => [\n {\n key: 'todaySuccess',\n icon: 'ph:check-circle-duotone',\n value: num(data.value?.todaySuccess),\n color: 'var(--color-success)',\n },\n {\n key: 'todayFailed',\n icon: 'ph:x-circle-duotone',\n value: num(data.value?.todayFailed),\n color: 'var(--color-danger)',\n },\n {\n key: 'running',\n icon: 'ph:circle-notch-duotone',\n value: num(data.value?.running),\n color: 'var(--color-info)',\n },\n {\n key: 'totalJobs',\n icon: 'ph:clock-countdown-duotone',\n value: num(data.value?.totalJobs),\n color: 'var(--color-primary)',\n },\n])\n\n// 柱线组合:成功是当日总量,用柱;失败通常小一个量级,压在柱上会看不见,用线单独描出来。\nconst trendOption = computed<EChartsOption>(() => {\n const trend = data.value?.trend ?? []\n return {\n tooltip: { trigger: 'axis' },\n // 图例位置写死在顶部:留给默认值时它会落到绘图区底部、压在 x 轴日期标签上(实测)。\n // grid.top 的 32 就是给它留的位置。\n legend: { top: 0 },\n grid: { left: 8, right: 16, bottom: 8, top: 32, containLabel: true },\n xAxis: { type: 'category', data: trend.map(p => p.date.slice(5)) }, // MM-dd 足够,14 天跨年概率忽略\n yAxis: { type: 'value', minInterval: 1 },\n series: [\n { name: t('job.monitor.trendSuccess'), type: 'bar', data: trend.map(p => p.success) },\n {\n name: t('job.monitor.trendFailed'),\n type: 'line',\n smooth: true,\n data: trend.map(p => p.failed),\n },\n ],\n }\n})\n\n/** 最后心跳的相对时间(轮询 15 秒一刷,精确到秒/分/时够用)。 */\nfunction relative(iso: string): string {\n const diff = Math.max(0, Date.now() - new Date(iso).getTime())\n const sec = Math.floor(diff / 1000)\n if (sec < 10) return t('job.monitor.justNow')\n if (sec < 60) return t('job.monitor.secondsAgo', { n: sec })\n if (sec < 3600) return t('job.monitor.minutesAgo', { n: Math.floor(sec / 60) })\n return t('job.monitor.hoursAgo', { n: Math.floor(sec / 3600) })\n}\n\nconst upcomingColumns: DataTableColumns<JobUpcomingItem> = [\n {\n key: 'rowNo',\n title: () => t('common.rowNo'),\n width: 64,\n align: 'center',\n render: (_row, index) => index + 1,\n },\n { title: () => t('job.monitor.upcomingJob'), key: 'name', ellipsis: { tooltip: true } },\n {\n title: () => t('job.monitor.upcomingTime'),\n key: 'nextRunTime',\n width: 170,\n render: r => h('span', { class: 'tabular' }, fmtDateTime(r.nextRunTime, { empty: '—' })),\n },\n]\n\nconst nodeColumns: DataTableColumns<JobNodeItem> = [\n {\n key: 'rowNo',\n title: () => t('common.rowNo'),\n width: 64,\n align: 'center',\n render: (_row, index) => index + 1,\n },\n { title: () => t('job.monitor.nodeName'), key: 'nodeName', ellipsis: { tooltip: true } },\n {\n title: () => t('job.monitor.role'),\n key: 'isLeader',\n width: 90,\n render: r =>\n h(NTag, { size: 'small', bordered: false, type: r.isLeader ? 'primary' : 'default' }, () =>\n t(r.isLeader ? 'job.monitor.leader' : 'job.monitor.standby'),\n ),\n },\n {\n title: () => t('job.monitor.lastHeartbeat'),\n key: 'lastHeartbeat',\n width: 110,\n render: r => relative(r.lastHeartbeat),\n },\n { title: () => t('job.monitor.workerId'), key: 'workerId', width: 90, align: 'center' },\n { title: () => t('job.monitor.pid'), key: 'pid', width: 90, align: 'center' },\n]\n</script>\n\n<template>\n <div class=\"view fill-page fill-page--soft\">\n <n-grid :cols=\"'1 s:2 l:4'\" responsive=\"screen\" :x-gap=\"16\" :y-gap=\"16\">\n <n-gi v-for=\"s in stats\" :key=\"s.key\">\n <n-card :bordered=\"true\">\n <div class=\"stat\">\n <div class=\"stat-ico\" :style=\"{ color: s.color }\">\n <Icon :icon=\"s.icon\" :width=\"28\" />\n </div>\n <div>\n <div class=\"stat-val tabular\">{{ s.value }}</div>\n <div class=\"stat-label\">{{ t(`job.monitor.${s.key}`) }}</div>\n </div>\n </div>\n </n-card>\n </n-gi>\n </n-grid>\n\n <n-card :title=\"t('job.monitor.trendTitle')\" :bordered=\"true\">\n <n-spin :show=\"loading\">\n <BaseChart :option=\"trendOption\" />\n </n-spin>\n </n-card>\n\n <!-- 统计条与趋势图按内容定高(.fill-page > * 已是 flex-shrink:0),\n 底部这一栏吃掉剩余高度,两张表各自在卡片里滚。\n 这页是仪表盘不是列表页:统计条 + 320px 趋势图不参与瓜分,1080p 上给两张表还剩 200 来 px,\n 768p 上就只剩一条缝了 —— 所以外壳叠 .fill-page--soft,再给这一栏一个下限(见 scoped)。 -->\n <n-grid\n :cols=\"'1 l:2'\"\n responsive=\"screen\"\n :x-gap=\"16\"\n :y-gap=\"16\"\n class=\"fill-main job-tables\"\n >\n <n-gi class=\"fill-main\">\n <n-card class=\"fill-card\" :title=\"t('job.monitor.upcomingTitle')\" :bordered=\"true\">\n <n-data-table\n size=\"small\"\n :columns=\"upcomingColumns\"\n :data=\"data?.upcoming ?? []\"\n :loading=\"loading\"\n :row-key=\"(r: JobUpcomingItem) => `${r.jobId}-${r.nextRunTime}`\"\n :pagination=\"false\"\n flex-height\n virtual-scroll\n />\n </n-card>\n </n-gi>\n <n-gi class=\"fill-main\">\n <n-card class=\"fill-card\" :title=\"t('job.monitor.nodesTitle')\" :bordered=\"true\">\n <n-data-table\n size=\"small\"\n :columns=\"nodeColumns\"\n :data=\"data?.nodes ?? []\"\n :loading=\"loading\"\n :row-key=\"(r: JobNodeItem) => r.nodeName\"\n :pagination=\"false\"\n flex-height\n virtual-scroll\n />\n </n-card>\n </n-gi>\n </n-grid>\n </div>\n</template>\n\n<style scoped>\n/* display / flex-direction / 整屏高度链都在 styles/layout.css 的 .fill-page,这里只留卡片间距。 */\n.view {\n gap: var(--gap-card);\n}\n\n/*\n * .fill-page--soft 把「恰好一屏」放宽成「至少一屏」,这里再给两张表所在的那一栏一个下限:\n * 卡片头尾约 62px + small 表头 34px + 4 行 x 34px ≈ 240px,少于这个就不叫表了。\n * 高屏上剩余高度本来就大于下限,页面仍然恰好一屏;矮屏上顶到下限后由 .page 正常出滚动条。\n * 容器和栅格项都要给:容器是 flex 子项(.fill-main 带 min-height:0,不设下限会被压过内容),\n * 栅格项则决定单列(l 断点以下两张表上下排)时每张表各自的下限。\n */\n.job-tables,\n.job-tables > * {\n min-height: 240px;\n}\n\n.stat {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n/* 图标底盘:取语义色 12% 作浅底,同工作台手法,避免图标\"裸浮\" */\n.stat-ico {\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, currentColor 12%, transparent);\n}\n.stat-val {\n font-size: 28px;\n font-weight: 700;\n color: var(--color-text-primary);\n line-height: 1.1;\n}\n.stat-label {\n color: var(--color-text-secondary);\n margin-top: 2px;\n}\n</style>\n"],"names":["useI18n","message","useMessage","data","ref","loading","load","silent","jobApi","e","translateError","timer","start","stop","onMounted","onActivated","onDeactivated","onUnmounted","num","v","stats","computed","_a","_b","_c","_d","trendOption","trend","p","relative","iso","diff","sec","upcomingColumns","_row","index","r","h","fmtDateTime","nodeColumns","NTag","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","NGrid","_Fragment","_renderList","s","_createBlock","NGi","NCard","_createElementVNode","_hoisted_2","_normalizeStyle","Icon","_hoisted_3","_toDisplayString","_hoisted_4","NSpin","BaseChart","NDataTable"],"mappings":"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"}
1
+ {"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/job-monitor/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 任务监控 = 4 张 stat 卡 + 近 14 日成败趋势 + 即将执行 + 集群节点,整页吃一个 dashboard 端点。\n// 15 秒轮询:页面被 keep-alive,切走的标签没必要继续打点 → onDeactivated 也要停,回来再启;\n// onUnmounted 兜底清定时器,防组件销毁后计时器泄漏还在发请求。\nimport { computed, h, onActivated, onDeactivated, onMounted, onUnmounted, ref } from 'vue'\nimport { NCard, NSpin, NTag, useMessage } from 'naive-ui'\nimport { SmartTable, type SmartTableColumn } from 'smart-naive-table'\nimport { Icon } from '@iconify/vue'\nimport { useShellBreakpoint } from '#/composables/useShellBreakpoint'\nimport { useI18n } from 'vue-i18n'\nimport BaseChart from '#/components/Chart/index.vue'\nimport type { EChartsOption } from 'echarts'\nimport { jobApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport { fmtDateTime } from '#/utils/format'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport TableTotal from '#/components/TableTotal/index.vue'\nimport type { JobDashboard, JobNodeItem, JobUpcomingItem } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\n\n// 栅格按内容区宽度分档(不是视口)\nconst { bp, width: pw } = useShellBreakpoint()\nconst narrow = computed(() => bp.value === 'narrow')\nconst statCols = computed(() => (pw.value < 520 ? 1 : pw.value < 1000 ? 2 : 4))\nconst tablesStyle = computed(() => {\n const stacked = pw.value < 1000\n const basis = stacked ? 488 : 240\n return {\n flex: `1 1 ${basis}px`,\n minHeight: `${basis}px`,\n gridTemplateColumns: stacked ? 'minmax(0, 1fr)' : 'repeat(2, minmax(0, 1fr))',\n gridTemplateRows: stacked ? 'repeat(2, minmax(0, 1fr))' : 'minmax(0, 1fr)',\n }\n})\n\nconst data = ref<JobDashboard | null>(null)\nconst loading = ref(true)\n\nasync function load(silent = true) {\n try {\n data.value = await jobApi.dashboard()\n } catch (e) {\n // 首次失败要让用户知道;轮询失败静默(网络抖一下不必每 15 秒糊一脸红)\n if (!silent) message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\n\nlet timer: number | null = null\nfunction start() {\n if (timer != null) return\n timer = window.setInterval(() => void load(), 15_000)\n}\nfunction stop() {\n if (timer != null) {\n window.clearInterval(timer)\n timer = null\n }\n}\nonMounted(() => {\n void load(false)\n start()\n})\nonActivated(start)\nonDeactivated(stop)\nonUnmounted(stop)\n\n/** 计数未到位时显示 —,而不是先闪个 0。 */\nconst num = (v: number | undefined) => (v === undefined ? '—' : v)\nconst stats = computed(() => [\n {\n key: 'todaySuccess',\n icon: 'ph:check-circle',\n value: num(data.value?.todaySuccess),\n color: 'var(--ok)',\n },\n {\n key: 'todayFailed',\n icon: 'ph:x-circle',\n value: num(data.value?.todayFailed),\n color: 'var(--err)',\n },\n {\n key: 'running',\n icon: 'ph:circle-notch',\n value: num(data.value?.running),\n color: 'var(--color-info)',\n },\n {\n key: 'totalJobs',\n icon: 'ph:clock-countdown',\n value: num(data.value?.totalJobs),\n color: 'var(--signal)',\n },\n])\n\n// 柱线组合:成功是当日总量,用柱;失败通常小一个量级,压在柱上会看不见,用线单独描出来。\nconst trendOption = computed<EChartsOption>(() => {\n const trend = data.value?.trend ?? []\n return {\n tooltip: { trigger: 'axis' },\n // 图例位置写死在顶部:留给默认值时它会落到绘图区底部、压在 x 轴日期标签上。\n // grid.top 的 32 就是给它留的位置。\n legend: { top: 0 },\n grid: { left: 8, right: 16, bottom: 8, top: 32, containLabel: true },\n xAxis: { type: 'category', data: trend.map(p => p.date.slice(5)) }, // MM-dd 足够,14 天跨年概率忽略\n yAxis: { type: 'value', minInterval: 1 },\n series: [\n { name: t('job.monitor.trendSuccess'), type: 'bar', data: trend.map(p => p.success) },\n {\n name: t('job.monitor.trendFailed'),\n type: 'line',\n smooth: true,\n data: trend.map(p => p.failed),\n },\n ],\n }\n})\n\n/** 最后心跳的相对时间(轮询 15 秒一刷,精确到秒/分/时够用)。 */\nfunction relative(iso: string): string {\n const diff = Math.max(0, Date.now() - new Date(iso).getTime())\n const sec = Math.floor(diff / 1000)\n if (sec < 10) return t('job.monitor.justNow')\n if (sec < 60) return t('job.monitor.secondsAgo', { n: sec })\n if (sec < 3600) return t('job.monitor.minutesAgo', { n: Math.floor(sec / 60) })\n return t('job.monitor.hoursAgo', { n: Math.floor(sec / 3600) })\n}\n\nconst upcomingColumns: SmartTableColumn<JobUpcomingItem>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n title: () => t('job.monitor.upcomingJob'),\n key: 'name',\n ellipsis: { tooltip: true },\n search: {}, // 静态数据:条件由 SmartTable 前端求值\n },\n {\n title: () => t('job.monitor.upcomingTime'),\n key: 'nextRunTime',\n width: 170,\n render: r => h('span', { class: 'tabular' }, fmtDateTime(r.nextRunTime, { empty: '—' })),\n },\n]\n\nconst nodeColumns: SmartTableColumn<JobNodeItem>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n title: () => t('job.monitor.nodeName'),\n key: 'nodeName',\n ellipsis: { tooltip: true },\n search: {},\n },\n {\n title: () => t('job.monitor.role'),\n key: 'isLeader',\n width: 90,\n render: r =>\n h(NTag, { size: 'small', bordered: false, type: r.isLeader ? 'primary' : 'default' }, () =>\n t(r.isLeader ? 'job.monitor.leader' : 'job.monitor.standby'),\n ),\n },\n {\n title: () => t('job.monitor.lastHeartbeat'),\n key: 'lastHeartbeat',\n width: 110,\n render: r => relative(r.lastHeartbeat),\n },\n { title: () => t('job.monitor.workerId'), key: 'workerId', width: 90, align: 'center' },\n { title: () => t('job.monitor.pid'), key: 'pid', width: 90, align: 'center' },\n]\n</script>\n\n<template>\n <!-- 窄档(内容区 < 600)整页自然滚动,不锁一屏;表格换成卡片列表 -->\n <div class=\"view\" :class=\"{ 'fill-page fill-page--soft': !narrow }\">\n <!-- 统计卡按内容区宽度分档:< 520 一列,< 1000 两列,否则四列 -->\n <div class=\"stats\" :style=\"{ gridTemplateColumns: `repeat(${statCols}, minmax(0, 1fr))` }\">\n <n-card\n v-for=\"s in stats\"\n :key=\"s.key\"\n :bordered=\"true\"\n class=\"a-card\"\n content-style=\"padding: 14px 16px\"\n >\n <div class=\"stat\">\n <div class=\"stat-ico\" :style=\"{ color: s.color }\">\n <Icon :icon=\"s.icon\" :width=\"28\" />\n </div>\n <div>\n <div class=\"stat-val tabular\">{{ s.value }}</div>\n <div class=\"stat-label\">{{ t(`job.monitor.${s.key}`) }}</div>\n </div>\n </div>\n </n-card>\n </div>\n\n <n-card :title=\"t('job.monitor.trendTitle')\" :bordered=\"true\" class=\"a-card\">\n <n-spin :show=\"loading\">\n <BaseChart :option=\"trendOption\" />\n </n-spin>\n </n-card>\n\n <!-- 统计条与趋势图按内容定高(.fill-page > * 已是 flex-shrink:0),\n 底部这一栏吃掉剩余高度,两张表各自在卡片里滚。\n 这页是仪表盘不是列表页:统计条 + 320px 趋势图不参与瓜分,1080p 上给两张表还剩 200 来 px,\n 768p 上就只剩一条缝了 —— 所以外壳叠 .fill-page--soft,再给这一栏一个下限(内容区 < 1000 时两张表\n 上下排,下限 488 = 每张 240 + 间距;>= 1000 并排,下限 240)。 -->\n <div\n class=\"job-tables\"\n :class=\"{ 'fill-main': !narrow }\"\n :style=\"narrow ? undefined : tablesStyle\"\n >\n <!-- 两张表都是 SmartTable 静态数据模式;不放表名(设计:表格工具栏没有标题),列头已能分辨。\n 窄档(内容区 < 600)整页自然滚动,卡片列表由 card-on-narrow 内置。\n card-on-narrow 跟页面窄档走而不是让库按表格自身宽度判:宽屏下两张表并排各约半宽,会被误判成窄 -->\n <div class=\"job-table\" :class=\"{ 'fill-main': !narrow }\">\n <SmartTable\n :columns=\"upcomingColumns\"\n :data=\"data?.upcoming ?? []\"\n :row-key=\"(r: JobUpcomingItem) => `${r.jobId}-${r.nextRunTime}`\"\n :loading=\"loading\"\n :search=\"{ container: 'table' }\"\n :toolbar=\"TABLE_TOOLBAR\"\n :fill-height=\"!narrow\"\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n :card-on-narrow=\"narrow\"\n storage-key=\"sys-job-monitor-upcoming\"\n >\n <template #pagination-prefix=\"{ itemCount }\">\n <TableTotal :count=\"itemCount\" />\n </template>\n </SmartTable>\n </div>\n <div class=\"job-table\" :class=\"{ 'fill-main': !narrow }\">\n <SmartTable\n :columns=\"nodeColumns\"\n :data=\"data?.nodes ?? []\"\n row-key=\"nodeName\"\n :loading=\"loading\"\n :search=\"{ container: 'table' }\"\n :toolbar=\"TABLE_TOOLBAR\"\n :fill-height=\"!narrow\"\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n :card-on-narrow=\"narrow\"\n storage-key=\"sys-job-monitor-nodes\"\n >\n <template #pagination-prefix=\"{ itemCount }\">\n <TableTotal :count=\"itemCount\" />\n </template>\n </SmartTable>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n/* display / flex-direction / 整屏高度链都在 styles/layout.css 的 .fill-page,这里只留卡片间距。 */\n.view {\n gap: var(--gap-card);\n}\n\n/*\n * .fill-page--soft 把「恰好一屏」放宽成「至少一屏」,这里再给两张表所在的那一栏一个下限:\n * 卡片头尾约 62px + small 表头 34px + 4 行 x 34px ≈ 240px,少于这个就不叫表了。\n * 高屏上剩余高度本来就大于下限,页面仍然恰好一屏;矮屏上顶到下限后由 .page 正常出滚动条。\n * 容器和栅格项都要给:容器是 flex 子项(.fill-main 带 min-height:0,不设下限会被压过内容),\n * 栅格项则决定单列(l 断点以下两张表上下排)时每张表各自的下限。\n */\n.stats {\n display: grid;\n gap: var(--gap-card);\n flex-shrink: 0;\n}\n.job-tables {\n display: grid;\n gap: var(--gap-card);\n}\n.stat {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n/* 图标底盘:取语义色 12% 作浅底,同工作台手法,避免图标\"裸浮\" */\n.stat-ico {\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n border-radius: var(--radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, currentColor 12%, transparent);\n}\n.stat-val {\n font-size: 28px;\n font-weight: 600;\n letter-spacing: -0.04em;\n color: var(--text-1);\n line-height: 34px;\n}\n.stat-label {\n font-size: 14px;\n color: var(--text-2);\n}\n</style>\n"],"names":["useI18n","message","useMessage","bp","pw","useShellBreakpoint","narrow","computed","statCols","tablesStyle","stacked","basis","data","ref","loading","load","silent","jobApi","e","translateError","timer","start","stop","onMounted","onActivated","onDeactivated","onUnmounted","num","v","stats","_a","_b","_c","_d","trendOption","trend","p","relative","iso","diff","sec","upcomingColumns","r","h","fmtDateTime","nodeColumns","NTag","_createElementBlock","_normalizeClass","_createElementVNode","_Fragment","_renderList","s","_createBlock","_unref","NCard","_hoisted_1","_normalizeStyle","_createVNode","Icon","_hoisted_2","_toDisplayString","_hoisted_3","NSpin","BaseChart","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_withCtx","itemCount","TableTotal"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import o from "./index2.vue.js";
2
2
  /* empty css */
3
3
  import t from "../../../../_virtual/_plugin-vue_export-helper.js";
4
- const _ = /* @__PURE__ */ t(o, [["__scopeId", "data-v-d5b09c10"]]);
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-421f41e4"]]);
5
5
  export {
6
- _ as default
6
+ m as default
7
7
  };
8
8
  //# sourceMappingURL=index.vue.js.map
@@ -1,38 +1,64 @@
1
- import { defineComponent as N, ref as m, resolveDirective as C, openBlock as d, createElementBlock as E, Fragment as M, createVNode as o, unref as e, withCtx as l, withDirectives as I, createBlock as g, createTextVNode as s, toDisplayString as i, createElementVNode as h, createCommentVNode as z, h as B } from "vue";
2
- import { useMessage as V, NButton as _, NDrawer as A, NDrawerContent as R, NDescriptions as S, NDescriptionsItem as n } from "naive-ui";
3
- import { useI18n as L } from "vue-i18n";
4
- import { SmartTable as q } from "smart-naive-table";
5
- import F from "../../../../components/AppIcon.vue.js";
6
- import { useConfirm as P } from "../../../../composables/useConfirm.js";
7
- import { logApi as b } from "../../../../api/index.js";
8
- import { translateError as U } from "../../../../utils/error.js";
9
- import { operatorText as y } from "../../../../utils/format.js";
10
- const $ = { class: "exception" }, j = { class: "exception" }, ee = /* @__PURE__ */ N({
1
+ import { defineComponent as M, ref as f, computed as x, h as u, resolveDirective as R, openBlock as g, createElementBlock as L, Fragment as F, createVNode as a, unref as e, withCtx as o, withDirectives as H, createBlock as w, createTextVNode as _, toDisplayString as i, normalizeStyle as O, normalizeClass as V, createElementVNode as n, createCommentVNode as W } from "vue";
2
+ import { useElementSize as $ } from "@vueuse/core";
3
+ import { useMessage as q, NButton as T, NDrawer as G, NDrawerContent as P, NDescriptions as U, NDescriptionsItem as s } from "naive-ui";
4
+ import { useI18n as j } from "vue-i18n";
5
+ import { SmartTable as J } from "smart-naive-table";
6
+ import K from "../../../../components/AppIcon.vue.js";
7
+ import { useConfirm as Q } from "../../../../composables/useConfirm.js";
8
+ import { logApi as k } from "../../../../api/index.js";
9
+ import { translateError as X } from "../../../../utils/error.js";
10
+ import { createFlatFilterSerializer as Y, SEARCH_ACTIONS as b, deriveHeaderFilters as Z } from "../../../../utils/tableFilter.js";
11
+ import { TABLE_MIN_ROW_HEIGHT as ee, TABLE_TOOLBAR as te } from "../../../../utils/tableToolbar.js";
12
+ import le from "../../../../components/TableTotal/index.vue.js";
13
+ import { operatorText as z, fmtDateTime as E } from "../../../../utils/format.js";
14
+ const oe = { class: "mono break" }, ae = { class: "mono break" }, re = { class: "mono break" }, ie = { class: "mono" }, se = { class: "muted break" }, ne = { class: "num" }, ce = { class: "exception" }, pe = { class: "exception" }, ze = /* @__PURE__ */ M({
11
15
  __name: "index",
12
- setup(G) {
13
- const { t } = L(), v = V(), { confirm: x } = P(), f = m(), k = [
16
+ setup(me) {
17
+ const { t } = j(), N = q(), { confirm: C } = Q(), d = f(), D = x(
18
+ () => {
19
+ var l;
20
+ return (l = d.value) == null ? void 0 : l.$el;
21
+ }
22
+ ), { width: v } = $(D), p = x(() => v.value > 0 && v.value < 600), S = Y({ ranges: ["createTime"] }), y = [
14
23
  { type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
15
24
  {
16
25
  key: "exceptionType",
17
26
  title: () => t("log.exceptionType"),
18
27
  ellipsis: { tooltip: !0 },
19
- search: !0
28
+ search: { actions: b.fuzzy },
29
+ render: (l) => u("span", { class: "mono" }, l.exceptionType)
20
30
  },
21
31
  {
22
32
  key: "message",
23
33
  title: () => t("log.exceptionMessage"),
24
34
  ellipsis: { tooltip: !0 },
25
- render: (r) => r.message || "—"
35
+ render: (l) => l.message || "—"
26
36
  },
27
37
  { key: "httpMethod", title: () => t("log.method"), width: 90 },
28
- { key: "path", title: () => t("log.path"), ellipsis: { tooltip: !0 }, search: !0 },
29
- { key: "operator", title: () => t("log.operator"), width: 120, render: (r) => y(r) },
30
- { key: "ip", title: () => t("log.ip"), render: (r) => r.ip || "—" },
38
+ {
39
+ key: "path",
40
+ title: () => t("log.path"),
41
+ ellipsis: { tooltip: !0 },
42
+ search: { actions: b.fuzzy },
43
+ render: (l) => u("span", { class: "mono muted" }, l.path)
44
+ },
45
+ {
46
+ key: "operator",
47
+ title: () => t("log.operator"),
48
+ width: 120,
49
+ ellipsis: { tooltip: !0 },
50
+ render: (l) => z(l)
51
+ },
52
+ {
53
+ key: "ip",
54
+ title: () => t("log.ip"),
55
+ render: (l) => u("span", { class: "mono muted" }, l.ip || "—")
56
+ },
31
57
  {
32
58
  key: "createTime",
33
59
  title: () => t("common.createTime"),
34
- format: "datetime",
35
- search: { type: "daterange" }
60
+ render: (l) => u("span", { class: "num muted", style: "white-space: nowrap" }, E(l.createTime)),
61
+ search: { type: "daterange", actions: b.dayRange }
36
62
  },
37
63
  {
38
64
  key: "op",
@@ -40,177 +66,190 @@ const $ = { class: "exception" }, j = { class: "exception" }, ee = /* @__PURE__
40
66
  width: 90,
41
67
  fixed: "right",
42
68
  hideInSetting: !0,
43
- render: (r) => B(
44
- _,
45
- { size: "small", quaternary: !0, type: "primary", onClick: () => w(r) },
69
+ render: (l) => u(
70
+ T,
71
+ { size: "small", quaternary: !0, type: "primary", onClick: () => A(l) },
46
72
  () => t("log.detail")
47
73
  )
48
74
  }
49
- ], p = m(!1), a = m(null);
50
- function w(r) {
51
- a.value = r, p.value = !0;
75
+ ];
76
+ Z(y);
77
+ const h = f(!1), r = f(null);
78
+ function A(l) {
79
+ r.value = l, h.value = !0;
52
80
  }
53
- function T() {
54
- x({
81
+ function I() {
82
+ C({
55
83
  type: "error",
56
84
  content: t("log.clearExceptionConfirm"),
57
- action: () => b.exceptionClear(),
85
+ action: () => k.exceptionClear(),
58
86
  successMsg: t("log.cleared")
59
- }).then((r) => {
87
+ }).then((l) => {
60
88
  var c;
61
- r && ((c = f.value) == null || c.refresh());
89
+ l && ((c = d.value) == null || c.refresh());
62
90
  });
63
91
  }
64
- return (r, c) => {
65
- const D = C("auth");
66
- return d(), E(M, null, [
67
- o(e(q), {
68
- "default-page-size": 100,
92
+ return (l, c) => {
93
+ const B = R("auth");
94
+ return g(), L(F, null, [
95
+ a(e(J), {
69
96
  ref_key: "tableRef",
70
- ref: f,
71
- columns: k,
72
- fetcher: e(b).exceptionPage,
73
- "flex-height": "",
74
- "virtual-scroll": "",
97
+ ref: d,
98
+ columns: y,
99
+ fetcher: e(k).exceptionPage,
100
+ search: { container: "table" },
101
+ "filter-serializer": e(S),
102
+ toolbar: e(te),
103
+ "fill-height": "",
104
+ "min-row-height": e(ee),
105
+ "card-on-narrow": "",
75
106
  "storage-key": "sys-log-exception",
76
- onError: c[0] || (c[0] = (u) => e(v).error(e(U)(u)))
107
+ onError: c[0] || (c[0] = (m) => e(N).error(e(X)(m)))
77
108
  }, {
78
- toolbar: l(() => [
79
- I((d(), g(e(_), {
109
+ "pagination-prefix": o(({ itemCount: m }) => [
110
+ a(le, { count: m }, null, 8, ["count"])
111
+ ]),
112
+ "toolbar-right": o(() => [
113
+ H((g(), w(e(T), {
80
114
  type: "error",
81
115
  secondary: "",
82
- onClick: T
116
+ onClick: I
83
117
  }, {
84
- icon: l(() => [
85
- o(F, {
118
+ icon: o(() => [
119
+ a(K, {
86
120
  icon: "ph:trash",
87
121
  size: 16
88
122
  })
89
123
  ]),
90
- default: l(() => [
91
- s(" " + i(e(t)("log.clear")), 1)
124
+ default: o(() => [
125
+ _(" " + i(e(t)("log.clear")), 1)
92
126
  ]),
93
127
  _: 1
94
128
  })), [
95
- [D, "DELETE:/api/v1/sys/log/exception"]
129
+ [B, "DELETE:/api/v1/sys/log/exception"]
96
130
  ])
97
131
  ]),
98
132
  _: 1
99
- }, 8, ["fetcher"]),
100
- o(e(A), {
101
- show: p.value,
102
- "onUpdate:show": c[1] || (c[1] = (u) => p.value = u),
103
- width: 620,
104
- placement: "right"
133
+ }, 8, ["fetcher", "filter-serializer", "toolbar", "min-row-height"]),
134
+ a(e(G), {
135
+ show: h.value,
136
+ "onUpdate:show": c[1] || (c[1] = (m) => h.value = m),
137
+ placement: p.value ? "bottom" : "right",
138
+ width: p.value ? void 0 : "min(620px, 100vw)",
139
+ height: p.value ? "auto" : void 0,
140
+ class: V(p.value ? "st-sheet" : ""),
141
+ style: O(p.value ? "max-height: 85vh" : "")
105
142
  }, {
106
- default: l(() => [
107
- o(e(R), {
143
+ default: o(() => [
144
+ a(e(P), {
108
145
  title: e(t)("log.detail"),
109
- closable: ""
146
+ closable: "",
147
+ "native-scrollbar": p.value
110
148
  }, {
111
- default: l(() => [
112
- a.value ? (d(), g(e(S), {
149
+ default: o(() => [
150
+ r.value ? (g(), w(e(U), {
113
151
  key: 0,
114
152
  "label-placement": "left",
115
153
  column: 1,
116
154
  bordered: "",
117
- size: "small"
155
+ size: "small",
156
+ "label-style": "width: 96px"
118
157
  }, {
119
- default: l(() => [
120
- o(e(n), {
158
+ default: o(() => [
159
+ a(e(s), {
121
160
  label: e(t)("log.exceptionType")
122
161
  }, {
123
- default: l(() => [
124
- s(i(a.value.exceptionType), 1)
162
+ default: o(() => [
163
+ n("span", oe, i(r.value.exceptionType), 1)
125
164
  ]),
126
165
  _: 1
127
166
  }, 8, ["label"]),
128
- o(e(n), {
167
+ a(e(s), {
129
168
  label: e(t)("log.method")
130
169
  }, {
131
- default: l(() => [
132
- s(i(a.value.httpMethod), 1)
170
+ default: o(() => [
171
+ _(i(r.value.httpMethod), 1)
133
172
  ]),
134
173
  _: 1
135
174
  }, 8, ["label"]),
136
- o(e(n), {
175
+ a(e(s), {
137
176
  label: e(t)("log.path")
138
177
  }, {
139
- default: l(() => [
140
- s(i(a.value.path), 1)
178
+ default: o(() => [
179
+ n("span", ae, i(r.value.path), 1)
141
180
  ]),
142
181
  _: 1
143
182
  }, 8, ["label"]),
144
- o(e(n), {
183
+ a(e(s), {
145
184
  label: e(t)("log.traceId")
146
185
  }, {
147
- default: l(() => [
148
- s(i(a.value.traceId || "—"), 1)
186
+ default: o(() => [
187
+ n("span", re, i(r.value.traceId || "—"), 1)
149
188
  ]),
150
189
  _: 1
151
190
  }, 8, ["label"]),
152
- o(e(n), {
191
+ a(e(s), {
153
192
  label: e(t)("log.operator")
154
193
  }, {
155
- default: l(() => [
156
- s(i(e(y)(a.value)), 1)
194
+ default: o(() => [
195
+ _(i(e(z)(r.value)), 1)
157
196
  ]),
158
197
  _: 1
159
198
  }, 8, ["label"]),
160
- o(e(n), {
199
+ a(e(s), {
161
200
  label: e(t)("log.ip")
162
201
  }, {
163
- default: l(() => [
164
- s(i(a.value.ip || "—"), 1)
202
+ default: o(() => [
203
+ n("span", ie, i(r.value.ip || "—"), 1)
165
204
  ]),
166
205
  _: 1
167
206
  }, 8, ["label"]),
168
- o(e(n), {
207
+ a(e(s), {
169
208
  label: e(t)("log.userAgent")
170
209
  }, {
171
- default: l(() => [
172
- s(i(a.value.userAgent || "—"), 1)
210
+ default: o(() => [
211
+ n("span", se, i(r.value.userAgent || "—"), 1)
173
212
  ]),
174
213
  _: 1
175
214
  }, 8, ["label"]),
176
- o(e(n), {
215
+ a(e(s), {
177
216
  label: e(t)("common.createTime")
178
217
  }, {
179
- default: l(() => [
180
- s(i(a.value.createTime), 1)
218
+ default: o(() => [
219
+ n("span", ne, i(e(E)(r.value.createTime)), 1)
181
220
  ]),
182
221
  _: 1
183
222
  }, 8, ["label"]),
184
- o(e(n), {
223
+ a(e(s), {
185
224
  label: e(t)("log.exceptionMessage")
186
225
  }, {
187
- default: l(() => [
188
- h("pre", $, i(a.value.message || "—"), 1)
226
+ default: o(() => [
227
+ n("pre", ce, i(r.value.message || "—"), 1)
189
228
  ]),
190
229
  _: 1
191
230
  }, 8, ["label"]),
192
- o(e(n), {
231
+ a(e(s), {
193
232
  label: e(t)("log.stackTrace")
194
233
  }, {
195
- default: l(() => [
196
- h("pre", j, i(a.value.stackTrace || "—"), 1)
234
+ default: o(() => [
235
+ n("pre", pe, i(r.value.stackTrace || "—"), 1)
197
236
  ]),
198
237
  _: 1
199
238
  }, 8, ["label"])
200
239
  ]),
201
240
  _: 1
202
- })) : z("", !0)
241
+ })) : W("", !0)
203
242
  ]),
204
243
  _: 1
205
- }, 8, ["title"])
244
+ }, 8, ["title", "native-scrollbar"])
206
245
  ]),
207
246
  _: 1
208
- }, 8, ["show"])
247
+ }, 8, ["show", "placement", "width", "height", "class", "style"])
209
248
  ], 64);
210
249
  };
211
250
  }
212
251
  });
213
252
  export {
214
- ee as default
253
+ ze as default
215
254
  };
216
255
  //# sourceMappingURL=index2.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index2.vue.js","sources":["../../../../../src/views/system/log/exception/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 异常日志 = 只读 SmartTable + 详情抽屉。后端无 exception/{id},分页项已含全字段 → 抽屉直接用行数据。\n// 只记未捕获异常(程序缺陷);业务异常不进本表。堆栈保持危险色 <pre>——堆栈非代码,高亮无意义。\nimport { h, ref } from 'vue'\nimport {\n NButton,\n NDrawer,\n NDrawerContent,\n NDescriptions,\n NDescriptionsItem,\n useMessage,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { logApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport { operatorText } from '#/utils/format'\nimport type { SysExceptionLog } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { confirm } = useConfirm()\nconst tableRef = ref<SmartTableInst<SysExceptionLog>>()\n\nconst columns: SmartTableColumn<SysExceptionLog>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'exceptionType',\n title: () => t('log.exceptionType'),\n ellipsis: { tooltip: true },\n search: true,\n },\n {\n key: 'message',\n title: () => t('log.exceptionMessage'),\n ellipsis: { tooltip: true },\n render: r => r.message || '—',\n },\n { key: 'httpMethod', title: () => t('log.method'), width: 90 },\n { key: 'path', title: () => t('log.path'), ellipsis: { tooltip: true }, search: true },\n { key: 'operator', title: () => t('log.operator'), width: 120, render: r => operatorText(r) },\n { key: 'ip', title: () => t('log.ip'), render: r => r.ip || '—' },\n {\n key: 'createTime',\n title: () => t('common.createTime'),\n format: 'datetime',\n search: { type: 'daterange' },\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 90,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openDetail(r) },\n () => t('log.detail'),\n ),\n },\n]\n\n// ── 详情抽屉(只读,行数据直填)──\nconst showDetail = ref(false)\nconst detailRow = ref<SysExceptionLog | null>(null)\nfunction openDetail(r: SysExceptionLog) {\n detailRow.value = r\n showDetail.value = true\n}\nfunction clearLogs() {\n confirm({\n type: 'error',\n content: t('log.clearExceptionConfirm'),\n action: () => logApi.exceptionClear(),\n successMsg: t('log.cleared'),\n }).then(ok => {\n if (ok) tableRef.value?.refresh()\n })\n}\n</script>\n\n<template>\n <SmartTable\n :default-page-size=\"100\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"logApi.exceptionPage\"\n flex-height\n virtual-scroll\n storage-key=\"sys-log-exception\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button\n v-auth=\"'DELETE:/api/v1/sys/log/exception'\"\n type=\"error\"\n secondary\n @click=\"clearLogs\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('log.clear') }}\n </n-button>\n </template>\n </SmartTable>\n\n <n-drawer v-model:show=\"showDetail\" :width=\"620\" placement=\"right\">\n <n-drawer-content :title=\"t('log.detail')\" closable>\n <n-descriptions v-if=\"detailRow\" label-placement=\"left\" :column=\"1\" bordered size=\"small\">\n <n-descriptions-item :label=\"t('log.exceptionType')\">\n {{ detailRow.exceptionType }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.method')\">\n {{ detailRow.httpMethod }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.path')\">{{ detailRow.path }}</n-descriptions-item>\n <n-descriptions-item :label=\"t('log.traceId')\">\n {{ detailRow.traceId || '—' }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.operator')\">\n {{ operatorText(detailRow) }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.ip')\">{{ detailRow.ip || '—' }}</n-descriptions-item>\n <n-descriptions-item :label=\"t('log.userAgent')\">\n {{ detailRow.userAgent || '—' }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('common.createTime')\">\n {{ detailRow.createTime }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.exceptionMessage')\">\n <pre class=\"exception\">{{ detailRow.message || '—' }}</pre>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.stackTrace')\">\n <pre class=\"exception\">{{ detailRow.stackTrace || '—' }}</pre>\n </n-descriptions-item>\n </n-descriptions>\n </n-drawer-content>\n </n-drawer>\n</template>\n\n<style scoped>\n.exception {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-all;\n font-family: var(--font-mono, ui-monospace, monospace);\n font-size: 12px;\n line-height: 1.5;\n color: var(--color-danger);\n}\n</style>\n"],"names":["useI18n","message","useMessage","confirm","useConfirm","tableRef","ref","columns","operatorText","h","NButton","openDetail","showDetail","detailRow","clearLogs","logApi","ok","_a","_createVNode","_unref","SmartTable","_cache","e","translateError","_createBlock","AppIcon","_createTextVNode","NDrawer","$event","NDrawerContent","NDescriptions","NDescriptionsItem","_toDisplayString","_createElementVNode","_hoisted_1","_hoisted_2"],"mappings":"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"}
1
+ {"version":3,"file":"index2.vue.js","sources":["../../../../../src/views/system/log/exception/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 异常日志 = 只读 SmartTable + 详情抽屉。后端无 exception/{id},分页项已含全字段 → 抽屉直接用行数据。\n// 只记未捕获异常(程序缺陷);业务异常不进本表。堆栈保持危险色 <pre>——堆栈非代码,高亮无意义。\nimport { computed, h, ref } from 'vue'\nimport { useElementSize } from '@vueuse/core'\nimport {\n NButton,\n NDrawer,\n NDrawerContent,\n NDescriptions,\n NDescriptionsItem,\n useMessage,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { logApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport {\n SEARCH_ACTIONS,\n createFlatFilterSerializer,\n deriveHeaderFilters,\n} from '#/utils/tableFilter'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport TableTotal from '#/components/TableTotal/index.vue'\nimport { fmtDateTime, operatorText } from '#/utils/format'\nimport type { SysExceptionLog } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { confirm } = useConfirm()\nconst tableRef = ref<SmartTableInst<SysExceptionLog>>()\n\n// 详情抽屉的窄档判据:直接读表格根节点的宽度,与库的窄档(容器 < 600,卡片列表)同源同值,\n// 不用视口近似。窄档详情从底部抽屉弹出(宽档右侧抽屉)。未量到宽度(0)时按宽档处理。\nconst tableEl = computed(\n () => (tableRef.value as unknown as { $el?: HTMLElement } | undefined)?.$el,\n)\nconst { width: tableWidth } = useElementSize(tableEl)\nconst isNarrow = computed(() => tableWidth.value > 0 && tableWidth.value < 600)\n\n// 日期区间:条件构造器里是同一字段的两行(大于等于 + 小于等于),序列化器合并成 [起, 止],\n// api 层 splitRange 再拆成 StartTime/EndTime 并给结束日补 23:59:59。\nconst filterSerializer = createFlatFilterSerializer({ ranges: ['createTime'] })\n\nconst columns: SmartTableColumn<SysExceptionLog>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'exceptionType',\n title: () => t('log.exceptionType'),\n ellipsis: { tooltip: true },\n search: { actions: SEARCH_ACTIONS.fuzzy },\n render: r => h('span', { class: 'mono' }, r.exceptionType),\n },\n {\n key: 'message',\n title: () => t('log.exceptionMessage'),\n ellipsis: { tooltip: true },\n render: r => r.message || '—',\n },\n { key: 'httpMethod', title: () => t('log.method'), width: 90 },\n {\n key: 'path',\n title: () => t('log.path'),\n ellipsis: { tooltip: true },\n search: { actions: SEARCH_ACTIONS.fuzzy },\n render: r => h('span', { class: 'mono muted' }, r.path),\n },\n {\n key: 'operator',\n title: () => t('log.operator'),\n width: 120,\n ellipsis: { tooltip: true },\n render: r => operatorText(r),\n },\n {\n key: 'ip',\n title: () => t('log.ip'),\n render: r => h('span', { class: 'mono muted' }, r.ip || '—'),\n },\n {\n key: 'createTime',\n title: () => t('common.createTime'),\n render: r =>\n h('span', { class: 'num muted', style: 'white-space: nowrap' }, fmtDateTime(r.createTime)),\n search: { type: 'daterange', actions: SEARCH_ACTIONS.dayRange },\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 90,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openDetail(r) },\n () => t('log.detail'),\n ),\n },\n]\nderiveHeaderFilters(columns)\n\n// ── 详情抽屉(只读,行数据直填)──\nconst showDetail = ref(false)\nconst detailRow = ref<SysExceptionLog | null>(null)\nfunction openDetail(r: SysExceptionLog) {\n detailRow.value = r\n showDetail.value = true\n}\nfunction clearLogs() {\n confirm({\n type: 'error',\n content: t('log.clearExceptionConfirm'),\n action: () => logApi.exceptionClear(),\n successMsg: t('log.cleared'),\n }).then(ok => {\n if (ok) tableRef.value?.refresh()\n })\n}\n</script>\n\n<template>\n <SmartTable\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"logApi.exceptionPage\"\n :search=\"{ container: 'table' }\"\n :filter-serializer=\"filterSerializer\"\n :toolbar=\"TABLE_TOOLBAR\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"sys-log-exception\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #pagination-prefix=\"{ itemCount }\">\n <TableTotal :count=\"itemCount\" />\n </template>\n <template #toolbar-right>\n <n-button\n v-auth=\"'DELETE:/api/v1/sys/log/exception'\"\n type=\"error\"\n secondary\n @click=\"clearLogs\"\n >\n <template #icon><AppIcon icon=\"ph:trash\" :size=\"16\" /></template>\n {{ t('log.clear') }}\n </n-button>\n </template>\n </SmartTable>\n\n <!-- 详情抽屉:宽档右侧 620,窄档底部抽屉(.st-sheet 由全局样式补圆角与滚动链);无底部按钮 -->\n <n-drawer\n v-model:show=\"showDetail\"\n :placement=\"isNarrow ? 'bottom' : 'right'\"\n :width=\"isNarrow ? undefined : 'min(620px, 100vw)'\"\n :height=\"isNarrow ? 'auto' : undefined\"\n :class=\"isNarrow ? 'st-sheet' : ''\"\n :style=\"isNarrow ? 'max-height: 85vh' : ''\"\n >\n <n-drawer-content :title=\"t('log.detail')\" closable :native-scrollbar=\"isNarrow\">\n <n-descriptions\n v-if=\"detailRow\"\n label-placement=\"left\"\n :column=\"1\"\n bordered\n size=\"small\"\n label-style=\"width: 96px\"\n >\n <n-descriptions-item :label=\"t('log.exceptionType')\">\n <span class=\"mono break\">{{ detailRow.exceptionType }}</span>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.method')\">\n {{ detailRow.httpMethod }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.path')\">\n <span class=\"mono break\">{{ detailRow.path }}</span>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.traceId')\">\n <span class=\"mono break\">{{ detailRow.traceId || '—' }}</span>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.operator')\">\n {{ operatorText(detailRow) }}\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.ip')\">\n <span class=\"mono\">{{ detailRow.ip || '—' }}</span>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.userAgent')\">\n <span class=\"muted break\">{{ detailRow.userAgent || '—' }}</span>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('common.createTime')\">\n <span class=\"num\">{{ fmtDateTime(detailRow.createTime) }}</span>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.exceptionMessage')\">\n <pre class=\"exception\">{{ detailRow.message || '—' }}</pre>\n </n-descriptions-item>\n <n-descriptions-item :label=\"t('log.stackTrace')\">\n <pre class=\"exception\">{{ detailRow.stackTrace || '—' }}</pre>\n </n-descriptions-item>\n </n-descriptions>\n </n-drawer-content>\n </n-drawer>\n</template>\n\n<style scoped>\n.break {\n word-break: break-all;\n}\n.exception {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-all;\n font-family: var(--font-mono, ui-monospace, monospace);\n font-size: 13px;\n line-height: 1.5;\n color: var(--err, var(--color-danger));\n}\n</style>\n"],"names":["useI18n","message","useMessage","confirm","useConfirm","tableRef","ref","tableEl","computed","_a","tableWidth","useElementSize","isNarrow","filterSerializer","createFlatFilterSerializer","columns","SEARCH_ACTIONS","h","r","operatorText","fmtDateTime","NButton","openDetail","deriveHeaderFilters","showDetail","detailRow","clearLogs","logApi","ok","_createVNode","_unref","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_cache","e","translateError","_withCtx","itemCount","TableTotal","_createBlock","AppIcon","_createTextVNode","NDrawer","$event","NDrawerContent","NDescriptions","NDescriptionsItem","_createElementVNode","_hoisted_1","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8"],"mappings":"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"}