smart-admin-web 10.15.0 → 10.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/README.md +1 -1
  2. package/dist/api/index.d.ts +4 -2
  3. package/dist/api/index.js +1 -1
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/schema.d.ts +39 -5
  6. package/dist/assets/icons/ph-subset.json.js +5 -5
  7. package/dist/components/AppIcon.vue.js +9 -9
  8. package/dist/components/AppIcon.vue.js.map +1 -1
  9. package/dist/components/AppWatermark.vue.d.ts +14 -0
  10. package/dist/components/AppWatermark.vue.js +38 -0
  11. package/dist/components/AppWatermark.vue.js.map +1 -0
  12. package/dist/components/AppWatermark2.vue.js +5 -0
  13. package/dist/components/AppWatermark2.vue.js.map +1 -0
  14. package/dist/components/Chart/PieChart.vue.d.ts +1 -1
  15. package/dist/components/Chart/echarts.js +15 -20
  16. package/dist/components/Chart/echarts.js.map +1 -1
  17. package/dist/components/CronEditor/index.vue.js +1 -1
  18. package/dist/components/CronEditor/index2.vue.js +2 -1
  19. package/dist/components/CronEditor/index2.vue.js.map +1 -1
  20. package/dist/components/DetailPage/index.vue.js +2 -2
  21. package/dist/components/DetailPage/index2.vue.js.map +1 -1
  22. package/dist/components/DictTag/index.vue.js.map +1 -1
  23. package/dist/components/ErrorBoundary/index.vue.js +2 -2
  24. package/dist/components/ErrorBoundary/index2.vue.js +1 -1
  25. package/dist/components/ErrorBoundary/index2.vue.js.map +1 -1
  26. package/dist/components/FormContainer/index.vue.js +91 -56
  27. package/dist/components/FormContainer/index.vue.js.map +1 -1
  28. package/dist/components/ImportWizard/index.vue.js +1 -1
  29. package/dist/components/ImportWizard/index2.vue.js +44 -41
  30. package/dist/components/ImportWizard/index2.vue.js.map +1 -1
  31. package/dist/components/MenuSearch.vue.js +2 -2
  32. package/dist/components/MenuSearch2.vue.js +19 -18
  33. package/dist/components/MenuSearch2.vue.js.map +1 -1
  34. package/dist/components/PasswordStrength/index.vue.js +2 -2
  35. package/dist/components/PasswordStrength/index2.vue.js +20 -18
  36. package/dist/components/PasswordStrength/index2.vue.js.map +1 -1
  37. package/dist/components/TableTotal/index.vue.d.ts +6 -0
  38. package/dist/components/{SelectTable → TableTotal}/index.vue.js +1 -1
  39. package/dist/components/TableTotal/index2.vue.js +16 -0
  40. package/dist/components/TableTotal/index2.vue.js.map +1 -0
  41. package/dist/components/TableZoomButton/index.vue.js.map +1 -1
  42. package/dist/components/UserPicker/index.vue.js +2 -2
  43. package/dist/components/UserPicker/index2.vue.js +176 -117
  44. package/dist/components/UserPicker/index2.vue.js.map +1 -1
  45. package/dist/composables/useBatchDelete.js.map +1 -1
  46. package/dist/composables/useLayoutMenu.js +17 -16
  47. package/dist/composables/useLayoutMenu.js.map +1 -1
  48. package/dist/composables/useModule.js +39 -29
  49. package/dist/composables/useModule.js.map +1 -1
  50. package/dist/composables/useShellBreakpoint.d.ts +19 -0
  51. package/dist/composables/useShellBreakpoint.js +37 -0
  52. package/dist/composables/useShellBreakpoint.js.map +1 -0
  53. package/dist/composables/useSite.d.ts +15 -0
  54. package/dist/composables/useSite.js +16 -14
  55. package/dist/composables/useSite.js.map +1 -1
  56. package/dist/composables/useTabTitle.js.map +1 -1
  57. package/dist/composables/useTableTitle.d.ts +6 -0
  58. package/dist/composables/useTableTitle.js +11 -0
  59. package/dist/composables/useTableTitle.js.map +1 -0
  60. package/dist/composables/useTableZoom.d.ts +5 -0
  61. package/dist/composables/useTableZoom.js.map +1 -1
  62. package/dist/composables/useTheme.d.ts +2 -2
  63. package/dist/composables/useTheme.js +23 -20
  64. package/dist/composables/useTheme.js.map +1 -1
  65. package/dist/createSmartAdmin.d.ts +12 -2
  66. package/dist/createSmartAdmin.js +72 -60
  67. package/dist/createSmartAdmin.js.map +1 -1
  68. package/dist/index.d.ts +5 -2
  69. package/dist/index.js +219 -205
  70. package/dist/index.js.map +1 -1
  71. package/dist/layouts/AccentPicker.vue.js +8 -0
  72. package/dist/layouts/AccentPicker.vue.js.map +1 -0
  73. package/dist/layouts/AccentPicker2.vue.js +131 -0
  74. package/dist/layouts/AccentPicker2.vue.js.map +1 -0
  75. package/dist/layouts/AppHeader.vue.d.ts +8 -1
  76. package/dist/layouts/AppHeader.vue.js +2 -2
  77. package/dist/layouts/AppHeader2.vue.js +317 -235
  78. package/dist/layouts/AppHeader2.vue.js.map +1 -1
  79. package/dist/layouts/NoticeBell.vue.js +2 -2
  80. package/dist/layouts/NoticeBell2.vue.js +1 -1
  81. package/dist/layouts/NoticeBell2.vue.js.map +1 -1
  82. package/dist/layouts/PersonalLayout.vue.js +2 -2
  83. package/dist/layouts/PersonalLayout2.vue.js +69 -47
  84. package/dist/layouts/PersonalLayout2.vue.js.map +1 -1
  85. package/dist/layouts/SettingsDrawer.vue.js +3 -3
  86. package/dist/layouts/SettingsDrawer2.vue.js +261 -325
  87. package/dist/layouts/SettingsDrawer2.vue.js.map +1 -1
  88. package/dist/layouts/TabsBar.vue.js +2 -2
  89. package/dist/layouts/TabsBar2.vue.js +97 -69
  90. package/dist/layouts/TabsBar2.vue.js.map +1 -1
  91. package/dist/layouts/components/SideNav.vue.d.ts +3 -0
  92. package/dist/layouts/components/SideNav.vue.js +1 -1
  93. package/dist/layouts/components/SideNav2.vue.js +54 -26
  94. package/dist/layouts/components/SideNav2.vue.js.map +1 -1
  95. package/dist/layouts/default.vue.js +1 -1
  96. package/dist/layouts/default2.vue.js +170 -140
  97. package/dist/layouts/default2.vue.js.map +1 -1
  98. package/dist/lib/loginHero.d.ts +2 -2
  99. package/dist/lib/loginHero.js.map +1 -1
  100. package/dist/lib/runtime.js +1 -1
  101. package/dist/lib/watermark.d.ts +110 -0
  102. package/dist/lib/watermark.js +151 -0
  103. package/dist/lib/watermark.js.map +1 -0
  104. package/dist/locales/en-US.d.ts +221 -15
  105. package/dist/locales/en-US.js +230 -21
  106. package/dist/locales/en-US.js.map +1 -1
  107. package/dist/locales/kernelMenuTitles.d.ts +1 -0
  108. package/dist/locales/kernelMenuTitles.js +128 -0
  109. package/dist/locales/kernelMenuTitles.js.map +1 -0
  110. package/dist/locales/menuTitle.d.ts +3 -0
  111. package/dist/locales/menuTitle.js +14 -12
  112. package/dist/locales/menuTitle.js.map +1 -1
  113. package/dist/locales/zh-CN.d.ts +221 -15
  114. package/dist/locales/zh-CN.js +238 -28
  115. package/dist/locales/zh-CN.js.map +1 -1
  116. package/dist/router/index.js +41 -32
  117. package/dist/router/index.js.map +1 -1
  118. package/dist/router/namedPage.d.ts +4 -0
  119. package/dist/router/namedPage.js +7 -7
  120. package/dist/router/namedPage.js.map +1 -1
  121. package/dist/router/viewRegistry.js +8 -8
  122. package/dist/router/viewRegistry.js.map +1 -1
  123. package/dist/stores/app.d.ts +0 -12
  124. package/dist/stores/app.js +11 -12
  125. package/dist/stores/app.js.map +1 -1
  126. package/dist/stores/tabs.js.map +1 -1
  127. package/dist/stores/user.d.ts +10 -0
  128. package/dist/stores/user.js.map +1 -1
  129. package/dist/style.css +1 -1
  130. package/dist/theme/accentTokens.d.ts +27 -0
  131. package/dist/theme/accentTokens.js +54 -0
  132. package/dist/theme/accentTokens.js.map +1 -0
  133. package/dist/theme/accents.d.ts +21 -1
  134. package/dist/theme/accents.js +11 -2
  135. package/dist/theme/accents.js.map +1 -1
  136. package/dist/theme/mix.d.ts +58 -7
  137. package/dist/theme/mix.js +115 -30
  138. package/dist/theme/mix.js.map +1 -1
  139. package/dist/theme/naive-theme.d.ts +5 -2
  140. package/dist/theme/naive-theme.js +405 -75
  141. package/dist/theme/naive-theme.js.map +1 -1
  142. package/dist/utils/jwt.d.ts +8 -0
  143. package/dist/utils/jwt.js +14 -0
  144. package/dist/utils/jwt.js.map +1 -0
  145. package/dist/utils/menuIcon.d.ts +2 -0
  146. package/dist/utils/menuIcon.js +8 -0
  147. package/dist/utils/menuIcon.js.map +1 -0
  148. package/dist/utils/oauthBrand.js.map +1 -1
  149. package/dist/utils/tableFilter.d.ts +88 -0
  150. package/dist/utils/tableFilter.js +116 -0
  151. package/dist/utils/tableFilter.js.map +1 -0
  152. package/dist/utils/tableToolbar.d.ts +18 -0
  153. package/dist/utils/tableToolbar.js +11 -0
  154. package/dist/utils/tableToolbar.js.map +1 -0
  155. package/dist/utils/treeFilter.d.ts +20 -0
  156. package/dist/utils/treeFilter.js +24 -0
  157. package/dist/utils/treeFilter.js.map +1 -0
  158. package/dist/views/dashboard/ShortcutPicker.vue.js +1 -1
  159. package/dist/views/dashboard/ShortcutPicker2.vue.js +73 -48
  160. package/dist/views/dashboard/ShortcutPicker2.vue.js.map +1 -1
  161. package/dist/views/dashboard/biz.vue.js +1 -1
  162. package/dist/views/dashboard/biz2.vue.js +310 -257
  163. package/dist/views/dashboard/biz2.vue.js.map +1 -1
  164. package/dist/views/dashboard/workbench.vue.js +2 -2
  165. package/dist/views/dashboard/workbench2.vue.js +141 -155
  166. package/dist/views/dashboard/workbench2.vue.js.map +1 -1
  167. package/dist/views/embed/iframe.vue.js +2 -2
  168. package/dist/views/embed/iframe2.vue.js +22 -15
  169. package/dist/views/embed/iframe2.vue.js.map +1 -1
  170. package/dist/views/error/404.vue.js +2 -2
  171. package/dist/views/error/4042.vue.js +33 -24
  172. package/dist/views/error/4042.vue.js.map +1 -1
  173. package/dist/views/error/BootError.vue.js +1 -1
  174. package/dist/views/error/BootError2.vue.js +59 -48
  175. package/dist/views/error/BootError2.vue.js.map +1 -1
  176. package/dist/views/error/MissingRoute.vue.js +2 -2
  177. package/dist/views/error/MissingRoute2.vue.js +34 -15
  178. package/dist/views/error/MissingRoute2.vue.js.map +1 -1
  179. package/dist/views/login/LoginForm.vue.d.ts +7 -1
  180. package/dist/views/login/LoginForm.vue.js +2 -2
  181. package/dist/views/login/LoginForm2.vue.js +580 -488
  182. package/dist/views/login/LoginForm2.vue.js.map +1 -1
  183. package/dist/views/login/components/LoginDesk.vue.d.ts +36 -0
  184. package/dist/views/login/components/LoginDesk.vue.js +9 -0
  185. package/dist/views/login/components/LoginDesk.vue.js.map +1 -0
  186. package/dist/views/login/components/LoginDesk2.vue.js +100 -0
  187. package/dist/views/login/components/LoginDesk2.vue.js.map +1 -0
  188. package/dist/views/login/components/LoginHeroPanel.vue.js +3 -3
  189. package/dist/views/login/components/LoginHeroPanel2.vue.js +34 -39
  190. package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -1
  191. package/dist/views/login/index.vue.js +1 -1
  192. package/dist/views/login/index2.vue.js +141 -71
  193. package/dist/views/login/index2.vue.js.map +1 -1
  194. package/dist/views/login/layout.d.ts +11 -0
  195. package/dist/views/login/layout.js +27 -0
  196. package/dist/views/login/layout.js.map +1 -0
  197. package/dist/views/mfa/index.vue.js +2 -2
  198. package/dist/views/mfa/index2.vue.js +367 -321
  199. package/dist/views/mfa/index2.vue.js.map +1 -1
  200. package/dist/views/module/index.vue.js +2 -2
  201. package/dist/views/module/index2.vue.js +132 -99
  202. package/dist/views/module/index2.vue.js.map +1 -1
  203. package/dist/views/oauth/callback.vue.js +2 -2
  204. package/dist/views/oauth/callback2.vue.js +65 -51
  205. package/dist/views/oauth/callback2.vue.js.map +1 -1
  206. package/dist/views/personal/bindings.vue.js +2 -2
  207. package/dist/views/personal/bindings2.vue.js +98 -94
  208. package/dist/views/personal/bindings2.vue.js.map +1 -1
  209. package/dist/views/personal/notice2.vue.js +103 -76
  210. package/dist/views/personal/notice2.vue.js.map +1 -1
  211. package/dist/views/personal/password2.vue.js +47 -40
  212. package/dist/views/personal/password2.vue.js.map +1 -1
  213. package/dist/views/personal/profile.vue.js +3 -3
  214. package/dist/views/personal/profile2.vue.js +24 -18
  215. package/dist/views/personal/profile2.vue.js.map +1 -1
  216. package/dist/views/personal/security.vue.js +2 -2
  217. package/dist/views/personal/security2.vue.js +65 -53
  218. package/dist/views/personal/security2.vue.js.map +1 -1
  219. package/dist/views/personal/sessions.vue.js +2 -2
  220. package/dist/views/personal/sessions2.vue.js +67 -62
  221. package/dist/views/personal/sessions2.vue.js.map +1 -1
  222. package/dist/views/system/ai-model/components/ProviderCard.vue.js +2 -2
  223. package/dist/views/system/ai-model/components/ProviderCard2.vue.js +142 -130
  224. package/dist/views/system/ai-model/components/ProviderCard2.vue.js.map +1 -1
  225. package/dist/views/system/ai-model/components/ProviderForm.vue.js +2 -2
  226. package/dist/views/system/ai-model/components/ProviderForm2.vue.js +71 -70
  227. package/dist/views/system/ai-model/components/ProviderForm2.vue.js.map +1 -1
  228. package/dist/views/system/ai-model/index.vue.js +2 -2
  229. package/dist/views/system/ai-model/index2.vue.js +99 -99
  230. package/dist/views/system/ai-model/index2.vue.js.map +1 -1
  231. package/dist/views/system/ai-model/presets.d.ts +1 -1
  232. package/dist/views/system/ai-model/presets.js +18 -18
  233. package/dist/views/system/ai-model/presets.js.map +1 -1
  234. package/dist/views/system/ai-usage/index.vue.js +2 -2
  235. package/dist/views/system/ai-usage/index2.vue.js +356 -258
  236. package/dist/views/system/ai-usage/index2.vue.js.map +1 -1
  237. package/dist/views/system/api-docs/index.vue.js +5 -2
  238. package/dist/views/system/api-docs/index.vue.js.map +1 -1
  239. package/dist/views/system/api-docs/index2.vue.js +92 -42
  240. package/dist/views/system/api-docs/index2.vue.js.map +1 -1
  241. package/dist/views/system/cache/index.vue.js +2 -2
  242. package/dist/views/system/cache/index2.vue.js +74 -80
  243. package/dist/views/system/cache/index2.vue.js.map +1 -1
  244. package/dist/views/system/config/components/AdminMock.vue.js +2 -2
  245. package/dist/views/system/config/components/AdminMock2.vue.js +60 -43
  246. package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -1
  247. package/dist/views/system/config/components/AdvancedSection.vue.js +5 -2
  248. package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -1
  249. package/dist/views/system/config/components/AdvancedSection2.vue.js +98 -70
  250. package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -1
  251. package/dist/views/system/config/components/BrandSection.vue.js +2 -2
  252. package/dist/views/system/config/components/BrandSection2.vue.js +121 -119
  253. package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -1
  254. package/dist/views/system/config/components/CfgGroup.vue.js +3 -3
  255. package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -1
  256. package/dist/views/system/config/components/CfgRow.vue.js +1 -1
  257. package/dist/views/system/config/components/CfgRow2.vue.js +24 -23
  258. package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -1
  259. package/dist/views/system/config/components/CfgSegment.vue.js +1 -1
  260. package/dist/views/system/config/components/CfgSegment2.vue.js +16 -15
  261. package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -1
  262. package/dist/views/system/config/components/ConfigFormModal.vue.js +2 -2
  263. package/dist/views/system/config/components/ConfigFormModal2.vue.js +35 -33
  264. package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
  265. package/dist/views/system/config/components/JobSection.vue.js +2 -2
  266. package/dist/views/system/config/components/JobSection2.vue.js +46 -44
  267. package/dist/views/system/config/components/JobSection2.vue.js.map +1 -1
  268. package/dist/views/system/config/components/LoginMock.vue.js +3 -3
  269. package/dist/views/system/config/components/LoginMock2.vue.js +83 -72
  270. package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -1
  271. package/dist/views/system/config/components/LogoCropper.vue.js +1 -1
  272. package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -1
  273. package/dist/views/system/config/components/LogoEditor.vue.js +2 -2
  274. package/dist/views/system/config/components/LogoEditor2.vue.js +11 -13
  275. package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -1
  276. package/dist/views/system/config/components/ProviderSheet.vue.js +3 -3
  277. package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -1
  278. package/dist/views/system/config/components/SectionLayout.vue.d.ts +4 -2
  279. package/dist/views/system/config/components/SectionLayout.vue.js +2 -2
  280. package/dist/views/system/config/components/SectionLayout2.vue.js +51 -27
  281. package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -1
  282. package/dist/views/system/config/components/SecuritySection.vue.js +2 -2
  283. package/dist/views/system/config/components/SecuritySection2.vue.js +207 -206
  284. package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -1
  285. package/dist/views/system/config/components/SensitiveSection.vue.js +2 -2
  286. package/dist/views/system/config/components/SensitiveSection2.vue.js +107 -102
  287. package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -1
  288. package/dist/views/system/config/components/UploadSection.vue.js +2 -2
  289. package/dist/views/system/config/components/UploadSection2.vue.js +86 -77
  290. package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -1
  291. package/dist/views/system/config/components/WatermarkSection.vue.js +8 -0
  292. package/dist/views/system/config/components/WatermarkSection.vue.js.map +1 -0
  293. package/dist/views/system/config/components/WatermarkSection2.vue.js +284 -0
  294. package/dist/views/system/config/components/WatermarkSection2.vue.js.map +1 -0
  295. package/dist/views/system/config/draft.d.ts +2 -2
  296. package/dist/views/system/config/draft.js.map +1 -1
  297. package/dist/views/system/config/groups.d.ts +4 -1
  298. package/dist/views/system/config/groups.js +54 -49
  299. package/dist/views/system/config/groups.js.map +1 -1
  300. package/dist/views/system/config/index.vue.js +3 -2
  301. package/dist/views/system/config/index.vue.js.map +1 -1
  302. package/dist/views/system/config/index2.vue.js +173 -148
  303. package/dist/views/system/config/index2.vue.js.map +1 -1
  304. package/dist/views/system/config/layoutMode.d.ts +23 -0
  305. package/dist/views/system/config/layoutMode.js +28 -0
  306. package/dist/views/system/config/layoutMode.js.map +1 -0
  307. package/dist/views/system/dict/index.vue.js +2 -2
  308. package/dist/views/system/dict/index2.vue.js +471 -366
  309. package/dist/views/system/dict/index2.vue.js.map +1 -1
  310. package/dist/views/system/file/index2.vue.js +91 -76
  311. package/dist/views/system/file/index2.vue.js.map +1 -1
  312. package/dist/views/system/job/index.vue.js +3 -3
  313. package/dist/views/system/job/index2.vue.js +897 -828
  314. package/dist/views/system/job/index2.vue.js.map +1 -1
  315. package/dist/views/system/job-log/components/AttemptTable.vue.d.ts +8 -0
  316. package/dist/views/system/job-log/components/AttemptTable.vue.js +5 -0
  317. package/dist/views/system/job-log/components/AttemptTable.vue.js.map +1 -0
  318. package/dist/views/system/job-log/components/AttemptTable2.vue.js +54 -0
  319. package/dist/views/system/job-log/components/AttemptTable2.vue.js.map +1 -0
  320. package/dist/views/system/job-log/index.vue.js +2 -2
  321. package/dist/views/system/job-log/index2.vue.js +193 -207
  322. package/dist/views/system/job-log/index2.vue.js.map +1 -1
  323. package/dist/views/system/job-log/runStatus.d.ts +13 -0
  324. package/dist/views/system/job-log/runStatus.js +26 -0
  325. package/dist/views/system/job-log/runStatus.js.map +1 -0
  326. package/dist/views/system/job-monitor/index.vue.js +2 -2
  327. package/dist/views/system/job-monitor/index2.vue.js +172 -180
  328. package/dist/views/system/job-monitor/index2.vue.js.map +1 -1
  329. package/dist/views/system/log/exception/index.vue.js +2 -2
  330. package/dist/views/system/log/exception/index2.vue.js +135 -96
  331. package/dist/views/system/log/exception/index2.vue.js.map +1 -1
  332. package/dist/views/system/log/login/index2.vue.js +62 -41
  333. package/dist/views/system/log/login/index2.vue.js.map +1 -1
  334. package/dist/views/system/log/op/index.vue.js +2 -2
  335. package/dist/views/system/log/op/index2.vue.js +200 -162
  336. package/dist/views/system/log/op/index2.vue.js.map +1 -1
  337. package/dist/views/system/menu/components/ButtonManager.vue.js +2 -2
  338. package/dist/views/system/menu/components/ButtonManager2.vue.js +206 -190
  339. package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -1
  340. package/dist/views/system/menu/components/MenuFormModal.vue.js +2 -2
  341. package/dist/views/system/menu/components/MenuFormModal2.vue.js +127 -118
  342. package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -1
  343. package/dist/views/system/menu/index.vue.js +1 -1
  344. package/dist/views/system/menu/index2.vue.js +216 -183
  345. package/dist/views/system/menu/index2.vue.js.map +1 -1
  346. package/dist/views/system/module/index.vue.js +1 -1
  347. package/dist/views/system/module/index2.vue.js +177 -144
  348. package/dist/views/system/module/index2.vue.js.map +1 -1
  349. package/dist/views/system/monitor/index.vue.js +2 -2
  350. package/dist/views/system/monitor/index2.vue.js +134 -149
  351. package/dist/views/system/monitor/index2.vue.js.map +1 -1
  352. package/dist/views/system/notice/index.vue.js +1 -1
  353. package/dist/views/system/notice/index2.vue.js +209 -181
  354. package/dist/views/system/notice/index2.vue.js.map +1 -1
  355. package/dist/views/system/org/index.vue.js +1 -1
  356. package/dist/views/system/org/index2.vue.js +278 -248
  357. package/dist/views/system/org/index2.vue.js.map +1 -1
  358. package/dist/views/system/position/index.vue.js +5 -2
  359. package/dist/views/system/position/index.vue.js.map +1 -1
  360. package/dist/views/system/position/index2.vue.js +128 -92
  361. package/dist/views/system/position/index2.vue.js.map +1 -1
  362. package/dist/views/system/recycle/index.vue.js +2 -2
  363. package/dist/views/system/recycle/index2.vue.js +90 -67
  364. package/dist/views/system/recycle/index2.vue.js.map +1 -1
  365. package/dist/views/system/role/components/GrantMenuSheet.vue.d.ts +20 -0
  366. package/dist/views/system/role/components/GrantMenuSheet.vue.js +8 -0
  367. package/dist/views/system/role/components/GrantMenuSheet.vue.js.map +1 -0
  368. package/dist/views/system/role/components/GrantMenuSheet2.vue.js +117 -0
  369. package/dist/views/system/role/components/GrantMenuSheet2.vue.js.map +1 -0
  370. package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +6 -4
  371. package/dist/views/system/role/components/GrantMenuTable.vue.js +2 -2
  372. package/dist/views/system/role/components/GrantMenuTable2.vue.js +279 -177
  373. package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -1
  374. package/dist/views/system/role/components/MatchText.vue.d.ts +7 -0
  375. package/dist/views/system/role/components/MatchText.vue.js +8 -0
  376. package/dist/views/system/role/components/MatchText.vue.js.map +1 -0
  377. package/dist/views/system/role/components/MatchText2.vue.js +29 -0
  378. package/dist/views/system/role/components/MatchText2.vue.js.map +1 -0
  379. package/dist/views/system/role/components/grantMenuGroups.d.ts +36 -0
  380. package/dist/views/system/role/components/grantMenuGroups.js +110 -48
  381. package/dist/views/system/role/components/grantMenuGroups.js.map +1 -1
  382. package/dist/views/system/role/index.vue.js +5 -2
  383. package/dist/views/system/role/index.vue.js.map +1 -1
  384. package/dist/views/system/role/index2.vue.js +181 -165
  385. package/dist/views/system/role/index2.vue.js.map +1 -1
  386. package/dist/views/system/session/index2.vue.js +75 -49
  387. package/dist/views/system/session/index2.vue.js.map +1 -1
  388. package/dist/views/system/user/components/ResetPasswordModal.vue.js +2 -2
  389. package/dist/views/system/user/components/ResetPasswordModal2.vue.js +2 -0
  390. package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -1
  391. package/dist/views/system/user/components/UserFormModal.vue.js +2 -2
  392. package/dist/views/system/user/components/UserFormModal2.vue.js +77 -76
  393. package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -1
  394. package/dist/views/system/user/index.vue.js +2 -2
  395. package/dist/views/system/user/index2.vue.js +362 -275
  396. package/dist/views/system/user/index2.vue.js.map +1 -1
  397. package/package.json +3 -5
  398. package/dist/components/SelectTable/index.vue.d.ts +0 -76
  399. package/dist/components/SelectTable/index2.vue.js +0 -256
  400. package/dist/components/SelectTable/index2.vue.js.map +0 -1
  401. package/dist/composables/useTableRowSort.d.ts +0 -20
  402. package/dist/composables/useTableRowSort.js +0 -59
  403. package/dist/composables/useTableRowSort.js.map +0 -1
  404. package/dist/layouts/LayoutModeCards.vue.js +0 -8
  405. package/dist/layouts/LayoutModeCards.vue.js.map +0 -1
  406. package/dist/layouts/LayoutModeCards2.vue.js +0 -67
  407. package/dist/layouts/LayoutModeCards2.vue.js.map +0 -1
  408. package/dist/layouts/SettingRow.vue.d.ts +0 -16
  409. package/dist/layouts/SettingRow.vue.js +0 -8
  410. package/dist/layouts/SettingRow.vue.js.map +0 -1
  411. package/dist/layouts/SettingRow2.vue.js +0 -23
  412. package/dist/layouts/SettingRow2.vue.js.map +0 -1
  413. package/dist/views/login/skins/AuroraGlass.vue.js +0 -8
  414. package/dist/views/login/skins/AuroraGlass.vue.js.map +0 -1
  415. package/dist/views/login/skins/AuroraGlass2.vue.js +0 -80
  416. package/dist/views/login/skins/AuroraGlass2.vue.js.map +0 -1
  417. package/dist/views/login/skins/SplitPanel.vue.d.ts +0 -3
  418. package/dist/views/login/skins/SplitPanel.vue.js +0 -8
  419. package/dist/views/login/skins/SplitPanel.vue.js.map +0 -1
  420. package/dist/views/login/skins/SplitPanel2.vue.js +0 -65
  421. package/dist/views/login/skins/SplitPanel2.vue.js.map +0 -1
  422. package/dist/views/login/skins/Spotlight.vue.d.ts +0 -3
  423. package/dist/views/login/skins/Spotlight.vue.js +0 -8
  424. package/dist/views/login/skins/Spotlight.vue.js.map +0 -1
  425. package/dist/views/login/skins/Spotlight2.vue.js +0 -36
  426. package/dist/views/login/skins/Spotlight2.vue.js.map +0 -1
  427. package/dist/views/login/skins.d.ts +0 -8
  428. package/dist/views/login/skins.js +0 -13
  429. package/dist/views/login/skins.js.map +0 -1
  430. /package/dist/components/{SelectTable → TableTotal}/index.vue.js.map +0 -0
  431. /package/dist/layouts/{LayoutModeCards.vue.d.ts → AccentPicker.vue.d.ts} +0 -0
  432. /package/dist/views/{login/skins/AuroraGlass.vue.d.ts → system/config/components/WatermarkSection.vue.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/org/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 机构管理 = 树表:SmartTable 静态数据 + children 树模式(无分页)。\n// org list 平铺 → buildTree 拼 children;上级机构用 OrgTreeSelect(剪自身子树防成环);\n// 无独立启停端点,StatusSwitch 走全量 update;删除有子机构后端拒,前端照调由 translateError 弹码。\nimport { computed, h, onMounted, reactive, ref, shallowRef, watch } from 'vue'\nimport {\n NButton,\n NSpace,\n NForm,\n NFormItem,\n NInput,\n NInputNumber,\n NSwitch,\n NDropdown,\n NModal,\n NCard,\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 DictSelect from '#/components/DictSelect/index.vue'\nimport DictTag from '#/components/DictTag/index.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport OrgTreeSelect from '#/components/OrgTreeSelect/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { orgApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { translateError } from '#/utils/error'\nimport { buildTree, expandableIds, filterTree, type Tree } from '#/utils/tree'\nimport type { OrgInput, SysOrg } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run, confirm } = useConfirm()\nconst authStore = useAuthStore()\n\nconst loading = ref(false)\n// 整份替换 + 只读(行内改动一律重拉 load(),不往节点上写值),不需要深响应\nconst tree = shallowRef<Tree<SysOrg>[]>([])\n\nasync function load() {\n loading.value = true\n try {\n tree.value = buildTree(await orgApi.list())\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\nonMounted(load)\n\n// ── 搜索 + 展开控制 ───────────────────────────────────────────────\n// SmartTable 静态 data 模式不做任何前端过滤(它只在 fetcher 模式下发请求),所以过滤得自己算。\n// 关键字放 #toolbar 而不是用列的 search 配置:树表没有分页,搜索卡片会白占一整块高度。\nconst keyword = ref('')\nconst filteredTree = computed(() => {\n const kw = keyword.value.trim().toLowerCase()\n if (!kw) return tree.value\n return filterTree(\n tree.value,\n n => n.name.toLowerCase().includes(kw) || n.code.toLowerCase().includes(kw),\n )\n})\n\n// 展开受控:一旦传了 expanded-row-keys,naive 就以它为准,default-expand-all 会被初始值直接覆盖成\"全折叠\",\n// 所以\"默认全展开\"得自己播种。data 变了受控 keys 也不会自动跟着变 —— 搜索后要重算,否则命中结果藏在折叠的祖先里看不见。\nconst expandedKeys = ref<number[]>([])\nwatch(filteredTree, next => (expandedKeys.value = expandableIds(next)), { immediate: true })\n\nconst allExpanded = computed(() => expandedKeys.value.length > 0)\nconst toggleExpandAll = () =>\n (expandedKeys.value = allExpanded.value ? [] : expandableIds(filteredTree.value))\n\n// ── 弹窗表单(parentId 可空:OrgTreeSelect clearable → null,save 时归一为 0=根)──\ninterface OrgForm {\n parentId: number | null\n name: string\n code: string\n category: string | null\n sort: number\n enabled: boolean\n}\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n name: {\n required: true,\n whitespace: true,\n message: () => t('org.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): OrgForm => ({\n parentId: 0,\n name: '',\n code: '',\n category: null,\n sort: 0,\n enabled: true,\n})\nconst form = reactive<OrgForm>(blank())\n\n// 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。\nconst toInput = (r: SysOrg): OrgInput => ({\n parentId: r.parentId,\n name: r.name,\n code: r.code,\n category: r.category ?? null,\n sort: r.sort,\n enabled: r.enabled,\n})\n\nfunction openAdd(parentId = 0) {\n editingId.value = null\n Object.assign(form, blank(), { parentId })\n show.value = true\n}\nfunction openEdit(r: SysOrg) {\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 const payload: OrgInput = { ...form, parentId: form.parentId ?? 0 }\n if (editingId.value === null) await orgApi.add(payload)\n else await orgApi.update(editingId.value, payload)\n message.success(t('org.saved'))\n await load()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n\n// ── 复制弹窗 ──────────────────────────────────────────────────────\nconst copyShow = ref(false)\nconst copyId = ref(0)\nconst copySourceName = ref('')\nconst copyName = ref('')\n\nfunction openCopy(r: SysOrg) {\n copyId.value = r.id\n copySourceName.value = r.name\n copyName.value = r.name + t('common.copySuffix')\n copyShow.value = true\n}\nasync function confirmCopy() {\n const ok = await run(() => orgApi.copy(copyId.value, { name: copyName.value }), t('org.copied'))\n if (ok) {\n copyShow.value = false\n load()\n }\n}\n\n/** 删除:下拉菜单项不适合内联 popconfirm,走 useConfirm().confirm 的 dialog(它的设计用途)。 */\nconst onDelete = (r: SysOrg) =>\n confirm({\n content: t('org.deleteConfirm', { name: r.name }),\n type: 'error',\n action: () => orgApi.remove(r.id),\n successMsg: t('org.deleted'),\n }).then(ok => {\n if (ok) load()\n })\n\nconst columns: SmartTableColumn<Tree<SysOrg>>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n // 树列左对齐,展开缩进才好读;fixed 是为了横向滚动时不丢失「这是哪一行」。\n {\n title: () => t('org.name'),\n key: 'name',\n align: 'left',\n minWidth: 220,\n fixed: 'left',\n ellipsis: { tooltip: true },\n },\n { title: () => t('org.code'), key: 'code', ellipsis: { tooltip: true } },\n {\n title: () => t('org.category'),\n key: 'category',\n width: 100,\n render: r => h(DictTag, { typeCode: 'org_category', value: r.category }),\n },\n { title: () => t('org.sort'), key: 'sort', width: 80 },\n {\n title: () => t('common.status'),\n key: 'enabled',\n width: 90,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n disabled: !authStore.hasPerm('PUT:/api/v1/sys/org/{id}'),\n request: (next: boolean) => orgApi.update(r.id, { ...toInput(r), enabled: next }),\n // 重拉而非往行对象上写:搜索态下的祖先行是 filterTree 的浅拷贝,写它不会回到源树(开关会弹回去)。\n // StatusSwitch 是悲观更新(请求成功才 emit),所以这里重拉一次就是最终态,和本页其余变更的做法一致。\n 'onUpdate:value': () => load(),\n }),\n },\n // 操作收敛成「编辑 + 更多▾」:4 个操作塞 260px 会换行、行高参差,且没 fixed 时横向滚动够不着。\n {\n title: () => t('common.operation'),\n key: 'op',\n width: 150,\n fixed: 'right',\n render: r => {\n // 每个操作按各自权限码显隐;更多▾下拉只保留已授权项,全无则不出下拉。\n const dropdownOptions = [\n authStore.hasPerm('POST:/api/v1/sys/org/add')\n ? { key: 'addChild', label: t('org.addChild') }\n : null,\n authStore.hasPerm('POST:/api/v1/sys/org/{id}/copy')\n ? { key: 'copy', label: t('org.copy') }\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/org/{id}')\n ? { key: 'delete', label: t('common.delete') }\n : null,\n ].filter((o): o is { key: string; label: string } => o !== null)\n return h(NSpace, { size: 2, wrapItem: false, justify: 'center' }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/org/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n dropdownOptions.length\n ? h(\n NDropdown,\n {\n trigger: 'click',\n options: dropdownOptions,\n onSelect: (key: string) => {\n if (key === 'addChild') openAdd(r.id)\n else if (key === 'copy') openCopy(r)\n else onDelete(r)\n },\n },\n () => h(NButton, { size: 'small', quaternary: true }, () => t('common.more')),\n )\n : null,\n ])\n },\n },\n]\n</script>\n\n<template>\n <div class=\"view fill-page\">\n <!-- expanded-row-keys / update:expanded-row-keys 不是 SmartTable 的 prop —— 它 inheritAttrs:false + v-bind=\"attrs\",\n 未声明的 attr 原样透传给内层 n-data-table(:loading 走的也是这条路)。 -->\n <SmartTable\n :default-page-size=\"100\"\n :columns=\"columns\"\n :data=\"filteredTree\"\n :loading=\"loading\"\n row-key=\"id\"\n :pagination=\"false\"\n :toolbar=\"{ refresh: false }\"\n flex-height\n virtual-scroll\n storage-key=\"sys-org\"\n :expanded-row-keys=\"expandedKeys\"\n @update:expanded-row-keys=\"(keys: number[]) => (expandedKeys = keys)\"\n >\n <template #toolbar>\n <n-input\n v-model:value=\"keyword\"\n clearable\n :placeholder=\"t('org.searchPlaceholder')\"\n style=\"width: 220px\"\n >\n <template #prefix><AppIcon icon=\"ph:magnifying-glass\" :size=\"16\" /></template>\n </n-input>\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 quaternary @click=\"toggleExpandAll\">\n <template #icon>\n <AppIcon\n :icon=\"allExpanded ? 'ph:arrows-in-line-vertical' : 'ph:arrows-out-line-vertical'\"\n :size=\"16\"\n />\n </template>\n {{ allExpanded ? t('common.collapseAll') : t('common.expandAll') }}\n </n-button>\n <n-button v-auth=\"'POST:/api/v1/sys/org/add'\" type=\"primary\" @click=\"openAdd(0)\">\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('org.addTitle') : t('org.editTitle')\"\n :width=\"480\"\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=\"80\">\n <n-form-item :label=\"t('org.parent')\">\n <OrgTreeSelect\n v-model:value=\"form.parentId\"\n clearable\n :exclude-subtree-of=\"editingId\"\n :placeholder=\"t('org.parentPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('org.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('org.code')\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('org.codePlaceholder')\"\n :disabled=\"editingId !== null\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.category')\">\n <DictSelect\n v-model:value=\"form.category\"\n type-code=\"org_category\"\n clearable\n :placeholder=\"t('org.categoryPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.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>\n </FormContainer>\n\n <n-modal v-model:show=\"copyShow\" :mask-closable=\"false\">\n <n-card\n :title=\"t('org.copyTitle')\"\n style=\"width: 420px\"\n :bordered=\"false\"\n closable\n @close=\"copyShow = false\"\n >\n <p style=\"margin: 0 0 12px\">{{ t('org.copyConfirm', { name: copySourceName }) }}</p>\n <n-input v-model:value=\"copyName\" :placeholder=\"t('org.copyNameLabel')\" />\n <template #action>\n <n-space justify=\"end\">\n <n-button @click=\"copyShow = false\">{{ t('common.cancel') }}</n-button>\n <n-button type=\"primary\" @click=\"confirmCopy\">{{ t('common.confirm') }}</n-button>\n </n-space>\n </template>\n </n-card>\n </n-modal>\n </div>\n</template>\n\n<style scoped>\n/* display / flex-direction / 整屏高度链都在 styles/layout.css 的 .fill-page,这里只留卡片间距。 */\n.view {\n gap: var(--gap-card);\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","run","confirm","useConfirm","authStore","useAuthStore","loading","ref","tree","shallowRef","load","buildTree","orgApi","e","translateError","onMounted","keyword","filteredTree","computed","kw","filterTree","n","expandedKeys","watch","next","expandableIds","allExpanded","toggleExpandAll","show","formRef","editingId","rules","blank","form","reactive","toInput","r","openAdd","parentId","openEdit","save","_a","payload","copyShow","copyId","copySourceName","copyName","openCopy","confirmCopy","onDelete","ok","columns","h","DictTag","StatusSwitch","dropdownOptions","o","NSpace","NButton","NDropdown","key","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","SmartTable","_cache","keys","NInput","$event","AppIcon","_createTextVNode","_toDisplayString","_createBlock","FormContainer","NForm","NFormItem","OrgTreeSelect","DictSelect","NInputNumber","NSwitch","NModal","NCard","_createElementVNode","_hoisted_2"],"mappings":"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"}
1
+ {"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/org/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 机构管理 = 树表:SmartTable 远程模式(fetcher)+ children 树模式(无分页)。\n// org list 平铺 → buildTree 拼 children;上级机构用 OrgTreeSelect(剪自身子树防成环);\n// 无独立启停端点,StatusSwitch 走全量 update;删除有子机构后端拒,前端照调由 translateError 弹码。\nimport { computed, h, reactive, ref, shallowRef } from 'vue'\nimport {\n NButton,\n NSpace,\n NForm,\n NFormItem,\n NInput,\n NInputNumber,\n NSwitch,\n NDropdown,\n NModal,\n useMessage,\n type DropdownDividerOption,\n type DropdownOption,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport {\n SmartTable,\n type SmartTableColumn,\n type SmartTableFetcher,\n type SmartTableInst,\n} from 'smart-naive-table'\nimport { useI18n } from 'vue-i18n'\nimport AppIcon from '#/components/AppIcon.vue'\nimport DictSelect from '#/components/DictSelect/index.vue'\nimport DictTag from '#/components/DictTag/index.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport OrgTreeSelect from '#/components/OrgTreeSelect/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { orgApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { translateError } from '#/utils/error'\nimport { SEARCH_ACTIONS, deriveHeaderFilters } from '#/utils/tableFilter'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport { buildTree, expandableIds, type Tree } from '#/utils/tree'\nimport { filterTreeByParams, type TreeSearchFields } from '#/utils/treeFilter'\nimport type { OrgInput, SysOrg } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run, confirm } = useConfirm()\nconst authStore = useAuthStore()\n\nconst loading = ref(false)\n// 整份替换 + 只读(行内改动一律重拉,不往节点上写值),不需要深响应\nconst tree = shallowRef<Tree<SysOrg>[]>([])\n\n/** 从服务端拉全量机构并拼成树。只由 treeFetcher 调用:增删改后一律走 `reload()`(让表格重新取数),不要直接调它。 */\nasync function load() {\n loading.value = true\n try {\n tree.value = buildTree(await orgApi.list())\n } catch (e) {\n message.error(translateError(e))\n } finally {\n loading.value = false\n }\n}\n\n// ── 取数 + 搜索 + 展开控制 ─────────────────────────────────────────\n// 树表用远程模式:3.0 静态模式的条件过滤是平铺的 rows.filter,不递归 children,在树上只会命中顶层行。\n// 所以 fetcher 自己递归过滤,条件构造器只负责收集条件(全局序列化器摊平成 { name, code })。\n// 取数器每次都重新拉一遍服务端:工具栏内置的刷新图标只会重新调 fetcher,\n// 如果这里只过滤内存里的旧树,点刷新就是假刷新(别人新建的机构永远出不来)。机构是全量小表,多拉一次无所谓。\n// 首次进入也由它取数(immediate),所以页面不需要 onMounted(load),也就没有「树还没加载就先过滤出空表」的窗口。\nconst tableRef = ref<SmartTableInst<Tree<SysOrg>>>()\nconst reload = () => tableRef.value?.refresh()\n\nconst SEARCH_FIELDS: TreeSearchFields<Tree<SysOrg>> = {\n name: n => n.name,\n code: n => n.code,\n}\nconst treeFetcher: SmartTableFetcher<Tree<SysOrg>> = async params => {\n await load()\n const items = filterTreeByParams(tree.value, params, SEARCH_FIELDS)\n return { items, total: items.length }\n}\n\n// 展开受控:一旦传了 expanded-row-keys,naive 就以它为准,default-expand-all 会被初始值直接覆盖成\"全折叠\",\n// 所以\"默认全展开\"得自己播种。每次取数完成(首次进入、搜索、清除条件、增删改后重拉)都按结果重算,\n// 否则命中结果藏在折叠的祖先里看不见 —— filterTree 保留的祖先链就是靠它全部展开的。\nconst expandedKeys = ref<number[]>([])\n// 取数器返回的(已过滤的)树:「展开全部」要按它算,而不是按整棵树。\nconst visibleTree = shallowRef<Tree<SysOrg>[]>([])\nfunction onLoaded(rows: Tree<SysOrg>[]) {\n visibleTree.value = rows\n expandedKeys.value = expandableIds(rows)\n}\n\nconst allExpanded = computed(() => expandedKeys.value.length > 0)\nconst toggleExpandAll = () =>\n (expandedKeys.value = allExpanded.value ? [] : expandableIds(visibleTree.value))\n\n// ── 弹窗表单(parentId 可空:OrgTreeSelect clearable → null,save 时归一为 0=根)──\ninterface OrgForm {\n parentId: number | null\n name: string\n code: string\n category: string | null\n sort: number\n enabled: boolean\n}\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n name: {\n required: true,\n whitespace: true,\n message: () => t('org.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): OrgForm => ({\n parentId: 0,\n name: '',\n code: '',\n category: null,\n sort: 0,\n enabled: true,\n})\nconst form = reactive<OrgForm>(blank())\n\n// 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。\nconst toInput = (r: SysOrg): OrgInput => ({\n parentId: r.parentId,\n name: r.name,\n code: r.code,\n category: r.category ?? null,\n sort: r.sort,\n enabled: r.enabled,\n})\n\nfunction openAdd(parentId = 0) {\n editingId.value = null\n Object.assign(form, blank(), { parentId })\n show.value = true\n}\nfunction openEdit(r: SysOrg) {\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 const payload: OrgInput = { ...form, parentId: form.parentId ?? 0 }\n if (editingId.value === null) await orgApi.add(payload)\n else await orgApi.update(editingId.value, payload)\n message.success(t('org.saved'))\n await reload()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n\n// ── 复制弹窗 ──────────────────────────────────────────────────────\nconst copyShow = ref(false)\nconst copyId = ref(0)\nconst copySourceName = ref('')\nconst copyName = ref('')\n\nfunction openCopy(r: SysOrg) {\n copyId.value = r.id\n copySourceName.value = r.name\n copyName.value = r.name + t('common.copySuffix')\n copyShow.value = true\n}\nasync function confirmCopy() {\n const ok = await run(() => orgApi.copy(copyId.value, { name: copyName.value }), t('org.copied'))\n if (ok) {\n copyShow.value = false\n reload()\n }\n}\n\n/** 删除:下拉菜单项不适合内联 popconfirm,走 useConfirm().confirm 的 dialog(它的设计用途)。 */\nconst onDelete = (r: SysOrg) =>\n confirm({\n content: t('org.deleteConfirm', { name: r.name }),\n type: 'error',\n action: () => orgApi.remove(r.id),\n successMsg: t('org.deleted'),\n }).then(ok => {\n if (ok) reload()\n })\n\n// 下拉菜单项的线条图标\nconst menuIcon = (name: string) => () => h(AppIcon, { icon: name, size: 16 })\n\nconst columns: SmartTableColumn<Tree<SysOrg>>[] = [\n // 序号与树列同固定左侧:固定列必须在最左连续,否则横向滚动时树列会压在序号列上。\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center', fixed: 'left' },\n // 树列左对齐,展开缩进才好读;fixed 是为了横向滚动时不丢失「这是哪一行」。\n {\n title: () => t('org.name'),\n key: 'name',\n align: 'left',\n minWidth: 260,\n fixed: 'left',\n ellipsis: { tooltip: true },\n search: { actions: SEARCH_ACTIONS.fuzzy },\n },\n {\n title: () => t('org.code'),\n key: 'code',\n ellipsis: { tooltip: true },\n render: r => h('span', { class: 'mono muted' }, r.code),\n search: { actions: SEARCH_ACTIONS.fuzzy },\n },\n {\n title: () => t('org.category'),\n key: 'category',\n width: 100,\n render: r => h(DictTag, { typeCode: 'org_category', value: r.category }),\n },\n {\n title: () => t('org.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 render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n disabled: !authStore.hasPerm('PUT:/api/v1/sys/org/{id}'),\n request: (next: boolean) => orgApi.update(r.id, { ...toInput(r), enabled: next }),\n // 重拉而非往行对象上写:搜索态下的祖先行是 filterTree 的浅拷贝,写它不会回到源树(开关会弹回去)。\n // StatusSwitch 是悲观更新(请求成功才 emit),所以这里重拉一次就是最终态,和本页其余变更的做法一致。\n 'onUpdate:value': () => reload(),\n }),\n },\n // 操作收敛成「编辑 + 更多▾」:4 个操作塞 260px 会换行、行高参差,且没 fixed 时横向滚动够不着。\n {\n title: () => t('common.operation'),\n key: 'op',\n width: 150,\n fixed: 'right',\n render: r => {\n // 每个操作按各自权限码显隐;更多▾下拉只保留已授权项,全无则不出下拉。\n // 菜单项带线条图标;删除是破坏性操作,前面隔一条分割线并用错误色。\n const canAdd = authStore.hasPerm('POST:/api/v1/sys/org/add')\n const canCopy = authStore.hasPerm('POST:/api/v1/sys/org/{id}/copy')\n const canDelete = authStore.hasPerm('DELETE:/api/v1/sys/org/{id}')\n const rawOptions: (DropdownOption | DropdownDividerOption | null)[] = [\n canAdd ? { key: 'addChild', label: t('org.addChild'), icon: menuIcon('ph:plus') } : null,\n canCopy ? { key: 'copy', label: t('org.copy'), icon: menuIcon('ph:copy') } : null,\n (canAdd || canCopy) && canDelete ? { type: 'divider', key: 'divider' } : null,\n canDelete\n ? {\n key: 'delete',\n label: t('common.delete'),\n icon: menuIcon('ph:trash'),\n props: { style: 'color: var(--err)' },\n }\n : null,\n ]\n const dropdownOptions = rawOptions.filter(\n (o): o is DropdownOption | DropdownDividerOption => o !== null,\n )\n return h(NSpace, { size: 2, wrapItem: false, justify: 'center' }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/org/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n dropdownOptions.length\n ? h(\n NDropdown,\n {\n trigger: 'click',\n options: dropdownOptions,\n onSelect: (key: string) => {\n if (key === 'addChild') openAdd(r.id)\n else if (key === 'copy') openCopy(r)\n else onDelete(r)\n },\n },\n () =>\n h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', iconPlacement: 'right' },\n {\n default: () => t('common.more'),\n icon: () => h(AppIcon, { icon: 'ph:caret-down', size: 12 }),\n },\n ),\n )\n : null,\n ])\n },\n },\n]\nderiveHeaderFilters(columns)\n</script>\n\n<template>\n <div class=\"view fill-page\">\n <!-- expanded-row-keys / update:expanded-row-keys 不是 SmartTable 的 prop —— 它 inheritAttrs:false + v-bind=\"attrs\",\n 未声明的 attr 原样透传给内层 n-data-table(:loading 走的也是这条路)。\n card-on-narrow:卡片宽 < 600 换成卡片列表(树的缩进与展开状态库照旧带上,expanded-row-keys 照常生效)。 -->\n <SmartTable\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"treeFetcher\"\n :loading=\"loading\"\n row-key=\"id\"\n :pagination=\"false\"\n :search=\"{ container: 'table' }\"\n :toolbar=\"TABLE_TOOLBAR\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"sys-org\"\n :expanded-row-keys=\"expandedKeys\"\n @update:expanded-row-keys=\"(keys: number[]) => (expandedKeys = keys)\"\n @loaded=\"onLoaded\"\n >\n <template #toolbar-right>\n <n-button secondary @click=\"toggleExpandAll\">\n <template #icon>\n <AppIcon\n :icon=\"allExpanded ? 'ph:arrows-in-line-vertical' : 'ph:arrows-out-line-vertical'\"\n :size=\"16\"\n />\n </template>\n {{ allExpanded ? t('common.collapseAll') : t('common.expandAll') }}\n </n-button>\n <n-button v-auth=\"'POST:/api/v1/sys/org/add'\" type=\"primary\" @click=\"openAdd(0)\">\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('org.addTitle') : t('org.editTitle')\"\n :width=\"480\"\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=\"80\">\n <n-form-item :label=\"t('org.parent')\">\n <OrgTreeSelect\n v-model:value=\"form.parentId\"\n clearable\n :exclude-subtree-of=\"editingId\"\n :placeholder=\"t('org.parentPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('org.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('org.code')\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('org.codePlaceholder')\"\n :disabled=\"editingId !== null\"\n />\n <template v-if=\"editingId !== null\" #feedback>\n <span class=\"form-hint\">{{ t('org.codeImmutableHint') }}</span>\n </template>\n </n-form-item>\n <n-form-item :label=\"t('org.category')\">\n <DictSelect\n v-model:value=\"form.category\"\n type-code=\"org_category\"\n clearable\n :placeholder=\"t('org.categoryPlaceholder')\"\n />\n </n-form-item>\n <n-form-item :label=\"t('org.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>\n </FormContainer>\n\n <!-- 复制机构:居中小弹窗,遮罩不可关,右上角 × 可关 -->\n <n-modal\n v-model:show=\"copyShow\"\n preset=\"card\"\n :title=\"t('org.copyTitle')\"\n style=\"width: min(420px, calc(100vw - 24px))\"\n :bordered=\"false\"\n :mask-closable=\"false\"\n :segmented=\"{ footer: 'soft' }\"\n >\n <p class=\"copy-tip\">{{ t('org.copyConfirm', { name: copySourceName }) }}</p>\n <n-form label-placement=\"top\" require-mark-placement=\"left\">\n <n-form-item :label=\"t('org.copyNameLabel')\">\n <n-input v-model:value=\"copyName\" :placeholder=\"t('org.copyNameLabel')\" />\n </n-form-item>\n </n-form>\n <template #footer>\n <n-space justify=\"end\">\n <n-button secondary @click=\"copyShow = false\">{{ t('common.cancel') }}</n-button>\n <n-button type=\"primary\" @click=\"confirmCopy\">{{ t('common.confirm') }}</n-button>\n </n-space>\n </template>\n </n-modal>\n </div>\n</template>\n\n<style scoped>\n/* display / flex-direction / 整屏高度链都在 styles/layout.css 的 .fill-page,这里只留卡片间距。 */\n.view {\n gap: var(--gap-card);\n}\n\n/* 编码「创建后不可修改」提示,挂在表单项的 feedback 位 */\n.form-hint {\n font-size: 13px;\n color: var(--text-3);\n}\n\n/* 复制弹窗说明文字 */\n.copy-tip {\n margin: 0 0 14px;\n font-size: 14px;\n line-height: 1.6;\n color: var(--text-2);\n}\n</style>\n"],"names":["t","useI18n","message","useMessage","run","confirm","useConfirm","authStore","useAuthStore","loading","ref","tree","shallowRef","load","buildTree","orgApi","translateError","tableRef","reload","_a","SEARCH_FIELDS","n","treeFetcher","params","items","filterTreeByParams","expandedKeys","visibleTree","onLoaded","rows","expandableIds","allExpanded","computed","toggleExpandAll","show","formRef","editingId","rules","blank","form","reactive","toInput","r","openAdd","parentId","openEdit","save","payload","e","copyShow","copyId","copySourceName","copyName","openCopy","confirmCopy","onDelete","ok","menuIcon","name","h","AppIcon","columns","SEARCH_ACTIONS","DictTag","StatusSwitch","next","canAdd","canCopy","canDelete","dropdownOptions","o","NSpace","NButton","NDropdown","key","deriveHeaderFilters","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_cache","keys","_createTextVNode","_toDisplayString","_createBlock","FormContainer","$event","NForm","NFormItem","OrgTreeSelect","NInput","_createElementVNode","_hoisted_2","DictSelect","NInputNumber","NSwitch","NModal","_hoisted_3"],"mappings":"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"}
@@ -1,5 +1,8 @@
1
- import f from "./index2.vue.js";
1
+ import o from "./index2.vue.js";
2
+ /* empty css */
3
+ import t from "../../../_virtual/_plugin-vue_export-helper.js";
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-73d8eaa2"]]);
2
5
  export {
3
- f as default
6
+ m as default
4
7
  };
