@gadmin2n/schematics 0.0.63 → 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 (223) 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/form.tsx +2 -0
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +22 -4
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +211 -0
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useFetchData.ts +33 -0
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRoles.ts +30 -0
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useUserPageAccess.ts +339 -0
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +8 -4
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/index.tsx +3 -11
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/web/{public → src}/locales/en/common.json +1 -1
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/web/{public → src}/locales/zh_CN/common.json +1 -1
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +3 -0
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.tsx +134 -0
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/create.tsx +113 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +122 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.ts +8 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.tsx +6 -0
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +213 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +61 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +168 -0
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/CreatePageModal.tsx +42 -0
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/EditPageModal.tsx +42 -0
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageDetailDrawer.tsx +101 -0
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageFormModal.tsx +731 -0
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/create.tsx +113 -0
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/edit.tsx +122 -0
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/hooks/usePageManagement.ts +36 -0
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.ts +8 -0
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.tsx +6 -0
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +1113 -0
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/queries.ts +17 -0
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/show.tsx +61 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/types.ts +44 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/create.tsx +113 -0
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/edit.tsx +122 -0
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/index.tsx +6 -0
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/list.tsx +243 -0
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/pageResource/show.tsx +61 -0
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permission-readme/index.tsx +1088 -0
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/CreateModal.tsx +25 -0
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/EditModal.tsx +28 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/ResourceDetailDrawer.tsx +160 -0
  151. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +202 -0
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/create.tsx +113 -0
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/edit.tsx +122 -0
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.ts +9 -0
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.tsx +6 -0
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +184 -0
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/queries.ts +10 -0
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/show.tsx +61 -0
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/types.ts +9 -0
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/CreateModal.tsx +30 -0
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/EditModal.tsx +47 -0
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/RoleDetailDrawer.tsx +56 -0
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +302 -0
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/create.tsx +113 -0
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/edit.tsx +122 -0
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/hooks/useRolePage.ts +35 -0
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.ts +8 -0
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.tsx +6 -0
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +382 -0
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/queries.ts +8 -0
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/show.tsx +61 -0
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/types.ts +8 -0
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/create.tsx +113 -0
  174. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/edit.tsx +122 -0
  175. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/index.tsx +6 -0
  176. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/list.tsx +243 -0
  177. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/rolePages/show.tsx +61 -0
  178. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/create.tsx +113 -0
  179. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/edit.tsx +122 -0
  180. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/index.tsx +6 -0
  181. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/list.tsx +243 -0
  182. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/roleResource/show.tsx +61 -0
  183. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/create-modal.tsx +17 -0
  184. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/edit-modal.tsx +19 -0
  185. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/form-modal.tsx +188 -0
  186. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/index.ts +5 -0
  187. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/role-tag.tsx +48 -0
  188. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +140 -0
  189. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/create.tsx +113 -0
  190. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/edit.tsx +122 -0
  191. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.ts +8 -0
  192. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.tsx +6 -0
  193. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +342 -0
  194. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/queries.ts +14 -0
  195. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/show.tsx +61 -0
  196. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +132 -0
  197. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +58 -0
  198. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +128 -0
  199. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +18 -0
  200. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +21 -0
  201. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/audit-log.ts +1 -0
  202. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/index.ts +3 -0
  203. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/role.ts +7 -0
  204. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/user.ts +1 -0
  205. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/get-name-initials.ts +8 -0
  206. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/get-random-color.ts +27 -0
  207. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/index.ts +2 -0
  208. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/utilities/utils.tsx +5 -0
  209. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/vite-env.d.ts +1 -0
  210. package/dist/lib/application/files/gadmin2-game-angle-demo/web/tsconfig.json +3 -3
  211. package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +31 -0
  212. package/package.json +1 -1
  213. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/sample.prisma +0 -65
  214. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Source.ts +0 -76
  215. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Tasklog.ts +0 -76
  216. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/roles.ts +0 -4
  217. package/dist/lib/application/files/gadmin2-game-angle-demo/web/craco.config.js +0 -27
  218. package/dist/lib/application/files/gadmin2-game-angle-demo/web/public/index.html +0 -53
  219. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/styles.ts +0 -10
  220. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/react-app-env.d.ts +0 -1
  221. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/reportWebVitals.ts +0 -15
  222. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.less +0 -79
  223. /package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/VanillaJSONEditor/{index.js → index.jsx} +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "gadmin2-demo-server",
