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,32 +1,38 @@
1
- import { defineComponent as $, ref as m, onMounted as A, reactive as F, resolveDirective as O, openBlock as z, createElementBlock as j, Fragment as M, createVNode as o, unref as l, withCtx as d, withDirectives as H, createBlock as L, createTextVNode as G, toDisplayString as U, createElementVNode as J, h as n } from "vue";
2
- import { useMessage as K, NButton as y, NForm as Q, NFormItem as r, NInput as f, NSpace as k, NInputNumber as W, NSwitch as X, NTag as C, NPopconfirm as Y } from "naive-ui";
3
- import { SmartTable as Z } from "smart-naive-table";
4
- import { useI18n as ee } from "vue-i18n";
5
- import x from "../../../components/AppIcon.vue.js";
6
- import le from "../../../components/IconPicker/index.vue.js";
7
- import te from "../../../components/FormContainer/index.vue.js";
1
+ import { defineComponent as H, computed as M, ref as c, onMounted as V, reactive as $, resolveDirective as j, openBlock as z, createElementBlock as W, Fragment as G, createVNode as o, unref as l, withCtx as r, withDirectives as Q, createBlock as J, createTextVNode as K, toDisplayString as E, mergeProps as X, createElementVNode as Y, h as u } from "vue";
2
+ import { useMessage as Z, NButton as g, NForm as ee, NFormItem as d, NInput as f, NSpace as x, NInputNumber as le, NSwitch as te, NTag as q, NTooltip as ae, NPopconfirm as oe } from "naive-ui";
3
+ import { useMediaQuery as ie } from "@vueuse/core";
4
+ import { SmartTable as ne } from "smart-naive-table";
5
+ import { useI18n as re } from "vue-i18n";
6
+ import P from "../../../components/AppIcon.vue.js";
7
+ import ue from "../../../components/IconPicker/index.vue.js";
8
+ import de from "../../../components/FormContainer/index.vue.js";
8
9
  /* empty css */
9
- import ae from "../../../components/StatusSwitch/index.vue.js";
10
- import { useConfirm as oe } from "../../../composables/useConfirm.js";
11
- import { useAuthStore as ie } from "../../../stores/auth.js";
10
+ import se from "../../../components/StatusSwitch/index.vue.js";
11
+ import { useConfirm as me } from "../../../composables/useConfirm.js";
12
+ import { useAuthStore as ce } from "../../../stores/auth.js";
12
13
  import { moduleApi as p } from "../../../api/index.js";