5
8
  //# sourceMappingURL=index.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,60 +1,81 @@
1
- import { defineComponent as E, ref as c, reactive as q, resolveDirective as z, openBlock as _, createElementBlock as R, Fragment as B, createVNode as l, unref as e, withCtx as r, withDirectives as D, createBlock as A, createTextVNode as F, toDisplayString as O, h as m } from "vue";
2
- import { useMessage as $, NButton as y, NForm as j, NFormItem as f, NInput as N, NInputNumber as V, NSwitch as L, NSpace as M, NPopconfirm as G } from "naive-ui";
3
- import { useI18n as H } from "vue-i18n";
4
- import { SmartTable as J } from "smart-naive-table";
5
- import K from "../../../components/AppIcon.vue.js";
6
- import Q from "../../../components/FormContainer/index.vue.js";
1
+ import { defineComponent as R, ref as c, h as m, reactive as U, resolveDirective as B, openBlock as T, createElementBlock as O, Fragment as z, createVNode as r, unref as e, withCtx as l, withDirectives as q, createBlock as H, createTextVNode as D, toDisplayString as N, createSlots as F, createElementVNode as L } from "vue";
2
+ import { useMessage as j, NSpace as V, NButton as y, NPopconfirm as $, NForm as M, NFormItem as f, NInput as E, NInputNumber as G, NSwitch as W } from "naive-ui";
3
+ import { useI18n as J } from "vue-i18n";
4
+ import { SmartTable as K } from "smart-naive-table";
5
+ import Q from "../../../components/AppIcon.vue.js";
6
+ import X from "../../../components/FormContainer/index.vue.js";
7
7
  /* empty css */
