smart-admin-web 10.14.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 (538) hide show
  1. package/README.md +6 -6
  2. package/dist/api/index.d.ts +41 -2
  3. package/dist/api/index.js +36 -15
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/schema.d.ts +418 -6
  6. package/dist/assets/icons/ph-subset.json.js +7 -7
  7. package/dist/assets/smart-logo.svg.js +5 -0
  8. package/dist/assets/smart-logo.svg.js.map +1 -0
  9. package/dist/components/AppIcon.vue.js +9 -9
  10. package/dist/components/AppIcon.vue.js.map +1 -1
  11. package/dist/components/AppWatermark.vue.d.ts +14 -0
  12. package/dist/components/AppWatermark.vue.js +38 -0
  13. package/dist/components/AppWatermark.vue.js.map +1 -0
  14. package/dist/components/AppWatermark2.vue.js +5 -0
  15. package/dist/components/AppWatermark2.vue.js.map +1 -0
  16. package/dist/components/Chart/PieChart.vue.d.ts +1 -1
  17. package/dist/components/Chart/echarts.js +15 -20
  18. package/dist/components/Chart/echarts.js.map +1 -1
  19. package/dist/components/CronEditor/index.vue.js +1 -1
  20. package/dist/components/CronEditor/index2.vue.js +2 -1
  21. package/dist/components/CronEditor/index2.vue.js.map +1 -1
  22. package/dist/components/DetailPage/index.vue.js +2 -2
  23. package/dist/components/DetailPage/index2.vue.js.map +1 -1
  24. package/dist/components/DictTag/index.vue.js.map +1 -1
  25. package/dist/components/ErrorBoundary/index.vue.js +2 -2
  26. package/dist/components/ErrorBoundary/index2.vue.js +1 -1
  27. package/dist/components/ErrorBoundary/index2.vue.js.map +1 -1
  28. package/dist/components/FormContainer/index.vue.js +91 -56
  29. package/dist/components/FormContainer/index.vue.js.map +1 -1
  30. package/dist/components/ImportWizard/index.vue.js +1 -1
  31. package/dist/components/ImportWizard/index2.vue.js +44 -41
  32. package/dist/components/ImportWizard/index2.vue.js.map +1 -1
  33. package/dist/components/MenuSearch.vue.js +2 -2
  34. package/dist/components/MenuSearch2.vue.js +19 -18
  35. package/dist/components/MenuSearch2.vue.js.map +1 -1
  36. package/dist/components/PasswordStrength/index.vue.js +2 -2
  37. package/dist/components/PasswordStrength/index2.vue.js +20 -18
  38. package/dist/components/PasswordStrength/index2.vue.js.map +1 -1
  39. package/dist/components/SmartLogo.vue.d.ts +3 -0
  40. package/dist/components/SmartLogo.vue.js +1 -1
  41. package/dist/components/SmartLogo2.vue.js +22 -64
  42. package/dist/components/SmartLogo2.vue.js.map +1 -1
  43. package/dist/{views/system/config/components/GroupExtraConfig.vue.d.ts → components/TableTotal/index.vue.d.ts} +1 -4
  44. package/dist/components/{SelectTable → TableTotal}/index.vue.js +1 -1
  45. package/dist/components/TableTotal/index2.vue.js +16 -0
  46. package/dist/components/TableTotal/index2.vue.js.map +1 -0
  47. package/dist/components/TableZoomButton/index.vue.js.map +1 -1
  48. package/dist/components/UserPicker/index.vue.js +2 -2
  49. package/dist/components/UserPicker/index2.vue.js +176 -117
  50. package/dist/components/UserPicker/index2.vue.js.map +1 -1
  51. package/dist/composables/useBatchDelete.js.map +1 -1
  52. package/dist/composables/useLayoutMenu.js +17 -16
  53. package/dist/composables/useLayoutMenu.js.map +1 -1
  54. package/dist/composables/useLoginHero.d.ts +2 -0
  55. package/dist/composables/useLoginHero.js +22 -0
  56. package/dist/composables/useLoginHero.js.map +1 -0
  57. package/dist/composables/useModule.js +39 -29
  58. package/dist/composables/useModule.js.map +1 -1
  59. package/dist/composables/usePageTitle.js +16 -14
  60. package/dist/composables/usePageTitle.js.map +1 -1
  61. package/dist/composables/useShellBreakpoint.d.ts +19 -0
  62. package/dist/composables/useShellBreakpoint.js +37 -0
  63. package/dist/composables/useShellBreakpoint.js.map +1 -0
  64. package/dist/composables/useSite.d.ts +20 -0
  65. package/dist/composables/useSite.js +18 -13
  66. package/dist/composables/useSite.js.map +1 -1
  67. package/dist/composables/useTabTitle.js.map +1 -1
  68. package/dist/composables/useTableTitle.d.ts +6 -0
  69. package/dist/composables/useTableTitle.js +11 -0
  70. package/dist/composables/useTableTitle.js.map +1 -0
  71. package/dist/composables/useTableZoom.d.ts +5 -0
  72. package/dist/composables/useTableZoom.js.map +1 -1
  73. package/dist/composables/useTheme.d.ts +2 -2
  74. package/dist/composables/useTheme.js +23 -20
  75. package/dist/composables/useTheme.js.map +1 -1
  76. package/dist/createSmartAdmin.d.ts +12 -2
  77. package/dist/createSmartAdmin.js +72 -60
  78. package/dist/createSmartAdmin.js.map +1 -1
  79. package/dist/index.d.ts +5 -2
  80. package/dist/index.js +223 -208
  81. package/dist/index.js.map +1 -1
  82. package/dist/layouts/AccentPicker.vue.js +8 -0
  83. package/dist/layouts/AccentPicker.vue.js.map +1 -0
  84. package/dist/layouts/AccentPicker2.vue.js +131 -0
  85. package/dist/layouts/AccentPicker2.vue.js.map +1 -0
  86. package/dist/layouts/AppHeader.vue.d.ts +8 -1
  87. package/dist/layouts/AppHeader.vue.js +2 -2
  88. package/dist/layouts/AppHeader2.vue.js +317 -235
  89. package/dist/layouts/AppHeader2.vue.js.map +1 -1
  90. package/dist/layouts/NoticeBell.vue.js +2 -2
  91. package/dist/layouts/NoticeBell2.vue.js +1 -1
  92. package/dist/layouts/NoticeBell2.vue.js.map +1 -1
  93. package/dist/layouts/PersonalLayout.vue.js +2 -2
  94. package/dist/layouts/PersonalLayout2.vue.js +69 -47
  95. package/dist/layouts/PersonalLayout2.vue.js.map +1 -1
  96. package/dist/layouts/SettingsDrawer.vue.js +3 -3
  97. package/dist/layouts/SettingsDrawer2.vue.js +261 -325
  98. package/dist/layouts/SettingsDrawer2.vue.js.map +1 -1
  99. package/dist/layouts/TabsBar.vue.js +2 -2
  100. package/dist/layouts/TabsBar2.vue.js +97 -69
  101. package/dist/layouts/TabsBar2.vue.js.map +1 -1
  102. package/dist/layouts/components/SideNav.vue.d.ts +3 -0
  103. package/dist/layouts/components/SideNav.vue.js +1 -1
  104. package/dist/layouts/components/SideNav2.vue.js +54 -26
  105. package/dist/layouts/components/SideNav2.vue.js.map +1 -1
  106. package/dist/layouts/default.vue.js +1 -1
  107. package/dist/layouts/default2.vue.js +170 -140
  108. package/dist/layouts/default2.vue.js.map +1 -1
  109. package/dist/lib/favicon.d.ts +1 -0
  110. package/dist/lib/favicon.js +12 -0
  111. package/dist/lib/favicon.js.map +1 -0
  112. package/dist/lib/loginHero.d.ts +16 -0
  113. package/dist/lib/loginHero.js +33 -0
  114. package/dist/lib/loginHero.js.map +1 -0
  115. package/dist/lib/logoCrop.d.ts +25 -0
  116. package/dist/lib/logoCrop.js +22 -0
  117. package/dist/lib/logoCrop.js.map +1 -0
  118. package/dist/lib/runtime.d.ts +2 -0
  119. package/dist/lib/runtime.js +1 -1
  120. package/dist/lib/runtime.js.map +1 -1
  121. package/dist/lib/securityRules.d.ts +26 -0
  122. package/dist/lib/securityRules.js +86 -0
  123. package/dist/lib/securityRules.js.map +1 -0
  124. package/dist/lib/watermark.d.ts +110 -0
  125. package/dist/lib/watermark.js +151 -0
  126. package/dist/lib/watermark.js.map +1 -0
  127. package/dist/locales/en-US.d.ts +462 -42
  128. package/dist/locales/en-US.js +491 -78
  129. package/dist/locales/en-US.js.map +1 -1
  130. package/dist/locales/kernelMenuTitles.d.ts +1 -0
  131. package/dist/locales/kernelMenuTitles.js +128 -0
  132. package/dist/locales/kernelMenuTitles.js.map +1 -0
  133. package/dist/locales/menuTitle.d.ts +3 -0
  134. package/dist/locales/menuTitle.js +14 -12
  135. package/dist/locales/menuTitle.js.map +1 -1
  136. package/dist/locales/zh-CN.d.ts +462 -42
  137. package/dist/locales/zh-CN.js +490 -81
  138. package/dist/locales/zh-CN.js.map +1 -1
  139. package/dist/router/index.js +41 -32
  140. package/dist/router/index.js.map +1 -1
  141. package/dist/router/namedPage.d.ts +4 -0
  142. package/dist/router/namedPage.js +7 -7
  143. package/dist/router/namedPage.js.map +1 -1
  144. package/dist/router/viewRegistry.js +12 -12
  145. package/dist/router/viewRegistry.js.map +1 -1
  146. package/dist/stores/app.d.ts +0 -12
  147. package/dist/stores/app.js +11 -12
  148. package/dist/stores/app.js.map +1 -1
  149. package/dist/stores/tabs.js.map +1 -1
  150. package/dist/stores/user.d.ts +10 -0
  151. package/dist/stores/user.js.map +1 -1
  152. package/dist/style.css +1 -1
  153. package/dist/theme/accentTokens.d.ts +27 -0
  154. package/dist/theme/accentTokens.js +54 -0
  155. package/dist/theme/accentTokens.js.map +1 -0
  156. package/dist/theme/accents.d.ts +21 -1
  157. package/dist/theme/accents.js +11 -2
  158. package/dist/theme/accents.js.map +1 -1
  159. package/dist/theme/mix.d.ts +58 -7
  160. package/dist/theme/mix.js +115 -30
  161. package/dist/theme/mix.js.map +1 -1
  162. package/dist/theme/naive-theme.d.ts +5 -2
  163. package/dist/theme/naive-theme.js +405 -75
  164. package/dist/theme/naive-theme.js.map +1 -1
  165. package/dist/utils/jwt.d.ts +8 -0
  166. package/dist/utils/jwt.js +14 -0
  167. package/dist/utils/jwt.js.map +1 -0
  168. package/dist/utils/menuIcon.d.ts +2 -0
  169. package/dist/utils/menuIcon.js +8 -0
  170. package/dist/utils/menuIcon.js.map +1 -0
  171. package/dist/utils/oauthBrand.d.ts +34 -9
  172. package/dist/utils/oauthBrand.js +70 -74
  173. package/dist/utils/oauthBrand.js.map +1 -1
  174. package/dist/utils/tableFilter.d.ts +88 -0
  175. package/dist/utils/tableFilter.js +116 -0
  176. package/dist/utils/tableFilter.js.map +1 -0
  177. package/dist/utils/tableToolbar.d.ts +18 -0
  178. package/dist/utils/tableToolbar.js +11 -0
  179. package/dist/utils/tableToolbar.js.map +1 -0
  180. package/dist/utils/treeFilter.d.ts +20 -0
  181. package/dist/utils/treeFilter.js +24 -0
  182. package/dist/utils/treeFilter.js.map +1 -0
  183. package/dist/views/dashboard/ShortcutPicker.vue.js +1 -1
  184. package/dist/views/dashboard/ShortcutPicker2.vue.js +73 -48
  185. package/dist/views/dashboard/ShortcutPicker2.vue.js.map +1 -1
  186. package/dist/views/dashboard/biz.vue.js +1 -1
  187. package/dist/views/dashboard/biz2.vue.js +310 -257
  188. package/dist/views/dashboard/biz2.vue.js.map +1 -1
  189. package/dist/views/dashboard/workbench.vue.js +2 -2
  190. package/dist/views/dashboard/workbench2.vue.js +141 -155
  191. package/dist/views/dashboard/workbench2.vue.js.map +1 -1
  192. package/dist/views/embed/iframe.vue.js +2 -2
  193. package/dist/views/embed/iframe2.vue.js +22 -15
  194. package/dist/views/embed/iframe2.vue.js.map +1 -1
  195. package/dist/views/error/404.vue.js +2 -2
  196. package/dist/views/error/4042.vue.js +33 -24
  197. package/dist/views/error/4042.vue.js.map +1 -1
  198. package/dist/views/error/BootError.vue.js +1 -1
  199. package/dist/views/error/BootError2.vue.js +59 -48
  200. package/dist/views/error/BootError2.vue.js.map +1 -1
  201. package/dist/views/error/MissingRoute.vue.js +2 -2
  202. package/dist/views/error/MissingRoute2.vue.js +34 -15
  203. package/dist/views/error/MissingRoute2.vue.js.map +1 -1
  204. package/dist/views/login/LoginForm.vue.d.ts +7 -1
  205. package/dist/views/login/LoginForm.vue.js +2 -2
  206. package/dist/views/login/LoginForm2.vue.js +580 -488
  207. package/dist/views/login/LoginForm2.vue.js.map +1 -1
  208. package/dist/views/login/components/LoginDesk.vue.d.ts +36 -0
  209. package/dist/views/login/components/LoginDesk.vue.js +9 -0
  210. package/dist/views/login/components/LoginDesk.vue.js.map +1 -0
  211. package/dist/views/login/components/LoginDesk2.vue.js +100 -0
  212. package/dist/views/login/components/LoginDesk2.vue.js.map +1 -0
  213. package/dist/views/login/components/LoginHeroPanel.vue.d.ts +18 -0
  214. package/dist/views/login/components/LoginHeroPanel.vue.js +8 -0
  215. package/dist/views/login/components/LoginHeroPanel.vue.js.map +1 -0
  216. package/dist/views/login/components/LoginHeroPanel2.vue.js +61 -0
  217. package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -0
  218. package/dist/views/login/index.vue.js +1 -1
  219. package/dist/views/login/index2.vue.js +141 -71
  220. package/dist/views/login/index2.vue.js.map +1 -1
  221. package/dist/views/login/layout.d.ts +11 -0
  222. package/dist/views/login/layout.js +27 -0
  223. package/dist/views/login/layout.js.map +1 -0
  224. package/dist/views/mfa/index.vue.js +2 -2
  225. package/dist/views/mfa/index2.vue.js +367 -321
  226. package/dist/views/mfa/index2.vue.js.map +1 -1
  227. package/dist/views/module/index.vue.js +2 -2
  228. package/dist/views/module/index2.vue.js +132 -99
  229. package/dist/views/module/index2.vue.js.map +1 -1
  230. package/dist/views/oauth/callback.vue.js +2 -2
  231. package/dist/views/oauth/callback2.vue.js +65 -51
  232. package/dist/views/oauth/callback2.vue.js.map +1 -1
  233. package/dist/views/personal/bindings.vue.js +2 -2
  234. package/dist/views/personal/bindings2.vue.js +98 -94
  235. package/dist/views/personal/bindings2.vue.js.map +1 -1
  236. package/dist/views/personal/notice2.vue.js +103 -76
  237. package/dist/views/personal/notice2.vue.js.map +1 -1
  238. package/dist/views/personal/password2.vue.js +47 -40
  239. package/dist/views/personal/password2.vue.js.map +1 -1
  240. package/dist/views/personal/profile.vue.js +3 -3
  241. package/dist/views/personal/profile2.vue.js +24 -18
  242. package/dist/views/personal/profile2.vue.js.map +1 -1
  243. package/dist/views/personal/security.vue.js +2 -2
  244. package/dist/views/personal/security2.vue.js +65 -53
  245. package/dist/views/personal/security2.vue.js.map +1 -1
  246. package/dist/views/personal/sessions.vue.js +2 -2
  247. package/dist/views/personal/sessions2.vue.js +67 -62
  248. package/dist/views/personal/sessions2.vue.js.map +1 -1
  249. package/dist/views/system/ai-model/components/ProviderCard.vue.js +2 -2
  250. package/dist/views/system/ai-model/components/ProviderCard2.vue.js +142 -130
  251. package/dist/views/system/ai-model/components/ProviderCard2.vue.js.map +1 -1
  252. package/dist/views/system/ai-model/components/ProviderForm.vue.js +2 -2
  253. package/dist/views/system/ai-model/components/ProviderForm2.vue.js +71 -70
  254. package/dist/views/system/ai-model/components/ProviderForm2.vue.js.map +1 -1
  255. package/dist/views/system/ai-model/index.vue.js +2 -2
  256. package/dist/views/system/ai-model/index2.vue.js +99 -99
  257. package/dist/views/system/ai-model/index2.vue.js.map +1 -1
  258. package/dist/views/system/ai-model/presets.d.ts +1 -1
  259. package/dist/views/system/ai-model/presets.js +18 -18
  260. package/dist/views/system/ai-model/presets.js.map +1 -1
  261. package/dist/views/system/ai-usage/index.vue.js +2 -2
  262. package/dist/views/system/ai-usage/index2.vue.js +356 -258
  263. package/dist/views/system/ai-usage/index2.vue.js.map +1 -1
  264. package/dist/views/system/api-docs/index.vue.js +5 -2
  265. package/dist/views/system/api-docs/index.vue.js.map +1 -1
  266. package/dist/views/system/api-docs/index2.vue.js +92 -42
  267. package/dist/views/system/api-docs/index2.vue.js.map +1 -1
  268. package/dist/views/system/cache/index.vue.js +2 -2
  269. package/dist/views/system/cache/index2.vue.js +74 -80
  270. package/dist/views/system/cache/index2.vue.js.map +1 -1
  271. package/dist/views/system/config/components/AdminMock.vue.js +8 -0
  272. package/dist/views/system/config/components/AdminMock.vue.js.map +1 -0
  273. package/dist/views/system/config/components/AdminMock2.vue.js +93 -0
  274. package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -0
  275. package/dist/views/system/config/components/AdvancedSection.vue.js +8 -0
  276. package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -0
  277. package/dist/views/system/config/components/AdvancedSection2.vue.js +163 -0
  278. package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -0
  279. package/dist/views/system/config/components/BrandSection.vue.d.ts +7 -0
  280. package/dist/views/system/config/components/BrandSection.vue.js +8 -0
  281. package/dist/views/system/config/components/BrandSection.vue.js.map +1 -0
  282. package/dist/views/system/config/components/BrandSection2.vue.js +266 -0
  283. package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -0
  284. package/dist/views/system/config/components/CfgGroup.vue.d.ts +18 -0
  285. package/dist/views/system/config/components/CfgGroup.vue.js +8 -0
  286. package/dist/views/system/config/components/CfgGroup.vue.js.map +1 -0
  287. package/dist/views/system/config/components/CfgGroup2.vue.js +22 -0
  288. package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -0
  289. package/dist/views/system/config/components/CfgRow.vue.d.ts +26 -0
  290. package/dist/views/system/config/components/CfgRow.vue.js +9 -0
  291. package/dist/views/system/config/components/CfgRow.vue.js.map +1 -0
  292. package/dist/views/system/config/components/CfgRow2.vue.js +54 -0
  293. package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -0
  294. package/dist/views/system/config/components/CfgSegment.vue.d.ts +28 -0
  295. package/dist/views/system/config/components/CfgSegment.vue.js +8 -0
  296. package/dist/views/system/config/components/CfgSegment.vue.js.map +1 -0
  297. package/dist/views/system/config/components/CfgSegment2.vue.js +45 -0
  298. package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -0
  299. package/dist/views/system/config/components/ConfigFormModal.vue.js +4 -1
  300. package/dist/views/system/config/components/ConfigFormModal.vue.js.map +1 -1
  301. package/dist/views/system/config/components/ConfigFormModal2.vue.js +72 -60
  302. package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
  303. package/dist/views/system/config/components/JobSection.vue.js +8 -0
  304. package/dist/views/system/config/components/JobSection.vue.js.map +1 -0
  305. package/dist/views/system/config/components/JobSection2.vue.js +140 -0
  306. package/dist/views/system/config/components/JobSection2.vue.js.map +1 -0
  307. package/dist/views/system/config/components/LoginMock.vue.d.ts +8 -0
  308. package/dist/views/system/config/components/LoginMock.vue.js +8 -0
  309. package/dist/views/system/config/components/LoginMock.vue.js.map +1 -0
  310. package/dist/views/system/config/components/LoginMock2.vue.js +132 -0
  311. package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -0
  312. package/dist/views/system/config/components/LogoCropper.vue.d.ts +10 -0
  313. package/dist/views/system/config/components/LogoCropper.vue.js +8 -0
  314. package/dist/views/system/config/components/LogoCropper.vue.js.map +1 -0
  315. package/dist/views/system/config/components/LogoCropper2.vue.js +122 -0
  316. package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -0
  317. package/dist/views/system/config/components/LogoEditor.vue.js +8 -0
  318. package/dist/views/system/config/components/LogoEditor.vue.js.map +1 -0
  319. package/dist/views/system/config/components/LogoEditor2.vue.js +161 -0
  320. package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -0
  321. package/dist/views/system/config/components/ProviderSheet.vue.d.ts +17 -0
  322. package/dist/views/system/config/components/ProviderSheet.vue.js +8 -0
  323. package/dist/views/system/config/components/ProviderSheet.vue.js.map +1 -0
  324. package/dist/views/system/config/components/ProviderSheet2.vue.js +343 -0
  325. package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -0
  326. package/dist/{layouts/SettingRow.vue.d.ts → views/system/config/components/ScaleToFit.vue.d.ts} +2 -1
  327. package/dist/views/system/config/components/ScaleToFit.vue.js +8 -0
  328. package/dist/views/system/config/components/ScaleToFit.vue.js.map +1 -0
  329. package/dist/views/system/config/components/ScaleToFit2.vue.js +41 -0
  330. package/dist/views/system/config/components/ScaleToFit2.vue.js.map +1 -0
  331. package/dist/views/system/config/components/SectionLayout.vue.d.ts +30 -0
  332. package/dist/views/system/config/components/SectionLayout.vue.js +8 -0
  333. package/dist/views/system/config/components/SectionLayout.vue.js.map +1 -0
  334. package/dist/views/system/config/components/SectionLayout2.vue.js +69 -0
  335. package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -0
  336. package/dist/views/system/config/components/SecuritySection.vue.js +8 -0
  337. package/dist/views/system/config/components/SecuritySection.vue.js.map +1 -0
  338. package/dist/views/system/config/components/SecuritySection2.vue.js +417 -0
  339. package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -0
  340. package/dist/views/system/config/components/SensitiveSection.vue.js +8 -0
  341. package/dist/views/system/config/components/SensitiveSection.vue.js.map +1 -0
  342. package/dist/views/system/config/components/SensitiveSection2.vue.js +214 -0
  343. package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -0
  344. package/dist/views/system/config/components/SigninSection.vue.js +8 -0
  345. package/dist/views/system/config/components/SigninSection.vue.js.map +1 -0
  346. package/dist/views/system/config/components/SigninSection2.vue.js +201 -0
  347. package/dist/views/system/config/components/SigninSection2.vue.js.map +1 -0
  348. package/dist/views/system/config/components/UploadSection.vue.js +8 -0
  349. package/dist/views/system/config/components/UploadSection.vue.js.map +1 -0
  350. package/dist/views/system/config/components/UploadSection2.vue.js +176 -0
  351. package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -0
  352. package/dist/views/system/config/components/WatermarkSection.vue.js +8 -0
  353. package/dist/views/system/config/components/WatermarkSection.vue.js.map +1 -0
  354. package/dist/views/system/config/components/WatermarkSection2.vue.js +284 -0
  355. package/dist/views/system/config/components/WatermarkSection2.vue.js.map +1 -0
  356. package/dist/views/system/config/draft.d.ts +148 -0
  357. package/dist/views/system/config/draft.js +170 -0
  358. package/dist/views/system/config/draft.js.map +1 -0
  359. package/dist/views/system/config/flash.d.ts +2 -0
  360. package/dist/views/system/config/flash.js +9 -0
  361. package/dist/views/system/config/flash.js.map +1 -0
  362. package/dist/views/system/config/groups.d.ts +38 -7
  363. package/dist/views/system/config/groups.js +104 -14
  364. package/dist/views/system/config/groups.js.map +1 -1
  365. package/dist/views/system/config/index.vue.js +6 -2
  366. package/dist/views/system/config/index.vue.js.map +1 -1
  367. package/dist/views/system/config/index2.vue.js +201 -111
  368. package/dist/views/system/config/index2.vue.js.map +1 -1
  369. package/dist/views/system/config/layoutMode.d.ts +23 -0
  370. package/dist/views/system/config/layoutMode.js +28 -0
  371. package/dist/views/system/config/layoutMode.js.map +1 -0
  372. package/dist/views/system/config/providerForm.d.ts +33 -0
  373. package/dist/views/system/config/providerForm.js +63 -0
  374. package/dist/views/system/config/providerForm.js.map +1 -0
  375. package/dist/views/system/dict/index.vue.js +2 -2
  376. package/dist/views/system/dict/index2.vue.js +471 -366
  377. package/dist/views/system/dict/index2.vue.js.map +1 -1
  378. package/dist/views/system/file/index2.vue.js +91 -76
  379. package/dist/views/system/file/index2.vue.js.map +1 -1
  380. package/dist/views/system/job/index.vue.js +3 -3
  381. package/dist/views/system/job/index2.vue.js +897 -828
  382. package/dist/views/system/job/index2.vue.js.map +1 -1
  383. package/dist/views/system/job-log/components/AttemptTable.vue.d.ts +8 -0
  384. package/dist/views/system/job-log/components/AttemptTable.vue.js +5 -0
  385. package/dist/views/system/job-log/components/AttemptTable.vue.js.map +1 -0
  386. package/dist/views/system/job-log/components/AttemptTable2.vue.js +54 -0
  387. package/dist/views/system/job-log/components/AttemptTable2.vue.js.map +1 -0
  388. package/dist/views/system/job-log/index.vue.js +2 -2
  389. package/dist/views/system/job-log/index2.vue.js +193 -207
  390. package/dist/views/system/job-log/index2.vue.js.map +1 -1
  391. package/dist/views/system/job-log/runStatus.d.ts +13 -0
  392. package/dist/views/system/job-log/runStatus.js +26 -0
  393. package/dist/views/system/job-log/runStatus.js.map +1 -0
  394. package/dist/views/system/job-monitor/index.vue.js +2 -2
  395. package/dist/views/system/job-monitor/index2.vue.js +172 -180
  396. package/dist/views/system/job-monitor/index2.vue.js.map +1 -1
  397. package/dist/views/system/log/exception/index.vue.js +2 -2
  398. package/dist/views/system/log/exception/index2.vue.js +135 -96
  399. package/dist/views/system/log/exception/index2.vue.js.map +1 -1
  400. package/dist/views/system/log/login/index2.vue.js +62 -41
  401. package/dist/views/system/log/login/index2.vue.js.map +1 -1
  402. package/dist/views/system/log/op/index.vue.js +2 -2
  403. package/dist/views/system/log/op/index2.vue.js +200 -162
  404. package/dist/views/system/log/op/index2.vue.js.map +1 -1
  405. package/dist/views/system/menu/components/ButtonManager.vue.js +2 -2
  406. package/dist/views/system/menu/components/ButtonManager2.vue.js +206 -190
  407. package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -1
  408. package/dist/views/system/menu/components/MenuFormModal.vue.js +2 -2
  409. package/dist/views/system/menu/components/MenuFormModal2.vue.js +127 -118
  410. package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -1
  411. package/dist/views/system/menu/index.vue.js +1 -1
  412. package/dist/views/system/menu/index2.vue.js +216 -183
  413. package/dist/views/system/menu/index2.vue.js.map +1 -1
  414. package/dist/views/system/module/index.vue.js +1 -1
  415. package/dist/views/system/module/index2.vue.js +177 -144
  416. package/dist/views/system/module/index2.vue.js.map +1 -1
  417. package/dist/views/system/monitor/index.vue.js +2 -2
  418. package/dist/views/system/monitor/index2.vue.js +134 -149
  419. package/dist/views/system/monitor/index2.vue.js.map +1 -1
  420. package/dist/views/system/notice/index.vue.js +1 -1
  421. package/dist/views/system/notice/index2.vue.js +209 -181
  422. package/dist/views/system/notice/index2.vue.js.map +1 -1
  423. package/dist/views/system/org/index.vue.js +1 -1
  424. package/dist/views/system/org/index2.vue.js +278 -248
  425. package/dist/views/system/org/index2.vue.js.map +1 -1
  426. package/dist/views/system/position/index.vue.js +5 -2
  427. package/dist/views/system/position/index.vue.js.map +1 -1
  428. package/dist/views/system/position/index2.vue.js +128 -92
  429. package/dist/views/system/position/index2.vue.js.map +1 -1
  430. package/dist/views/system/recycle/index.vue.js +2 -2
  431. package/dist/views/system/recycle/index2.vue.js +90 -67
  432. package/dist/views/system/recycle/index2.vue.js.map +1 -1
  433. package/dist/views/system/role/components/GrantMenuSheet.vue.d.ts +20 -0
  434. package/dist/views/system/role/components/GrantMenuSheet.vue.js +8 -0
  435. package/dist/views/system/role/components/GrantMenuSheet.vue.js.map +1 -0
  436. package/dist/views/system/role/components/GrantMenuSheet2.vue.js +117 -0
  437. package/dist/views/system/role/components/GrantMenuSheet2.vue.js.map +1 -0
  438. package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +6 -4
  439. package/dist/views/system/role/components/GrantMenuTable.vue.js +2 -2
  440. package/dist/views/system/role/components/GrantMenuTable2.vue.js +279 -177
  441. package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -1
  442. package/dist/views/system/role/components/MatchText.vue.d.ts +7 -0
  443. package/dist/views/system/role/components/MatchText.vue.js +8 -0
  444. package/dist/views/system/role/components/MatchText.vue.js.map +1 -0
  445. package/dist/views/system/role/components/MatchText2.vue.js +29 -0
  446. package/dist/views/system/role/components/MatchText2.vue.js.map +1 -0
  447. package/dist/views/system/role/components/grantMenuGroups.d.ts +36 -0
  448. package/dist/views/system/role/components/grantMenuGroups.js +110 -48
  449. package/dist/views/system/role/components/grantMenuGroups.js.map +1 -1
  450. package/dist/views/system/role/index.vue.js +5 -2
  451. package/dist/views/system/role/index.vue.js.map +1 -1
  452. package/dist/views/system/role/index2.vue.js +181 -165
  453. package/dist/views/system/role/index2.vue.js.map +1 -1
  454. package/dist/views/system/session/index2.vue.js +75 -49
  455. package/dist/views/system/session/index2.vue.js.map +1 -1
  456. package/dist/views/system/user/components/ResetPasswordModal.vue.js +2 -2
  457. package/dist/views/system/user/components/ResetPasswordModal2.vue.js +2 -0
  458. package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -1
  459. package/dist/views/system/user/components/UserFormModal.vue.js +2 -2
  460. package/dist/views/system/user/components/UserFormModal2.vue.js +77 -76
  461. package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -1
  462. package/dist/views/system/user/index.vue.js +2 -2
  463. package/dist/views/system/user/index2.vue.js +362 -275
  464. package/dist/views/system/user/index2.vue.js.map +1 -1
  465. package/package.json +6 -8
  466. package/dist/components/SelectTable/index.vue.d.ts +0 -76
  467. package/dist/components/SelectTable/index2.vue.js +0 -256
  468. package/dist/components/SelectTable/index2.vue.js.map +0 -1
  469. package/dist/composables/useTableRowSort.d.ts +0 -20
  470. package/dist/composables/useTableRowSort.js +0 -59
  471. package/dist/composables/useTableRowSort.js.map +0 -1
  472. package/dist/layouts/LayoutModeCards.vue.js +0 -8
  473. package/dist/layouts/LayoutModeCards.vue.js.map +0 -1
  474. package/dist/layouts/LayoutModeCards2.vue.js +0 -67
  475. package/dist/layouts/LayoutModeCards2.vue.js.map +0 -1
  476. package/dist/layouts/SettingRow.vue.js +0 -8
  477. package/dist/layouts/SettingRow.vue.js.map +0 -1
  478. package/dist/layouts/SettingRow2.vue.js +0 -23
  479. package/dist/layouts/SettingRow2.vue.js.map +0 -1
  480. package/dist/views/login/skins/AuroraGlass.vue.js +0 -8
  481. package/dist/views/login/skins/AuroraGlass.vue.js.map +0 -1
  482. package/dist/views/login/skins/AuroraGlass2.vue.js +0 -80
  483. package/dist/views/login/skins/AuroraGlass2.vue.js.map +0 -1
  484. package/dist/views/login/skins/SplitPanel.vue.js +0 -8
  485. package/dist/views/login/skins/SplitPanel.vue.js.map +0 -1
  486. package/dist/views/login/skins/SplitPanel2.vue.js +0 -85
  487. package/dist/views/login/skins/SplitPanel2.vue.js.map +0 -1
  488. package/dist/views/login/skins/Spotlight.vue.js +0 -8
  489. package/dist/views/login/skins/Spotlight.vue.js.map +0 -1
  490. package/dist/views/login/skins/Spotlight2.vue.js +0 -36
  491. package/dist/views/login/skins/Spotlight2.vue.js.map +0 -1
  492. package/dist/views/login/skins.d.ts +0 -8
  493. package/dist/views/login/skins.js +0 -13
  494. package/dist/views/login/skins.js.map +0 -1
  495. package/dist/views/system/config/components/ExternalAuthConfig.vue.js +0 -8
  496. package/dist/views/system/config/components/ExternalAuthConfig.vue.js.map +0 -1
  497. package/dist/views/system/config/components/ExternalAuthConfig2.vue.js +0 -218
  498. package/dist/views/system/config/components/ExternalAuthConfig2.vue.js.map +0 -1
  499. package/dist/views/system/config/components/GroupExtraConfig.vue.js +0 -8
  500. package/dist/views/system/config/components/GroupExtraConfig.vue.js.map +0 -1
  501. package/dist/views/system/config/components/GroupExtraConfig2.vue.js +0 -108
  502. package/dist/views/system/config/components/GroupExtraConfig2.vue.js.map +0 -1
  503. package/dist/views/system/config/components/HighSensConfig.vue.js +0 -5
  504. package/dist/views/system/config/components/HighSensConfig.vue.js.map +0 -1
  505. package/dist/views/system/config/components/HighSensConfig2.vue.js +0 -134
  506. package/dist/views/system/config/components/HighSensConfig2.vue.js.map +0 -1
  507. package/dist/views/system/config/components/JobConfig.vue.js +0 -5
  508. package/dist/views/system/config/components/JobConfig.vue.js.map +0 -1
  509. package/dist/views/system/config/components/JobConfig2.vue.js +0 -116
  510. package/dist/views/system/config/components/JobConfig2.vue.js.map +0 -1
  511. package/dist/views/system/config/components/OtherConfig.vue.js +0 -5
  512. package/dist/views/system/config/components/OtherConfig.vue.js.map +0 -1
  513. package/dist/views/system/config/components/OtherConfig2.vue.js +0 -121
  514. package/dist/views/system/config/components/OtherConfig2.vue.js.map +0 -1
  515. package/dist/views/system/config/components/SecurityConfig.vue.js +0 -8
  516. package/dist/views/system/config/components/SecurityConfig.vue.js.map +0 -1
  517. package/dist/views/system/config/components/SecurityConfig2.vue.js +0 -456
  518. package/dist/views/system/config/components/SecurityConfig2.vue.js.map +0 -1
  519. package/dist/views/system/config/components/SysBaseConfig.vue.js +0 -5
  520. package/dist/views/system/config/components/SysBaseConfig.vue.js.map +0 -1
  521. package/dist/views/system/config/components/SysBaseConfig2.vue.js +0 -107
  522. package/dist/views/system/config/components/SysBaseConfig2.vue.js.map +0 -1
  523. package/dist/views/system/config/components/UploadConfig.vue.d.ts +0 -3
  524. package/dist/views/system/config/components/UploadConfig.vue.js +0 -5
  525. package/dist/views/system/config/components/UploadConfig.vue.js.map +0 -1
  526. package/dist/views/system/config/components/UploadConfig2.vue.js +0 -135
  527. package/dist/views/system/config/components/UploadConfig2.vue.js.map +0 -1
  528. /package/dist/components/{SelectTable → TableTotal}/index.vue.js.map +0 -0
  529. /package/dist/layouts/{LayoutModeCards.vue.d.ts → AccentPicker.vue.d.ts} +0 -0
  530. /package/dist/views/{login/skins/AuroraGlass.vue.d.ts → system/config/components/AdminMock.vue.d.ts} +0 -0
  531. /package/dist/views/{login/skins/SplitPanel.vue.d.ts → system/config/components/AdvancedSection.vue.d.ts} +0 -0
  532. /package/dist/views/{login/skins/Spotlight.vue.d.ts → system/config/components/JobSection.vue.d.ts} +0 -0
  533. /package/dist/views/system/config/components/{ExternalAuthConfig.vue.d.ts → LogoEditor.vue.d.ts} +0 -0
  534. /package/dist/views/system/config/components/{HighSensConfig.vue.d.ts → SecuritySection.vue.d.ts} +0 -0
  535. /package/dist/views/system/config/components/{JobConfig.vue.d.ts → SensitiveSection.vue.d.ts} +0 -0
  536. /package/dist/views/system/config/components/{OtherConfig.vue.d.ts → SigninSection.vue.d.ts} +0 -0
  537. /package/dist/views/system/config/components/{SecurityConfig.vue.d.ts → UploadSection.vue.d.ts} +0 -0
  538. /package/dist/views/system/config/components/{SysBaseConfig.vue.d.ts → WatermarkSection.vue.d.ts} +0 -0