2
+ "name": "erp-backend",
3
3
  "version": "0.0.1",
4
4
  "description": "",
5
5
  "author": "",
@@ -10,84 +10,108 @@
10
10
  "build": "gadmin2 build",
11
11
  "format": "prettier --write \"../config/*.ts\" \"src/**/*.ts\" \"src/**/*.tsx\" \"test/**/*.ts\"",
12
12
  "prepare": "cd .. && husky install",
13
- "start": "gadmin2 start",
14
- "start:dev": "gadmin2 start --watch",
15
- "start:debug": "gadmin2 start --debug --watch",
16
- "start:prod": "node dist/src/main",
13
+ "start": "dotenv -e .env.local -e .env -- gadmin2 start",
14
+ "start:dev": "dotenv -e .env.local -e .env -- gadmin2 start --watch",
15
+ "start:debug": "dotenv -e .env.local -e .env -- gadmin2 start --debug --watch",
16
+ "start:prod": "/bin/sh start-prod.sh",
17
17
  "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
18
18
  "test": "jest",
19
19
  "test:watch": "jest --watch",
20
20
  "test:cov": "jest --coverage",
21
21
  "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
22
22
  "test:e2e": "jest --config ./test/jest-e2e.json",
23
- "migrate:dev": "dotenv -e .env.local -e .env -- prisma migrate dev",
24
- "migrate:dev:create": "dotenv -e .env.local -e .env -- prisma migrate dev --create-only",
25
- "migrate:deploy": "dotenv -e .env.local -e .env -- prisma migrate deploy",
26
- "generate": "dotenv -e .env.local -e .env -- npx prisma generate",
27
- "generate:dev": "npm run push:db && dotenv -e .env.local -e .env -- npx prisma generate",
28
- "generate:web": "dotenv -e .env.local -e .env -- npx prisma generate --generator react",
29
- "generate:server": "dotenv -e .env.local -e .env -- npx prisma generate --generator client --generator nestjs",
30
- "push:db": "dotenv -e .env.local -e .env -- prisma db push",
31
- "seed": "dotenv -e .env.local -e .env -- ts-node seed/index.ts",
32
- "prisma:studio": "dotenv -e .env.local -e .env -- prisma studio"
23
+ "migrate:dev": "npm run push:db && dotenv -e .env.local -e .env -- prisma migrate",
24
+ "migrate:dev:create": "dotenv -e .env.local -e .env -- prisma migrate dev --create-only",
25
+ "migrate:deploy": "dotenv -e .env.local -e .env -- prisma migrate deploy",
26
+ "migrate:status": "dotenv -e .env.local -e .env -- prisma migrate status",
27
+ "generate": "dotenv -e .env.local -e .env -- npx prisma generate",
28
+ "generate:dev": "npm run migrate:dev && dotenv -e .env.local -e .env -- npx prisma generate",
29
+ "postgenerate:dev": "dotenv -e .env.local -e .env -- ts-node seed/seedDataMngtPages.ts",
30
+ "generate:web": "dotenv -e .env.local -e .env -- npx prisma generate --generator react",
31
+ "generate:server": "dotenv -e .env.local -e .env -- npx prisma generate --generator client --generator nestjs",
32
+ "push:db": "dotenv -e .env.local -e .env -- prisma db push --skip-generate",
33
+ "seed": "dotenv -e .env.local -e .env -- ts-node seed/index.ts",
34
+ "prisma:studio": "dotenv -e .env.local -e .env -- prisma studio"
33
35
  },