8
- import W from "../../../components/StatusSwitch/index.vue.js";
9
- import { useConfirm as X } from "../../../composables/useConfirm.js";
8
+ import Y from "../../../components/StatusSwitch/index.vue.js";
9
+ import { useConfirm as Z } from "../../../composables/useConfirm.js";
10
10
  import { positionApi as u } from "../../../api/index.js";
11
- import { useAuthStore as Y } from "../../../stores/auth.js";
12
- import { translateError as x } from "../../../utils/error.js";
13
- const pe = /* @__PURE__ */ E({
11
+ import { useAuthStore as ee } from "../../../stores/auth.js";
12
+ import { translateError as I } from "../../../utils/error.js";
13
+ import { SEARCH_ACTIONS as te, deriveHeaderFilters as oe } from "../../../utils/tableFilter.js";
14
+ import { TABLE_MIN_ROW_HEIGHT as ae, TABLE_TOOLBAR as ie } from "../../../utils/tableToolbar.js";
15
+ import ne from "../../../components/TableTotal/index.vue.js";
16
+ const re = { class: "form-hint" }, Te = /* @__PURE__ */ R({
14
17
  __name: "index",
15
- setup(Z) {
16
- const { t } = H(), v = $(), { run: T } = X(), b = Y(), h = c(), w = (a) => ({
17
- name: a.name,
18
- code: a.code,
19
- sort: a.sort,
20
- enabled: a.enabled
21
- }), P = [
18
+ setup(le) {
19
+ const { t } = J(), v = j(), { run: x } = Z(), h = ee(), b = c(), g = (o) => ({
20
+ name: o.name,
21
+ code: o.code,
22
+ sort: o.sort,
23
+ enabled: o.enabled
24
+ }), w = [
22
25
  { type: "index", title: () => t("common.rowNo"), width: 64, align: "center" },
23
- { key: "name", title: () => t("position.name"), search: !0 },
24
- { key: "code", title: () => t("position.code") },
25
- { key: "sort", title: () => t("position.sort"), width: 80 },
26
+ {
27
+ key: "name",
28
+ title: () => t("position.name"),
29
+ search: { actions: te.fuzzy },
30
+ sorter: !0
31
+ },
32
+ {
33
+ key: "code",
34
+ title: () => t("position.code"),
35
+ sorter: !0,
36
+ render: (o) => m("span", { class: "mono muted" }, o.code)
37
+ },
38
+ {
39
+ key: "sort",
40
+ title: () => t("position.sort"),
41
+ width: 80,
42
+ sorter: !0,
43
+ render: (o) => m("span", { class: "num muted" }, o.sort)
44
+ },
26
45
  {
27
46
  key: "enabled",
28
47
  title: () => t("common.status"),
29
48
  width: 90,
30
- render: (a) => m(W, {
31
- value: a.enabled,
32
- disabled: !b.hasPerm("PUT:/api/v1/sys/position/{id}"),
33
- request: (o) => u.update(a.id, { ...w(a), enabled: o }),
34
- "onUpdate:value": (o) => {
35
- a.enabled = o;
49
+ sorter: !0,
50
+ render: (o) => m(Y, {
51
+ value: o.enabled,
52
+ disabled: !h.hasPerm("PUT:/api/v1/sys/position/{id}"),
53
+ request: (a) => u.update(o.id, { ...g(o), enabled: a }),
54
+ "onUpdate:value": (a) => {
55
+ o.enabled = a;
36
56
  }
37
57
  })
38
58
  },
39
- { key: "createTime", title: () => t("common.createTime"), format: "datetime" },
59
+ { key: "createTime", title: () => t("common.createTime"), format: "datetime", sorter: !0 },
40
60
  {
41
61
  key: "op",
42
62
  title: () => t("common.operation"),
43
63
  width: 140,
64
+ align: "right",
44
65
  fixed: "right",
45
66
  hideInSetting: !0,
46
- render: (a) => m(M, { size: 4, wrapItem: !1 }, () => [
47
- b.hasPerm("PUT:/api/v1/sys/position/{id}") ? m(
67
+ render: (o) => m(V, { size: 2, wrapItem: !1, justify: "end" }, () => [
68
+ h.hasPerm("PUT:/api/v1/sys/position/{id}") ? m(
48
69
  y,
49
- { size: "small", quaternary: !0, type: "primary", onClick: () => U(a) },
70
+ { size: "small", quaternary: !0, type: "primary", onClick: () => P(o) },
50
71
  () => t("common.edit")
51
72
  ) : null,
52
- b.hasPerm("DELETE:/api/v1/sys/position/{id}") ? m(
53
- G,
73
+ h.hasPerm("DELETE:/api/v1/sys/position/{id}") ? m(
74
+ $,
54
75
  {
55
- onPositiveClick: () => T(() => u.remove(a.id), t("position.deleted")).then((o) => {
76
+ onPositiveClick: () => x(() => u.remove(o.id), t("position.deleted")).then((a) => {
56
77
  var d;
57
- o && ((d = h.value) == null || d.refresh());
78
+ a && ((d = b.value) == null || d.refresh());
58
79
  })
59
80
  },
60
81
  {
@@ -63,61 +84,68 @@ const pe = /* @__PURE__ */ E({
63
84
  { size: "small", quaternary: !0, type: "error" },
64
85
  () => t("common.delete")
65
86
  ),
66
- default: () => t("position.deleteConfirm", { name: a.name })
87
+ default: () => t("position.deleteConfirm", { name: o.name })
67
88
  }
68
89
  ) : null
69
90
  ])
70
91
  }
71
- ], p = c(!1), g = c(null), s = c(null), I = {
92
+ ];
93
+ oe(w);
94
+ const p = c(!1), _ = c(null), s = c(null), S = {
72
95
  name: {
73
96
  required: !0,
74
97
  whitespace: !0,
75
98
  message: () => t("position.nameRequired"),
76
99
  trigger: ["input", "blur"]
77
100
  }
78
- }, k = () => ({ name: "", code: "", sort: 0, enabled: !0 }), i = q(k());
79
- function S() {
101
+ }, k = () => ({ name: "", code: "", sort: 0, enabled: !0 }), i = U(k());
102
+ function C() {
80
103
  s.value = null, Object.assign(i, k()), p.value = !0;
81
104
  }
82
- function U(a) {
83
- s.value = a.id, Object.assign(i, w(a)), p.value = !0;
105
+ function P(o) {
106
+ s.value = o.id, Object.assign(i, g(o)), p.value = !0;
84
107
  }
85
- async function C() {
86
- var a, o;
87
- await ((a = g.value) == null ? void 0 : a.validate());
108
+ async function A() {
109
+ var o, a;
110
+ await ((o = _.value) == null ? void 0 : o.validate());
88
111
  try {
89
- s.value === null ? await u.add({ ...i }) : await u.update(s.value, { ...i }), v.success(t("position.saved")), await ((o = h.value) == null ? void 0 : o.refresh());
112
+ s.value === null ? await u.add({ ...i }) : await u.update(s.value, { ...i }), v.success(t("position.saved")), await ((a = b.value) == null ? void 0 : a.refresh());
90
113
  } catch (d) {
91
- return v.error(x(d)), !1;
114
+ return v.error(I(d)), !1;
92
115
  }
93
116
  }
94
- return (a, o) => {
95
- const d = z("auth");
96
- return _(), R(B, null, [
97
- l(e(J), {
98
- "default-page-size": 100,
117
+ return (o, a) => {
118
+ const d = B("auth");
119
+ return T(), O(z, null, [
120
+ r(e(K), {
121
+ toolbar: e(ie),
99
122
  ref_key: "tableRef",
100
- ref: h,
101
- columns: P,
123
+ ref: b,
124
+ columns: w,
102
125
  fetcher: e(u).page,
103
- "flex-height": "",
104
- "virtual-scroll": "",
126
+ search: { container: "table" },
127
+ "fill-height": "",
128
+ "min-row-height": e(ae),
129
+ "card-on-narrow": "",
105
130
  "storage-key": "sys-position",
106
- onError: o[0] || (o[0] = (n) => e(v).error(e(x)(n)))
131
+ onError: a[0] || (a[0] = (n) => e(v).error(e(I)(n)))
107
132
  }, {
108
- toolbar: r(() => [
109
- D((_(), A(e(y), {
133
+ "pagination-prefix": l(({ itemCount: n }) => [
134
+ r(ne, { count: n }, null, 8, ["count"])
135
+ ]),
136
+ "toolbar-right": l(() => [
137
+ q((T(), H(e(y), {
110
138
  type: "primary",
111
- onClick: S
139
+ onClick: C
112
140
  }, {
113
- icon: r(() => [
114
- l(K, {
141
+ icon: l(() => [
142
+ r(Q, {
115
143
  icon: "ph:plus",
116
144
  size: 16
117
145
  })
118
146
  ]),
119
- default: r(() => [
120
- F(" " + O(e(t)("common.add")), 1)
147
+ default: l(() => [
148
+ D(" " + N(e(t)("common.add")), 1)
121
149
  ]),
122
150
  _: 1
123
151
  })), [
@@ -125,72 +153,80 @@ const pe = /* @__PURE__ */ E({
125
153
  ])
126
154
  ]),
127
155
  _: 1
128
- }, 8, ["fetcher"]),
129
- l(Q, {
156
+ }, 8, ["toolbar", "fetcher", "min-row-height"]),
157
+ r(X, {
130
158
  show: p.value,
131
- "onUpdate:show": o[5] || (o[5] = (n) => p.value = n),
159
+ "onUpdate:show": a[5] || (a[5] = (n) => p.value = n),
132
160
  title: s.value === null ? e(t)("position.addTitle") : e(t)("position.editTitle"),
133
161
  width: 480,
134
- "on-confirm": C,
162
+ "on-confirm": A,
135
163
  "confirm-text": e(t)("common.save")
136
164
  }, {
137
- default: r(() => [
138
- l(e(j), {
165
+ default: l(() => [
166
+ r(e(M), {
139
167
  ref_key: "formRef",
140
- ref: g,
168
+ ref: _,
141
169
  model: i,
142
- rules: I,
170
+ rules: S,
143
171
  "label-placement": "left",
144
172
  "label-width": 80
145
173
  }, {
146
- default: r(() => [
147
- l(e(f), {
174
+ default: l(() => [
175
+ r(e(f), {
148
176
  label: e(t)("position.name"),
149
177
  path: "name"
150
178
  }, {
151
- default: r(() => [
152
- l(e(N), {
179
+ default: l(() => [
180
+ r(e(E), {
153
181
  value: i.name,
154
- "onUpdate:value": o[1] || (o[1] = (n) => i.name = n),
182
+ "onUpdate:value": a[1] || (a[1] = (n) => i.name = n),
155
183
  placeholder: e(t)("position.name")
156
184
  }, null, 8, ["value", "placeholder"])
157
185
  ]),
158
186
  _: 1
159
187
  }, 8, ["label"]),
160
- l(e(f), {
188
+ r(e(f), {
161
189
  label: e(t)("position.code"),
162
190
  path: "code"
163
- }, {
164
- default: r(() => [
165
- l(e(N), {
191
+ }, F({
192
+ default: l(() => [
193
+ r(e(E), {
166
194
  value: i.code,
167
- "onUpdate:value": o[2] || (o[2] = (n) => i.code = n),
195
+ "onUpdate:value": a[2] || (a[2] = (n) => i.code = n),
168
196
  placeholder: e(t)("position.codePlaceholder"),
169
197
  disabled: s.value !== null
170
198
  }, null, 8, ["value", "placeholder", "disabled"])
171
199
  ]),
172
- _: 1
173
- }, 8, ["label"]),
174
- l(e(f), {
200
+ _: 2
201
+ }, [
202
+ s.value !== null ? {
203
+ name: "feedback",
204
+ fn: l(() => [
205
+ L("span", re, N(e(t)("position.codeImmutableHint")), 1)
206
+ ]),
207
+ key: "0"
208
+ } : void 0
209
+ ]), 1032, ["label"]),
210
+ r(e(f), {
175
211
  label: e(t)("position.sort")
176
212
  }, {
177
- default: r(() => [
178
- l(e(V), {
213
+ default: l(() => [
214
+ r(e(G), {
179
215
  value: i.sort,
180
- "onUpdate:value": o[3] || (o[3] = (n) => i.sort = n),
216
+ "onUpdate:value": a[3] || (a[3] = (n) => i.sort = n),
181
217
  min: 0,
182
218
  style: { width: "160px" }
183
219
  }, null, 8, ["value"])
184
220
  ]),
185
221
  _: 1
186
222
  }, 8, ["label"]),
187
- l(e(f), {
223
+ r(e(f), {
188
224
  label: e(t)("common.status")
189
225
  }, {
190
- default: r(() => [
191
- l(e(L), {
226
+ default: l(() => [
227
+ r(e(W), {
192
228
  value: i.enabled,
193
- "onUpdate:value": o[4] || (o[4] = (n) => i.enabled = n)
229
+ "onUpdate:value": a[4] || (a[4] = (n) => i.enabled = n)
194
230
  }, null, 8, ["value"])
195
231
  ]),
196
232
  _: 1
@@ -206,6 +242,6 @@ const pe = /* @__PURE__ */ E({
206
242
  }
207
243
  });
208
244
  export {
209
- pe as default
245
+ Te as default
210
246
  };
211
247
  //# sourceMappingURL=index2.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/position/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 岗位管理 = 普通 SmartTable CRUD + 行内启停。岗位与机构无关联(PositionInput 无 orgId)。\n// 后端无独立启停端点 → StatusSwitch 走全量 update(同 module 页);code 编辑禁用。\nimport { h, reactive, ref } from 'vue'\nimport {\n NButton,\n NSpace,\n NInput,\n NInputNumber,\n NPopconfirm,\n NForm,\n NFormItem,\n NSwitch,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { positionApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { translateError } from '#/utils/error'\nimport type { PositionInput, SysPosition } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysPosition>>()\n\n// 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。\nconst toInput = (r: SysPosition): PositionInput => ({\n name: r.name,\n code: r.code,\n sort: r.sort,\n enabled: r.enabled,\n})\n\nconst columns: SmartTableColumn<SysPosition>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n { key: 'name', title: () => t('position.name'), search: true },\n { key: 'code', title: () => t('position.code') },\n { key: 'sort', title: () => t('position.sort'), width: 80 },\n {\n key: 'enabled',\n title: () => t('common.status'),\n width: 90,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n disabled: !authStore.hasPerm('PUT:/api/v1/sys/position/{id}'),\n request: (next: boolean) => positionApi.update(r.id, { ...toInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n },\n }),\n },\n { key: 'createTime', title: () => t('common.createTime'), format: 'datetime' },\n {\n key: 'op',\n title: () => t('common.operation'),\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/position/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/position/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => positionApi.remove(r.id), t('position.deleted')).then(ok => {\n if (ok) tableRef.value?.refresh()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('position.deleteConfirm', { name: r.name }),\n },\n )\n : null,\n ]),\n },\n]\n\n// ── 新增/编辑弹窗 ──\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n name: {\n required: true,\n whitespace: true,\n message: () => t('position.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): PositionInput => ({ name: '', code: '', sort: 0, enabled: true })\nconst form = reactive<PositionInput>(blank())\n\nfunction openAdd() {\n editingId.value = null\n Object.assign(form, blank())\n show.value = true\n}\nfunction openEdit(r: SysPosition) {\n editingId.value = r.id\n Object.assign(form, toInput(r))\n show.value = true\n}\nasync function save() {\n await formRef.value?.validate()\n try {\n if (editingId.value === null) await positionApi.add({ ...form })\n else await positionApi.update(editingId.value, { ...form })\n message.success(t('position.saved'))\n await tableRef.value?.refresh()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n</script>\n\n<template>\n <SmartTable\n :default-page-size=\"100\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"positionApi.page\"\n flex-height\n virtual-scroll\n storage-key=\"sys-position\"\n @error=\"e => message.error(translateError(e))\"\n >\n <template #toolbar>\n <n-button v-auth=\"'POST:/api/v1/sys/position/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('position.addTitle') : t('position.editTitle')\"\n :width=\"480\"\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=\"80\">\n <n-form-item :label=\"t('position.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('position.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('position.code')\" path=\"code\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('position.codePlaceholder')\"\n :disabled=\"editingId !== null\"\n />\n </n-form-item>\n <n-form-item :label=\"t('position.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>\n </FormContainer>\n</template>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","tableRef","ref","toInput","r","columns","h","StatusSwitch","next","positionApi","v","NSpace","NButton","openEdit","NPopconfirm","ok","_a","show","formRef","editingId","rules","blank","form","reactive","openAdd","save","_b","e","translateError","_createVNode","_unref","SmartTable","_cache","_createBlock","AppIcon","_createTextVNode","FormContainer","$event","NForm","NFormItem","NInput","NInputNumber","NSwitch"],"mappings":"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"}
1
+ {"version":3,"file":"index2.vue.js","sources":["../../../../src/views/system/position/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// 岗位管理 = 普通 SmartTable CRUD + 行内启停。岗位与机构无关联(PositionInput 无 orgId)。\n// 后端无独立启停端点 → StatusSwitch 走全量 update(同 module 页);code 编辑禁用。\nimport { h, reactive, ref } from 'vue'\nimport {\n NButton,\n NSpace,\n NInput,\n NInputNumber,\n NPopconfirm,\n NForm,\n NFormItem,\n NSwitch,\n useMessage,\n type FormInst,\n type FormRules,\n} from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { SmartTable, type SmartTableColumn, type SmartTableInst } from 'smart-naive-table'\nimport AppIcon from '#/components/AppIcon.vue'\nimport FormContainer from '#/components/FormContainer/index.vue'\nimport StatusSwitch from '#/components/StatusSwitch/index.vue'\nimport { useConfirm } from '#/composables/useConfirm'\nimport { positionApi } from '#/api'\nimport { useAuthStore } from '#/stores/auth'\nimport { translateError } from '#/utils/error'\nimport { SEARCH_ACTIONS, deriveHeaderFilters } from '#/utils/tableFilter'\nimport { TABLE_MIN_ROW_HEIGHT, TABLE_TOOLBAR } from '#/utils/tableToolbar'\nimport TableTotal from '#/components/TableTotal/index.vue'\nimport type { PositionInput, SysPosition } from '#/types/api'\n\nconst { t } = useI18n()\nconst message = useMessage()\nconst { run } = useConfirm()\nconst authStore = useAuthStore()\nconst tableRef = ref<SmartTableInst<SysPosition>>()\n\n// 行数据 → 完整入参:openEdit 回填与 StatusSwitch 行内改状态共用(后端无独立启停端点,均走全量 update)。\nconst toInput = (r: SysPosition): PositionInput => ({\n name: r.name,\n code: r.code,\n sort: r.sort,\n enabled: r.enabled,\n})\n\nconst columns: SmartTableColumn<SysPosition>[] = [\n { type: 'index', title: () => t('common.rowNo'), width: 64, align: 'center' },\n {\n key: 'name',\n title: () => t('position.name'),\n search: { actions: SEARCH_ACTIONS.fuzzy },\n sorter: true,\n },\n {\n key: 'code',\n title: () => t('position.code'),\n sorter: true,\n render: r => h('span', { class: 'mono muted' }, r.code),\n },\n {\n key: 'sort',\n title: () => t('position.sort'),\n width: 80,\n sorter: true,\n render: r => h('span', { class: 'num muted' }, r.sort),\n },\n {\n key: 'enabled',\n title: () => t('common.status'),\n width: 90,\n sorter: true,\n render: r =>\n h(StatusSwitch, {\n value: r.enabled,\n disabled: !authStore.hasPerm('PUT:/api/v1/sys/position/{id}'),\n request: (next: boolean) => positionApi.update(r.id, { ...toInput(r), enabled: next }),\n 'onUpdate:value': (v: boolean) => {\n r.enabled = v\n },\n }),\n },\n { key: 'createTime', title: () => t('common.createTime'), format: 'datetime', sorter: true },\n {\n key: 'op',\n title: () => t('common.operation'),\n width: 140,\n align: 'right',\n fixed: 'right',\n hideInSetting: true,\n render: r =>\n h(NSpace, { size: 2, wrapItem: false, justify: 'end' }, () => [\n authStore.hasPerm('PUT:/api/v1/sys/position/{id}')\n ? h(\n NButton,\n { size: 'small', quaternary: true, type: 'primary', onClick: () => openEdit(r) },\n () => t('common.edit'),\n )\n : null,\n authStore.hasPerm('DELETE:/api/v1/sys/position/{id}')\n ? h(\n NPopconfirm,\n {\n onPositiveClick: () =>\n run(() => positionApi.remove(r.id), t('position.deleted')).then(ok => {\n if (ok) tableRef.value?.refresh()\n }),\n },\n {\n trigger: () =>\n h(NButton, { size: 'small', quaternary: true, type: 'error' }, () =>\n t('common.delete'),\n ),\n default: () => t('position.deleteConfirm', { name: r.name }),\n },\n )\n : null,\n ]),\n },\n]\nderiveHeaderFilters(columns)\n\n// ── 新增/编辑弹窗 ──\nconst show = ref(false)\nconst formRef = ref<FormInst | null>(null)\nconst editingId = ref<number | null>(null)\nconst rules: FormRules = {\n name: {\n required: true,\n whitespace: true,\n message: () => t('position.nameRequired'),\n trigger: ['input', 'blur'],\n },\n}\nconst blank = (): PositionInput => ({ name: '', code: '', sort: 0, enabled: true })\nconst form = reactive<PositionInput>(blank())\n\nfunction openAdd() {\n editingId.value = null\n Object.assign(form, blank())\n show.value = true\n}\nfunction openEdit(r: SysPosition) {\n editingId.value = r.id\n Object.assign(form, toInput(r))\n show.value = true\n}\nasync function save() {\n await formRef.value?.validate()\n try {\n if (editingId.value === null) await positionApi.add({ ...form })\n else await positionApi.update(editingId.value, { ...form })\n message.success(t('position.saved'))\n await tableRef.value?.refresh()\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n}\n</script>\n\n<template>\n <SmartTable\n :toolbar=\"TABLE_TOOLBAR\"\n ref=\"tableRef\"\n :columns=\"columns\"\n :fetcher=\"positionApi.page\"\n :search=\"{ container: 'table' }\"\n fill-height\n :min-row-height=\"TABLE_MIN_ROW_HEIGHT\"\n card-on-narrow\n storage-key=\"sys-position\"\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 v-auth=\"'POST:/api/v1/sys/position/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('position.addTitle') : t('position.editTitle')\"\n :width=\"480\"\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=\"80\">\n <n-form-item :label=\"t('position.name')\" path=\"name\">\n <n-input v-model:value=\"form.name\" :placeholder=\"t('position.name')\" />\n </n-form-item>\n <n-form-item :label=\"t('position.code')\" path=\"code\">\n <n-input\n v-model:value=\"form.code\"\n :placeholder=\"t('position.codePlaceholder')\"\n :disabled=\"editingId !== null\"\n />\n <template v-if=\"editingId !== null\" #feedback>\n <span class=\"form-hint\">{{ t('position.codeImmutableHint') }}</span>\n </template>\n </n-form-item>\n <n-form-item :label=\"t('position.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>\n </FormContainer>\n</template>\n\n<style scoped>\n/* 编码「创建后不可修改」提示,挂在表单项的 feedback 位 */\n.form-hint {\n font-size: 13px;\n color: var(--text-3);\n}\n</style>\n"],"names":["useI18n","message","useMessage","run","useConfirm","authStore","useAuthStore","tableRef","ref","toInput","r","columns","SEARCH_ACTIONS","h","StatusSwitch","next","positionApi","v","NSpace","NButton","openEdit","NPopconfirm","ok","_a","deriveHeaderFilters","show","formRef","editingId","rules","blank","form","reactive","openAdd","save","_b","e","translateError","_createVNode","_unref","SmartTable","TABLE_TOOLBAR","TABLE_MIN_ROW_HEIGHT","_cache","_withCtx","itemCount","TableTotal","_createBlock","AppIcon","_createTextVNode","FormContainer","$event","NForm","NFormItem","NInput","_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 f = /* @__PURE__ */ t(o, [["__scopeId", "data-v-ef7d111d"]]);
4
+ const p = /* @__PURE__ */ t(o, [["__scopeId", "data-v-701398fc"]]);
5
5
  export {
6
- f as default
6
+ p as default
7
7
  };
8
8
  //# sourceMappingURL=index.vue.js.map