@@ -1,50 +1,67 @@
1
- import { defineComponent as E, ref as d, openBlock as y, createElementBlock as b, createVNode as l, unref as i, withCtx as a, createTextVNode as R, toDisplayString as T, createSlots as $, Fragment as D, renderList as I, createBlock as M, h } from "vue";
2
- import { useMessage as j, NButton as v, NModal as q, NSpace as F, NTag as A } from "naive-ui";
3
- import { useI18n as L } from "vue-i18n";
4
- import { SmartTable as U } from "smart-naive-table";
1
+ import { defineComponent as F, ref as f, h, openBlock as v, createElementBlock as A, createVNode as a, unref as o, withCtx as r, createTextVNode as R, toDisplayString as N, createSlots as I, Fragment as L, renderList as V, createBlock as H } from "vue";
2
+ import { useMessage as O, NTag as x, NButton as w, NModal as $, NSpace as D } from "naive-ui";
3
+ import { useI18n as j } from "vue-i18n";
4
+ import { SmartTable as q } from "smart-naive-table";
5
5
  import G from "../../components/AppIcon.vue.js";
6
- import H from "../../components/MarkdownEditor/MarkdownView.vue.js";
7
- import { useConfirm as J } from "../../composables/useConfirm.js";
8
- import { useNoticeAction as K } from "../../composables/useNoticeAction.js";
9
- import { noticeApi as w } from "../../api/index.js";
10
- import { NoticeType as N } from "../../types/api.js";
11
- import { translateError as x } from "../../utils/error.js";
12
- import { fmtDateTime as O } from "../../utils/format.js";
13
- const P = { class: "fill-page" }, ce = /* @__PURE__ */ E({
6
+ import U from "../../components/MarkdownEditor/MarkdownView.vue.js";
7
+ import { useConfirm as W } from "../../composables/useConfirm.js";
8
+ import { useNoticeAction as J } from "../../composables/useNoticeAction.js";
9
+ import { noticeApi as g } from "../../api/index.js";
10
+ import { NoticeType as l } from "../../types/api.js";
11
+ import { translateError as z } from "../../utils/error.js";
12
+ import { fmtDateTime as K } from "../../utils/format.js";
13
+ import { TABLE_MIN_ROW_HEIGHT as P, TABLE_TOOLBAR as Q } from "../../utils/tableToolbar.js";
14
+ import X from "../../components/TableTotal/index.vue.js";
15
+ import { createClientFilterFetcher as Y, deriveHeaderFilters as Z, passthroughFilterSerializer as ee } from "../../utils/tableFilter.js";
16
+ const te = { class: "fill-page" }, ge = /* @__PURE__ */ F({
14
17
  __name: "notice",
15
- setup(Q) {
16
- const { t } = L(), k = j(), { run: C } = J(), f = K(), p = d(), z = [
18
+ setup(oe) {
19
+ const { t } = j(), b = O(), { run: C } = W(), d = J(), y = f(), M = Y(g.mine, ["title", "type", "isRead"]), k = [
17
20
  { type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
18
21
  {
19
22
  key: "isRead",
20
23
  title: () => t("notice.status"),
21
24
  width: 80,
25
+ search: {},
26
+ // 布尔值走下拉;render 仍负责标签样式(render 优先于 options)
27
+ options: [
28
+ { label: () => t("notice.read"), value: !0 },
29
+ { label: () => t("notice.unread"), value: !1 }
30
+ ],
22
31
  render: (e) => h(
23
- A,
32
+ x,
24
33
  { size: "small", type: e.isRead ? "default" : "success", bordered: !1 },
25
34
  () => e.isRead ? t("notice.read") : t("notice.unread")
26
35
  )
27
36
  },
28
- { key: "title", title: () => t("notice.noticeTitle") },
37
+ { key: "title", title: () => t("notice.noticeTitle"), search: {} },
29
38
  {
30
39
  key: "type",
31
40
  title: () => t("notice.type"),
32
41
  width: 90,
42
+ search: {},
43
+ options: [
44
+ { label: () => t("notice.typeNotice"), value: l.Notice },
45
+ { label: () => t("notice.typeAnnouncement"), value: l.Announcement },
46
+ { label: () => t("notice.typeMessage"), value: l.Message }
47
+ ],
48
+ // 三种类型各有各的文案与颜色(与系统通知管理页一致)。必须三类分开渲染:
49
+ // 若「消息」被显示成「通知」,选筛选下拉里的「消息」就会筛出界面上写着「通知」的行。
33
50
  render: (e) => h(
34
- A,
51
+ x,
35
52
  {
36
53
  size: "small",
37
- type: e.type === N.Announcement ? "warning" : "info",
54
+ type: e.type === l.Announcement ? "warning" : e.type === l.Message ? "success" : "info",
38
55
  bordered: !1
39
56
  },
40
- () => e.type === N.Announcement ? t("notice.typeAnnouncement") : t("notice.typeNotice")
57
+ () => e.type === l.Announcement ? t("notice.typeAnnouncement") : e.type === l.Message ? t("notice.typeMessage") : t("notice.typeNotice")
41
58
  )
42
59
  },
43
60
  {
44
61
  key: "publishTime",
45
62
  title: () => t("notice.publishTime"),
46
63
  width: 170,
47
- render: (e) => O(e.publishTime)
64
+ render: (e) => K(e.publishTime)
48
65
  },
49
66
  {
50
67
  key: "op",
@@ -53,96 +70,106 @@ const P = { class: "fill-page" }, ce = /* @__PURE__ */ E({
53
70
  fixed: "right",
54
71
  hideInSetting: !0,
55
72
  render: (e) => h(
56
- v,
57
- { size: "small", quaternary: !0, type: "primary", onClick: () => S(e) },
73
+ w,
74
+ { size: "small", quaternary: !0, type: "primary", onClick: () => B(e) },
58
75
  () => t("notice.view")
59
76
  )
60
77
  }
61
- ], c = d(!1), r = d(null);
62
- async function S(e) {
63
- var o;
64
- if (r.value = e, c.value = !0, !e.isRead)
78
+ ];
79
+ Z(k);
80
+ const u = f(!1), s = f(null);
81
+ async function B(e) {
82
+ var n;
83
+ if (s.value = e, u.value = !0, !e.isRead)
65
84
  try {
66
- await w.markRead(e.id), await ((o = p.value) == null ? void 0 : o.refresh());
67
- } catch (u) {
68
- k.error(x(u));
85
+ await g.markRead(e.id), await ((n = y.value) == null ? void 0 : n.refresh());
86
+ } catch (m) {
87
+ b.error(z(m));
69
88
  }
70
89
  }
71
- const s = d(null);
72
- async function B(e, o) {
73
- s.value = o;
90
+ const c = f(null);
91
+ async function E(e, n) {
92
+ c.value = n;
74
93
  try {
75
- await f.run(e) && (c.value = !1);
94
+ await d.run(e) && (u.value = !1);
76
95
  } finally {
77
- s.value = null;
96
+ c.value = null;
78
97
  }
79
98
  }
80
- async function V() {
99
+ async function S() {
81
100
  var e;
82
- await C(() => w.markAllRead(), t("notice.allRead")) && await ((e = p.value) == null ? void 0 : e.refresh());
101
+ await C(() => g.markAllRead(), t("notice.allRead")) && await ((e = y.value) == null ? void 0 : e.refresh());
83
102
  }
84
- return (e, o) => {
85
- var u, g, _;
86
- return y(), b("div", P, [
87
- l(i(U), {
88
- "default-page-size": 100,
103
+ return (e, n) => {
104
+ var m, _, T;
105
+ return v(), A("div", te, [
106
+ a(o(q), {
89
107
  ref_key: "tableRef",
90
- ref: p,
91
- columns: z,
92
- fetcher: i(w).mine,
93
- "flex-height": "",
94
- "virtual-scroll": "",
108
+ ref: y,
109
+ columns: k,
110
+ fetcher: o(M),
111
+ toolbar: o(Q),
112
+ search: { container: "table" },
113
+ "filter-serializer": o(ee),
114
+ "fill-height": "",
115
+ "min-row-height": o(P),
116
+ "card-on-narrow": "",
95
117
  "storage-key": "personal-notice",
96
- onError: o[0] || (o[0] = (n) => i(k).error(i(x)(n)))
118
+ onError: n[0] || (n[0] = (i) => o(b).error(o(z)(i)))
97
119
  }, {
98
- toolbar: a(() => [
99
- l(i(v), { onClick: V }, {
100
- icon: a(() => [
101
- l(G, {
120
+ "pagination-prefix": r(({ itemCount: i }) => [
121
+ a(X, { count: i }, null, 8, ["count"])
122
+ ]),
123
+ "toolbar-right": r(() => [
124
+ a(o(w), { onClick: S }, {
125
+ icon: r(() => [
126
+ a(G, {
102
127
  icon: "ph:checks",
103
128
  size: 16
104
129
  })
105
130
  ]),
106
- default: a(() => [
107
- R(" " + T(i(t)("app.notice.markAllRead")), 1)
131
+ default: r(() => [
132
+ R(" " + N(o(t)("app.notice.markAllRead")), 1)
108
133
  ]),
109
134
  _: 1
110
135
  })
111
136
  ]),
112
137
  _: 1
113
- }, 8, ["fetcher"]),
114
- l(i(q), {
115
- show: c.value,
116
- "onUpdate:show": o[1] || (o[1] = (n) => c.value = n),
138
+ }, 8, ["fetcher", "toolbar", "filter-serializer", "min-row-height"]),
139
+ a(o($), {
140
+ show: u.value,
141
+ "onUpdate:show": n[1] || (n[1] = (i) => u.value = i),
117
142
  preset: "card",
118
- title: ((u = r.value) == null ? void 0 : u.title) || i(t)("notice.detailTitle"),
143
+ bordered: !1,
144
+ segmented: { content: !0, footer: "soft" },
145
+ title: ((m = s.value) == null ? void 0 : m.title) || o(t)("notice.detailTitle"),
119
146
  style: { width: "720px", "max-width": "92vw" }
120
- }, $({
121
- default: a(() => {
122
- var n;
147
+ }, I({
148
+ default: r(() => {
149
+ var i;
123
150
  return [
124
- l(H, {
125
- value: (n = r.value) == null ? void 0 : n.content
151
+ a(U, {
152
+ value: (i = s.value) == null ? void 0 : i.content
126
153
  }, null, 8, ["value"])
127
154
  ];
128
155
  }),
129
156
  _: 2
130
157
  }, [
131
- (_ = (g = r.value) == null ? void 0 : g.actions) != null && _.length ? {
158
+ (T = (_ = s.value) == null ? void 0 : _.actions) != null && T.length ? {
132
159
  name: "footer",
133
- fn: a(() => [
134
- l(i(F), { justify: "end" }, {
135
- default: a(() => [
136
- (y(!0), b(D, null, I(r.value.actions, (n, m) => (y(), M(i(v), {
137
- key: m,
160
+ fn: r(() => [
161
+ a(o(D), { justify: "end" }, {
162
+ default: r(() => [
163
+ (v(!0), A(L, null, V(s.value.actions, (i, p) => (v(), H(o(w), {
164
+ key: p,
138
165
  size: "small",
139
- type: i(f).buttonType(n),
140
- loading: s.value === m,
141
- disabled: s.value !== null && s.value !== m,
142
- onClick: (W) => B(n, m)
166
+ type: o(d).buttonType(i),
167
+ loading: c.value === p,
168
+ disabled: c.value !== null && c.value !== p,
169
+ onClick: (ie) => E(i, p)
143
170
  }, {
144
- default: a(() => [
145
- R(T(i(f).label(n)), 1)
171
+ default: r(() => [
172
+ R(N(o(d).label(i)), 1)
146
173
  ]),
147
174
  _: 2
148
175
  }, 1032, ["type", "loading", "disabled", "onClick"]))), 128))
@@ -158,6 +185,6 @@ const P = { class: "fill-page" }, ce = /* @__PURE__ */ E({
158
185
  }
159
186
  });
160
187
  export {
161
- ce as default
188
+ ge as default
162
189
  };
163
190
  //# sourceMappingURL=notice2.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notice2.vue.js","sources":["../../../src/views/personal/notice.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 我的通知(个人页,非管理端):列出发给自己的通知并读正文、标记已读。\n// 走 [ActiveSession] 的 notice/mine —— 任何登录用户可调,故本页注册为静态路由,不进菜单/权限系统。\n// 正文随列表一起返回(NoticeMineItem.content),点\"查看\"不另发请求。\n// 通知带动作列表时,正文弹层底部渲染成按钮(useNoticeAction),与顶栏铃铛同一套行为。\nimport { h, ref } from 'vue'\nimport { NButton, NModal, NSpace, NTag, useMessage } 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 MarkdownView from '#/components/MarkdownEditor/MarkdownView.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useNoticeAction } from '#/composables/useNoticeAction'\nimport { noticeApi } from '#/api'\nimport { NoticeType, type NoticeAction, type NoticeMineItem } from '#/types/api'\nimport { translateError } from '#/utils/error'\nimport { fmtDateTime } from '#/utils/format'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst noticeAction = useNoticeAction()\nconst tableRef = ref<SmartTableInst<NoticeMineItem>>()\n\nconst columns: SmartTableColumn<NoticeMineItem>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'isRead',\n title: () => t('notice.status'),\n width: 80,\n render: r =>\n h(NTag, { size: 'small', type: r.isRead ? 'default' : 'success', bordered: false }, () =>\n r.isRead ? t('notice.read') : t('notice.unread'),\n ),\n },\n { key: 'title', title: () => t('notice.noticeTitle') },\n {\n key: 'type',\n title: () => t('notice.type'),\n width: 90,\n render: r =>\n h(\n NTag,\n {\n size: 'small',\n type: r.type === NoticeType.Announcement ? 'warning' : 'info',\n bordered: false,\n },\n () =>\n r.type === NoticeType.Announcement\n ? t('notice.typeAnnouncement')\n : t('notice.typeNotice'),\n ),\n },\n {\n key: 'publishTime',\n title: () => t('notice.publishTime'),\n width: 170,\n render: r => fmtDateTime(r.publishTime),\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 80,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openView(r) },\n () => t('notice.view'),\n ),\n },\n]\n\n// ── 查看正文(行里已带 content,不发请求)+ 顺手标记已读 ──\nconst showView = ref(false)\nconst viewRow = ref<NoticeMineItem | null>(null)\nasync function openView(r: NoticeMineItem) {\n viewRow.value = r\n showView.value = true\n if (r.isRead) return\n try {\n await noticeApi.markRead(r.id)\n await tableRef.value?.refresh() // 顶栏未读角标由其自身的 30s 轮询自愈\n } catch (e) {\n message.error(translateError(e))\n }\n}\n\nconst running = ref<number | null>(null)\nasync function onAction(a: NoticeAction, index: number) {\n running.value = index\n try {\n if (await noticeAction.run(a)) showView.value = false\n } finally {\n running.value = null\n }\n}\n\nasync function markAll() {\n if (await run(() => noticeApi.markAllRead(), t('notice.allRead'))) await tableRef.value?.refresh()\n}\n</script>\n\n<template>\n <!-- .fill-page:高度链在 styles/layout.css,卡片吃满内容区,滚动只发生在表体里。 -->\n <div class=\"fill-page\">\n <SmartTable\n :default-page-size=\"100\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"noticeApi.mine\"\n flex-height\n virtual-scroll\n storage-key=\"personal-notice\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button @click=\"markAll\">\n <template #icon><AppIcon icon=\"ph:checks\" :size=\"16\" /></template>\n {{ t('app.notice.markAllRead') }}\n </n-button>\n </template>\n </SmartTable>\n\n <n-modal\n v-model:show=\"showView\"\n preset=\"card\"\n :title=\"viewRow?.title || t('notice.detailTitle')\"\n style=\"width: 720px; max-width: 92vw\"\n >\n <MarkdownView :value=\"viewRow?.content\" />\n <template v-if=\"viewRow?.actions?.length\" #footer>\n <n-space justify=\"end\">\n <n-button\n v-for=\"(a, i) in viewRow.actions\"\n :key=\"i\"\n size=\"small\"\n :type=\"noticeAction.buttonType(a)\"\n :loading=\"running === i\"\n :disabled=\"running !== null && running !== i\"\n @click=\"onAction(a, i)\"\n >\n {{ noticeAction.label(a) }}\n </n-button>\n </n-space>\n </template>\n </n-modal>\n </div>\n</template>\n"],"names":["useI18n","message","useMessage","run","useConfirm","noticeAction","useNoticeAction","tableRef","ref","columns","r","NTag","NoticeType","fmtDateTime","NButton","openView","showView","viewRow","noticeApi","_a","e","translateError","running","onAction","a","index","markAll","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","SmartTable","_cache","AppIcon","_createTextVNode","NModal","$event","MarkdownView","_c","_b","NSpace","_Fragment","i","_createBlock"],"mappings":"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"}
1
+ {"version":3,"file":"notice2.vue.js","sources":["../../../src/views/personal/notice.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 我的通知(个人页,非管理端):列出发给自己的通知并读正文、标记已读。\n// 走 [ActiveSession] 的 notice/mine —— 任何登录用户可调,故本页注册为静态路由,不进菜单/权限系统。\n// 正文随列表一起返回(NoticeMineItem.content),点\"查看\"不另发请求。\n// 通知带动作列表时,正文弹层底部渲染成按钮(useNoticeAction),与顶栏铃铛同一套行为。\nimport { h, ref } from 'vue'\nimport { NButton, NModal, NSpace, NTag, useMessage } 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 MarkdownView from '#/components/MarkdownEditor/MarkdownView.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useNoticeAction } from '#/composables/useNoticeAction'\nimport { noticeApi } from '#/api'\nimport { NoticeType, type NoticeAction, type NoticeMineItem } from '#/types/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 {\n createClientFilterFetcher,\n passthroughFilterSerializer,\n deriveHeaderFilters,\n} from '#/utils/tableFilter'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst noticeAction = useNoticeAction()\nconst tableRef = ref<SmartTableInst<NoticeMineItem>>()\n// 后端没有过滤能力,搜索由前端求值;fields 要与下面声明了 search 的列 key 一致\nconst fetcher = createClientFilterFetcher(noticeApi.mine, ['title', 'type', 'isRead'])\n\nconst columns: SmartTableColumn<NoticeMineItem>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'isRead',\n title: () => t('notice.status'),\n width: 80,\n search: {},\n // 布尔值走下拉;render 仍负责标签样式(render 优先于 options)\n options: [\n { label: () => t('notice.read'), value: true },\n { label: () => t('notice.unread'), value: false },\n ],\n render: r =>\n h(NTag, { size: 'small', type: r.isRead ? 'default' : 'success', bordered: false }, () =>\n r.isRead ? t('notice.read') : t('notice.unread'),\n ),\n },\n { key: 'title', title: () => t('notice.noticeTitle'), search: {} },\n {\n key: 'type',\n title: () => t('notice.type'),\n width: 90,\n search: {},\n options: [\n { label: () => t('notice.typeNotice'), value: NoticeType.Notice },\n { label: () => t('notice.typeAnnouncement'), value: NoticeType.Announcement },\n { label: () => t('notice.typeMessage'), value: NoticeType.Message },\n ],\n // 三种类型各有各的文案与颜色(与系统通知管理页一致)。必须三类分开渲染:\n // 若「消息」被显示成「通知」,选筛选下拉里的「消息」就会筛出界面上写着「通知」的行。\n render: r =>\n h(\n NTag,\n {\n size: 'small',\n type:\n r.type === NoticeType.Announcement\n ? 'warning'\n : r.type === NoticeType.Message\n ? 'success'\n : 'info',\n bordered: false,\n },\n () =>\n r.type === NoticeType.Announcement\n ? t('notice.typeAnnouncement')\n : r.type === NoticeType.Message\n ? t('notice.typeMessage')\n : t('notice.typeNotice'),\n ),\n },\n {\n key: 'publishTime',\n title: () => t('notice.publishTime'),\n width: 170,\n render: r => fmtDateTime(r.publishTime),\n },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 80,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openView(r) },\n () => t('notice.view'),\n ),\n },\n]\nderiveHeaderFilters(columns)\n\n// ── 查看正文(行里已带 content,不发请求)+ 顺手标记已读 ──\nconst showView = ref(false)\nconst viewRow = ref<NoticeMineItem | null>(null)\nasync function openView(r: NoticeMineItem) {\n viewRow.value = r\n showView.value = true\n if (r.isRead) return\n try {\n await noticeApi.markRead(r.id)\n await tableRef.value?.refresh() // 顶栏未读角标由其自身的 30s 轮询自愈\n } catch (e) {\n message.error(translateError(e))\n }\n}\n\nconst running = ref<number | null>(null)\nasync function onAction(a: NoticeAction, index: number) {\n running.value = index\n try {\n if (await noticeAction.run(a)) showView.value = false\n } finally {\n running.value = null\n }\n}\n\nasync function markAll() {\n if (await run(() => noticeApi.markAllRead(), t('notice.allRead'))) await tableRef.value?.refresh()\n}\n</script>\n\n<template>\n <!-- .fill-page:高度链在 styles/layout.css,卡片吃满内容区,滚动只发生在表体里。 -->\n <div class=\"fill-page\">\n <SmartTable\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"fetcher\"\n :toolbar=\"TABLE_TOOLBAR\"\n :search=\"{ container: 'table' }\"\n :filter-serializer=\"passthroughFilterSerializer\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"personal-notice\"\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 @click=\"markAll\">\n <template #icon><AppIcon icon=\"ph:checks\" :size=\"16\" /></template>\n {{ t('app.notice.markAllRead') }}\n </n-button>\n </template>\n </SmartTable>\n\n <n-modal\n v-model:show=\"showView\"\n preset=\"card\"\n :bordered=\"false\"\n :segmented=\"{ content: true, footer: 'soft' }\"\n :title=\"viewRow?.title || t('notice.detailTitle')\"\n style=\"width: 720px; max-width: 92vw\"\n >\n <MarkdownView :value=\"viewRow?.content\" />\n <template v-if=\"viewRow?.actions?.length\" #footer>\n <n-space justify=\"end\">\n <n-button\n v-for=\"(a, i) in viewRow.actions\"\n :key=\"i\"\n size=\"small\"\n :type=\"noticeAction.buttonType(a)\"\n :loading=\"running === i\"\n :disabled=\"running !== null && running !== i\"\n @click=\"onAction(a, i)\"\n >\n {{ noticeAction.label(a) }}\n </n-button>\n </n-space>\n </template>\n </n-modal>\n </div>\n</template>\n"],"names":["useI18n","message","useMessage","run","useConfirm","noticeAction","useNoticeAction","tableRef","ref","fetcher","createClientFilterFetcher","noticeApi","columns","r","NTag","NoticeType","fmtDateTime","NButton","openView","deriveHeaderFilters","showView","viewRow","_a","e","translateError","running","onAction","a","index","markAll","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","SmartTable","TABLE_TOOLBAR","passthroughFilterSerializer","TABLE_MIN_ROW_HEIGHT","_cache","_withCtx","itemCount","TableTotal","AppIcon","_createTextVNode","NModal","$event","MarkdownView","_c","_b","NSpace","_Fragment","i","_createBlock"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { defineComponent as N, reactive as x, ref as P, openBlock as g, createBlock as h, unref as e, withCtx as t, createTextVNode as v, toDisplayString as y, createCommentVNode as R, createVNode as a, withKeys as q } from "vue";
1
+ import { defineComponent as R, reactive as k, ref as P, openBlock as g, createBlock as h, unref as e, withCtx as t, createTextVNode as y, toDisplayString as v, createCommentVNode as q, createVNode as s, withKeys as N } from "vue";
2
2
  import { useRouter as C } from "vue-router";
3
- import { useMessage as A, NCard as I, NAlert as S, NForm as U, NFormItem as u, NInput as w, NButton as V } from "naive-ui";
3
+ import { useMessage as A, NCard as I, NAlert as S, NForm as U, NFormItem as u, NInput as i, NButton as V } from "naive-ui";
4
4
  import { useI18n as B } from "vue-i18n";
5
5
  import E from "../../components/PasswordStrength/index.vue.js";
6
6
  import { personalApi as F, authApi as K } from "../../api/index.js";
@@ -9,10 +9,10 @@ import { useUserStore as H } from "../../stores/user.js";
9
9
  import { useAuthStore as L } from "../../stores/auth.js";
10
10
  import { resetRouter as M } from "../../router/index.js";
11
11
  import { translateError as T } from "../../utils/error.js";
12
- const re = /* @__PURE__ */ N({
12
+ const re = /* @__PURE__ */ R({
13
13
  __name: "password",
14
14
  setup(j) {
15
- const { t: r } = B(), i = A(), b = C(), m = H(), _ = L(), o = x({ oldPassword: "", newPassword: "", confirmPassword: "" }), d = P(!1), p = P(null), k = {
15
+ const { t: r } = B(), w = A(), b = C(), c = H(), _ = L(), o = k({ oldPassword: "", newPassword: "", confirmPassword: "" }), n = P(!1), p = P(null), x = {
16
16
  oldPassword: {
17
17
  required: !0,
18
18
  message: () => r("changePassword.oldRequired"),
@@ -26,109 +26,116 @@ const re = /* @__PURE__ */ N({
26
26
  confirmPassword: {
27
27
  required: !0,
28
28
  // 两次不一致必须自己写 validator:naive 没有内置的"等于另一字段"规则
29
- validator: (l, s) => s ? s !== o.newPassword ? new Error(r("changePassword.mismatch")) : !0 : new Error(r("changePassword.confirmRequired")),
29
+ validator: (d, a) => a ? a !== o.newPassword ? new Error(r("changePassword.mismatch")) : !0 : new Error(r("changePassword.confirmRequired")),
30
30
  trigger: ["input", "blur"]
31
31
  }
32
32
  };
33
- async function c() {
34
- var l;
35
- await ((l = p.value) == null ? void 0 : l.validate()), d.value = !0;
33
+ async function m() {
34
+ var d;
35
+ await ((d = p.value) == null ? void 0 : d.validate()), n.value = !0;
36
36
  try {
37
37
  await F.updatePassword({
38
38
  oldPassword: o.oldPassword,
39
39
  newPassword: o.newPassword
40
- }), i.success(r("changePassword.changed")), await D();
40
+ }), w.success(r("changePassword.changed")), await D();
41
41
  try {
42
42
  await K.logout();
43
43
  } catch {
44
44
  }
45
- M(), _.reset(), m.clear(), b.replace("/login");
46
- } catch (s) {
47
- i.error(T(s));
45
+ M(), _.reset(), c.clear(), b.replace("/login");
46
+ } catch (a) {
47
+ w.error(T(a));
48
48
  } finally {
49
- d.value = !1;
49
+ n.value = !1;
50
50
  }
51
51
  }
52
- return (l, s) => (g(), h(e(I), {
52
+ return (d, a) => (g(), h(e(I), {
53
+ class: "a-card",
53
54
  bordered: !0,
54
55
  title: e(r)("changePassword.title"),
55
- style: { "max-width": "460px" }
56
+ "content-style": "padding: 20px 24px",
57
+ style: { "max-width": "460px", width: "100%" }
56
58
  }, {
57
59
  default: t(() => {
58
60
  var f;
59
61
  return [
60
- (f = e(m).userInfo) != null && f.mustChangePassword ? (g(), h(e(S), {
62
+ (f = e(c).userInfo) != null && f.mustChangePassword ? (g(), h(e(S), {
61
63
  key: 0,
62
64
  type: "warning",
65
+ bordered: !1,
63
66
  style: { "margin-bottom": "16px" }
64
67
  }, {
65
68
  default: t(() => [
66
- v(y(e(r)("changePassword.forcedHint")), 1)
69
+ y(v(e(r)("changePassword.forcedHint")), 1)
67
70
  ]),
68
71
  _: 1
69
- })) : R("", !0),
70
- a(e(U), {
72
+ })) : q("", !0),
73
+ s(e(U), {
71
74
  ref_key: "formRef",
72
75
  ref: p,
73
76
  model: o,
74
- rules: k,
77
+ rules: x,
75
78
  "label-placement": "top"
76
79
  }, {
77
80
  default: t(() => [
78
- a(e(u), {
81
+ s(e(u), {
79
82
  label: e(r)("changePassword.oldPassword"),
80
83
  path: "oldPassword"
81
84
  }, {
82
85
  default: t(() => [
83
- a(e(w), {
86
+ s(e(i), {
84
87
  value: o.oldPassword,
85
- "onUpdate:value": s[0] || (s[0] = (n) => o.oldPassword = n),
88
+ "onUpdate:value": a[0] || (a[0] = (l) => o.oldPassword = l),
86
89
  type: "password",
87
- "show-password-on": "click"
88
- }, null, 8, ["value"])
90
+ "show-password-on": "click",
91
+ placeholder: e(r)("changePassword.oldRequired")
92
+ }, null, 8, ["value", "placeholder"])
89
93
  ]),
90
94
  _: 1
91
95
  }, 8, ["label"]),
92
- a(e(u), {
96
+ s(e(u), {
93
97
  label: e(r)("changePassword.newPassword"),
94
98
  path: "newPassword"
95
99
  }, {
96
100
  default: t(() => [
97
- a(e(w), {
101
+ s(e(i), {
98
102
  value: o.newPassword,
99
- "onUpdate:value": s[1] || (s[1] = (n) => o.newPassword = n),
103
+ "onUpdate:value": a[1] || (a[1] = (l) => o.newPassword = l),
100
104
  type: "password",
101
- "show-password-on": "click"
102
- }, null, 8, ["value"])
105
+ "show-password-on": "click",
106
+ placeholder: e(r)("changePassword.newRequired")
107
+ }, null, 8, ["value", "placeholder"])
103
108
  ]),
104
109
  _: 1
105
110
  }, 8, ["label"]),
106
- a(E, {
111
+ s(E, {
107
112
  value: o.newPassword
108
113
  }, null, 8, ["value"]),
109
- a(e(u), {
114
+ s(e(u), {
110
115
  label: e(r)("changePassword.confirmPassword"),
111
116
  path: "confirmPassword"
112
117
  }, {
113
118
  default: t(() => [
114
- a(e(w), {
119
+ s(e(i), {
115
120
  value: o.confirmPassword,
116
- "onUpdate:value": s[2] || (s[2] = (n) => o.confirmPassword = n),
121
+ "onUpdate:value": a[2] || (a[2] = (l) => o.confirmPassword = l),
117
122
  type: "password",
118
123
  "show-password-on": "click",
119
- onKeyup: q(c, ["enter"])
120
- }, null, 8, ["value"])
124
+ placeholder: e(r)("changePassword.confirmRequired"),
125
+ onKeyup: N(m, ["enter"])
126
+ }, null, 8, ["value", "placeholder"])
121
127
  ]),
122
128
  _: 1
123
129
  }, 8, ["label"]),
124
- a(e(V), {
130
+ s(e(V), {
125
131
  type: "primary",
126
132
  block: "",
127
- loading: d.value,
128
- onClick: c
133
+ style: { "margin-top": "8px" },
134
+ loading: n.value,
135
+ onClick: m
129
136
  }, {
130
137
  default: t(() => [
131
- v(y(e(r)("common.submit")), 1)
138
+ y(v(e(r)("common.submit")), 1)
132
139
  ]),
133
140
  _: 1
134
141
  }, 8, ["loading"])
@@ -1 +1 @@
1
- {"version":3,"file":"password2.vue.js","sources":["../../../src/views/personal/password.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport {\n NCard,\n NForm,\n NFormItem,\n NInput,\n NButton,\n NAlert,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport PasswordStrength from '#/components/PasswordStrength/index.vue'\nimport { personalApi, authApi } from '#/api'\nimport { beginVoluntaryLogout } from '#/composables/useRealtime'\nimport { useUserStore } from '#/stores/user'\nimport { useAuthStore } from '#/stores/auth'\nimport { resetRouter } from '#/router'\nimport { translateError } from '#/utils/error'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst router = useRouter()\nconst user = useUserStore()\nconst auth = useAuthStore()\n\nconst model = reactive({ oldPassword: '', newPassword: '', confirmPassword: '' })\nconst saving = ref(false)\nconst formRef = ref<FormInst | null>(null)\n\n// 校验落在表单项上(全站一致),不用 toast —— toast 飘在角落、不指向出错的那一栏,且会被后续消息挤掉。\n// ponytail: 密码复杂度不进 rules。PasswordStrength 已在输入时逐条实时显示策略清单,后端也强制(弱口令返 passwordTooWeak),\n// 再抄一份到 rules 就是第三处真源,策略一改三处都要跟。\nconst rules: FormRules = {\n oldPassword: {\n required: true,\n message: () => t('changePassword.oldRequired'),\n trigger: ['input', 'blur'],\n },\n newPassword: {\n required: true,\n message: () => t('changePassword.newRequired'),\n trigger: ['input', 'blur'],\n },\n confirmPassword: {\n required: true,\n // 两次不一致必须自己写 validator:naive 没有内置的\"等于另一字段\"规则\n validator: (_rule, value: string) =>\n !value\n ? new Error(t('changePassword.confirmRequired'))\n : value !== model.newPassword\n ? new Error(t('changePassword.mismatch'))\n : true,\n trigger: ['input', 'blur'],\n },\n}\n\nasync function submit() {\n // validate() 必须留在 try 之外:校验失败是 reject,落进下面的 catch 会被 translateError 翻成一条\n // 不知所云的错误 toast —— 而红字已经打在表单项上了(参照 system/user/index.vue 的 save())。\n await formRef.value?.validate()\n\n saving.value = true\n try {\n await personalApi.updatePassword({\n oldPassword: model.oldPassword,\n newPassword: model.newPassword,\n })\n message.success(t('changePassword.changed'))\n // 改密后强制重新登录(自愿路径:先断实时,避免 force-logout 误弹「被强制下线」)\n await beginVoluntaryLogout()\n try {\n await authApi.logout()\n } catch {\n /* 尽力而为 */\n }\n resetRouter()\n auth.reset()\n user.clear()\n router.replace('/login')\n } catch (e) {\n message.error(translateError(e))\n } finally {\n saving.value = false\n }\n}\n</script>\n\n<template>\n <n-card :bordered=\"true\" :title=\"t('changePassword.title')\" style=\"max-width: 460px\">\n <n-alert v-if=\"user.userInfo?.mustChangePassword\" type=\"warning\" style=\"margin-bottom: 16px\">\n {{ t('changePassword.forcedHint') }}\n </n-alert>\n <n-form ref=\"formRef\" :model=\"model\" :rules=\"rules\" label-placement=\"top\">\n <n-form-item :label=\"t('changePassword.oldPassword')\" path=\"oldPassword\">\n <n-input v-model:value=\"model.oldPassword\" type=\"password\" show-password-on=\"click\" />\n </n-form-item>\n <n-form-item :label=\"t('changePassword.newPassword')\" path=\"newPassword\">\n <n-input v-model:value=\"model.newPassword\" type=\"password\" show-password-on=\"click\" />\n </n-form-item>\n <PasswordStrength :value=\"model.newPassword\" />\n <n-form-item :label=\"t('changePassword.confirmPassword')\" path=\"confirmPassword\">\n <n-input\n v-model:value=\"model.confirmPassword\"\n type=\"password\"\n show-password-on=\"click\"\n @keyup.enter=\"submit\"\n />\n </n-form-item>\n <!-- 不用 :disabled 做第二重必填:必填已经是 rules 的事,禁用按钮反而让人不知道缺什么 -->\n <n-button type=\"primary\" block :loading=\"saving\" @click=\"submit\">\n {{ t('common.submit') }}\n </n-button>\n </n-form>\n </n-card>\n</template>\n"],"names":["t","useI18n","message","useMessage","router","useRouter","user","useUserStore","auth","useAuthStore","model","reactive","saving","ref","formRef","rules","_rule","value","submit","_a","personalApi","beginVoluntaryLogout","authApi","resetRouter","e","translateError","_createBlock","_unref","NCard","NAlert","_createVNode","NForm","NFormItem","NInput","_cache","$event","PasswordStrength","NButton"],"mappings":"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"}
1
+ {"version":3,"file":"password2.vue.js","sources":["../../../src/views/personal/password.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { reactive, ref } from 'vue'\nimport { useRouter } from 'vue-router'\nimport {\n NCard,\n NForm,\n NFormItem,\n NInput,\n NButton,\n NAlert,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport PasswordStrength from '#/components/PasswordStrength/index.vue'\nimport { personalApi, authApi } from '#/api'\nimport { beginVoluntaryLogout } from '#/composables/useRealtime'\nimport { useUserStore } from '#/stores/user'\nimport { useAuthStore } from '#/stores/auth'\nimport { resetRouter } from '#/router'\nimport { translateError } from '#/utils/error'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst router = useRouter()\nconst user = useUserStore()\nconst auth = useAuthStore()\n\nconst model = reactive({ oldPassword: '', newPassword: '', confirmPassword: '' })\nconst saving = ref(false)\nconst formRef = ref<FormInst | null>(null)\n\n// 校验落在表单项上(全站一致),不用 toast —— toast 飘在角落、不指向出错的那一栏,且会被后续消息挤掉。\n// ponytail: 密码复杂度不进 rules。PasswordStrength 已在输入时逐条实时显示策略清单,后端也强制(弱口令返 passwordTooWeak),\n// 再抄一份到 rules 就是第三处真源,策略一改三处都要跟。\nconst rules: FormRules = {\n oldPassword: {\n required: true,\n message: () => t('changePassword.oldRequired'),\n trigger: ['input', 'blur'],\n },\n newPassword: {\n required: true,\n message: () => t('changePassword.newRequired'),\n trigger: ['input', 'blur'],\n },\n confirmPassword: {\n required: true,\n // 两次不一致必须自己写 validator:naive 没有内置的\"等于另一字段\"规则\n validator: (_rule, value: string) =>\n !value\n ? new Error(t('changePassword.confirmRequired'))\n : value !== model.newPassword\n ? new Error(t('changePassword.mismatch'))\n : true,\n trigger: ['input', 'blur'],\n },\n}\n\nasync function submit() {\n // validate() 必须留在 try 之外:校验失败是 reject,落进下面的 catch 会被 translateError 翻成一条\n // 不知所云的错误 toast —— 而红字已经打在表单项上了(参照 system/user/index.vue 的 save())。\n await formRef.value?.validate()\n\n saving.value = true\n try {\n await personalApi.updatePassword({\n oldPassword: model.oldPassword,\n newPassword: model.newPassword,\n })\n message.success(t('changePassword.changed'))\n // 改密后强制重新登录(自愿路径:先断实时,避免 force-logout 误弹「被强制下线」)\n await beginVoluntaryLogout()\n try {\n await authApi.logout()\n } catch {\n /* 尽力而为 */\n }\n resetRouter()\n auth.reset()\n user.clear()\n router.replace('/login')\n } catch (e) {\n message.error(translateError(e))\n } finally {\n saving.value = false\n }\n}\n</script>\n\n<template>\n <n-card\n class=\"a-card\"\n :bordered=\"true\"\n :title=\"t('changePassword.title')\"\n content-style=\"padding: 20px 24px\"\n style=\"max-width: 460px; width: 100%\"\n >\n <n-alert\n v-if=\"user.userInfo?.mustChangePassword\"\n type=\"warning\"\n :bordered=\"false\"\n style=\"margin-bottom: 16px\"\n >\n {{ t('changePassword.forcedHint') }}\n </n-alert>\n <n-form ref=\"formRef\" :model=\"model\" :rules=\"rules\" label-placement=\"top\">\n <n-form-item :label=\"t('changePassword.oldPassword')\" path=\"oldPassword\">\n <n-input\n v-model:value=\"model.oldPassword\"\n type=\"password\"\n show-password-on=\"click\"\n :placeholder=\"t('changePassword.oldRequired')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('changePassword.newPassword')\" path=\"newPassword\">\n <n-input\n v-model:value=\"model.newPassword\"\n type=\"password\"\n show-password-on=\"click\"\n :placeholder=\"t('changePassword.newRequired')\"\n />\n </n-form-item>\n <PasswordStrength :value=\"model.newPassword\" />\n <n-form-item :label=\"t('changePassword.confirmPassword')\" path=\"confirmPassword\">\n <n-input\n v-model:value=\"model.confirmPassword\"\n type=\"password\"\n show-password-on=\"click\"\n :placeholder=\"t('changePassword.confirmRequired')\"\n @keyup.enter=\"submit\"\n />\n </n-form-item>\n <!-- 不用 :disabled 做第二重必填:必填已经是 rules 的事,禁用按钮反而让人不知道缺什么 -->\n <n-button type=\"primary\" block style=\"margin-top: 8px\" :loading=\"saving\" @click=\"submit\">\n {{ t('common.submit') }}\n </n-button>\n </n-form>\n </n-card>\n</template>\n"],"names":["t","useI18n","message","useMessage","router","useRouter","user","useUserStore","auth","useAuthStore","model","reactive","saving","ref","formRef","rules","_rule","value","submit","_a","personalApi","beginVoluntaryLogout","authApi","resetRouter","e","translateError","_createBlock","_unref","NCard","NAlert","_createVNode","NForm","NFormItem","NInput","_cache","$event","PasswordStrength","NButton"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import o from "./profile2.vue.js";
2
2
  /* empty css */
3
- import f from "../../_virtual/_plugin-vue_export-helper.js";
4
- const a = /* @__PURE__ */ f(o, [["__scopeId", "data-v-5c4afffc"]]);
3
+ import r from "../../_virtual/_plugin-vue_export-helper.js";
4
+ const m = /* @__PURE__ */ r(o, [["__scopeId", "data-v-c19f2341"]]);
5
5
  export {
6
- a as default
6
+ m as default
7
7
  };
8
8
  //# sourceMappingURL=profile.vue.js.map