34
36
  "dependencies": {
35
- "@gadmin2n/nest-common": "^0.0.31",
36
- "@nestjs/common": "^8.0.0",
37
- "@nestjs/config": "^2.0.0",
38
- "@nestjs/core": "^8.0.0",
39
- "@nestjs/mapped-types": "*",
40
- "@nestjs/platform-express": "^8.0.0",
41
- "@nestjs/serve-static": "^3.0.1",
42
- "@nestjs/swagger": "^5.2.1",
43
- "@prisma/client": "^4.12.0",
37
+ "@azure/identity": "^4.13.0",
38
+ "@gadmin2n/nest-common": "^0.0.33",
39
+ "@nestjs/cache-manager": "^3.0.1",
40
+ "@nestjs/common": "^10.4.15",
41
+ "@nestjs/config": "^3.2.0",
42
+ "@nestjs/core": "^10.4.15",
43
+ "@nestjs/mapped-types": "^2.0.0",
44
+ "@nestjs/platform-express": "^10.4.15",
45
+ "@nestjs/schedule": "^4.0.1",
46
+ "@nestjs/serve-static": "^4.0.1",
47
+ "@nestjs/swagger": "^7.3.0",
48
+ "@opentelemetry/api": "^1.9.0",
49
+ "@opentelemetry/exporter-trace-otlp-grpc": "^0.211.0",
50
+ "@opentelemetry/instrumentation-express": "^0.47.0",
51
+ "@opentelemetry/instrumentation-http": "^0.211.0",
52
+ "@opentelemetry/instrumentation-nestjs-core": "^0.44.0",
53
+ "@opentelemetry/instrumentation-pg": "^0.51.0",
54
+ "@opentelemetry/resources": "^2.0.0",
55
+ "@opentelemetry/sdk-node": "^0.211.0",
56
+ "@opentelemetry/semantic-conventions": "^1.39.0",
57
+ "@prisma/client": "^6.19.0",
58
+ "@prisma/instrumentation": "6.19.0",
59
+ "axios": "^1.13.2",
60
+ "cache-manager": "^6.4.3",
44
61
  "class-transformer": "^0.5.1",
45
62
  "class-validator": "^0.13.2",
46
63
  "cookie-parser": "^1.4.6",
64
+ "crypto-js": "^4.2.0",
65
+ "csvtojson": "^2.0.10",
66
+ "dayjs": "^1.10.7",
47
67
  "dotenv": "^16.1.3",
68
+ "dotenv-cli": "^7.4.4",
48
69
  "jose": "^4.14.4",
49
70
  "js-md5": "^0.7.3",
50
- "jsonwebtoken": "^9.0.1",
71
+ "jsonwebtoken": "^9.0.2",
72
+ "module-alias": "^2.2.3",
51
73
  "nest-access-control": "^2.2.0",
52
- "nest-winston": "^1.6.2",
53
- "nestjs-prisma": "^0.20.0",
54
- "prisma": "^4.12.0",
74
+ "nest-winston": "^1.9.7",
75
+ "nestjs-prisma": "^0.25.0",
76
+ "pg": "^8.16.3",
77
+ "prisma": "^6.19.0",
55
78
  "reflect-metadata": "^0.1.13",
56
79
  "request": "^2.88.2",
57
80
  "rimraf": "^3.0.2",
58
81
  "rxjs": "^7.2.0",
59
82
  "swagger-ui-express": "^4.3.0",
60
- "winston": "^3.7.2"
83
+ "winston": "^3.7.2",
84
+ "xlsx": "^0.18.5"
61
85
  },