13
- import { translateError as I } from "../../../utils/error.js";
14
- const ue = { class: "hint" }, ke = /* @__PURE__ */ $({
14
+ import { translateError as C } from "../../../utils/error.js";
15
+ import { TABLE_MIN_ROW_HEIGHT as fe, TABLE_TOOLBAR as pe } from "../../../utils/tableToolbar.js";
16
+ import { deriveHeaderFilters as ve } from "../../../utils/tableFilter.js";
17
+ import { lineIcon as be } from "../../../utils/menuIcon.js";
18
+ const ye = { class: "hint" }, Ae = /* @__PURE__ */ H({
15
19
  __name: "index",
16
- setup(de) {
17
- const { t } = ee(), w = K(), { run: T } = oe(), g = ie(), c = m(!1), P = m([]), h = (e) => e.code === "system";
18
- async function v() {
19
- c.value = !0;
20
+ setup(he) {
21
+ const { t } = re(), w = Z(), { run: B } = me(), k = ce(), S = ie("(max-width: 640px)"), A = M(
22
+ () => S.value ? { labelPlacement: "top", labelWidth: void 0 } : { labelPlacement: "left", labelWidth: 90 }
23
+ ), v = c(!1), _ = c([]), b = (e) => e.code === "system";
24
+ async function y() {
25
+ v.value = !0;
20
26
  try {
21
- P.value = await p.list();
27
+ _.value = await p.list();
22
28
  } catch (e) {
23
- w.error(I(e));
29
+ w.error(C(e));
24
30
  } finally {
25
- c.value = !1;
31
+ v.value = !1;
26
32
  }
27
33
  }
28
- A(v);
29
- const b = m(!1), _ = m(null), q = {
34
+ V(y);
35
+ const h = c(!1), N = c(null), O = {
30
36
  // whitespace: 纯空白不算填写
31
37
  code: {
32
38
  required: !0,
@@ -40,7 +46,7 @@ const ue = { class: "hint" }, ke = /* @__PURE__ */ $({
40
46
  message: () => t("module.nameRequired"),
41
47
  trigger: ["input", "blur"]
42
48
  }
43
- }, s = m(null), N = () => ({
49
+ }, m = c(null), R = () => ({
44
50
  code: "",
45
51
  title: "",
46
52
  icon: "",
@@ -49,7 +55,7 @@ const ue = { class: "hint" }, ke = /* @__PURE__ */ $({
49
55
  sort: 0,
50
56
  enabled: !0,
51
57
  remark: ""
52
- }), i = F(N()), R = (e) => ({
58
+ }), i = $(R()), T = (e) => ({
53
59
  code: e.code,
54
60
  title: e.title,
55
61
  icon: e.icon ?? "",
@@ -59,90 +65,112 @@ const ue = { class: "hint" }, ke = /* @__PURE__ */ $({
59
65
  enabled: e.enabled,
60
66
  remark: e.remark ?? ""
61
67
  });
62
- function S() {
63
- s.value = null, Object.assign(i, N()), b.value = !0;
68
+ function D() {
69
+ m.value = null, Object.assign(i, R()), h.value = !0;
64
70
  }
65
- function E(e) {
66
- s.value = e.id, Object.assign(i, R(e)), b.value = !0;
71
+ function F(e) {
72
+ m.value = e.id, Object.assign(i, T(e)), h.value = !0;
67
73
  }
68
- async function B() {
74
+ async function L() {
69
75
  var e;
70
- await ((e = _.value) == null ? void 0 : e.validate());
76
+ await ((e = N.value) == null ? void 0 : e.validate());
71
77
  try {
72
- s.value === null ? await p.add({ ...i }) : await p.update(s.value, { ...i }), w.success(t("module.saved")), await v();
78
+ m.value === null ? await p.add({ ...i }) : await p.update(m.value, { ...i }), w.success(t("module.saved")), await y();
73
79
  } catch (a) {
74
- return w.error(I(a)), !1;
80
+ return w.error(C(a)), !1;
75
81
  }
76
82
  }
77
- const D = [
83
+ const I = (e) => e ? u("span", { class: "mono muted" }, e) : u("span", { class: "faint" }, "—"), U = [
78
84
  { type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
79
- { title: () => t("module.code"), key: "code" },
85
+ {
86
+ title: () => t("module.code"),
87
+ key: "code",
88
+ search: {},
89
+ render: (e) => u("span", { class: "mono" }, e.code)
90
+ },
80
91
  {
81
92
  title: () => t("module.name"),
82
93
  key: "title",
83
- render: (e) => n(k, { align: "center", size: 6, wrapItem: !1 }, () => [
84
- e.icon ? n(x, { icon: e.icon, size: 18 }) : null,
94
+ // 窄档卡片以名称作标题(默认取第一个数据列 = 编码)
95
+ card: "title",
96
+ search: {},
97
+ render: (e) => u(x, { align: "center", size: 6, wrapItem: !1 }, () => [
98
+ e.icon ? u(P, { icon: be(e.icon), size: 18 }) : null,
85
99
  e.title,
86
- h(e) ? n(C, { size: "small", type: "info", bordered: !1 }, () => t("module.builtin")) : null
100
+ b(e) ? u(q, { size: "small", type: "info", bordered: !1 }, () => t("module.builtin")) : null
87
101
  ])
88
102
  },
89
103
  {
90
104
  title: () => t("module.defaultRoute"),
91
105
  key: "defaultRoute",
92
- render: (e) => e.defaultRoute || "—"
106
+ render: (e) => I(e.defaultRoute)
93
107
  },
94
108
  {
95
109
  title: () => t("module.apiPrefix"),
96
110
  key: "apiPrefix",
97
111
  width: 120,
98
- render: (e) => e.apiPrefix || "—"
112
+ render: (e) => I(e.apiPrefix)
113
+ },
114
+ {
115
+ title: () => t("module.sort"),
116
+ key: "sort",
117
+ width: 80,
118
+ render: (e) => u("span", { class: "num muted" }, e.sort)
99
119
  },
100
- { title: () => t("module.sort"), key: "sort", width: 80 },
101
120
  {
102
121
  title: () => t("common.status"),
103
122
  key: "enabled",
104
123
  width: 90,
105
124
  // 无启停(update)权限者不见开关,退化为只读状态标签,保留状态可见性。
106
- render: (e) => g.hasPerm("PUT:/api/v1/sys/module/{id}") ? n(ae, {
107
- value: e.enabled,
108
- // 内置 system 应用停用会让门户失联(模块/菜单管理页都在它下面,停了就没法从 UI 恢复)——
109
- // 与「禁删」同级的前端保护;后端停用与删除内置模块都拒绝(42013),这里只是不给点。
110
- disabled: h(e),
111
- // 停用会把应用从门户隐藏,先确认;启用无副作用,跳过确认(返回 null)。
112
- confirm: (a) => a ? null : t("module.disableConfirm", { title: e.title }),
113
- request: (a) => p.update(e.id, { ...R(e), enabled: a }),
114
- "onUpdate:value": (a) => {
115
- e.enabled = a;
116
- }
117
- }) : n(
118
- C,
119
- { size: "small", bordered: !1, type: e.enabled ? "success" : "default" },
120
- () => t(e.enabled ? "common.enabled" : "common.disabled")
121
- )
125
+ render: (e) => {
126
+ if (!k.hasPerm("PUT:/api/v1/sys/module/{id}"))
127
+ return u(
128
+ q,
129
+ { size: "small", bordered: !1, type: e.enabled ? "success" : "default" },
130
+ () => t(e.enabled ? "common.enabled" : "common.disabled")
131
+ );
132
+ const a = u(se, {
133
+ value: e.enabled,
134
+ // 内置 system 应用停用会让门户失联(模块/菜单管理页都在它下面,停了就没法从 UI 恢复)——
135
+ // 与「禁删」同级的前端保护;后端停用与删除内置模块都拒绝(42013),这里只是不给点。
136
+ disabled: b(e),
137
+ // 停用会把应用从门户隐藏,先确认;启用无副作用,跳过确认(返回 null)。
138
+ confirm: (s) => s ? null : t("module.disableConfirm", { title: e.title }),
139
+ request: (s) => p.update(e.id, { ...T(e), enabled: s }),
140
+ "onUpdate:value": (s) => {
141
+ e.enabled = s;
142
+ }
143
+ });
144
+ return b(e) ? u(ae, null, {
145
+ trigger: () => u("span", { style: "display: inline-flex" }, [a]),
146
+ default: () => t("module.builtinNoDisable")
147
+ }) : a;
148
+ }
122
149
  },
123
150
  {
124
151
  title: () => t("common.operation"),
125
152
  key: "op",
126
153
  width: 140,
154
+ align: "right",
127
155
  fixed: "right",
128
156
  hideInSetting: !0,
129
- render: (e) => n(k, { size: 4, wrapItem: !1 }, () => [
130
- g.hasPerm("PUT:/api/v1/sys/module/{id}") ? n(
131
- y,
132
- { size: "small", quaternary: !0, type: "primary", onClick: () => E(e) },
157
+ render: (e) => u(x, { size: 2, justify: "end", wrapItem: !1 }, () => [
158
+ k.hasPerm("PUT:/api/v1/sys/module/{id}") ? u(
159
+ g,
160
+ { size: "small", quaternary: !0, type: "primary", onClick: () => F(e) },
133
161
  () => t("common.edit")
134
162
  ) : null,
135
- h(e) || !g.hasPerm("DELETE:/api/v1/sys/module/{id}") ? null : n(
136
- Y,
163
+ b(e) || !k.hasPerm("DELETE:/api/v1/sys/module/{id}") ? null : u(
164
+ oe,
137
165
  {
138
166
  // popconfirm 留在模板层当触发器,「执行→toast」后半段交给 useConfirm().run。
139
- onPositiveClick: () => T(() => p.remove(e.id), t("module.deleted")).then((a) => {
140
- a && v();
167
+ onPositiveClick: () => B(() => p.remove(e.id), t("module.deleted")).then((a) => {
168
+ a && y();
141
169
  })
142
170
  },
143
171
  {
144
- trigger: () => n(
145
- y,
172
+ trigger: () => u(
173
+ g,
146
174
  { size: "small", quaternary: !0, type: "error" },
147
175
  () => t("common.delete")
148
176
  ),
@@ -152,176 +180,181 @@ const ue = { class: "hint" }, ke = /* @__PURE__ */ $({
152
180
  ])
153
181
  }
154
182
  ];
155
- return (e, a) => {
156
- const V = O("auth");
157
- return z(), j(M, null, [
158
- o(l(Z), {
159
- "default-page-size": 100,
160
- columns: D,
161
- data: P.value,
162
- loading: c.value,
183
+ return ve(U), (e, a) => {
184
+ const s = j("auth");
185
+ return z(), W(G, null, [
186
+ o(l(ne), {
187
+ columns: U,
188
+ data: _.value,
189
+ loading: v.value,
163
190
  "row-key": "id",
164
191
  pagination: !1,
165
- toolbar: { refresh: !1 },
166
- "flex-height": "",
167
- "virtual-scroll": "",
192
+ toolbar: l(pe),
193
+ search: { container: "table" },
194
+ "fill-height": "",
195
+ "min-row-height": l(fe),
196
+ "card-on-narrow": "",
168
197
  "storage-key": "sys-module"
169
198
  }, {
170
- toolbar: d(() => [
171
- o(l(y), {
172
- quaternary: "",
173
- loading: c.value,
174
- onClick: v
199
+ "toolbar-right": r(() => [
200
+ Q((z(), J(l(g), {
201
+ type: "primary",
202
+ onClick: D
175
203
  }, {
176
- icon: d(() => [
177
- o(x, {
178
- icon: "ph:arrow-clockwise",
204
+ icon: r(() => [
205
+ o(P, {
206
+ icon: "ph:plus",
179
207
  size: 16
180
208
  })
181
209
  ]),
210
+ default: r(() => [
211
+ K(" " + E(l(t)("common.add")), 1)
212
+ ]),
182
213
  _: 1
183
- }, 8, ["loading"]),
184
- H((z(), L(l(y), {
185
- type: "primary",
186
- onClick: S
214
+ })), [
215
+ [s, "POST:/api/v1/sys/module/add"]
216
+ ]),
217
+ o(l(g), {
218
+ quaternary: "",
219
+ circle: "",
220
+ loading: v.value,
221
+ "aria-label": l(t)("table.refresh"),
222
+ onClick: y
187
223
  }, {
188
- icon: d(() => [
189
- o(x, {
190
- icon: "ph:plus",
224
+ icon: r(() => [
225
+ o(P, {
226
+ icon: "ph:arrow-clockwise",
191
227
  size: 16
192
228
  })
193
229
  ]),
194
- default: d(() => [
195
- G(" " + U(l(t)("common.add")), 1)
196
- ]),
197
230
  _: 1
198
- })), [
199
- [V, "POST:/api/v1/sys/module/add"]
200
- ])
231
+ }, 8, ["loading", "aria-label"])
201
232
  ]),
202
233
  _: 1
203
- }, 8, ["data", "loading"]),
204
- o(te, {
205
- show: b.value,
206
- "onUpdate:show": a[8] || (a[8] = (u) => b.value = u),
207
- title: s.value === null ? l(t)("module.addTitle") : l(t)("module.editTitle"),
234
+ }, 8, ["data", "loading", "toolbar", "min-row-height"]),
235
+ o(de, {
236
+ show: h.value,
237
+ "onUpdate:show": a[8] || (a[8] = (n) => h.value = n),
238
+ title: m.value === null ? l(t)("module.addTitle") : l(t)("module.editTitle"),
208
239
  width: 520,
209
- "on-confirm": B,
240
+ "on-confirm": L,
210
241
  "confirm-text": l(t)("common.save")
211
242
  }, {
212
- default: d(() => [
213
- o(l(Q), {
243
+ default: r(() => [
244
+ o(l(ee), X({
214
245
  ref_key: "formRef",
215
- ref: _,
246
+ ref: N,
216
247
  model: i,
217
- rules: q,
218
- "label-placement": "left",
219
- "label-width": 90
220
- }, {
221
- default: d(() => [
222
- o(l(r), {
248
+ rules: O,
249
+ "require-mark-placement": "left"
250
+ }, A.value), {
251
+ default: r(() => [
252
+ o(l(d), {
223
253
  label: l(t)("module.code"),
224
254
  path: "code"
225
255
  }, {
226
- default: d(() => [
256
+ default: r(() => [
227
257
  o(l(f), {
228
258
  value: i.code,
229
- "onUpdate:value": a[0] || (a[0] = (u) => i.code = u),
259
+ "onUpdate:value": a[0] || (a[0] = (n) => i.code = n),
260
+ class: "mono",
230
261
  placeholder: l(t)("module.code"),
231
- disabled: s.value !== null
262
+ disabled: m.value !== null
232
263
  }, null, 8, ["value", "placeholder", "disabled"])
233
264
  ]),
234
265
  _: 1
235
266
  }, 8, ["label"]),
236
- o(l(r), {
267
+ o(l(d), {
237
268
  label: l(t)("module.name"),
238
269
  path: "title"
239
270
  }, {
240
- default: d(() => [
271
+ default: r(() => [
241
272
  o(l(f), {
242
273
  value: i.title,
243
- "onUpdate:value": a[1] || (a[1] = (u) => i.title = u),
274
+ "onUpdate:value": a[1] || (a[1] = (n) => i.title = n),
244
275
  placeholder: l(t)("module.name")
245
276
  }, null, 8, ["value", "placeholder"])
246
277
  ]),
247
278
  _: 1
248
279
  }, 8, ["label"]),
249
- o(l(r), {
280
+ o(l(d), {
250
281
  label: l(t)("module.icon")
251
282
  }, {
252
- default: d(() => [
253
- o(le, {
283
+ default: r(() => [
284
+ o(ue, {
254
285
  "model-value": i.icon ?? "",
255
- "onUpdate:modelValue": a[2] || (a[2] = (u) => i.icon = u)
286
+ "onUpdate:modelValue": a[2] || (a[2] = (n) => i.icon = n)
256
287
  }, null, 8, ["model-value"])
257
288
  ]),
258
289
  _: 1
259
290
  }, 8, ["label"]),
260
- o(l(r), {
291
+ o(l(d), {
261
292
  label: l(t)("module.defaultRoute")
262
293
  }, {
263
- default: d(() => [
294
+ default: r(() => [
264
295
  o(l(f), {
265
296
  value: i.defaultRoute,
266
- "onUpdate:value": a[3] || (a[3] = (u) => i.defaultRoute = u),
297
+ "onUpdate:value": a[3] || (a[3] = (n) => i.defaultRoute = n),
298
+ class: "mono",
267
299
  placeholder: "/system/user"
268
300
  }, null, 8, ["value"])
269
301
  ]),
270
302
  _: 1
271
303
  }, 8, ["label"]),
272
- o(l(r), {
304
+ o(l(d), {
273
305
  label: l(t)("module.apiPrefix")
274
306
  }, {
275
- default: d(() => [
276
- o(l(k), {
307
+ default: r(() => [
308
+ o(l(x), {
277
309
  vertical: "",
278
310
  size: 2,
279
311
  style: { width: "100%" }
280
312
  }, {
281
- default: d(() => [
313
+ default: r(() => [
282
314
  o(l(f), {
283
315
  value: i.apiPrefix,
284
- "onUpdate:value": a[4] || (a[4] = (u) => i.apiPrefix = u),
316
+ "onUpdate:value": a[4] || (a[4] = (n) => i.apiPrefix = n),
317
+ class: "mono",
285
318
  placeholder: "sys"
286
319
  }, null, 8, ["value"]),
287
- J("span", ue, U(l(t)("module.apiPrefixHint")), 1)
320
+ Y("span", ye, E(l(t)("module.apiPrefixHint")), 1)
288
321
  ]),
289
322
  _: 1
290
323
  })
291
324
  ]),
292
325
  _: 1
293
326
  }, 8, ["label"]),
294
- o(l(r), {
327
+ o(l(d), {
295
328
  label: l(t)("module.sort")
296
329
  }, {
297
- default: d(() => [
298
- o(l(W), {
330
+ default: r(() => [
331
+ o(l(le), {
299
332
  value: i.sort,
300
- "onUpdate:value": a[5] || (a[5] = (u) => i.sort = u),
333
+ "onUpdate:value": a[5] || (a[5] = (n) => i.sort = n),
301
334
  min: 0,
302
335
  style: { width: "160px" }
303
336
  }, null, 8, ["value"])
304
337
  ]),
305
338
  _: 1
306
339
  }, 8, ["label"]),
307
- o(l(r), {
340
+ o(l(d), {
308
341
  label: l(t)("common.status")
309
342
  }, {
310
- default: d(() => [
311
- o(l(X), {
343
+ default: r(() => [
344
+ o(l(te), {
312
345
  value: i.enabled,
313
- "onUpdate:value": a[6] || (a[6] = (u) => i.enabled = u)
346
+ "onUpdate:value": a[6] || (a[6] = (n) => i.enabled = n)
314
347
  }, null, 8, ["value"])
315
348
  ]),
316
349
  _: 1
317
350
  }, 8, ["label"]),
318
- o(l(r), {
351
+ o(l(d), {
319
352
  label: l(t)("module.remark")
320
353
  }, {
321
- default: d(() => [
354
+ default: r(() => [
322
355
  o(l(f), {
323
356
  value: i.remark,
324
- "onUpdate:value": a[7] || (a[7] = (u) => i.remark = u),
357
+ "onUpdate:value": a[7] || (a[7] = (n) => i.remark = n),
325
358
  type: "textarea",
326
359
  autosize: { minRows: 2 }
327
360
  }, null, 8, ["value"])
@@ -330,7 +363,7 @@ const ue = { class: "hint" }, ke = /* @__PURE__ */ $({
330
363
  }, 8, ["label"])
331
364
  ]),
332
365
  _: 1
333
- }, 8, ["model"])
366
+ }, 16, ["model"])
334
367
  ]),
335
368
  _: 1
336
369
  }, 8, ["show", "title", "confirm-text"])
@@ -339,6 +372,6 @@ const ue = { class: "hint" }, ke = /* @__PURE__ */ $({
339
372
  }
340
373
  });
341
374
  export {
342
- ke as default
375
+ Ae as default
343
376
  };
344
377
  //# sourceMappingURL=index2.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/module/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { h, onMounted, reactive, ref } from 'vue'\nimport {\n NButton,\n NSpace,\n NTag,\n NForm,\n NFormItem,\n NInput,\n NInputNumber,\n NSwitch,\n NPopconfirm,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { SmartTable, type SmartTableColumn } from 'smart-naive-table'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport IconPicker from '#/components/IconPicker/index.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useAuthStore } from '#/stores/auth'\nimport { moduleApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport type { ModuleInput, ModuleRow } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\n\nconst loading = ref(false)\nconst rows = ref<ModuleRow[]>([])\n\n/** 内置 system 模块受保护(后端 42013),前端据 code 禁删,避免明知不可为的请求。 */\nconst isBuiltin = (r: ModuleRow) => r.code === 'system'\n\nasync function load() {\n loading.value = true\n try {\n rows.value = await moduleApi.list()\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\nonMounted(load)\n\n// ── 新增/编辑弹窗(FormContainer:loading/底栏/关闭时机由容器按 onConfirm 协议接管)──\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst rules: FormRules = {\n // whitespace: 纯空白不算填写\n code: {\n required: true,\n whitespace: true,\n message: () => t('module.codeRequired'),\n trigger: ['input', 'blur'],\n },\n title: {\n required: true,\n whitespace: true,\n message: () => t('module.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst editingId = ref<number | null>(null)\nconst blank = (): ModuleInput => ({\n code: '',\n title: '',\n icon: '',\n defaultRoute: '',\n apiPrefix: '',\n sort: 0,\n enabled: true,\n remark: '',\n})\nconst form = reactive<ModuleInput>(blank())\n\n/** 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。 */\nconst toInput = (r: ModuleRow): ModuleInput => ({\n code: r.code,\n title: r.title,\n icon: r.icon ?? '',\n defaultRoute: r.defaultRoute ?? '',\n apiPrefix: r.apiPrefix ?? '',\n sort: r.sort,\n enabled: r.enabled,\n remark: r.remark ?? '',\n})\n\nfunction openAdd() {\n editingId.value = null\n Object.assign(form, blank())\n show.value = true\n}\nfunction openEdit(r: ModuleRow) {\n editingId.value = r.id\n Object.assign(form, toInput(r))\n show.value = true\n}\n\n/** FormContainer onConfirm:校验失败 reject / API 失败 return false → 弹层不关;成功正常返回自动关。 */\nasync function save() {\n await formRef.value?.validate()\n try {\n if (editingId.value === null) await moduleApi.add({ ...form })\n else await moduleApi.update(editingId.value, { ...form })\n message.success(t('module.saved'))\n await load()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n\nconst columns: SmartTableColumn<ModuleRow>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n { title: () => t('module.code'), key: 'code' },\n {\n title: () => t('module.name'),\n key: 'title',\n render: r =>\n h(NSpace, { align: 'center', size: 6, wrapItem: false }, () => [\n r.icon ? h(AppIcon, { icon: r.icon, size: 18 }) : null,\n r.title,\n isBuiltin(r)\n ? h(NTag, { size: 'small', type: 'info', bordered: false }, () => t('module.builtin'))\n : null,\n ]),\n },\n {\n title: () => t('module.defaultRoute'),\n key: 'defaultRoute',\n render: r => r.defaultRoute || '—',\n },\n {\n title: () => t('module.apiPrefix'),\n key: 'apiPrefix',\n width: 120,\n render: r => r.apiPrefix || '—',\n },\n { title: () => t('module.sort'), key: 'sort', width: 80 },\n {\n title: () => t('common.status'),\n key: 'enabled',\n width: 90,\n // 无启停(update)权限者不见开关,退化为只读状态标签,保留状态可见性。\n render: r =>\n authStore.hasPerm('PUT:/api/v1/sys/module/{id}')\n ? h(StatusSwitch, {\n value: r.enabled,\n // 内置 system 应用停用会让门户失联(模块/菜单管理页都在它下面,停了就没法从 UI 恢复)——\n // 与「禁删」同级的前端保护;后端停用与删除内置模块都拒绝(42013),这里只是不给点。\n disabled: isBuiltin(r),\n // 停用会把应用从门户隐藏,先确认;启用无副作用,跳过确认(返回 null)。\n confirm: (next: boolean) =>\n next ? null : t('module.disableConfirm', { title: r.title }),\n request: (next: boolean) => moduleApi.update(r.id, { ...toInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n },\n })\n : h(NTag, { size: 'small', bordered: false, type: r.enabled ? 'success' : 'default' }, () =>\n t(r.enabled ? 'common.enabled' : 'common.disabled'),\n ),\n },\n {\n title: () => t('common.operation'),\n key: 'op',\n width: 140,\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 4, wrapItem: false }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/module/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n isBuiltin(r) || !authStore.hasPerm('DELETE:/api/v1/sys/module/{id}')\n ? null\n : h(\n NPopconfirm,\n {\n // popconfirm 留在模板层当触发器,「执行→toast」后半段交给 useConfirm().run。\n onPositiveClick: () =>\n run(() => moduleApi.remove(r.id), t('module.deleted')).then(ok => {\n if (ok) load()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('module.deleteConfirm', { title: r.title }),\n },\n ),\n ]),\n },\n]\n</script>\n\n<template>\n <!-- 静态数据模式:module 只有全量 list 端点,没有分页端点 —— 内置刷新按钮在无 fetcher 时是空转,\n 故关掉它自己接一个。 -->\n <SmartTable\n :default-page-size=\"100\"\n :columns=\"columns\"\n :data=\"rows\"\n :loading=\"loading\"\n row-key=\"id\"\n :pagination=\"false\"\n :toolbar=\"{ refresh: false }\"\n flex-height\n virtual-scroll\n storage-key=\"sys-module\"\n >\n <template #toolbar>\n <n-button quaternary :loading=\"loading\" @click=\"load\">\n <template #icon><AppIcon icon=\"ph:arrow-clockwise\" :size=\"16\" /></template>\n </n-button>\n <n-button v-auth=\"'POST:/api/v1/sys/module/add'\" type=\"primary\" @click=\"openAdd\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n </template>\n </SmartTable>\n\n <FormContainer\n v-model:show=\"show\"\n :title=\"editingId === null ? t('module.addTitle') : t('module.editTitle')\"\n :width=\"520\"\n :on-confirm=\"save\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form ref=\"formRef\" :model=\"form\" :rules=\"rules\" label-placement=\"left\" :label-width=\"90\">\n <n-form-item :label=\"t('module.code')\" path=\"code\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('module.code')\"\n :disabled=\"editingId !== null\"\n />\n </n-form-item>\n <n-form-item :label=\"t('module.name')\" path=\"title\">\n <n-input v-model:value=\"form.title\" :placeholder=\"t('module.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('module.icon')\">\n <IconPicker\n :model-value=\"form.icon ?? ''\"\n @update:model-value=\"(v: string) => (form.icon = v)\"\n />\n </n-form-item>\n <n-form-item :label=\"t('module.defaultRoute')\">\n <n-input v-model:value=\"form.defaultRoute as string\" placeholder=\"/system/user\" />\n </n-form-item>\n <n-form-item :label=\"t('module.apiPrefix')\">\n <n-space vertical :size=\"2\" style=\"width: 100%\">\n <n-input v-model:value=\"form.apiPrefix as string\" placeholder=\"sys\" />\n <span class=\"hint\">{{ t('module.apiPrefixHint') }}</span>\n </n-space>\n </n-form-item>\n <n-form-item :label=\"t('module.sort')\">\n <n-input-number v-model:value=\"form.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"form.enabled\" />\n </n-form-item>\n <n-form-item :label=\"t('module.remark')\">\n <n-input v-model:value=\"form.remark as string\" type=\"textarea\" :autosize=\"{ minRows: 2 }\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n</template>\n\n<style scoped>\n.hint {\n font-size: 12px;\n color: var(--color-text-secondary, #999);\n}\n</style>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","loading","ref","rows","isBuiltin","r","load","moduleApi","translateError","onMounted","show","formRef","rules","editingId","blank","form","reactive","toInput","openAdd","openEdit","save","_a","e","columns","h","NSpace","AppIcon","NTag","StatusSwitch","next","v","NButton","NPopconfirm","ok","_createVNode","_unref","SmartTable","_createBlock","_createTextVNode","FormContainer","$event","NForm","NFormItem","NInput","_cache","IconPicker","_createElementVNode","_hoisted_1","_toDisplayString","NInputNumber","NSwitch"],"mappings":"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"}
1
+ {"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/module/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, h, onMounted, reactive, ref } from 'vue'\nimport {\n NButton,\n NSpace,\n NTag,\n NTooltip,\n NForm,\n NFormItem,\n NInput,\n NInputNumber,\n NSwitch,\n NPopconfirm,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useMediaQuery } from '@vueuse/core'\nimport { SmartTable, type SmartTableColumn } from 'smart-naive-table'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport IconPicker from '#/components/IconPicker/index.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { useAuthStore } from '#/stores/auth'\nimport { moduleApi } from '#/api'\nimport { translateError } from '#/utils/error'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport type { ModuleInput, ModuleRow } from '#/types/api'\n\nimport { deriveHeaderFilters } from '#/utils/tableFilter'\nimport { lineIcon } from '#/utils/menuIcon'\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\n\n// 窄屏:表单标签放上方(底部抽屉里横排标签太挤);宽 / 中档沿用左标签\nconst narrowForm = useMediaQuery('(max-width: 640px)')\nconst formLayout = computed(() =>\n narrowForm.value\n ? { labelPlacement: 'top' as const, labelWidth: undefined }\n : { labelPlacement: 'left' as const, labelWidth: 90 },\n)\n\nconst loading = ref(false)\nconst rows = ref<ModuleRow[]>([])\n\n/** 内置 system 模块受保护(后端 42013),前端据 code 禁删,避免明知不可为的请求。 */\nconst isBuiltin = (r: ModuleRow) => r.code === 'system'\n\nasync function load() {\n loading.value = true\n try {\n rows.value = await moduleApi.list()\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\nonMounted(load)\n\n// ── 新增/编辑弹窗(FormContainer:loading/底栏/关闭时机由容器按 onConfirm 协议接管)──\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst rules: FormRules = {\n // whitespace: 纯空白不算填写\n code: {\n required: true,\n whitespace: true,\n message: () => t('module.codeRequired'),\n trigger: ['input', 'blur'],\n },\n title: {\n required: true,\n whitespace: true,\n message: () => t('module.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst editingId = ref<number | null>(null)\nconst blank = (): ModuleInput => ({\n code: '',\n title: '',\n icon: '',\n defaultRoute: '',\n apiPrefix: '',\n sort: 0,\n enabled: true,\n remark: '',\n})\nconst form = reactive<ModuleInput>(blank())\n\n/** 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。 */\nconst toInput = (r: ModuleRow): ModuleInput => ({\n code: r.code,\n title: r.title,\n icon: r.icon ?? '',\n defaultRoute: r.defaultRoute ?? '',\n apiPrefix: r.apiPrefix ?? '',\n sort: r.sort,\n enabled: r.enabled,\n remark: r.remark ?? '',\n})\n\nfunction openAdd() {\n editingId.value = null\n Object.assign(form, blank())\n show.value = true\n}\nfunction openEdit(r: ModuleRow) {\n editingId.value = r.id\n Object.assign(form, toInput(r))\n show.value = true\n}\n\n/** FormContainer onConfirm:校验失败 reject / API 失败 return false → 弹层不关;成功正常返回自动关。 */\nasync function save() {\n await formRef.value?.validate()\n try {\n if (editingId.value === null) await moduleApi.add({ ...form })\n else await moduleApi.update(editingId.value, { ...form })\n message.success(t('module.saved'))\n await load()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n\n/** 默认路由 / 路由前缀单元格:有值用等宽次级色,空值画灰色的「—」。 */\nconst cellText = (v?: string | null) =>\n v ? h('span', { class: 'mono muted' }, v) : h('span', { class: 'faint' }, '—')\n\nconst columns: SmartTableColumn<ModuleRow>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n title: () => t('module.code'),\n key: 'code',\n search: {},\n render: r => h('span', { class: 'mono' }, r.code),\n },\n {\n title: () => t('module.name'),\n key: 'title',\n // 窄档卡片以名称作标题(默认取第一个数据列 = 编码)\n card: 'title',\n search: {},\n render: r =>\n h(NSpace, { align: 'center', size: 6, wrapItem: false }, () => [\n r.icon ? h(AppIcon, { icon: lineIcon(r.icon), size: 18 }) : null,\n r.title,\n isBuiltin(r)\n ? h(NTag, { size: 'small', type: 'info', bordered: false }, () => t('module.builtin'))\n : null,\n ]),\n },\n {\n title: () => t('module.defaultRoute'),\n key: 'defaultRoute',\n render: r => cellText(r.defaultRoute),\n },\n {\n title: () => t('module.apiPrefix'),\n key: 'apiPrefix',\n width: 120,\n render: r => cellText(r.apiPrefix),\n },\n {\n title: () => t('module.sort'),\n key: 'sort',\n width: 80,\n render: r => h('span', { class: 'num muted' }, r.sort),\n },\n {\n title: () => t('common.status'),\n key: 'enabled',\n width: 90,\n // 无启停(update)权限者不见开关,退化为只读状态标签,保留状态可见性。\n render: r => {\n if (!authStore.hasPerm('PUT:/api/v1/sys/module/{id}'))\n return h(\n NTag,\n { size: 'small', bordered: false, type: r.enabled ? 'success' : 'default' },\n () => t(r.enabled ? 'common.enabled' : 'common.disabled'),\n )\n const sw = h(StatusSwitch, {\n value: r.enabled,\n // 内置 system 应用停用会让门户失联(模块/菜单管理页都在它下面,停了就没法从 UI 恢复)——\n // 与「禁删」同级的前端保护;后端停用与删除内置模块都拒绝(42013),这里只是不给点。\n disabled: isBuiltin(r),\n // 停用会把应用从门户隐藏,先确认;启用无副作用,跳过确认(返回 null)。\n confirm: (next: boolean) => (next ? null : t('module.disableConfirm', { title: r.title })),\n request: (next: boolean) => moduleApi.update(r.id, { ...toInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n },\n })\n // 灰掉的开关悬停说明原因(包一层 span:禁用的开关自己收不到鼠标事件)\n return isBuiltin(r)\n ? h(NTooltip, null, {\n trigger: () => h('span', { style: 'display: inline-flex' }, [sw]),\n default: () => t('module.builtinNoDisable'),\n })\n : sw\n },\n },\n {\n title: () => t('common.operation'),\n key: 'op',\n width: 140,\n align: 'right',\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 2, justify: 'end', wrapItem: false }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/module/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n isBuiltin(r) || !authStore.hasPerm('DELETE:/api/v1/sys/module/{id}')\n ? null\n : h(\n NPopconfirm,\n {\n // popconfirm 留在模板层当触发器,「执行→toast」后半段交给 useConfirm().run。\n onPositiveClick: () =>\n run(() => moduleApi.remove(r.id), t('module.deleted')).then(ok => {\n if (ok) load()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('module.deleteConfirm', { title: r.title }),\n },\n ),\n ]),\n },\n]\nderiveHeaderFilters(columns)\n</script>\n\n<template>\n <!-- 静态数据模式:module 只有全量 list 端点,没有分页端点 —— 条件搜索由表格在前端求值;\n 3.0 对静态数据会自己隐藏内置刷新,所以右侧自带一个刷新按钮重新拉取。 -->\n <SmartTable\n :columns=\"columns\"\n :data=\"rows\"\n :loading=\"loading\"\n row-key=\"id\"\n :pagination=\"false\"\n :toolbar=\"TABLE_TOOLBAR\"\n :search=\"{ container: 'table' }\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"sys-module\"\n >\n <template #toolbar-right>\n <n-button v-auth=\"'POST:/api/v1/sys/module/add'\" type=\"primary\" @click=\"openAdd\">\n <template #icon><AppIcon icon=\"ph:plus\" :size=\"16\" /></template>\n {{ t('common.add') }}\n </n-button>\n <!-- 静态数据没有内置刷新:这里补一个,形态与内置图标按钮一致(圆形、无底),紧跟在业务按钮后 -->\n <n-button quaternary circle :loading=\"loading\" :aria-label=\"t('table.refresh')\" @click=\"load\">\n <template #icon><AppIcon icon=\"ph:arrow-clockwise\" :size=\"16\" /></template>\n </n-button>\n </template>\n </SmartTable>\n\n <FormContainer\n v-model:show=\"show\"\n :title=\"editingId === null ? t('module.addTitle') : t('module.editTitle')\"\n :width=\"520\"\n :on-confirm=\"save\"\n :confirm-text=\"t('common.save')\"\n >\n <n-form\n ref=\"formRef\"\n :model=\"form\"\n :rules=\"rules\"\n require-mark-placement=\"left\"\n v-bind=\"formLayout\"\n >\n <n-form-item :label=\"t('module.code')\" path=\"code\">\n <n-input\n v-model:value=\"form.code\"\n class=\"mono\"\n :placeholder=\"t('module.code')\"\n :disabled=\"editingId !== null\"\n />\n </n-form-item>\n <n-form-item :label=\"t('module.name')\" path=\"title\">\n <n-input v-model:value=\"form.title\" :placeholder=\"t('module.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('module.icon')\">\n <IconPicker\n :model-value=\"form.icon ?? ''\"\n @update:model-value=\"(v: string) => (form.icon = v)\"\n />\n </n-form-item>\n <n-form-item :label=\"t('module.defaultRoute')\">\n <n-input\n v-model:value=\"form.defaultRoute as string\"\n class=\"mono\"\n placeholder=\"/system/user\"\n />\n </n-form-item>\n <n-form-item :label=\"t('module.apiPrefix')\">\n <n-space vertical :size=\"2\" style=\"width: 100%\">\n <n-input v-model:value=\"form.apiPrefix as string\" class=\"mono\" placeholder=\"sys\" />\n <span class=\"hint\">{{ t('module.apiPrefixHint') }}</span>\n </n-space>\n </n-form-item>\n <n-form-item :label=\"t('module.sort')\">\n <n-input-number v-model:value=\"form.sort\" :min=\"0\" style=\"width: 160px\" />\n </n-form-item>\n <n-form-item :label=\"t('common.status')\">\n <n-switch v-model:value=\"form.enabled\" />\n </n-form-item>\n <n-form-item :label=\"t('module.remark')\">\n <n-input v-model:value=\"form.remark as string\" type=\"textarea\" :autosize=\"{ minRows: 2 }\" />\n </n-form-item>\n </n-form>\n </FormContainer>\n</template>\n\n<style scoped>\n.hint {\n font-size: 13px;\n line-height: 1.5;\n color: var(--text-3);\n}\n\n/* 辅助字样(表格单元格由库渲染,用 :deep;表单里的输入框是自己的元素,直接命中) */\n.mono,\n:deep(.mono) {\n font-family: var(--font-mono);\n font-size: 13.5px;\n letter-spacing: 0;\n}\n:deep(.muted) {\n color: var(--text-2);\n}\n:deep(.faint) {\n color: var(--text-3);\n}\n:deep(.num) {\n font-variant-numeric: tabular-nums;\n}\n</style>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","narrowForm","useMediaQuery","formLayout","computed","loading","ref","rows","isBuiltin","r","load","moduleApi","translateError","onMounted","show","formRef","rules","editingId","blank","form","reactive","toInput","openAdd","openEdit","save","_a","e","cellText","v","h","columns","NSpace","AppIcon","lineIcon","NTag","sw","StatusSwitch","next","NTooltip","NButton","NPopconfirm","ok","deriveHeaderFilters","_createVNode","_unref","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_createBlock","_createTextVNode","FormContainer","$event","_mergeProps","NFormItem","NInput","_cache","IconPicker","_createElementVNode","_hoisted_1","_toDisplayString","NInputNumber","NSwitch"],"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 m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-8ea4d493"]]);
4
+ const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-cd819f86"]]);
5
5
  export {
6
- m as default
6
+ p as default
7
7
  };
8
8
  //# sourceMappingURL=index.vue.js.map