@pubinfo/module-rbac 2.0.0-beta.8 → 2.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/dist/ComponentSelect-AWuDE4De.js +2 -0
  2. package/dist/ComponentSelect-CFoCrAFh.js +483 -0
  3. package/dist/DynamicRoutesForm-DmQMP8-p.js +376 -0
  4. package/dist/DynamicRoutesForm-xXTdh5EX.js +4 -0
  5. package/dist/HCheckList-DDP7S_nc.js +37 -0
  6. package/dist/HCheckList-u43x0KiD.js +2 -0
  7. package/dist/ImportExport-BbZkZEW_.js +4 -0
  8. package/dist/ImportExport-Yt6dABIv.js +354 -0
  9. package/dist/MetaForm-BB80P4w6.js +284 -0
  10. package/dist/MetaForm-D_na1CP8.js +4 -0
  11. package/dist/OrgAndPosition-BK5MTlOO.js +188 -0
  12. package/dist/OrgAndPosition-CDCim7yM.js +2 -0
  13. package/dist/ResourceEdit-CVwNJMVm.js +309 -0
  14. package/dist/ResourceEdit-D1e8tLAA.js +8 -0
  15. package/dist/ResourceRelation-DJDFQYFT.js +93 -0
  16. package/dist/ResourceRelation-DWhWzKQJ.js +3 -0
  17. package/dist/ResourceRelation-cfGS-erP.js +78 -0
  18. package/dist/ResourceSelector-B4AXXCxI.js +247 -0
  19. package/dist/RoleRelation-BlWDNAM1.js +79 -0
  20. package/dist/RoleRelation-CAMzPMFz.js +2 -0
  21. package/dist/RoleSelector-Bqv2p_7X.js +279 -0
  22. package/dist/TenantEdit-6rMUS9EP.js +253 -0
  23. package/dist/TenantEdit-BhpSW4w7.js +6 -0
  24. package/dist/UserAuthorization-Cx9oYms2.js +238 -0
  25. package/dist/UserAuthorization-D5rSSagE.js +4 -0
  26. package/dist/UserEdit-CqH6hxTZ.js +336 -0
  27. package/dist/UserEdit-CqrRx717.js +4 -0
  28. package/dist/_plugin-vue_export-helper-Cmy-mbsL.js +6 -0
  29. package/dist/add-child-CJM7MvB2.js +2 -0
  30. package/dist/animation_item-Bf_Y_nyf.js +4536 -0
  31. package/dist/animation_item-Wmcl4yBo.js +2 -0
  32. package/dist/api/modules/assist/qunzujiekou.d.ts +7 -0
  33. package/dist/api/modules/configData/index.d.ts +1 -1
  34. package/dist/api/modules/configData/{zidianfuwu.d.ts → zidifuwu.d.ts} +14 -0
  35. package/dist/api/modules/rbac/gangweijiekou.d.ts +7 -0
  36. package/dist/api/modules/rbac/index.d.ts +1 -0
  37. package/dist/api/modules/rbac/pubJiaosezukongzhiqi.d.ts +7 -0
  38. package/dist/api/modules/rbac/yonghujiekou.d.ts +21 -0
  39. package/dist/api/modules/rbac/ziyuandaorudaochuxiangguanjiekou.d.ts +43 -0
  40. package/dist/api/modules/rbac/ziyuanjiekou.d.ts +7 -0
  41. package/dist/api/request.d.ts +1 -1
  42. package/dist/authority-BofK2fFE.js +2 -0
  43. package/dist/authorize-Ck1i_5K5.js +2 -0
  44. package/dist/blackWhiteList-B-EAyXzG.js +213 -0
  45. package/dist/blacklist-disable-BgMERGDX.js +2 -0
  46. package/dist/blacklist-enable-D8ds6NgH.js +2 -0
  47. package/dist/breadcrumb_setting-Bv12pA15.js +111 -0
  48. package/dist/browser-chrome-BVvmyPYW.js +2 -0
  49. package/dist/browser-edge-Bc36eH7f.js +2 -0
  50. package/dist/browser-ie-BiDFft9C.js +2 -0
  51. package/dist/browser-other-BzyOvDmB.js +2 -0
  52. package/dist/browser-safari-CBxgFrI_.js +2 -0
  53. package/dist/browserType-BJeH2o0t.js +26 -0
  54. package/dist/browserType-pMY0VZ_3.js +2 -0
  55. package/dist/chunk-B3eAFu3c.js +11 -0
  56. package/dist/cloneDeep-BnvyNhik.js +7 -0
  57. package/dist/components/DirectoryIcones/ComponentsIcones.vue.d.ts +7 -0
  58. package/dist/components/DirectoryIcones/FolderIcones.vue.d.ts +7 -0
  59. package/dist/components/DirectoryIcones/ModuleIcones.vue.d.ts +7 -0
  60. package/dist/components/DirectoryIcones/PackagesIcones.vue.d.ts +7 -0
  61. package/dist/components/DirectoryIcones/SrcIcones.vue.d.ts +7 -0
  62. package/dist/components/DirectoryIcones/ViewIcones.vue.d.ts +7 -0
  63. package/dist/components/DirectoryIcones/VueIcones.vue.d.ts +2 -0
  64. package/dist/components/GroupSelector/index.vue.d.ts +4 -4
  65. package/dist/components/OrgTree/index.vue.d.ts +1 -1
  66. package/dist/components/OrgUserSelector/OrgSelector.vue.d.ts +7 -7
  67. package/dist/components/OrgUserSelector/UserSelector.vue.d.ts +7 -7
  68. package/dist/components/OrgUserSelector/index.d.ts +3 -2
  69. package/dist/components/ResourceIcones/Select.vue.d.ts +9 -0
  70. package/dist/components/ResourceSelector/index.vue.d.ts +5 -5
  71. package/dist/components/RoleSelector/RoleSearch.vue.d.ts +19 -0
  72. package/dist/components/RoleSelector/RoleSelector.vue.d.ts +20 -0
  73. package/dist/components/RoleSelector/TooltipLabel.vue.d.ts +8 -0
  74. package/dist/components/RoleSelector/index.d.ts +2 -0
  75. package/dist/components/RoleSelector/interface.d.ts +4 -0
  76. package/dist/components/RoleSelector/useRole.d.ts +13 -0
  77. package/dist/composables/useLottie.d.ts +1 -1
  78. package/dist/configData-BoeH9I4s.js +86 -0
  79. package/dist/context.d.ts +3 -0
  80. package/dist/createAndEditDataPermission-BFmD3zpY.js +443 -0
  81. package/dist/createAndEditDataPermission-Ll6GWW-p.js +8 -0
  82. package/dist/data-permission-Dz4eCdAg.js +156 -0
  83. package/dist/dayjs.min-KffHrkDe.js +297 -0
  84. package/dist/dictionary-C8UVX_8l.js +180 -0
  85. package/dist/drawerBlackWhiteList-opDsd2_O.js +125 -0
  86. package/dist/drawerBlackWhiteList-taaV8A5D.js +3 -0
  87. package/dist/drawerDictionary-CzT9KJGw.js +130 -0
  88. package/dist/drawerDictionary-D0Bi75vl.js +4 -0
  89. package/dist/drawerDictionaryItem-BqQojUNh.js +4 -0
  90. package/dist/drawerDictionaryItem-LBeuvrE8.js +142 -0
  91. package/dist/drawerGroup-BI0pYuIO.js +3 -0
  92. package/dist/drawerGroup-B_pYqrpy.js +188 -0
  93. package/dist/drawerOrganization-BeDsW0ah.js +251 -0
  94. package/dist/drawerOrganization-RbLK6k_c.js +3 -0
  95. package/dist/drawerPosition-CKZCt-Yc.js +3 -0
  96. package/dist/drawerPosition-DRacJCCQ.js +170 -0
  97. package/dist/drawerRegion-BM__zqtq.js +187 -0
  98. package/dist/drawerRegion-CaXvxWEn.js +3 -0
  99. package/dist/drawerRole-27ggtdnJ.js +6 -0
  100. package/dist/drawerRole-BOf6UXMc.js +172 -0
  101. package/dist/drawerRole-CQURGn5D.js +215 -0
  102. package/dist/drawerRole-D9Dt3l7O.js +5 -0
  103. package/dist/drawerRole-DPC9SVDe.js +3 -0
  104. package/dist/drawerRole-DhU_4L0Z.js +159 -0
  105. package/dist/edit-DF7Qsxtl.js +2 -0
  106. package/dist/enum-BMY6bmPA.js +54 -0
  107. package/dist/enum-BZtNAeJC.js +23 -0
  108. package/dist/enum-CtIne-Ul.js +61 -0
  109. package/dist/enum-DfCD4cL8.js +4 -0
  110. package/dist/enum-e5LlvaOv.js +4 -0
  111. package/dist/group-C0rajn0e.js +174 -0
  112. package/dist/icard-CtletXtq.js +2 -0
  113. package/dist/icon_animation-Do8Rw-K9.js +2 -0
  114. package/dist/icon_breadcrumb-CmZgmswj.js +2 -0
  115. package/dist/icon_copyright--7CIXSE1.js +2 -0
  116. package/dist/icon_jt--G-Amuu4.js +2 -0
  117. package/dist/icon_layout-BkQems5J.js +2 -0
  118. package/dist/icon_mainpage-98dHnXRL.js +2 -0
  119. package/dist/icon_menu-8foYPA9U.js +2 -0
  120. package/dist/icon_page_size-CPjiZpP2.js +2 -0
  121. package/dist/icon_position_type-Do71e9Ov.js +2 -0
  122. package/dist/icon_safe_manage-DiBn-uSS.js +2 -0
  123. package/dist/icon_screen_scale-Ct8iHVKy.js +2 -0
  124. package/dist/icon_system_manage-CzBNNisy.js +2 -0
  125. package/dist/icon_tabbar-BajHaWfA.js +2 -0
  126. package/dist/icon_toolbar-DHKFZD2w.js +2 -0
  127. package/dist/icon_topbar-C4mu7up7.js +2 -0
  128. package/dist/icon_watermark-2Wtjrft3.js +2 -0
  129. package/dist/index.d.ts +2 -2
  130. package/dist/index.js +6873 -5
  131. package/dist/interface.d.ts +27 -3
  132. package/dist/itemlist-CZBPz_rC.js +157 -0
  133. package/dist/layout_setting-oQd8BfKx.js +74 -0
  134. package/dist/log-CQfCPTsC.js +14 -0
  135. package/dist/log-center-qtOWNEaD.js +2 -0
  136. package/dist/loginHistoryDetail-Abn9eS5-.js +78 -0
  137. package/dist/loginHistoryDetail-DDEuFbYB.js +4 -0
  138. package/dist/login_history-Btv9KB0x.js +196 -0
  139. package/dist/menu_setting-Cju5OkSE.js +158 -0
  140. package/dist/not-data-BA50qHBT.js +2 -0
  141. package/dist/not-data-BzaRFolb.js +2 -0
  142. package/dist/operateHistoryDetail-Br_M3mhI.js +90 -0
  143. package/dist/operateHistoryDetail-CLsHDBp7.js +4 -0
  144. package/dist/operate_history-D7jq2IH-.js +191 -0
  145. package/dist/org-main-D0M4-Mu2.js +2 -0
  146. package/dist/org-unmain-Bh9hzLgK.js +2 -0
  147. package/dist/organization-CeOyltjo.js +15605 -0
  148. package/dist/other_setting-rbUoVood.js +220 -0
  149. package/dist/page_animation_setting-Diclx4mg.js +117 -0
  150. package/dist/page_w_setting-Dr2tu_oS.js +69 -0
  151. package/dist/position-Bodjtnh9.js +168 -0
  152. package/dist/region-B9xObK4Z.js +185 -0
  153. package/dist/remove-B3pgrGrf.js +2 -0
  154. package/dist/resource-DhkRTloI.js +270 -0
  155. package/dist/resource-app-BKgfDs09.js +2 -0
  156. package/dist/resource-btn-BXLyUStb.js +2 -0
  157. package/dist/resource-dynamic-Dx3RhbQk.js +2 -0
  158. package/dist/resource-index-C2COvmY-.js +2 -0
  159. package/dist/resource-menu-C_Q6AEFw.js +2 -0
  160. package/dist/resource-micro-D_OBvoET.js +2 -0
  161. package/dist/resource-nonmenu-CCpeV9Km.js +2 -0
  162. package/dist/role-DoBrQ1zG.js +196 -0
  163. package/dist/role_group-BMNZ1M1A.js +172 -0
  164. package/dist/routes/index.d.ts +3 -1
  165. package/dist/routes/modules/authority.manage.menu.d.ts +1 -1
  166. package/dist/routes/modules/log.manage.menu.d.ts +1 -1
  167. package/dist/routes/modules/safe.manage.menu.d.ts +1 -1
  168. package/dist/routes/modules/stylesetting.manage.menu.d.ts +1 -1
  169. package/dist/routes/modules/system.manage.menu.d.ts +1 -1
  170. package/dist/safe_setting-J6GWqrZx.js +232 -0
  171. package/dist/setItem-CcNK_f8V.js +77 -0
  172. package/dist/setItem-CqHPfTBZ.js +5 -0
  173. package/dist/setting-manage-Di7-Ks18.js +2 -0
  174. package/dist/stores-DXQ1Ibt6.js +2 -0
  175. package/dist/style.css +2 -1
  176. package/dist/tabbar_setting-Di3OcDig.js +142 -0
  177. package/dist/tenant-pPYq3xtM.js +183 -0
  178. package/dist/theme-check-mark-DhhsmM5v.js +2 -0
  179. package/dist/theme-title-DEVFVYNh.js +2 -0
  180. package/dist/theme_setting-DMyPJp3M.js +117 -0
  181. package/dist/{index-BleenJqT.js → toolbar_setting-ChcZxAJJ.js} +155 -167
  182. package/dist/useAppAndResource-DWQG9bqY.js +57 -0
  183. package/dist/user-BJL1Sw0q.js +345 -0
  184. package/dist/view-FR2dRATN.js +2 -0
  185. package/dist/views/blackWhiteList/components/drawerBlackWhiteList.vue.d.ts +4 -4
  186. package/dist/views/blackWhiteList/index.vue.d.ts +319 -319
  187. package/dist/views/breadcrumb_setting/index.vue.d.ts +1 -1
  188. package/dist/views/components/HCheckList.vue.d.ts +5 -5
  189. package/dist/views/components/animation_item.vue.d.ts +5 -5
  190. package/dist/views/components/setItem.vue.d.ts +18 -18
  191. package/dist/views/data-permission/components/createAndEditDataPermission.vue.d.ts +35 -35
  192. package/dist/views/data-permission/index.vue.d.ts +350 -350
  193. package/dist/views/dictionary/components/drawerDictionary.vue.d.ts +4 -4
  194. package/dist/views/dictionary/components/drawerDictionaryItem.vue.d.ts +4 -4
  195. package/dist/views/dictionary/index.vue.d.ts +319 -319
  196. package/dist/views/dictionary/itemlist.vue.d.ts +319 -319
  197. package/dist/views/group/components/drawerGroup.vue.d.ts +4 -4
  198. package/dist/views/group/index.vue.d.ts +319 -319
  199. package/dist/views/layout_setting/index.vue.d.ts +1 -1
  200. package/dist/views/log_center/components/browserType.vue.d.ts +3 -3
  201. package/dist/views/log_center/components/loginHistoryDetail.vue.d.ts +4 -4
  202. package/dist/views/log_center/components/operateHistoryDetail.vue.d.ts +4 -4
  203. package/dist/views/log_center/login_history.vue.d.ts +315 -315
  204. package/dist/views/log_center/operate_history.vue.d.ts +315 -315
  205. package/dist/views/menu_setting/index.vue.d.ts +1 -1
  206. package/dist/views/organization/components/drawerOrganization.vue.d.ts +4 -4
  207. package/dist/views/organization/components/drawerRole.vue.d.ts +18 -10
  208. package/dist/views/organization/index.vue.d.ts +23 -15
  209. package/dist/views/other_setting/index.vue.d.ts +1 -1
  210. package/dist/views/page_animation_setting/index.vue.d.ts +1 -1
  211. package/dist/views/page_w_setting/index.vue.d.ts +1 -1
  212. package/dist/views/position/components/drawerPosition.vue.d.ts +4 -4
  213. package/dist/views/position/index.vue.d.ts +319 -319
  214. package/dist/views/region/components/drawerRegion.vue.d.ts +4 -4
  215. package/dist/views/region/index.vue.d.ts +319 -319
  216. package/dist/views/resource/components/ComponentSelect.vue.d.ts +12 -0
  217. package/dist/views/resource/components/DynamicRoutesForm.vue.d.ts +13 -0
  218. package/dist/views/resource/components/ImportExport.vue.d.ts +13 -0
  219. package/dist/views/resource/components/MetaForm.vue.d.ts +10 -0
  220. package/dist/views/resource/components/ResourceEdit.vue.d.ts +4 -4
  221. package/dist/views/resource/components/RoleRelation.vue.d.ts +2 -2
  222. package/dist/views/resource/enum.d.ts +6 -13
  223. package/dist/views/resource/hooks/useMetaForm.d.ts +6 -0
  224. package/dist/views/resource/index.vue.d.ts +343 -321
  225. package/dist/views/resource/interface.d.ts +4 -1
  226. package/dist/views/resource/model.d.ts +37 -0
  227. package/dist/views/role/components/ResourceRelation.vue.d.ts +316 -316
  228. package/dist/views/role/components/drawerRole.vue.d.ts +10 -10
  229. package/dist/views/role/index.vue.d.ts +642 -642
  230. package/dist/views/role_group/components/drawerRole.vue.d.ts +18 -10
  231. package/dist/views/role_group/index.vue.d.ts +333 -325
  232. package/dist/views/safe_setting/index.vue.d.ts +1 -1
  233. package/dist/views/tabbar_setting/index.vue.d.ts +1 -1
  234. package/dist/views/tenant/components/TenantEdit.vue.d.ts +10 -10
  235. package/dist/views/tenant/index.vue.d.ts +325 -325
  236. package/dist/views/theme_setting/index.vue.d.ts +1 -1
  237. package/dist/views/toolbar_setting/index.vue.d.ts +1 -1
  238. package/dist/views/user/components/OrgAndPosition.vue.d.ts +3 -3
  239. package/dist/views/user/components/UserAuthorization.vue.d.ts +18 -10
  240. package/dist/views/user/components/UserEdit.vue.d.ts +4 -4
  241. package/dist/views/user/index.vue.d.ts +337 -329
  242. package/dist/views/watermark_setting/index.vue.d.ts +9 -9
  243. package/dist/watermark_setting-tqYUcPzF.js +199 -0
  244. package/dist/zddata-D9x-CcqP.js +2 -0
  245. package/dist/zy_checked-B0r0BaR-.js +2 -0
  246. package/dist/zy_default-BHbIn4if.js +2 -0
  247. package/package.json +14 -14
  248. package/src/api/modules/assist/gonggaofuwu.ts +24 -9
  249. package/src/api/modules/assist/index.ts +0 -2
  250. package/src/api/modules/assist/qunzujiekou.ts +37 -7
  251. package/src/api/modules/assist/quyujiekou.ts +12 -3
  252. package/src/api/modules/assist/typings.d.ts +62 -58
  253. package/src/api/modules/configData/heibaimingdanfuwu.ts +12 -3
  254. package/src/api/modules/configData/index.ts +1 -3
  255. package/src/api/modules/configData/typings.d.ts +84 -74
  256. package/src/api/modules/configData/xitongpeizhifuwu.ts +39 -15
  257. package/src/api/modules/configData/{zidianfuwu.ts → zidifuwu.ts} +80 -8
  258. package/src/api/modules/log/caozuorizhifuwu.ts +8 -2
  259. package/src/api/modules/log/denglurizhifuwu.ts +8 -2
  260. package/src/api/modules/log/index.ts +0 -2
  261. package/src/api/modules/log/typings.d.ts +29 -25
  262. package/src/api/modules/rbac/gangweijiekou.ts +44 -8
  263. package/src/api/modules/rbac/index.ts +1 -2
  264. package/src/api/modules/rbac/jiaosejiekou.ts +24 -9
  265. package/src/api/modules/rbac/pubJiaosezukongzhiqi.ts +45 -6
  266. package/src/api/modules/rbac/shujuquanxianzhubiaokongzhiqi.ts +26 -12
  267. package/src/api/modules/rbac/typings.d.ts +419 -296
  268. package/src/api/modules/rbac/yonghujiekou.ts +115 -13
  269. package/src/api/modules/rbac/yonghushoucangbiaojiekou.ts +20 -5
  270. package/src/api/modules/rbac/yonghuzuijinchangyongbiaojiekou.ts +12 -3
  271. package/src/api/modules/rbac/ziyuandaorudaochuxiangguanjiekou.ts +158 -0
  272. package/src/api/modules/rbac/ziyuanjiekou.ts +43 -4
  273. package/src/api/modules/rbac/zuhuguanlijiekou.ts +20 -11
  274. package/src/api/modules/rbac/zuzhijiaosebiaokongzhiqi.ts +12 -3
  275. package/src/api/modules/rbac/zuzhijiekou.ts +28 -10
  276. package/src/api/request.ts +3 -2
  277. package/src/assets/icons/resource-dynamic.svg +39 -0
  278. package/src/assets/icons/resource-micro.svg +40 -0
  279. package/src/components/DirectoryIcones/ComponentsIcones.vue +18 -0
  280. package/src/components/DirectoryIcones/FolderIcones.vue +18 -0
  281. package/src/components/DirectoryIcones/ModuleIcones.vue +18 -0
  282. package/src/components/DirectoryIcones/PackagesIcones.vue +18 -0
  283. package/src/components/DirectoryIcones/SrcIcones.vue +18 -0
  284. package/src/components/DirectoryIcones/ViewIcones.vue +18 -0
  285. package/src/components/DirectoryIcones/VueIcones.vue +9 -0
  286. package/src/components/GroupSelector/index.vue +64 -89
  287. package/src/components/OrgTree/index.vue +2 -2
  288. package/src/components/OrgUserSelector/index.ts +5 -0
  289. package/src/components/OrgUserSelector/provider.ts +1 -1
  290. package/src/components/ResourceIcones/Select.vue +240 -0
  291. package/src/components/ResourceSelector/index.vue +33 -50
  292. package/src/components/RoleSelector/RoleSearch.vue +60 -0
  293. package/src/components/RoleSelector/RoleSelector.vue +174 -0
  294. package/src/components/RoleSelector/TooltipLabel.vue +24 -0
  295. package/src/components/RoleSelector/index.ts +2 -0
  296. package/src/components/RoleSelector/interface.ts +4 -0
  297. package/src/components/RoleSelector/useRole.ts +56 -0
  298. package/src/context.ts +20 -0
  299. package/src/index.ts +21 -18
  300. package/src/interface.ts +31 -2
  301. package/src/routes/index.ts +9 -5
  302. package/src/routes/modules/authority.manage.menu.ts +0 -13
  303. package/src/routes/modules/log.manage.menu.ts +0 -8
  304. package/src/routes/modules/safe.manage.menu.ts +0 -12
  305. package/src/routes/modules/stylesetting.manage.menu.ts +0 -16
  306. package/src/routes/modules/system.manage.menu.ts +0 -10
  307. package/src/views/blackWhiteList/components/drawerBlackWhiteList.vue +1 -1
  308. package/src/views/blackWhiteList/index.vue +14 -26
  309. package/src/views/breadcrumb_setting/index.vue +3 -3
  310. package/src/views/components/animation_item.vue +2 -2
  311. package/src/views/components/setItem.vue +13 -20
  312. package/src/views/data-permission/components/createAndEditDataPermission.vue +4 -4
  313. package/src/views/data-permission/enum.ts +7 -7
  314. package/src/views/data-permission/index.vue +9 -12
  315. package/src/views/dictionary/components/drawerDictionary.vue +1 -1
  316. package/src/views/dictionary/components/drawerDictionaryItem.vue +1 -1
  317. package/src/views/dictionary/index.vue +3 -3
  318. package/src/views/dictionary/itemlist.vue +3 -3
  319. package/src/views/group/components/drawerGroup.vue +2 -2
  320. package/src/views/group/index.vue +13 -18
  321. package/src/views/layout_setting/index.vue +154 -164
  322. package/src/views/log_center/components/loginHistoryDetail.vue +6 -8
  323. package/src/views/log_center/components/operateHistoryDetail.vue +6 -8
  324. package/src/views/log_center/login_history.vue +6 -11
  325. package/src/views/log_center/operate_history.vue +6 -11
  326. package/src/views/menu_setting/index.vue +3 -3
  327. package/src/views/organization/components/drawerOrganization.vue +3 -3
  328. package/src/views/organization/components/drawerRole.vue +9 -7
  329. package/src/views/organization/index.vue +23 -49
  330. package/src/views/other_setting/index.vue +2 -2
  331. package/src/views/page_animation_setting/index.vue +10 -18
  332. package/src/views/page_w_setting/index.vue +133 -116
  333. package/src/views/position/components/drawerPosition.vue +2 -2
  334. package/src/views/position/index.vue +1 -1
  335. package/src/views/region/components/drawerRegion.vue +2 -2
  336. package/src/views/region/index.vue +1 -1
  337. package/src/views/resource/components/ComponentSelect.vue +375 -0
  338. package/src/views/resource/components/DynamicRoutesForm.vue +92 -0
  339. package/src/views/resource/components/ImportExport.vue +313 -0
  340. package/src/views/resource/components/MetaForm.vue +119 -0
  341. package/src/views/resource/components/ResourceEdit.vue +144 -73
  342. package/src/views/resource/components/RoleRelation.vue +1 -1
  343. package/src/views/resource/enum.ts +12 -13
  344. package/src/views/resource/hooks/useMetaForm.ts +103 -0
  345. package/src/views/resource/index.vue +59 -32
  346. package/src/views/resource/interface.ts +5 -1
  347. package/src/views/resource/model.ts +53 -0
  348. package/src/views/role/components/ResourceRelation.vue +3 -4
  349. package/src/views/role/components/drawerRole.vue +3 -3
  350. package/src/views/role/index.vue +1 -1
  351. package/src/views/role_group/components/ResourceRelation.vue +3 -4
  352. package/src/views/role_group/components/drawerRole.vue +8 -7
  353. package/src/views/role_group/index.vue +1 -1
  354. package/src/views/safe_setting/index.vue +5 -7
  355. package/src/views/tabbar_setting/index.vue +2 -2
  356. package/src/views/tenant/components/TenantEdit.vue +1 -1
  357. package/src/views/tenant/index.vue +1 -1
  358. package/src/views/theme_setting/index.vue +202 -231
  359. package/src/views/toolbar_setting/index.vue +3 -3
  360. package/src/views/user/components/OrgAndPosition.vue +2 -2
  361. package/src/views/user/components/UserAuthorization.vue +13 -12
  362. package/src/views/user/components/UserEdit.vue +1 -1
  363. package/src/views/user/index.vue +1 -1
  364. package/src/views/watermark_setting/index.vue +8 -15
  365. package/dist/OrgSelector.vue_vue_type_script_setup_true_lang-BcL0IFuA.js +0 -567
  366. package/dist/_baseClone-CQ44TFeq.js +0 -191
  367. package/dist/_commonjsHelpers-C6fGbg64.js +0 -6
  368. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
  369. package/dist/animation_item.vue_vue_type_script_setup_true_lang-BQvmwheq.js +0 -4864
  370. package/dist/browserType.vue_vue_type_script_setup_true_lang-Cv8wph6G.js +0 -38
  371. package/dist/cloneDeep-BI4WNBQ9.js +0 -8
  372. package/dist/enum-BEHz_Q18.js +0 -74
  373. package/dist/enum-C9ihxJe7.js +0 -4
  374. package/dist/enum-CTUzwCYG.js +0 -4
  375. package/dist/enum-DDKThkSw.js +0 -24
  376. package/dist/gangweijiekou-BxJq_m0o.js +0 -46
  377. package/dist/index-BS45K9vK.js +0 -685
  378. package/dist/index-Bbsiwecf.js +0 -1631
  379. package/dist/index-BhcAk-IH.js +0 -399
  380. package/dist/index-Bl4v-7On.js +0 -125
  381. package/dist/index-CFPhIFyG.js +0 -140
  382. package/dist/index-CLSeuhTv.js +0 -872
  383. package/dist/index-CLxqmFPw.js +0 -317
  384. package/dist/index-CTiFd9M0.js +0 -303
  385. package/dist/index-Cej8u1qo.js +0 -274
  386. package/dist/index-Cr17VOfm.js +0 -389
  387. package/dist/index-CsHj-xDw.js +0 -283
  388. package/dist/index-D0yB_8b0.js +0 -181
  389. package/dist/index-DFR8dd2B.js +0 -785
  390. package/dist/index-DNf0NPrD.js +0 -131
  391. package/dist/index-Dm4sOX43.js +0 -27
  392. package/dist/index-KboUdpTh.js +0 -18588
  393. package/dist/index-MtXfNGqS.js +0 -1246
  394. package/dist/index-U8kjKY6p.js +0 -462
  395. package/dist/index-UZeQsp70.js +0 -177
  396. package/dist/index-a0E9oj3q.js +0 -703
  397. package/dist/index-gmUZUdNl.js +0 -634
  398. package/dist/index-j_ln_NSt.js +0 -455
  399. package/dist/index-s32GbmsJ.js +0 -164
  400. package/dist/index-yEpViVkx.js +0 -409
  401. package/dist/index-zh8PZXw2.js +0 -862
  402. package/dist/itemlist-xAbIKRVj.js +0 -369
  403. package/dist/jiaosejiekou-BfY4h7uI.js +0 -58
  404. package/dist/login_history-CuQv9Iw3.js +0 -430
  405. package/dist/operate_history-CGP-1Xy2.js +0 -468
  406. package/dist/pubJiaosezukongzhiqi-CvYfc8Uz.js +0 -57
  407. package/dist/request-DQLgc7lT.js +0 -5
  408. package/dist/setItem-DkOvmWXP.js +0 -152
  409. package/dist/shujuquanxianzhubiaokongzhiqi-DyNgf1y6.js +0 -65
  410. package/dist/useAppAndResource-D_b19V4t.js +0 -55
  411. package/dist/views/organization/components/roleSelect.vue.d.ts +0 -14
  412. package/dist/views/role_group/components/roleSelect.vue.d.ts +0 -14
  413. package/dist/views/user/components/roleSelect.vue.d.ts +0 -14
  414. package/dist/xitongpeizhifuwu-C1Vm-W1B.js +0 -23
  415. package/dist/zidianfuwu-yCWHhOfO.js +0 -65
  416. package/dist/ziyuanjiekou-DhrAbneq.js +0 -69
  417. package/dist/zuzhijiaosebiaokongzhiqi-B1g74RqL.js +0 -28
  418. package/dist/zuzhijiekou-PeZuFtCO.js +0 -85
  419. package/src/assets/icons/403.svg +0 -1
  420. package/src/assets/icons/403_dark.svg +0 -1
  421. package/src/assets/icons/404.svg +0 -1
  422. package/src/assets/icons/404_dark.svg +0 -1
  423. package/src/assets/icons/browser-360.svg +0 -1
  424. package/src/assets/icons/browser-qq.svg +0 -1
  425. package/src/assets/icons/browser-uc.svg +0 -1
  426. package/src/assets/icons/change-org.svg +0 -1
  427. package/src/assets/icons/empty-data.svg +0 -1
  428. package/src/assets/icons/favorites.svg +0 -1
  429. package/src/assets/icons/image-load-fail.svg +0 -1
  430. package/src/assets/icons/logo-sig.svg +0 -1
  431. package/src/assets/icons/logo.svg +0 -1
  432. package/src/assets/icons/mima.svg +0 -1
  433. package/src/assets/icons/process-management.svg +0 -1
  434. package/src/assets/icons/project-management.svg +0 -1
  435. package/src/assets/icons/rbac.svg +0 -1
  436. package/src/assets/icons/test.svg +0 -1
  437. package/src/assets/icons/toolbar-collapse.svg +0 -1
  438. package/src/assets/icons/tree_icon.svg +0 -1
  439. package/src/assets/icons/tree_icon_checked.svg +0 -1
  440. package/src/assets/icons/workbench.svg +0 -1
  441. package/src/views/organization/components/roleSelect.vue +0 -258
  442. package/src/views/role_group/components/roleSelect.vue +0 -224
  443. package/src/views/user/components/roleSelect.vue +0 -258