62
86
  "devDependencies": {
63
- "@gadmin2n/prisma-nest-generator": "^0.0.28",
64
- "@gadmin2n/prisma-react-generator": "^0.0.44",
65
- "@nestjs/testing": "^8.0.0",
87
+ "@gadmin2n/prisma-nest-generator": "^0.0.30",
88
+ "@gadmin2n/prisma-react-generator": "^0.0.46",
89
+ "@nestjs/testing": "^10.4.15",
66
90
  "@types/cookie-parser": "^1.4.3",
67
- "@types/express": "^4.17.13",
68
- "@types/jest": "27.4.1",
91
+ "@types/express": "^4.17.21",
92
+ "@types/jest": "^29.0.0",
93
+ "@types/jsonwebtoken": "^9.0.10",
69
94
  "@types/multer": "^1.4.7",
70
95
  "@types/node": "^16.0.0",
71
96
  "@types/supertest": "^2.0.11",
72
97
  "@typescript-eslint/eslint-plugin": "^5.0.0",
73
98
  "@typescript-eslint/parser": "^5.0.0",
74
- "dotenv-cli": "^7.4.4",
75
99
  "eslint": "^8.0.1",
76
100
  "eslint-config-prettier": "^8.3.0",
77
101
  "eslint-plugin-prettier": "^4.0.0",
78
- "jest": "^27.2.5",
79
102
  "husky": "^8.0.0",
103
+ "jest": "^29.0.0",
80
104
  "lint-staged": "^13.0.0",
81
105
  "prettier": "^2.3.2",
82
106
  "prettier-plugin-organize-imports": "^3.0.3",
83
107
  "prisma-dbml-generator": "^0.9.1",
84
108
  "source-map-support": "^0.5.20",
85
109
  "supertest": "^6.1.3",
86
- "ts-jest": "^27.0.3",
110
+ "ts-jest": "^29.0.0",
87
111
  "ts-loader": "^9.2.3",
88
112
  "ts-node": "^10.0.0",
89
113
  "tsconfig-paths": "^3.10.1",
90
- "typescript": "^4.3.5"
114
+ "typescript": "^5.3.3"
91
115
  },
