@gadmin2n/schematics 0.0.64 → 0.0.65

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 (222) hide show
  1. package/dist/lib/application/files/gadmin2-game-angle-demo/.dockerignore +2 -2
  2. package/dist/lib/application/files/gadmin2-game-angle-demo/Dockerfile +40 -26
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +30 -4
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/example.prisma +33 -0
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +163 -0
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Event.ts +70 -0
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Game.ts +6 -6
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/ITActivityDay.ts +70 -0
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Log.ts +2 -2
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Role.ts +2 -2
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.env +20 -9
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.env.local +1 -0
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.eslintrc.js +1 -0
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.prettierignore +1 -0
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/README.md +2 -18
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/gadmin-cli.json +1 -1
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +1232 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +65 -38
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma/.generator.prisma +4 -3
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +16 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/games.ts +1 -71
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +17 -21
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/permissions.ts +278 -0
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/seedDataMngtPages.ts +258 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/users.ts +7 -0
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/alias.config.ts +7 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.controller.ts +151 -11
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.module.ts +29 -13
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.service.ts +151 -12
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/auth.guard.ts +87 -41
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/http-cache.interceptor.ts +21 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/logger.ts +19 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/safe-log.util.ts +176 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/{yufuid.ts → taihu.ts} +49 -34
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/tracing.ts +174 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/trim.pipe.ts +51 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/utils.ts +91 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/woaAuth.ts +25 -12
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +22 -12
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.controller.spec.ts +20 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.controller.ts +190 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.module.ts +10 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.service.spec.ts +338 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/audit/audit.service.ts +83 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.controller.spec.ts +20 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.controller.ts +188 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.module.ts +10 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.service.spec.ts +18 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/game/game.service.ts +83 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.controller.spec.ts +20 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.controller.ts +250 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.module.ts +10 -0
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.service.spec.ts +18 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.service.ts +1051 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.controller.spec.ts +20 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.controller.ts +196 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.module.ts +13 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.service.spec.ts +18 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/pageResource/pageResource.service.ts +219 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.controller.spec.ts +20 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.controller.ts +196 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.module.ts +10 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.service.spec.ts +18 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/resource/resource.service.ts +199 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.controller.spec.ts +20 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.controller.ts +210 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.module.ts +12 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.service.spec.ts +18 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.service.ts +849 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/roles-refresher.service.ts +133 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.controller.spec.ts +20 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.controller.ts +196 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.module.ts +10 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.service.spec.ts +18 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/rolePages/rolePages.service.ts +201 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.controller.spec.ts +20 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.controller.ts +196 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.module.ts +10 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.service.spec.ts +18 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/roleResource/roleResource.service.ts +216 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.controller.spec.ts +20 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.controller.ts +198 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.module.ts +10 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.service.spec.ts +18 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/user/user.service.ts +104 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/server/start-prod.sh +130 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/server/tsconfig.json +18 -3
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/web/index.html +19 -0
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +34 -42
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/web/postcss.config.cjs +6 -0
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +111 -185
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/auditLogProvider.ts +5 -5
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +49 -51
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/custom-avatar.tsx +38 -0
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +4 -0
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/{header/index.tsx → header.tsx} +22 -31
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/index.ts +3 -1
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +32 -0
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/logo.tsx +19 -0
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +331 -166
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/title.tsx +61 -0
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/pagination-total.tsx +21 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/index.ts +1 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/role-tag.tsx +44 -0
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/text.tsx +74 -0
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +258 -0
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +16 -0
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/enums/audit-log.enum.ts +13 -0
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/enums/index.ts +1 -0
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +22 -4
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +211 -0
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useFetchData.ts +33 -0
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRoles.ts +30 -0
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useUserPageAccess.ts +339 -0
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +8 -4
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/index.tsx +3 -11
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/web/{public → src}/locales/en/common.json +1 -1
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/web/{public → src}/locales/zh_CN/common.json +1 -1
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +3 -0
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.tsx +134 -0
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/create.tsx +113 -0
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +122 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.ts +8 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.tsx +6 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +213 -0
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +61 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +168 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/CreatePageModal.tsx +42 -0
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/EditPageModal.tsx +42 -0
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageDetailDrawer.tsx +101 -0
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageFormModal.tsx +731 -0
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/create.tsx +113 -0
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/edit.tsx +122 -0
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/hooks/usePageManagement.ts +36 -0
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.ts +8 -0
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.tsx +6 -0
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +1113 -0
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/queries.ts +17 -0
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/show.tsx +61 -0
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/types.ts +44 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/create.tsx +113 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/edit.tsx +122 -0
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/index.tsx +6 -0
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/list.tsx +243 -0
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/show.tsx +61 -0
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permission-readme/index.tsx +1088 -0
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/CreateModal.tsx +25 -0
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/EditModal.tsx +28 -0
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/ResourceDetailDrawer.tsx +160 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +202 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/create.tsx +113 -0
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/edit.tsx +122 -0
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.ts +9 -0
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.tsx +6 -0
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +184 -0
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/queries.ts +10 -0
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/show.tsx +61 -0
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/types.ts +9 -0
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/CreateModal.tsx +30 -0
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/EditModal.tsx +47 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/RoleDetailDrawer.tsx +56 -0
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +302 -0
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/create.tsx +113 -0
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/edit.tsx +122 -0
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/hooks/useRolePage.ts +35 -0
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.ts +8 -0
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.tsx +6 -0
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +382 -0
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/queries.ts +8 -0
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/show.tsx +61 -0
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/types.ts +8 -0
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/create.tsx +113 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/edit.tsx +122 -0
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/index.tsx +6 -0
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/list.tsx +243 -0
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/show.tsx +61 -0
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/create.tsx +113 -0
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/edit.tsx +122 -0
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/index.tsx +6 -0
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/list.tsx +243 -0
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/show.tsx +61 -0
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/create-modal.tsx +17 -0
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/edit-modal.tsx +19 -0
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/form-modal.tsx +188 -0
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/index.ts +5 -0
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/role-tag.tsx +48 -0
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +140 -0
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/create.tsx +113 -0
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/edit.tsx +122 -0
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.ts +8 -0
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.tsx +6 -0
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +342 -0
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/queries.ts +14 -0
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/show.tsx +61 -0
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +132 -0
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +58 -0
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +128 -0
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +18 -0
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +21 -0
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/audit-log.ts +1 -0
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/index.ts +3 -0
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/role.ts +7 -0
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/user.ts +1 -0
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/get-name-initials.ts +8 -0
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/get-random-color.ts +27 -0
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/index.ts +2 -0
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/utils.tsx +5 -0
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/vite-env.d.ts +1 -0
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/tsconfig.json +3 -3
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +31 -0
  211. package/package.json +1 -1
  212. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/sample.prisma +0 -65
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Source.ts +0 -76
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Tasklog.ts +0 -76
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/roles.ts +0 -4
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/web/craco.config.js +0 -27
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/public/index.html +0 -53
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/styles.ts +0 -10
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/react-app-env.d.ts +0 -1
  220. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/reportWebVitals.ts +0 -15
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.less +0 -79
  222. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/VanillaJSONEditor/{index.js → index.jsx} +0 -0