@@ -0,0 +1,240 @@
1
+ <script setup lang="ts">
2
+ import * as AntdIcons from '@ant-design/icons-vue';
3
+ import { Empty } from 'ant-design-vue';
4
+ import { getAllIconModules, PubinfoIcon } from 'pubinfo';
5
+
6
+ defineOptions({ name: 'ResourceIconesSelect' });
7
+
8
+ // v-model
9
+ const modelValueRef = defineModel<string>();
10
+
11
+ // 弹窗
12
+ const visibleRef = ref(false);
13
+ function handleOpenModal() {
14
+ visibleRef.value = true;
15
+ }
16
+ function handleClose() {
17
+ visibleRef.value = false;
18
+ }
19
+
20
+ // 基础数据
21
+ interface IconItem { name: string, module?: string }
22
+
23
+ // 提取文件名(去后缀)
24
+ function extractName(path: string) {
25
+ const seg = path.split(/[\\/]/).pop() || path;
26
+ return seg.replace(/\.(svg|png|jpe?g)$/i, '');
27
+ }
28
+
29
+ // 资产图标模块 -> 图标列表 (Map 迭代)
30
+ const moduleIconMap = computed(() => {
31
+ const m = new Map<string, string[]>();
32
+ const all = getAllIconModules();
33
+ for (const [mod, record] of all.entries()) {
34
+ const arr = Object.keys(record)
35
+ .map(extractName)
36
+ .sort();
37
+ m.set(mod, arr);
38
+ }
39
+ return m;
40
+ });
41
+
42
+ // AntD 图标(带前缀 antd:)
43
+ const antdIcons = computed<string[]>(() => Object.keys(AntdIcons)
44
+ .filter(n => /(?:Outlined|Filled|TwoTone)$/.test(n))
45
+ .map(n => `antd:${n}`)
46
+ .sort(),
47
+ );
48
+
49
+ // 模块列表(全部 + 本地(local) 优先 + 其余模块 + Ant Design)
50
+ const moduleOptions = computed(() => {
51
+ const keys = Array.from(moduleIconMap.value.keys());
52
+ const hasLocal = keys.includes('local');
53
+ const others = keys.filter(k => k !== 'local').sort();
54
+ return [
55
+ { label: '全部', value: 'all' },
56
+ ...(hasLocal ? [{ label: '本地', value: 'local' }] : []),
57
+ ...others.map(v => ({ label: v, value: v })),
58
+ { label: 'Ant Design', value: 'antd' },
59
+ ];
60
+ });
61
+ const activeModule = ref('all');
62
+
63
+ // 搜索关键字
64
+ const keyword = ref('');
65
+
66
+ // 所有图标集合
67
+ const allIcons = computed<IconItem[]>(() => {
68
+ const list: IconItem[] = [];
69
+ for (const [mod, arr] of moduleIconMap.value.entries()) {
70
+ arr.forEach((n) => {
71
+ if (mod === 'local') {
72
+ list.push({ name: n, module: mod });
73
+ }
74
+ else {
75
+ list.push({ name: `${mod}-[${n}]`, module: mod });
76
+ }
77
+ });
78
+ }
79
+ antdIcons.value.forEach(n => list.push({ name: n, module: 'antd' }));
80
+ return list;
81
+ });
82
+
83
+ // 模块过滤
84
+ const moduleFiltered = computed(() => {
85
+ if (activeModule.value === 'all') {
86
+ return allIcons.value;
87
+ }
88
+ if (activeModule.value === 'antd') {
89
+ return allIcons.value.filter(i => i.module === 'antd');
90
+ }
91
+ return allIcons.value.filter(i => i.module === activeModule.value);
92
+ });
93
+
94
+ // 搜索过滤(名称包含)
95
+ const filtered = computed(() => {
96
+ const k = keyword.value.trim().toLowerCase();
97
+ if (!k) {
98
+ return moduleFiltered.value;
99
+ }
100
+ return moduleFiltered.value.filter(i => i.name.toLowerCase().includes(k));
101
+ });
102
+
103
+ // 计数
104
+ function moduleCount(val: string) {
105
+ if (val === 'all') {
106
+ return allIcons.value.length;
107
+ }
108
+ if (val === 'antd') {
109
+ return allIcons.value.filter(i => i.module === 'antd').length;
110
+ }
111
+ return allIcons.value.filter(i => i.module === val).length;
112
+ }
113
+
114
+ // 分页 (30/页)
115
+ const pageSize = 30;
116
+ const currentPage = ref(1);
117
+ const pageCount = computed(() => Math.max(1, Math.ceil(filtered.value.length / pageSize)));
118
+ const pageIcons = computed(() => {
119
+ const start = (currentPage.value - 1) * pageSize;
120
+ return filtered.value.slice(start, start + pageSize);
121
+ });
122
+ watch([keyword, activeModule], () => {
123
+ currentPage.value = 1;
124
+ });
125
+ // 当过滤结果长度变化时,若当前页超出范围则回退到最后一页
126
+ watch(filtered, () => {
127
+ if (currentPage.value > pageCount.value) {
128
+ currentPage.value = pageCount.value;
129
+ }
130
+ });
131
+ function onPageChange(page: number) {
132
+ currentPage.value = page;
133
+ }
134
+
135
+ // 选择
136
+ function handleSelect(icon: IconItem) {
137
+ modelValueRef.value = icon.name;
138
+ handleClose();
139
+ }
140
+
141
+ const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
142
+ </script>
143
+
144
+ <template>
145
+ <a-input v-model:value="modelValueRef" @click="handleOpenModal">
146
+ <template #addonAfter>
147
+ <a-tooltip>
148
+ <template #title>
149
+ <PubinfoIcon :name="modelValueRef || ''" size="40px" class="cursor-default" />
150
+ </template>
151
+ <PubinfoIcon :name="modelValueRef || ''" size="20px" class="cursor-default" />
152
+ </a-tooltip>
153
+ </template>
154
+ </a-input>
155
+ <a-form-item-rest>
156
+ <a-modal
157
+ v-model:open="visibleRef"
158
+ title="选择图标"
159
+ width="1200px"
160
+ :footer="null"
161
+ destroy-on-close
162
+ @cancel="handleClose"
163
+ >
164
+ <div class="flex gap-4 min-h-[600px]">
165
+ <!-- 左侧模块列表 -->
166
+ <div class="w-58 flex flex-col border-r border-[#e5e7eb] dark:border-[#30363d] pr-3">
167
+ <div class="mb-3">
168
+ <a-input
169
+ v-model:value="keyword"
170
+ allow-clear
171
+ :bordered="true"
172
+ placeholder="搜索图标"
173
+ class="h-9 text-13px"
174
+ >
175
+ <template #prefix>
176
+ <PubinfoIcon name="i-carbon-search" size="16" class="text-[#7a869a]" />
177
+ </template>
178
+ </a-input>
179
+ </div>
180
+ <div class="flex-1 overflow-auto space-y-1 pr-1">
181
+ <div
182
+ v-for="m in moduleOptions"
183
+ :key="m.value"
184
+ class="flex items-center justify-between px-3 py-2 rounded-md cursor-pointer text-13px border border-transparent hover:bg-[#f3f6fa] dark:hover:bg-[#262c33] transition"
185
+ :class="activeModule === m.value ? 'bg-[#eef5ff] dark:bg-[#1e2a33] border-[#1677ff] text-[#1677ff] font-medium' : 'text-[#4b5563]'"
186
+ @click="activeModule = m.value"
187
+ >
188
+ <span class="truncate max-w-[120px]">{{ m.label }}</span>
189
+ <span class="ml-2 inline-block min-w-6 text-center text-11px rounded bg-[#eef1f5] dark:bg-[#2d3339] px-1 text-[#5d6671] dark:text-[#9aa3ad]">{{ moduleCount(m.value) }}</span>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ <!-- 主体 -->
194
+ <div class="flex-1 flex flex-col min-w-0">
195
+ <template v-if="filtered.length">
196
+ <div class="grid grid-cols-6 gap-3 auto-rows-[96px] overflow-auto flex-1 p-1">
197
+ <a-tooltip
198
+ v-for="icon in pageIcons"
199
+ :key="`${icon.module || ''}:${icon.name}`"
200
+ :mouse-enter-delay="0.35"
201
+ >
202
+ <template #title>
203
+ <div class="text-12px leading-tight space-y-1">
204
+ <div class="font-medium">
205
+ {{ icon.name }}
206
+ </div>
207
+ <div v-if="icon.module" class="opacity-70">
208
+ 模块: {{ icon.module }}
209
+ </div>
210
+ </div>
211
+ </template>
212
+ <div
213
+ class="group relative flex flex-col items-center justify-center cursor-pointer rounded-md"
214
+ :class="modelValueRef === icon.name ? 'border-[#1677ff] ring-2 ring-[#1677ff80]' : ''"
215
+ @click="handleSelect(icon)"
216
+ >
217
+ <PubinfoIcon :name="icon.name" size="30px" />
218
+ </div>
219
+ </a-tooltip>
220
+ </div>
221
+ <!-- 分页 -->
222
+ <div class="mt-4 flex justify-center select-none">
223
+ <a-pagination
224
+ :current="currentPage"
225
+ :page-size="pageSize"
226
+ :total="filtered.length"
227
+ :show-size-changer="false"
228
+ show-quick-jumper
229
+ @change="onPageChange"
230
+ />
231
+ </div>
232
+ </template>
233
+ <div v-else class="flex-1 flex items-center justify-center">
234
+ <a-empty :image="simpleImage" description="没有匹配的图标" />
235
+ </div>
236
+ </div>
237
+ </div>
238
+ </a-modal>
239
+ </a-form-item-rest>
240
+ </template>
@@ -349,83 +349,66 @@ defineExpose({
349
349
  </a-modal>
350
350
  </template>
351
351
 
352
- <style lang="scss" scoped>
352
+ <style scoped>
353
353
  .border_color {
354
- border-color: #e5e6eb;
354
+ --at-apply: border-[#e5e6eb];
355
355
  }
356
356
 
357
- [data-theme="dark"] {
358
- .border_color {
359
- border-color: rgb(253 253 253 / 12%);
360
- }
357
+ [data-theme="dark"] .border_color {
358
+ --at-apply: border-[#fdfdfd1f];
361
359
  }
362
360
 
363
361
  .border_c {
364
- border: 1px dashed #ccc;
365
- border-radius: 10px;
362
+ --at-apply: border rounded-[10px] border-dashed border-[#ccc];
366
363
  }
367
364
 
368
365
  :deep(.ant-dropdown-link) {
369
- padding: 4px 6px;
370
- font-size: 12px;
371
- border-radius: 2px;
372
- transform: scale(0.7);
366
+ --at-apply: text-xs px-1.5 py-1 rounded-sm scale-[0.7];
373
367
  }
374
368
  </style>
375
369
 
376
- <style lang='scss' scoped>
377
- .custom_modal {
378
- :deep(.ant-modal-content) {
379
- padding: 0;
380
- border-radius: 0;
381
- }
370
+ <style lang='css' scoped>
371
+ .custom_modal :deep(.ant-modal-content) {
372
+ --at-apply: p-0 rounded-none;
373
+ }
382
374
 
383
- :deep(.ant-modal-header) {
384
- padding: 12px 16px;
385
- margin-bottom: 0;
386
- border-bottom: 1px solid #e5e6eb;
387
- }
375
+ .custom_modal :deep(.ant-modal-header) {
376
+ --at-apply: mb-0 px-4 py-3 border-b-[#e5e6eb] border-b border-solid;
377
+ }
388
378
 
389
- :deep(.ant-modal-title) {
390
- font-size: 16px;
391
- font-weight: 500;
392
- color: #1d2129;
393
- }
379
+ .custom_modal :deep(.ant-modal-title) {
380
+ --at-apply: text-base font-medium text-[#1d2129];
381
+ }
394
382
 
395
- :deep(.ant-modal-body) {
396
- padding: 16px;
397
- }
383
+ .custom_modal :deep(.ant-modal-body) {
384
+ --at-apply: p-4;
385
+ }
398
386
 
399
- :deep(.ant-modal-footer) {
400
- padding: 16px;
401
- border-top: 1px solid #e5e6eb;
387
+ .custom_modal :deep(.ant-modal-footer) {
388
+ --at-apply: p-4 border-t-[#e5e6eb] border-t border-solid;
389
+ }
402
390
 
403
- .ant-btn {
404
- border-radius: 2px;
405
- }
406
- }
391
+ .custom_modal :deep(.ant-modal-footer) .ant-btn {
392
+ --at-apply: rounded-sm;
407
393
  }
408
394
 
409
395
  :deep(.ant-tree-checkbox) {
410
- margin-block-start: 0;
411
- margin-inline-end: 2px;
396
+ --at-apply: mt-0 mr-2px;
412
397
  }
413
398
 
414
399
  :deep(.ant-tree-checkbox + span .ant-tree-iconEle) {
415
- margin-right: 4px;
400
+ --at-apply: mr-1;
416
401
  }
417
402
 
418
403
  .custom_tag {
419
- padding: 3px 8px;
420
- border-width: 0;
421
- border-radius: 2px;
404
+ --at-apply: px-2 py-[3px] rounded-sm border-0;
405
+ }
422
406
 
423
- :deep(.ant-tag-close-icon) {
424
- color: rgb(22 93 255 / 60%);
407
+ .custom_tag :deep(.ant-tag-close-icon) {
408
+ --at-apply: text-[#165dff] text-op-60;
409
+ }
425
410
 
426
- &:hover {
427
- color: #165dff;
428
- }
429
- }
411
+ .custom_tag :deep(.ant-tag-close-icon):hover {
412
+ --at-apply: text-[#165dff] text-op-100;
430
413
  }
431
414
  </style>
@@ -0,0 +1,60 @@
1
+ <script setup lang="ts">
2
+ import type { SelectValue } from 'ant-design-vue/es/select';
3
+ import { SearchOutlined } from '@ant-design/icons-vue';
4
+ import { getRbacPubRoleGroupGetAll } from '@/api/modules/rbac';
5
+
6
+ defineOptions({
7
+ name: 'RoleSearch',
8
+ });
9
+
10
+ const props = withDefaults(defineProps<{
11
+ group?: boolean
12
+ }>(), {
13
+ group: false,
14
+ });
15
+
16
+ const emit = defineEmits(['select']);
17
+
18
+ const searchContent = defineModel<string>();
19
+ const groupId = defineModel<string>('groupId');
20
+
21
+ const groups = ref<API.PubRoleGroup[]>([]);
22
+
23
+ async function getRoleGroup() {
24
+ const res = await getRbacPubRoleGroupGetAll({ name: '' });
25
+ if (res.success) {
26
+ groups.value = res.data ?? [];
27
+ }
28
+ }
29
+
30
+ onMounted(() => {
31
+ if (props.group) {
32
+ getRoleGroup();
33
+ }
34
+ });
35
+ </script>
36
+
37
+ <template>
38
+ <a-input v-model:value="searchContent" placeholder="请输入" allow-clear>
39
+ <template #addonBefore>
40
+ <a-select v-if="group" v-model:value="groupId" style="width: 90px;" @change="($event: SelectValue) => emit('select', $event)">
41
+ <a-select-option value="">
42
+ 全部
43
+ </a-select-option>
44
+ <a-select-option v-for="item in groups" :key="item.id" :value="item.id">
45
+ <a-tooltip :title="item.name">
46
+ {{ item.name }}
47
+ </a-tooltip>
48
+ </a-select-option>
49
+ </a-select>
50
+
51
+ <div v-else>
52
+ 全部
53
+ </div>
54
+ </template>
55
+
56
+ <template #suffix>
57
+ <SearchOutlined />
58
+ </template>
59
+ </a-input>
60
+ </template>
@@ -0,0 +1,174 @@
1
+ <script setup lang="ts">
2
+ import type { CheckboxChangeEvent } from 'ant-design-vue/es/checkbox/interface';
3
+ import type { SelectValue } from './interface';
4
+ import type { Role } from './useRole';
5
+ import { CloseOutlined } from '@ant-design/icons-vue';
6
+ import { useToggle } from '@vueuse/core';
7
+ import { Card, Checkbox, CheckboxGroup, Modal, Spin, theme } from 'ant-design-vue';
8
+ import RoleSearch from './RoleSearch.vue';
9
+ import TooltipLabel from './TooltipLabel.vue';
10
+ import { useRole, useRoleGroup } from './useRole';
11
+
12
+ defineOptions({
13
+ name: 'RoleSelector',
14
+ });
15
+
16
+ withDefaults(defineProps<{
17
+ group?: boolean
18
+ }>(), {
19
+ group: false,
20
+ });
21
+
22
+ const emit = defineEmits(['select']);
23
+
24
+ const { token } = theme.useToken();
25
+
26
+ const open = defineModel<boolean>('open');
27
+ const setOpen = useToggle(open);
28
+
29
+ const selectValue = ref<SelectValue[]>([]);
30
+
31
+ const role = reactive(useRole());
32
+ const roleGroup = reactive(useRoleGroup());
33
+
34
+ const search = ref('');
35
+ const groupId = ref('');
36
+ async function onSearchSelect(id: string) {
37
+ await roleGroup.getData(id);
38
+ }
39
+
40
+ async function onOpen(value: SelectValue[] = []) {
41
+ selectValue.value = value;
42
+ search.value = '';
43
+ groupId.value = '';
44
+ await role.getData();
45
+ setOpen(true);
46
+ }
47
+
48
+ const roleData = computed(() => {
49
+ return groupId.value === '' ? role.roles : roleGroup.roles;
50
+ });
51
+
52
+ function filterName(v: Role) {
53
+ return roleData.value.findIndex(item => item.id === v.id) > -1 && v.name?.includes(search.value);
54
+ }
55
+
56
+ function onCheck(e: CheckboxChangeEvent, item: Role) {
57
+ if (e.target.checked) {
58
+ selectValue.value.push({ value: item.id, label: item.name } as SelectValue);
59
+ }
60
+ else {
61
+ selectValue.value = selectValue.value.filter(e => e.value !== item.id);
62
+ }
63
+ }
64
+
65
+ function onClose(value: SelectValue['value']) {
66
+ selectValue.value = selectValue.value.filter(e => e.value !== value);
67
+ }
68
+
69
+ function onSubmit() {
70
+ emit('select', selectValue.value);
71
+ setOpen(false);
72
+ }
73
+
74
+ function onClear() {
75
+ const disabledData = selectValue.value.filter(e => !role.roles.some(role => role.id === e.value));
76
+ selectValue.value = disabledData;
77
+ }
78
+
79
+ defineExpose({
80
+ open: onOpen,
81
+ });
82
+ </script>
83
+
84
+ <template>
85
+ <Modal
86
+ v-model:open="open"
87
+ title="角色选择"
88
+ :mask-closable="false"
89
+ :width="750"
90
+ :z-index="1001"
91
+ ok-text="确认"
92
+ cancel-text="取消"
93
+ destroy-on-close
94
+ @ok="onSubmit()"
95
+ >
96
+ <div class="border border-solid h-[400px]" :style="{ borderColor: token.colorBorder }">
97
+ <div class="h-full flex">
98
+ <Card
99
+ :bordered="false"
100
+ size="small"
101
+ :head-style="{ backgroundColor: token.colorBgLayout, borderRadius: 0, borderWidth: 0, borderBottomWidth: '1px', padding: 0 }"
102
+ :body-style="{ flex: 1, padding: 0, height: 'calc(100% - 38px)' }"
103
+ :style="{ boxShadow: 'none', borderRadius: 0, borderColor: token.colorBorder }"
104
+ class="flex h-full flex-col w-1/2"
105
+ >
106
+ <div class="p-2 flex flex-col h-full gap-2">
107
+ <RoleSearch v-model="search" v-model:group-id="groupId" :group="group" @select="onSearchSelect" />
108
+
109
+ <div class="flex-1 overflow-y-auto overflow-x-hidden">
110
+ <div v-if="role.loading || roleGroup.loading" class="flex items-center justify-center size-full">
111
+ <Spin />
112
+ </div>
113
+ <CheckboxGroup v-else :value="selectValue.map(e => e.value)" class="w-full overflow-x-hidden">
114
+ <div
115
+ v-for="item in roleData"
116
+ v-show="filterName(item)"
117
+ :key="item.id"
118
+ class="w-full py-2 border-0 border-b border-solid truncate"
119
+ :style="{ borderColor: token.colorBorder }"
120
+ >
121
+ <Checkbox :value="item.id" @change="($event) => onCheck($event, item)">
122
+ <TooltipLabel :name="item.name" />
123
+ </Checkbox>
124
+ </div>
125
+ </CheckboxGroup>
126
+ </div>
127
+ </div>
128
+ </Card>
129
+
130
+ <div
131
+ :style="{ borderColor: token.colorBorder }"
132
+ class="h-full border-0 border-r border-solid"
133
+ />
134
+
135
+ <Card
136
+ :bordered="false"
137
+ size="small"
138
+ :head-style="{ backgroundColor: token.colorBgLayout, borderRadius: 0, borderWidth: 0, borderBottomWidth: '1px' }"
139
+ :body-style="{ flex: 1, padding: 0, overflow: 'hidden' }"
140
+ :style="{ boxShadow: 'none', borderRadius: 0 }"
141
+ class="flex h-full flex-col flex-1"
142
+ >
143
+ <template #title>
144
+ <span class="font-normal">
145
+ 已选角色
146
+ </span>
147
+ </template>
148
+ <template #extra>
149
+ <a :style="{ color: token.colorPrimary }" @click="onClear()">
150
+ 清空
151
+ </a>
152
+ </template>
153
+
154
+ <div class="gap-1 p-2 h-full overflow-y-auto">
155
+ <div
156
+ v-for="item in selectValue"
157
+ :key="item.value"
158
+ class="inline-block mb-1 py-1 px-2 mx-0.5 max-w-full rounded"
159
+ :style="{ backgroundColor: token.colorPrimaryBg }"
160
+ >
161
+ <TooltipLabel :name="item.label" :size="20" />
162
+ <CloseOutlined
163
+ v-if="role.roles.some(role => role.id === item.value)"
164
+ class="ml-1 cursor-pointer text-xs"
165
+ :style="{ color: token.colorPrimary }"
166
+ @click="onClose(item.value)"
167
+ />
168
+ </div>
169
+ </div>
170
+ </Card>
171
+ </div>
172
+ </div>
173
+ </Modal>
174
+ </template>
@@ -0,0 +1,24 @@
1
+ <script setup lang="ts">
2
+ import { Tooltip } from 'ant-design-vue';
3
+
4
+ defineOptions({
5
+ name: 'TooltipLabel',
6
+ inheritAttrs: false,
7
+ });
8
+
9
+ withDefaults(defineProps<{
10
+ name?: string
11
+ size?: number
12
+ }>(), {
13
+ size: 21,
14
+ });
15
+ </script>
16
+
17
+ <template>
18
+ <Tooltip v-if="(name || '').length > size" :title="name">
19
+ <span v-bind="$attrs">{{ `${name?.slice(0, size)}...` }}</span>
20
+ </Tooltip>
21
+ <span v-else v-bind="$attrs">
22
+ {{ name }}
23
+ </span>
24
+ </template>
@@ -0,0 +1,2 @@
1
+ export * from './interface';
2
+ export { default as RoleSelector } from './RoleSelector.vue';
@@ -0,0 +1,4 @@
1
+ export interface SelectValue {
2
+ value: string | number
3
+ label: string
4
+ }
@@ -0,0 +1,56 @@
1
+ import { useToggle } from '@vueuse/core';
2
+ import { getRbacPubRoleGroupGetById, getRbacRoleRoleList } from '@/api/modules/rbac';
3
+
4
+ export type Role = API.PubRole;
5
+
6
+ export function useRole() {
7
+ const [loading, setLoading] = useToggle(false);
8
+
9
+ const roles = ref<Role[]>([]);
10
+
11
+ async function getData() {
12
+ try {
13
+ setLoading(true);
14
+ const res = await getRbacRoleRoleList();
15
+ if (res.success) {
16
+ roles.value = res.data ?? [];
17
+ }
18
+ }
19
+ finally {
20
+ setLoading(false);
21
+ }
22
+ }
23
+
24
+ return {
25
+ loading,
26
+ setLoading,
27
+ roles,
28
+ getData,
29
+ };
30
+ }
31
+
32
+ export function useRoleGroup() {
33
+ const [loading, setLoading] = useToggle(false);
34
+
35
+ const roles = ref<Role[]>([]);
36
+
37
+ async function getData(id: string) {
38
+ try {
39
+ setLoading(true);
40
+ const res = await getRbacPubRoleGroupGetById({ id });
41
+ if (res.success) {
42
+ roles.value = res.data?.roles ?? [];
43
+ }
44
+ }
45
+ finally {
46
+ setLoading(false);
47
+ }
48
+ }
49
+
50
+ return {
51
+ loading,
52
+ setLoading,
53
+ roles,
54
+ getData,
55
+ };
56
+ }