92
116
  "jest": {
93
117
  "moduleFileExtensions": [
@@ -106,6 +130,9 @@
106
130
  "coverageDirectory": "../coverage",
107
131
  "testEnvironment": "node"
108
132
  },
133
+ "_moduleAliases": {
134
+ "@": "src"
135
+ },
109
136
  "prisma": {
110
137
  "seed": "echo 'npm run seed'"
111
138
  },
@@ -1,12 +1,13 @@
1
1
  // This is your Prisma schema file,
2
2
  // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
3
  datasource db {
4
- provider = "mysql"
4
+ provider = "postgresql"
5
5
  url = env("DATABASE_URL")
6
6
  }
7
7
 
8
8
  generator client {
9
- provider = "prisma-client-js"
9
+ provider = "prisma-client-js"
10
+ previewFeatures = ["tracing"]
10
11
  }
11
12
 
12
13
  generator nestjs {
@@ -25,7 +26,7 @@ generator nestjs {
25
26
 
26
27
  generator react {
27
28
  provider = "prisma-react-generator"
28
- pagesDir = "../../web/src/pages"
29
+ pagesDir = "../../web/src/routes"
29
30
  }
30
31
 
31
32
  generator dbml {
@@ -0,0 +1,16 @@
1
+ import 'dotenv/config';
2
+ import { defineConfig } from 'prisma/config';
3
+
4
+ export default defineConfig({
5
+ experimental: {
6
+ externalTables: true,
7
+ },
8
+ // 将要被 Prisma 标记为“外部管理”的表名列表
9
+ // 可以使用 "schema.table" 或仅 "table"(依你 DB/项目设置)
10
+ tables: {
11
+ external: [
12
+ 'public.users', // public.users
13
+ ],
14
+ },
15
+ // 其余配置项...
16
+ });
@@ -1,71 +1 @@
1
- export default [
2
- { label: 'HOK', value: 'u10000000066' },
3
- { label: 'PUBG', value: 'ufc454d9b1af70b40588e2a6fa4da4a8b' },
4
- { label: 'NIKKE', value: 'uef4312b08dde07820374dd57086ea2fb' },
5
- { label: 'Fatshark(战锤)', value: 'e72b4feda779c36a6b6d3cb5eb8efe5d1' },
6
- { label: '阿凡达-蓝色行动', value: 'u10000000033' },
7
- { label: 'SOP 重生边缘', value: 'eaccc6f302cd02c7e0cf7c806497a3395' },
8
- { label: 'Vrising', value: 'ec41360495e0a6b2eb0809ded33746044' },
9
- { label: 'Bloodhunt', value: 'e00000000001' },
10
- { label: 'Conan Exiles', value: 'efc7a5eee1d6ca668931bcebf69198b60' },
11
- { label: 'ACM刺客信条', value: 'e22eae55990dfe9ef2932e5a8234d63db' },
12
- {
13
- label: '黎明觉醒(生机/Undawn)',
14
- value: 'u037857a0ad6aaad86a15227be23adcc4',
15
- },
16
- { label: '幻塔', value: 'u6d721eb69ef7de198bb84be26be6d40b' },
17
- { label: 'NBA2', value: 'u03e9e2775cf377904ca6583456d9f411' },
18
- { label: 'world of Taris', value: 'u10000000073' },
19
- { label: 'CNC', value: 'u10000000074' },
20
- {
21
- label: 'Party Animals派对动物',
22
- value: 'ea08cbff9a96b95174d530e2eb67c5974',
23
- },
24
- {
25
- label: 'Super Buckyball Tournament超级巴基球',
26
- value: 'edd8d6e6890b8dbb27c5c88a082d0143b',
27
- },
28
- {
29
- label: 'Blackmyth: Wukong黑神话:悟空',
30
- value: 'e3798a6c4b1afee6ac5f161202a27a7ae',
31
- },
32
- {
33
- label: 'Amazing Cultivation Simulator了不起的修仙模拟器',
34
- value: 'e49e633f2e87e606376af989abab855a4',
35
- },
36
- { label: 'DFM', value: 'DFM' },
37
- { label: 'Apex', value: 'u10000000015' },
38
- { label: '龙之谷2', value: 'u9d2a3dcc71529b3e0cd5f486d4cd9adb' },
39
- { label: '代号GST', value: 'u10000000075' },
40
- { label: '小森生活', value: 'ubc78e405a8e320c58a8247299252c522' },
41
- { label: 'CODM', value: 'uef76e8182c79db6aafefdfbdd04b7d99' },
42
- { label: 'UAMO', value: 'u10000000022' },
43
- { label: 'Nightingale', value: 'e11000000297' },
44
- { label: 'Brawl Stars', value: 'u84eb1af3a729e5d540b6b78073938574' },
45
- { label: 'Transformers Reactivate', value: 'e11000000300' },
46
- { label: 'Project Astrid', value: 'e11000000301' },
47
- { label: 'Path of Exile', value: 'e91eeea272398097f28c93d0a49f58379' },
48
- { label: 'GTFO', value: 'e0e9148a8f7c2e98a5b7d538a75afc932' },
49
- { label: 'Warframe', value: 'e11000000282' },
50
- { label: 'Xdefiant', value: 'e11000000302' },
51
- { label: 'Project EVO', value: 'u10000000079' },
52
- { label: 'Derby', value: 'u610b8f6f9103f9431dac99aa5bd45953' },
53
- { label: 'Jade', value: 'u10000000071' },
54
- { label: 'PAX DEI', value: 'ece5b843df224627f4cc626d9e1f84db5' },
55
- { label: 'Perfect New World', value: 'e42a5670bf7a585bce3ac55ad2c384284' },
56
- { label: 'Lost Ark', value: 'e7052d6286075a212db99f5ecb452a340' },
57
- { label: 'Life After', value: 'u6869b6d91db0225ff10cdf25178b5da6' },
58
- {
59
- label: 'ミスティックアビス:遺失海域',
60
- value: 'u48be1ec5b04c723a894928133d31059c',
61
- },
62
- { label: 'Once Human', value: 'u909c7ab2e46afc2bc64442c51c62126d' },
63
- { label: 'Marathon', value: 'e11000000306' },
64
- { label: 'Eggy Party', value: 'u1e7b2b31e2fc1897e6093cd1ee2925b4' },
65
- { label: 'AOV', value: 'u539c87d525e9cf649cea9bc6319d4b8f' },
66
- { label: 'MLBB', value: 'u1426b49d8626e915264442d821e41a4e' },
67
- { label: 'Wild Rift', value: 'u354f6a7c0b0b7af46839c9b4beeefe15' },
68
- { label: 'Free Fire', value: 'u589791f804845507e85fa880c6d88d41' },
69
- { label: 'AIGC', value: 'u10000000080' },
70
- { label: 'Garena Undawn', value: 'u337f01e5662eb90de6e6aafb28f0a4be' },
71
- ];
1
+ export default [];
@@ -1,27 +1,23 @@
1
-
2
1
  import { PrismaClient } from '@prisma/client';
3
- import games from './games';
4
- import roles from './roles';
2
+ import users from './users';
3
+ import { seedPermissions } from './permissions';
4
+ import { seedDataMngtPages } from './seedDataMngtPages';
5
5
 
6
6
  const prisma = new PrismaClient();
7
7
 
8
- async function main() {
9
- await prisma.game.createMany({
10
- data: games.map((game) => ({
11
- unified_editionid: game.value,
12
- name: game.label,
13
- creator: 'clzhu',
14
- })),
15
- skipDuplicates: true,
16
- });
17
- await prisma.role.createMany({ data: roles });
8
+ export async function main() {
9
+ await prisma.user.createMany({ data: users, skipDuplicates: true });
10
+ await seedPermissions(prisma);
11
+ await seedDataMngtPages(prisma);
18
12
  }
19
13
 
20
- main()
21
- .catch((e) => {
22
- console.log(e);
23
- process.exit(1);
24
- })
25
- .finally(async () => {
26
- await prisma.$disconnect();
27
- });
14
+ if (require.main === module) {
15
+ main()
16
+ .catch((e) => {
17
+ console.log(e);
18
+ process.exit(1);
19
+ })
20
+ .finally(async () => {
21
+ await prisma.$disconnect();
22
+ });
23
+ }
@@ -0,0 +1,278 @@
1
+ import { PrismaClient } from '@prisma/client';
2
+
3
+ const FULL_ACTIONS = ['createAny', 'readAny', 'updateAny', 'deleteAny'];
4
+
5
+ /**
6
+ * Seed permission-related tables so that the SYSTEM_ADMIN role is recognised
7
+ * by nest-access-control on first startup.
8
+ *
9
+ * Covers the two prisma schema files that define the admin/permission modules:
10
+ * - config/prisma/default-schema.prisma → user, audit resources
11
+ * - config/prisma/page.prisma → role, page, resource resources
12
+ *
13
+ * Safe to re-run: every write uses upsert / createMany + skipDuplicates.
14
+ */
15
+ export async function seedPermissions(prisma: PrismaClient) {
16
+ // ------------------------------------------------------------------ Role --
17
+ const systemAdminRole = await prisma.role.upsert({
18
+ where: { name: 'SYSTEM_ADMIN' },
19
+ update: {},
20
+ create: {
21
+ name: 'SYSTEM_ADMIN',
22
+ description: 'System administrator with full access',
23
+ },
24
+ });
25
+ console.log(`[seed] Role: SYSTEM_ADMIN (id=${systemAdminRole.id})`);
26
+
27
+ // --------------------------------------------------------------- Resources -
28
+ // Resource.name is used as the resource identifier in @UseRoles({ resource: '...' })
29
+ // Resource.code is a unique slug (same value used here)
30
+ const resourceDefs = [
31
+ // from default-schema.prisma
32
+ { code: 'user', name: 'user', description: 'User management' },
33
+ { code: 'audit', name: 'audit', description: 'Audit logs' },
34
+ // from page.prisma
35
+ { code: 'role', name: 'role', description: 'Role management' },
36
+ { code: 'page', name: 'page', description: 'Page / menu management' },
37
+ { code: 'resource', name: 'resource', description: 'Resource management' },
38
+ // junction-table modules (page.prisma)
39
+ { code: 'rolePages', name: 'rolePages', description: 'Role-page assignments' },
40
+ { code: 'roleResource', name: 'roleResource', description: 'Role-resource grants' },
41
+ { code: 'pageResource', name: 'pageResource', description: 'Page-resource configuration' },
42
+ // business
43
+ { code: 'game', name: 'game', description: 'Business / Game management' },
44
+ ];
45
+
46
+ const resources: { id: number; name: string }[] = [];
47
+ for (const def of resourceDefs) {
48
+ const r = await prisma.resource.upsert({
49
+ where: { code: def.code },
50
+ update: {},
51
+ create: {
52
+ code: def.code,
53
+ name: def.name,
54
+ description: def.description,
55
+ isCommonResource: false,
56
+ },
57
+ });
58
+ resources.push({ id: r.id, name: r.name });
59
+ console.log(`[seed] Resource: ${r.name} (id=${r.id})`);
60
+ }
61
+
62
+ // ------------------------------------------------------------------ Pages --
63
+ // Pages are created in order (parent first) so that parentId can be resolved.
64
+
65
+ const pages: { id: number; code: string }[] = [];
66
+
67
+ // Level 1: top-level group (系统管理)
68
+ const adminPage = await prisma.page.upsert({
69
+ where: { code: 'admin' },
70
+ update: {}, // preserve user edits (name, sortOrder, etc.)
71
+ create: {
72
+ code: 'admin',
73
+ name: '系统管理',
74
+ zhName: '系统管理',
75
+ enName: 'System Management',
76
+ isVirtual: false,
77
+ sortOrder: 1000,
78
+ },
79
+ });
80
+ pages.push({ id: adminPage.id, code: adminPage.code });
81
+ console.log(`[seed] Page: ${adminPage.code} (id=${adminPage.id})`);
82
+
83
+ // Level 2: permission group (权限管理) — child of admin
84
+ const permissionPage = await prisma.page.upsert({
85
+ where: { code: 'permission' },
86
+ update: {}, // preserve user edits
87
+ create: {
88
+ code: 'permission',
89
+ name: '权限管理',
90
+ zhName: '权限管理',
91
+ enName: 'Permission Management',
92
+ isVirtual: false,
93
+ sortOrder: 1000,
94
+ parentId: adminPage.id,
95
+ },
96
+ });
97
+ pages.push({ id: permissionPage.id, code: permissionPage.code });
98
+ console.log(`[seed] Page: ${permissionPage.code} (id=${permissionPage.id})`);
99
+
100
+ // Level 3: leaf pages under permission group
101
+ const permissionChildDefs = [
102
+ {
103
+ code: 'permission_readme',
104
+ name: '菜单指引',
105
+ zhName: '菜单指引',
106
+ enName: 'Menu Guide',
107
+ sortOrder: 1005,
108
+ },
109
+ {
110
+ code: 'user',
111
+ name: '用户管理',
112
+ zhName: '用户管理',
113
+ enName: 'User Management',
114
+ sortOrder: 1010,
115
+ },
116
+ {
117
+ code: 'role',
118
+ name: '角色管理',
119
+ zhName: '角色管理',
120
+ enName: 'Role Management',
121
+ sortOrder: 1020,
122
+ },
123
+ {
124
+ code: 'page',
125
+ name: '页面管理',
126
+ zhName: '页面管理',
127
+ enName: 'Page Management',
128
+ sortOrder: 1030,
129
+ },
130
+ {
131
+ code: 'resource',
132
+ name: '资源管理',
133
+ zhName: '资源管理',
134
+ enName: 'Resource Management',
135
+ sortOrder: 1040,
136
+ },
137
+ ];
138
+
139
+ for (const def of permissionChildDefs) {
140
+ const p = await prisma.page.upsert({
141
+ where: { code: def.code },
142
+ update: {}, // preserve user edits (name, sortOrder, parentId)
143
+ create: {
144
+ code: def.code,
145
+ name: def.name,
146
+ zhName: def.zhName,
147
+ enName: def.enName,
148
+ isVirtual: false,
149
+ sortOrder: def.sortOrder,
150
+ parentId: permissionPage.id,
151
+ },
152
+ });
153
+ pages.push({ id: p.id, code: p.code });
154
+ console.log(`[seed] Page: ${p.code} (id=${p.id})`);
155
+ }
156
+
157
+ // Level 2: 数据管理 — child of admin
158
+ const dataMngt = await prisma.page.upsert({
159
+ where: { code: 'dataMngt' },
160
+ update: {}, // preserve user edits
161
+ create: {
162
+ code: 'dataMngt',
163
+ name: '数据管理',
164
+ zhName: '数据管理',
165
+ enName: 'Data Management',
166
+ isVirtual: false,
167
+ sortOrder: 1010,
168
+ parentId: adminPage.id,
169
+ },
170
+ });
171
+ pages.push({ id: dataMngt.id, code: dataMngt.code });
172
+ console.log(`[seed] Page: ${dataMngt.code} (id=${dataMngt.id})`);
173
+
174
+ // Level 2: other top-level children of admin (业务、审计日志)
175
+ const adminChildDefs = [
176
+ {
177
+ code: 'game',
178
+ name: '业务',
179
+ zhName: '业务',
180
+ enName: 'Business',
181
+ isVirtual: false,
182
+ sortOrder: 1050,
183
+ },
184
+ {
185
+ code: 'audits',
186
+ name: '审计日志',
187
+ zhName: '审计日志',
188
+ enName: 'Audit Log',
189
+ isVirtual: false,
190
+ sortOrder: 1060,
191
+ },
192
+ ];
193
+
194
+ for (const def of adminChildDefs) {
195
+ const p = await prisma.page.upsert({
196
+ where: { code: def.code },
197
+ update: {}, // preserve user edits (name, sortOrder, parentId)
198
+ create: {
199
+ code: def.code,
200
+ name: def.name,
201
+ zhName: def.zhName,
202
+ enName: def.enName,
203
+ isVirtual: def.isVirtual,
204
+ sortOrder: def.sortOrder,
205
+ parentId: adminPage.id,
206
+ },
207
+ });
208
+ pages.push({ id: p.id, code: p.code });
209
+ console.log(`[seed] Page: ${p.code} (id=${p.id})`);
210
+ }
211
+
212
+ // ------------------------------------------------------- PageResource links -
213
+ // Each leaf page that directly corresponds to a resource must have a
214
+ // PageResource record so that the permission-sync mechanism works correctly
215
+ // (Role → Page → PageResource → Resource).
216
+ //
217
+ // Mapping: page.code → resource.code (same value where they match)
218
+ const pageResourceMappings: { pageCode: string; resourceCode: string }[] = [
219
+ { pageCode: 'user', resourceCode: 'user' },
220
+ { pageCode: 'role', resourceCode: 'role' },
221
+ { pageCode: 'page', resourceCode: 'page' },
222
+ { pageCode: 'resource', resourceCode: 'resource' },
223
+ { pageCode: 'audits', resourceCode: 'audit' },
224
+ { pageCode: 'game', resourceCode: 'game' },
225
+ ];
226
+
227
+ for (const mapping of pageResourceMappings) {
228
+ const targetPage = pages.find((p) => p.code === mapping.pageCode);
229
+ const targetResource = resources.find((r) => r.name === mapping.resourceCode);
230
+
231
+ if (!targetPage || !targetResource) {
232
+ console.warn(
233
+ `[seed] PageResource: skipping ${mapping.pageCode} → ${mapping.resourceCode} (not found)`,
234
+ );
235
+ continue;
236
+ }
237
+
238
+ await prisma.pageResource.upsert({
239
+ where: {
240
+ pageId_resourceId: { pageId: targetPage.id, resourceId: targetResource.id },
241
+ },
242
+ update: { actions: FULL_ACTIONS },
243
+ create: {
244
+ pageId: targetPage.id,
245
+ resourceId: targetResource.id,
246
+ actions: FULL_ACTIONS,
247
+ },
248
+ });
249
+ console.log(
250
+ `[seed] PageResource: page(${targetPage.code}) ↔ resource(${targetResource.name})`,
251
+ );
252
+ }
253
+
254
+ // --------------------------------------------------- RoleResource (grants) -
255
+ await prisma.roleResource.createMany({
256
+ data: resources.map((r) => ({
257
+ roleId: systemAdminRole.id,
258
+ resourceId: r.id,
259
+ actions: FULL_ACTIONS,
260
+ })),
261
+ skipDuplicates: true,
262
+ });
263
+ console.log(
264
+ `[seed] RoleResource: SYSTEM_ADMIN granted full access to ${resources.length} resources`,
265
+ );
266
+
267
+ // ------------------------------------------------------ RolePages (access) -
268
+ await prisma.rolePages.createMany({
269
+ data: pages.map((p) => ({
270
+ roleId: systemAdminRole.id,
271
+ pageId: p.id,
272
+ })),
273
+ skipDuplicates: true,
274
+ });
275
+ console.log(
276
+ `[seed] RolePages: SYSTEM_ADMIN granted access to ${pages.length} pages`,
277
+ );
278
+ }