@@ -0,0 +1,113 @@
1
+
2
+ import {
3
+ FieldDataType,
4
+ handleInitialValues,
5
+ handleOnFinish,
6
+ ModelType,
7
+ produceModel,
8
+ } from '@gadmin2n/react-common';
9
+ import { Create, useFileUploadState, useForm } from "@refinedev/antd";
10
+ import { Form } from "antd";
11
+ import { IResourceComponentsProps, useApiUrl, useTranslate } from "@refinedev/core";
12
+ import React, { useContext, useState } from "react";
13
+ import { getFormItem, onFormValuesChange } from "../../helpers";
14
+ import { modelsMap, modelsEnum } from "../../generated/models.index";
15
+ import {
16
+ roleFormConfig as formConfig,
17
+ roleFormPrismaSelect as formPrismaSelect,
18
+ } from "../../generated/props/role/config";
19
+ import {
20
+ roleModel,
21
+ useRelation,
22
+ } from "../../generated/props/role/model";
23
+ import { Role } from "../../generated/types/prisma.types";
24
+ import { RoleForm as transformClass } from "../../generated/props/role/form.validator";
25
+ import { BusinessContext } from 'components/contexts/business';
26
+
27
+ export const RoleCreate: React.FC<IResourceComponentsProps> = () => {
28
+ const resourceName = "role";
29
+ const t = useTranslate();
30
+
31
+
32
+
33
+ const [[fields, model]] = useState(() => {
34
+ const model: ModelType = produceModel(
35
+ roleModel,
36
+ {
37
+ // all formItem attrs surport, https://ant.design/components/form#formitem
38
+ // description : { component : <MDEditor data-color-mode="light" /> },
39
+ // status : { normalize : (value: any) => value ? "1" : "0" },
40
+ // cron: {validator: { validator: runCronValidator },},
41
+ },
42
+ transformClass
43
+ );
44
+
45
+ const fields: FieldDataType[] = formConfig.fields
46
+ .map((fieldName: string) => model[fieldName])
47
+ .filter((field: FieldDataType) => field);
48
+
49
+ return [fields, model] as const;
50
+ });
51
+
52
+ const { formProps, saveButtonProps, onFinish, form } =
53
+ useForm<Role>({
54
+ meta: { select: formPrismaSelect},
55
+ });
56
+ if (formProps.initialValues || formConfig.initialValues) {
57
+ formProps.initialValues = handleInitialValues(
58
+ formProps.initialValues || formConfig.initialValues || {},
59
+ fields,
60
+ );
61
+ }
62
+
63
+ const apiUrl = useApiUrl();
64
+ const { isLoading, onChange } = useFileUploadState();
65
+ const relationSelectProps = useRelation(modelsMap);
66
+
67
+ return (
68
+ <Create
69
+ saveButtonProps={{
70
+ ...saveButtonProps,
71
+ disabled: isLoading,
72
+ }}
73
+ >
74
+ <Form
75
+ {...formProps}
76
+ validateTrigger="onBlur"
77
+ onFinish={(values) => {
78
+ onFinish(
79
+ handleOnFinish(
80
+ {
81
+ ...values,
82
+
83
+ },
84
+ fields
85
+ )
86
+ );
87
+ }}
88
+ layout="vertical"
89
+ form={form}
90
+ onValuesChange={onFormValuesChange(
91
+ form,
92
+ formConfig.reaction,
93
+ )}
94
+ >
95
+ {fields.map((field) => {
96
+ return getFormItem(
97
+ field,
98
+ resourceName,
99
+ t,
100
+ form,
101
+ formConfig.reaction,
102
+ modelsEnum,
103
+ model,
104
+ apiUrl,
105
+ relationSelectProps,
106
+ onChange
107
+ );
108
+ })}
109
+ </Form>
110
+ </Create>
111
+ );
112
+ };
113
+
@@ -0,0 +1,122 @@
1
+
2
+ import {
3
+ FieldDataType,
4
+ handleInitialValues,
5
+ handleOnFinish,
6
+ ModelType,
7
+ produceModel,
8
+ } from "@gadmin2n/react-common";
9
+ import { Edit, ListButton, RefreshButton, useFileUploadState, useForm } from "@refinedev/antd";
10
+ import { Form } from "antd";
11
+ import { IResourceComponentsProps, useApiUrl, useParsed, useTranslate } from "@refinedev/core";
12
+ import { getFormItem, onFormValuesChange } from "../../helpers";
13
+ import React, { useContext, useState } from "react";
14
+
15
+ import { modelsMap, modelsEnum } from "../../generated/models.index";
16
+ import {
17
+ roleFormConfig as formConfig,
18
+ roleFormPrismaSelect as formPrismaSelect,
19
+ } from "../../generated/props/role/config";
20
+ import {
21
+ roleModel,
22
+ useRelation,
23
+ } from "../../generated/props/role/model";
24
+ import { Role } from "../../generated/types/prisma.types";
25
+ import { RoleForm as transformClass } from "../../generated/props/role/form.validator";
26
+ import { BusinessContext } from 'components/contexts/business';
27
+
28
+ export const RoleEdit: React.FC<IResourceComponentsProps> = () => {
29
+ const resourceName = "role";
30
+ const t = useTranslate();
31
+
32
+
33
+ const [[fields, model]] = useState(() => {
34
+ const model: ModelType = produceModel(
35
+ roleModel,
36
+ {
37
+ // all formItem attrs surport, https://ant.design/components/form#formitem
38
+ // description : { component : <MDEditor data-color-mode="light" /> },
39
+ // status : { normalize : (value: any) => value ? "1" : "0" },
40
+ // cron: {validator: { validator: runCronValidator },},
41
+ },
42
+ transformClass
43
+ );
44
+
45
+ const fields: FieldDataType[] = formConfig.fields
46
+ .map((fieldName: string) => model[fieldName])
47
+ .filter((field: FieldDataType) => field);
48
+
49
+ return [fields, model] as const;
50
+ });
51
+
52
+ const { formProps, saveButtonProps, onFinish, form } =
53
+ useForm<Role>({
54
+ meta: { select: formPrismaSelect},
55
+ });
56
+ formProps.initialValues = handleInitialValues(
57
+ formProps.initialValues || {},
58
+ fields
59
+ );
60
+
61
+ const apiUrl = useApiUrl();
62
+ const { isLoading, onChange } = useFileUploadState();
63
+
64
+ const relationSelectProps = useRelation(modelsMap);
65
+
66
+ return (
67
+ <Edit
68
+ saveButtonProps={{
69
+ ...saveButtonProps,
70
+ disabled: isLoading,
71
+ }}
72
+ headerButtons={
73
+ <>
74
+ <ListButton />
75
+ <RefreshButton
76
+ meta={{ select: formPrismaSelect}}
77
+ />
78
+ </>
79
+ }
80
+ >
81
+ <Form
82
+ {...formProps}
83
+ validateTrigger="onBlur"
84
+ onFinish={(values) => {
85
+ onFinish(
86
+ handleOnFinish(
87
+ {
88
+ ...values,
89
+
90
+ id: undefined,
91
+ },
92
+ fields,
93
+ "edit"
94
+ )
95
+ );
96
+ }}
97
+ layout="vertical"
98
+ form={form}
99
+ onValuesChange={onFormValuesChange(
100
+ form,
101
+ formConfig.reaction,
102
+ )}
103
+ >
104
+ {fields.map((field) => {
105
+ return getFormItem(
106
+ field,
107
+ resourceName,
108
+ t,
109
+ form,
110
+ formConfig.reaction,
111
+ modelsEnum,
112
+ model,
113
+ apiUrl,
114
+ relationSelectProps,
115
+ onChange
116
+ );
117
+ })}
118
+ </Form>
119
+ </Edit>
120
+ );
121
+ };
122
+
@@ -0,0 +1,35 @@
1
+ import { useFetchData } from "hooks/useFetchData";
2
+
3
+ export const useRolePage = (
4
+ defaultRolePagesQuery: any = {},
5
+ defaultPagesQuery: any = {},
6
+ defaultRolesQuery: any = {},
7
+ ) => {
8
+ // Fetch role pages and page data from backend
9
+ const {
10
+ data: rolePagesData,
11
+ fetchData: refetchRolePages,
12
+ reqQuery: rolePagesQuery,
13
+ } = useFetchData("rolePages/findMany", "post", defaultRolePagesQuery);
14
+ const {
15
+ data: pageData,
16
+ fetchData: refetchPages,
17
+ reqQuery: pageQuery,
18
+ } = useFetchData("page/findMany", "post", defaultPagesQuery);
19
+ const {
20
+ data: rolesData,
21
+ fetchData: refetchRoles,
22
+ reqQuery: rolesQuery,
23
+ } = useFetchData("role/findMany", "post", defaultRolesQuery);
24
+ return {
25
+ rolePagesData,
26
+ refetchRolePages,
27
+ rolePagesQuery,
28
+ pageData,
29
+ refetchPages,
30
+ pageQuery,
31
+ rolesData,
32
+ refetchRoles,
33
+ rolesQuery,
34
+ };
35
+ };
@@ -0,0 +1,8 @@
1
+ export * from './list';
2
+
3
+ // Stub exports for generated/resources.tsx compatibility
4
+ const EmptyComponent = () => null;
5
+ export const RoleCreate = EmptyComponent;
6
+ export const RoleEdit = EmptyComponent;
7
+ export const RoleList = EmptyComponent;
8
+ export const RoleShow = EmptyComponent;
@@ -0,0 +1,6 @@
1
+
2
+ export * from "./list";
3
+ export * from "./create";
4
+ export * from "./edit";
5
+ export * from "./show";
6
+
@@ -0,0 +1,382 @@
1
+ import React, { useCallback, useMemo, useState } from "react";
2
+ import { useTable } from "@refinedev/antd";
3
+ import { useGetLocale } from "@refinedev/core";
4
+ import { Table, Button, Space, Tooltip } from "antd";
5
+
6
+ import { EditModal } from "./Components/EditModal";
7
+ import { CreateModal } from "./Components/CreateModal";
8
+ import type { RolePageTreeNode } from "./types";
9
+ import { useRolePage } from "./hooks/useRolePage";
10
+ import { EditOutlined, EyeOutlined } from "@ant-design/icons";
11
+ import { RoleDetailDrawer } from "./Components/RoleDetailDrawer";
12
+
13
+ type RolePageInfo = {
14
+ id: number;
15
+ name: string;
16
+ menuPath: string;
17
+ };
18
+
19
+ type RolePermissionSummary = {
20
+ pageIds: number[];
21
+ pageNames: string[];
22
+ pageInfos: RolePageInfo[];
23
+ actions: string[];
24
+ };
25
+
26
+ const PAGE_NAME_DISPLAY_LIMIT = 40;
27
+
28
+ const normalizeToNumber = (value: unknown): number | null => {
29
+ if (typeof value === "number" && !Number.isNaN(value)) {
30
+ return value;
31
+ }
32
+ if (typeof value === "string" && value.trim().length > 0) {
33
+ const parsedValue = Number(value);
34
+ return Number.isNaN(parsedValue) ? null : parsedValue;
35
+ }
36
+ return null;
37
+ };
38
+
39
+ const extractActionsFromRelation = (relation: any, pageRecord: any): string[] => {
40
+ const aggregatedActions = new Set<string>();
41
+ const relationActions = relation?.actions ?? relation?.actionList;
42
+
43
+ if (Array.isArray(relationActions)) {
44
+ relationActions.forEach((action: any) => {
45
+ if (typeof action === "string" && action) {
46
+ aggregatedActions.add(action);
47
+ } else if (typeof action === "object" && action?.name) {
48
+ aggregatedActions.add(action.name);
49
+ }
50
+ });
51
+ } else if (typeof relationActions === "string") {
52
+ relationActions
53
+ .split(",")
54
+ .map((action: string) => action.trim())
55
+ .filter(Boolean)
56
+ .forEach(action => aggregatedActions.add(action));
57
+ }
58
+
59
+ const pageResources =
60
+ relation?.pageResources ?? pageRecord?.pageResources ?? pageRecord?.resources ?? [];
61
+
62
+ if (Array.isArray(pageResources)) {
63
+ pageResources.forEach((resource: any) => {
64
+ const action = resource?.action ?? resource?.code ?? resource?.name ?? resource;
65
+ if (typeof action === "string" && action) {
66
+ aggregatedActions.add(action);
67
+ }
68
+ });
69
+ }
70
+
71
+ return Array.from(aggregatedActions);
72
+ };
73
+
74
+ export const RoleManagementListPage: React.FC = () => {
75
+ const getLocale = useGetLocale();
76
+ const currentLocale = getLocale();
77
+
78
+ const { tableProps } = useTable({
79
+ resource: "role",
80
+ pagination: {
81
+ pageSize: 20,
82
+ },
83
+ });
84
+
85
+ const { rolePagesData, refetchRolePages, rolePagesQuery, pageData, refetchPages, pageQuery } =
86
+ useRolePage();
87
+
88
+ const pageLookup = useMemo<Record<number, any>>(() => {
89
+ const pages: any[] = Array.isArray(pageData?.data) ? pageData.data : [];
90
+ const lookup: Record<number, any> = {};
91
+
92
+ pages.forEach((page: any) => {
93
+ const pageId = normalizeToNumber(page?.id ?? page?.pageId ?? page?.page_id);
94
+ if (pageId !== null) {
95
+ lookup[pageId] = page;
96
+ }
97
+ });
98
+
99
+ return lookup;
100
+ }, [pageData]);
101
+
102
+ const pageTreeData = useMemo<RolePageTreeNode[]>(() => {
103
+ const pages: any[] = Array.isArray(pageData?.data) ? pageData.data : [];
104
+ const isZh = currentLocale === "zh_CN" || currentLocale === "zh";
105
+
106
+ const getPageTitle = (page: any, pageId: number): string => {
107
+ if (isZh) {
108
+ return page?.zhName || page?.name || page?.code || `Page ${pageId}`;
109
+ }
110
+ return page?.enName || page?.name || page?.code || `Page ${pageId}`;
111
+ };
112
+
113
+ const nodeMap = new Map<number, { node: RolePageTreeNode; parentId: number | null; sortOrder: number | null }>();
114
+
115
+ pages.forEach((page: any) => {
116
+ const pageId = normalizeToNumber(page?.id ?? page?.pageId ?? page?.page_id);
117
+ if (pageId === null) {
118
+ return;
119
+ }
120
+
121
+ const parentId =
122
+ normalizeToNumber(page?.parentId ?? page?.parent_id ?? page?.parent?.id) ?? null;
123
+ const title = getPageTitle(page, pageId);
124
+ const sortOrder = normalizeToNumber(page?.sortOrder ?? page?.sort_order);
125
+
126
+ nodeMap.set(pageId, {
127
+ node: {
128
+ title,
129
+ value: String(pageId),
130
+ key: String(pageId),
131
+ children: [],
132
+ },
133
+ parentId,
134
+ sortOrder,
135
+ });
136
+ });
137
+
138
+ const roots: RolePageTreeNode[] = [];
139
+
140
+ nodeMap.forEach(({ node, parentId }) => {
141
+ if (parentId !== null && nodeMap.has(parentId)) {
142
+ nodeMap.get(parentId)?.node.children?.push(node);
143
+ } else {
144
+ roots.push(node);
145
+ }
146
+ });
147
+
148
+ // Build a map from node key to sortOrder for sorting
149
+ const sortOrderMap = new Map<string, number | null>();
150
+ nodeMap.forEach(({ sortOrder }, pageId) => {
151
+ sortOrderMap.set(String(pageId), sortOrder);
152
+ });
153
+
154
+ const sortNodes = (nodes: RolePageTreeNode[]) => {
155
+ nodes.sort((a, b) => {
156
+ const orderA = sortOrderMap.get(a.key) ?? Infinity;
157
+ const orderB = sortOrderMap.get(b.key) ?? Infinity;
158
+ return (orderA as number) - (orderB as number);
159
+ });
160
+ nodes.forEach(child => {
161
+ if (child.children && child.children.length) {
162
+ sortNodes(child.children);
163
+ }
164
+ });
165
+ };
166
+
167
+ const pruneEmptyChildren = (nodes: RolePageTreeNode[]): RolePageTreeNode[] =>
168
+ nodes.map(node => {
169
+ if (node.children && node.children.length) {
170
+ return {
171
+ ...node,
172
+ children: pruneEmptyChildren(node.children),
173
+ };
174
+ }
175
+ const { children, ...rest } = node;
176
+ return rest as RolePageTreeNode;
177
+ });
178
+
179
+ sortNodes(roots);
180
+ return pruneEmptyChildren(roots);
181
+ }, [pageData, currentLocale]);
182
+
183
+ const rolePermissionSummary = useMemo<Record<number, RolePermissionSummary>>(() => {
184
+ const relations: any[] = Array.isArray(rolePagesData?.data) ? rolePagesData.data : [];
185
+ const isZh = currentLocale === "zh_CN" || currentLocale === "zh";
186
+
187
+ const getLocalizedName = (pageRecord: any, fallback: string): string => {
188
+ if (isZh) {
189
+ return pageRecord?.zhName || pageRecord?.name || pageRecord?.code || fallback;
190
+ }
191
+ return pageRecord?.enName || pageRecord?.name || pageRecord?.code || fallback;
192
+ };
193
+
194
+ const buildMenuPath = (pageId: number): string => {
195
+ const parts: string[] = [];
196
+ let currentId: number | null = pageId;
197
+ const visited = new Set<number>();
198
+ while (currentId !== null && !visited.has(currentId)) {
199
+ visited.add(currentId);
200
+ const record: any = pageLookup[currentId];
201
+ if (!record) break;
202
+ parts.unshift(getLocalizedName(record, record?.name || `Page ${currentId}`));
203
+ currentId = normalizeToNumber(record?.parentId ?? record?.parent_id) ?? null;
204
+ }
205
+ return parts.join(" / ");
206
+ };
207
+
208
+ const summaryMap: Record<number, RolePermissionSummary> = {};
209
+
210
+ relations.forEach((relation: any) => {
211
+ const roleId = normalizeToNumber(relation?.roleId);
212
+ const pageId = normalizeToNumber(relation?.pageId);
213
+
214
+ if (roleId === null || pageId === null) {
215
+ return;
216
+ }
217
+
218
+ if (!summaryMap[roleId]) {
219
+ summaryMap[roleId] = {
220
+ pageIds: [],
221
+ pageNames: [],
222
+ pageInfos: [],
223
+ actions: [],
224
+ };
225
+ }
226
+
227
+ const summary = summaryMap[roleId];
228
+
229
+ if (!summary.pageIds.includes(pageId)) {
230
+ summary.pageIds.push(pageId);
231
+ }
232
+
233
+ const pageRecord = relation?.page ?? pageLookup[pageId];
234
+ const pageName = pageRecord?.name || pageRecord?.code || `Page ${pageId}`;
235
+
236
+ if (pageName && !summary.pageNames.includes(pageName)) {
237
+ summary.pageNames.push(pageName);
238
+ }
239
+
240
+ const localizedName = getLocalizedName(pageRecord, pageName);
241
+ if (!summary.pageInfos.some(p => p.id === pageId)) {
242
+ summary.pageInfos.push({
243
+ id: pageId,
244
+ name: localizedName,
245
+ menuPath: buildMenuPath(pageId),
246
+ });
247
+ }
248
+
249
+ extractActionsFromRelation(relation, pageRecord).forEach(action => {
250
+ if (action && !summary.actions.includes(action)) {
251
+ summary.actions.push(action);
252
+ }
253
+ });
254
+ });
255
+
256
+ // Build ancestor sort-order chain for hierarchical sorting
257
+ const getSortChain = (pageId: number): number[] => {
258
+ const chain: number[] = [];
259
+ let currentId: number | null = pageId;
260
+ const visited = new Set<number>();
261
+ while (currentId !== null && !visited.has(currentId)) {
262
+ visited.add(currentId);
263
+ const record: any = pageLookup[currentId];
264
+ if (!record) break;
265
+ chain.unshift(record?.sortOrder ?? record?.sort_order ?? Infinity);
266
+ currentId = normalizeToNumber(record?.parentId ?? record?.parent_id) ?? null;
267
+ }
268
+ return chain;
269
+ };
270
+
271
+ // Sort pageInfos by full ancestor sort-order chain
272
+ Object.values(summaryMap).forEach(summary => {
273
+ summary.pageInfos.sort((a, b) => {
274
+ const chainA = getSortChain(a.id);
275
+ const chainB = getSortChain(b.id);
276
+ const len = Math.max(chainA.length, chainB.length);
277
+ for (let i = 0; i < len; i++) {
278
+ const valA = chainA[i] ?? Infinity;
279
+ const valB = chainB[i] ?? Infinity;
280
+ if (valA !== valB) return valA - valB;
281
+ }
282
+ return chainA.length - chainB.length;
283
+ });
284
+ });
285
+
286
+ return summaryMap;
287
+ }, [rolePagesData, pageLookup, currentLocale]);
288
+
289
+ const [drawerRole, setDrawerRole] = useState<any>(null);
290
+
291
+ const [showModal, setShowModal] = useState<{
292
+ type: "show" | "edit" | "create" | null;
293
+ id: number | null;
294
+ }>({
295
+ type: null,
296
+ id: null,
297
+ });
298
+
299
+ const refreshRoleRelatedData = useCallback(() => {
300
+ refetchRolePages(rolePagesQuery ?? {});
301
+ refetchPages(pageQuery ?? {});
302
+ }, [refetchRolePages, rolePagesQuery, refetchPages, pageQuery]);
303
+
304
+ const handleModalClose = useCallback(() => {
305
+ setShowModal({ type: null, id: null });
306
+ }, []);
307
+
308
+ const handleModalSuccess = useCallback(() => {
309
+ handleModalClose();
310
+ refreshRoleRelatedData();
311
+ }, [refreshRoleRelatedData, handleModalClose]);
312
+
313
+ return (
314
+ <div>
315
+ <Space style={{ marginBottom: 16 }}>
316
+ <Button
317
+ type="primary"
318
+ onClick={() =>
319
+ setShowModal({
320
+ type: "create",
321
+ id: null,
322
+ })
323
+ }
324
+ >
325
+ Create Role
326
+ </Button>
327
+ </Space>
328
+ <Table {...tableProps} rowKey="id">
329
+ <Table.Column dataIndex="name" title="Name" />
330
+ <Table.Column dataIndex="description" title="Description" />
331
+ <Table.Column dataIndex="creator" title="Creator" />
332
+ <Table.Column
333
+ title="Actions"
334
+ render={(_, record: any) => (
335
+ <Space>
336
+ <Tooltip title="View details">
337
+ <Button
338
+ type="default"
339
+ size="small"
340
+ icon={<EyeOutlined />}
341
+ onClick={() => setDrawerRole(record)}
342
+ />
343
+ </Tooltip>
344
+ <Tooltip title="Edit">
345
+ <Button
346
+ type="default"
347
+ size="small"
348
+ icon={<EditOutlined />}
349
+ onClick={() => setShowModal({ type: "edit", id: record.id })}
350
+ />
351
+ </Tooltip>
352
+ </Space>
353
+ )}
354
+ />
355
+ </Table>
356
+ {drawerRole && (
357
+ <RoleDetailDrawer
358
+ role={drawerRole}
359
+ pages={rolePermissionSummary[drawerRole.id]?.pageInfos ?? []}
360
+ open={!!drawerRole}
361
+ onClose={() => setDrawerRole(null)}
362
+ />
363
+ )}
364
+ {showModal.type === "edit" && showModal.id && (
365
+ <EditModal
366
+ id={showModal.id}
367
+ onClose={handleModalClose}
368
+ onSuccess={handleModalSuccess}
369
+ pageTreeData={pageTreeData}
370
+ rolePermissionSummary={rolePermissionSummary[showModal.id]}
371
+ />
372
+ )}
373
+ {showModal.type === "create" && (
374
+ <CreateModal
375
+ onClose={handleModalClose}
376
+ onSuccess={handleModalSuccess}
377
+ pageTreeData={pageTreeData}
378
+ />
379
+ )}
380
+ </div>
381
+ );
382
+ };
@@ -0,0 +1,8 @@
1
+ export const RoleSelect = {
2
+ id: true,
3
+ name: true,
4
+ description: true,
5
+ creator: true,
6
+ createdAt: true,
7
+ updatedAt: true,
8
+ };