@gadmin2n/schematics 0.0.68 → 0.0.70
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.
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/canvas.prisma +45 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/example.prisma +24 -23
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +93 -90
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Audit.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Event.ts +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Page.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/PageResource.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Resource.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/RolePages.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/RoleResource.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/SavedQuery.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/User.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +95 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/.eslintrc.js +4 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/.prettierignore +7 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/config/index.ts +1 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/gadmin-cli.json +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +6 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/lib/page-helpers.ts +157 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/page-manage.ts +290 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/permission-manage.ts +184 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/prismaModels.ts +143 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/sync-resources.ts +100 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/syncDataMngtPages.ts +119 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +1 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/permissions.ts +109 -143
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +5 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.controller.spec.ts +20 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.controller.ts +81 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.dto.ts +49 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.module.ts +11 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.service.spec.ts +334 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/canvas/canvas.service.ts +249 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +2 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/page/page.service.ts +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/role/role.service.ts +17 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/yarn.lock +7737 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/.env +1 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/.eslintrc.json +38 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/.prettierignore +2 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/dev-shell-entry.html +49 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +137 -111
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/auditLogProvider.ts +46 -44
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +32 -12
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +74 -23
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/ListPageHeader.tsx +9 -9
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/RowActions.tsx +57 -31
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +53 -24
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SqlModal.tsx +148 -72
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentContext.tsx +190 -16
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/ElementInspector.tsx +914 -63
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/agentAttributes.ts +17 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/index.ts +0 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/inspectorActions.ts +969 -46
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/pagePathUtils.ts +66 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/promptGenerator.ts +85 -25
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/propPatcher.ts +84 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +16 -20
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/index.ts +4 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +13 -13
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +15 -16
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +15 -15
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/index.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/BarChart/index.tsx +896 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartSwitcher/index.tsx +219 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartViewer/index.tsx +159 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Filter/index.tsx +192 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/LineChart/index.tsx +1034 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/NumCard.module.css +8 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/index.tsx +509 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumLineCard/index.tsx +66 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/PieChart/index.tsx +552 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/RadarChart/index.tsx +263 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Section/index.tsx +35 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Table/index.tsx +207 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/TreemapChart/index.tsx +382 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/WorldMap/index.tsx +135 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/chart-constants.ts +53 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/InfoIcon.tsx +8 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/index.ts +1 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/config.ts +31 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/nameMap.json +9 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/world.geo.json +39349 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/metric-info-tooltip/index.tsx +19 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/business/index.tsx +12 -12
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +22 -26
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/custom-avatar.tsx +13 -9
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/index.ts +4 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +22 -37
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/index.ts +4 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +10 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/logo.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +113 -65
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/title.tsx +14 -14
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/offLayoutArea/index.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/pagination-total.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/index.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/tags/role-tag.tsx +21 -21
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/text.tsx +17 -13
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/http.ts +26 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +221 -51
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +199 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +335 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DeleteDataConfirm.tsx +56 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +401 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/EditDataModal.tsx +129 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/SkillMenu.tsx +202 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/UndoConfirm.tsx +36 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/index.tsx +8 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +835 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/enums/audit-log.enum.ts +8 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/enums/index.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +120 -70
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/get-name-initials.ts +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/get-random-color.ts +11 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/http.ts +16 -19
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/index.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +99 -73
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +22 -27
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/page-tree.ts +74 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +95 -51
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/utils.tsx +7 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/types.ts +15 -15
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchDelete.ts +10 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperations.ts +8 -7
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchOperationsCore.ts +10 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useBatchUpdate.ts +10 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +36 -27
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useECharts.tsx +144 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useFetchData.ts +4 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +34 -34
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRoles.ts +8 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useRowSelection.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useUserPageAccess.ts +55 -41
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +8 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/index.tsx +9 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +193 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +194 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +81 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.tsx +37 -37
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/create.tsx +23 -31
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +34 -35
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/index.tsx +4 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/list.tsx +41 -34
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +33 -20
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +87 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasEditPage.tsx +192 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +409 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +1372 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +384 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +476 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/ComponentThumbnail.tsx +135 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/IsolatedLivePreview.tsx +101 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/LivePreview.tsx +236 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +200 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasApi.ts +92 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasConfigRegistry.tsx +25 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +875 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +126 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasI18n.ts +11 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +115 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ChartViewerConfigModal.tsx +217 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +153 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +211 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +90 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +87 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +204 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/demos.ts +1153 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/index.tsx +2 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +45 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +45 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +108 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/create.tsx +105 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +121 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/index.tsx +4 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +237 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +74 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +29 -20
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/CreatePageModal.tsx +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/EditPageModal.tsx +7 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageDetailDrawer.tsx +58 -23
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/PageFormModal.tsx +206 -122
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/hooks/usePageManagement.ts +8 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/index.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/list.tsx +345 -190
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/types.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +341 -340
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/CreateModal.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/EditModal.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/ResourceDetailDrawer.tsx +41 -24
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +64 -36
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/index.ts +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +78 -40
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/CreateModal.tsx +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/EditModal.tsx +4 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/RoleDetailDrawer.tsx +19 -9
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +45 -47
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/hooks/useRolePage.ts +4 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/index.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/list.tsx +121 -147
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/types.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/create-modal.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/edit-modal.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/form-modal.tsx +25 -19
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/index.ts +5 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/role-tag.tsx +10 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +31 -26
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/index.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/list.tsx +76 -71
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/setupTests.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/audit-log.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/index.ts +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/role.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/types/user.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +42 -25
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/yarn.lock +1193 -32
- package/package.json +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/seedDataMngtPages.ts +0 -258
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/AgentPanel.tsx +0 -497
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/agentPanel/skills.ts +0 -464
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sync-resources.ts
|
|
3
|
+
*
|
|
4
|
+
* Syncs all non-system Prisma business models as Resource records into the
|
|
5
|
+
* `t_resource` table.
|
|
6
|
+
* - Reads business models from config/prisma/ via readPrismaModels() (excludes
|
|
7
|
+
* system.prisma and models annotated with @IgnoreReactCode).
|
|
8
|
+
* - Uses `upsert` (where: { code }) so it is idempotent and safe to re-run.
|
|
9
|
+
* - Only inserts when the resource does not yet exist; existing records are left
|
|
10
|
+
* untouched (update: {}) to preserve any manual edits.
|
|
11
|
+
*
|
|
12
|
+
* Invoked automatically by `postgenerate:dev` in server/package.json after
|
|
13
|
+
* `generate:dev` (migrate + prisma generate) completes.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { PrismaClient } from '@prisma/client';
|
|
17
|
+
import { readPrismaModels } from './prismaModels';
|
|
18
|
+
|
|
19
|
+
const prisma = new PrismaClient();
|
|
20
|
+
|
|
21
|
+
async function main() {
|
|
22
|
+
const businessModels = readPrismaModels();
|
|
23
|
+
|
|
24
|
+
console.log(
|
|
25
|
+
`[sync-resources] Found ${
|
|
26
|
+
businessModels.length
|
|
27
|
+
} business model(s) to sync: [${businessModels
|
|
28
|
+
.map((m) => m.name)
|
|
29
|
+
.join(', ')}]`,
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
let inserted = 0;
|
|
33
|
+
let skipped = 0;
|
|
34
|
+
|
|
35
|
+
for (const model of businessModels) {
|
|
36
|
+
const code = model.code;
|
|
37
|
+
const modelName = model.name;
|
|
38
|
+
|
|
39
|
+
const result = await prisma.resource.upsert({
|
|
40
|
+
where: { code },
|
|
41
|
+
// Already exists → leave it as-is (preserve any manual name / description edits)
|
|
42
|
+
update: {},
|
|
43
|
+
create: {
|
|
44
|
+
code,
|
|
45
|
+
name: code,
|
|
46
|
+
description: `${modelName} resource (auto-synced by sync-resources)`,
|
|
47
|
+
isCommonResource: false,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Detect whether the record was just created or already existed.
|
|
52
|
+
// upsert does not expose a "created" flag, so we compare timestamps.
|
|
53
|
+
const wasCreated =
|
|
54
|
+
Math.abs(result.createdAt.getTime() - result.updatedAt.getTime()) < 1000;
|
|
55
|
+
|
|
56
|
+
if (wasCreated) {
|
|
57
|
+
inserted++;
|
|
58
|
+
console.log(
|
|
59
|
+
`[sync-resources] ✚ Created Resource: ${code} (id=${result.id})`,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
// Write audit log for newly created resources; failure must not abort the main flow.
|
|
63
|
+
try {
|
|
64
|
+
await prisma.audit.create({
|
|
65
|
+
data: {
|
|
66
|
+
creator: 'system',
|
|
67
|
+
authorId: 'system',
|
|
68
|
+
authorName: 'sync-resources',
|
|
69
|
+
action: 'create',
|
|
70
|
+
resource: code,
|
|
71
|
+
resourceId: String(result.id),
|
|
72
|
+
data: JSON.stringify({ code, name: code }),
|
|
73
|
+
previousData: null,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
} catch (auditErr) {
|
|
77
|
+
console.warn(
|
|
78
|
+
`[sync-resources] ⚠ Failed to write audit log for Resource "${code}":`,
|
|
79
|
+
auditErr,
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
} else {
|
|
83
|
+
skipped++;
|
|
84
|
+
console.log(
|
|
85
|
+
`[sync-resources] · Exists Resource: ${code} (id=${result.id}) — skipped`,
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
console.log(
|
|
91
|
+
`[sync-resources] ✅ Done. inserted=${inserted}, already-existed=${skipped} (total=${businessModels.length})`,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
main()
|
|
96
|
+
.catch((e) => {
|
|
97
|
+
console.error('[sync-resources] Fatal error:', e);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
})
|
|
100
|
+
.finally(() => prisma.$disconnect());
|
package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/syncDataMngtPages.ts
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { PrismaClient } from '@prisma/client';
|
|
2
|
+
import {
|
|
3
|
+
bindResourceToPage,
|
|
4
|
+
getPageResourceIds,
|
|
5
|
+
grantRoleAccess,
|
|
6
|
+
upsertPage,
|
|
7
|
+
} from './lib/page-helpers';
|
|
8
|
+
import { readPrismaModels } from './prismaModels';
|
|
9
|
+
|
|
10
|
+
// ─── Main Seed Function ───────────────────────────────────────────────────────
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* For every non-system Prisma model found in config/prisma/ (excluding system.prisma):
|
|
14
|
+
*
|
|
15
|
+
* 1. Upsert a Resource record (resource.code = camelCase model name)
|
|
16
|
+
* 2. Upsert a Page record (parent = dataMngt, path = /admin/data-mngt/<slug>)
|
|
17
|
+
* 3. Upsert a PageResource link (page ↔ resource, full actions)
|
|
18
|
+
* 4. Upsert a RolePages record (SYSTEM_ADMIN → page)
|
|
19
|
+
* 5. Upsert a RoleResource record (SYSTEM_ADMIN → resource, full actions)
|
|
20
|
+
*
|
|
21
|
+
* Safe to re-run — every write uses upsert / skipDuplicates.
|
|
22
|
+
* Depends on seedPermissions() having already created SYSTEM_ADMIN role and dataMngt page.
|
|
23
|
+
*/
|
|
24
|
+
export async function seedDataMngtPages(prisma: PrismaClient): Promise<void> {
|
|
25
|
+
const models = readPrismaModels();
|
|
26
|
+
|
|
27
|
+
if (models.length === 0) {
|
|
28
|
+
console.log(
|
|
29
|
+
'[seedDataMngtPages] No non-system models found — nothing to seed.',
|
|
30
|
+
);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ── Anchors ────────────────────────────────────────────────────────────────
|
|
35
|
+
// Auto-bootstrap: if seed/index.ts has never been run (e.g. fresh DB),
|
|
36
|
+
// run the full seed pipeline now (users + permissions + pages).
|
|
37
|
+
const existingRole = await prisma.role.findUnique({
|
|
38
|
+
where: { name: 'SYSTEM_ADMIN' },
|
|
39
|
+
});
|
|
40
|
+
if (!existingRole) {
|
|
41
|
+
console.log(
|
|
42
|
+
'[seedDataMngtPages] SYSTEM_ADMIN not found — running full seed (index.ts) first…',
|
|
43
|
+
);
|
|
44
|
+
const { main } = await import('../seed/index');
|
|
45
|
+
await main();
|
|
46
|
+
// main() already calls seedDataMngtPages, so we're done.
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const systemAdminRole = existingRole;
|
|
51
|
+
|
|
52
|
+
const dataMngtPage = await prisma.page.findUnique({
|
|
53
|
+
where: { code: 'dataMngt' },
|
|
54
|
+
});
|
|
55
|
+
if (!dataMngtPage) {
|
|
56
|
+
console.error(
|
|
57
|
+
'[seedDataMngtPages] dataMngt page still missing after seed. Aborting.',
|
|
58
|
+
);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ── Process models ─────────────────────────────────────────────────────────
|
|
63
|
+
for (const [index, model] of models.entries()) {
|
|
64
|
+
console.log(`[seedDataMngtPages] ── ${model.name} ──`);
|
|
65
|
+
|
|
66
|
+
const pagePath = `/admin/data-mngt/${model.slug}`;
|
|
67
|
+
|
|
68
|
+
// 1 + 2 + 3: Upsert page, resource, and PageResource link
|
|
69
|
+
const page = await upsertPage(
|
|
70
|
+
prisma,
|
|
71
|
+
{
|
|
72
|
+
code: model.code,
|
|
73
|
+
name: model.name,
|
|
74
|
+
sortOrder: 2000 + index * 10,
|
|
75
|
+
parentId: dataMngtPage.id,
|
|
76
|
+
path: pagePath,
|
|
77
|
+
},
|
|
78
|
+
{ path: pagePath }, // keep path in sync with model name on update
|
|
79
|
+
);
|
|
80
|
+
console.log(
|
|
81
|
+
`[seedDataMngtPages] Page upserted: ${page.code} → ${pagePath} (id=${page.id})`,
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
const resource = await bindResourceToPage(
|
|
85
|
+
prisma,
|
|
86
|
+
page.id,
|
|
87
|
+
model.code,
|
|
88
|
+
`${model.name} resource (auto-generated by seedDataMngtPages)`,
|
|
89
|
+
);
|
|
90
|
+
console.log(
|
|
91
|
+
`[seedDataMngtPages] Resource + PageResource upserted: ${resource.code} (id=${resource.id})`,
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
// 4 + 5: Grant SYSTEM_ADMIN access to this page and resource
|
|
95
|
+
const resourceIds = await getPageResourceIds(prisma, page.id);
|
|
96
|
+
await grantRoleAccess(prisma, systemAdminRole.id, page.id, resourceIds);
|
|
97
|
+
console.log(
|
|
98
|
+
`[seedDataMngtPages] RolePages + RoleResource upserted: SYSTEM_ADMIN → ${page.code}`,
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
console.log(
|
|
103
|
+
`[seedDataMngtPages] ✅ Done. Seeded ${models.length} model(s) under /admin/data-mngt.`,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// ─── Standalone Entry Point ───────────────────────────────────────────────────
|
|
108
|
+
// Called directly by `postgenerate:dev` (via ts-node), NOT by seed/index.ts.
|
|
109
|
+
|
|
110
|
+
if (require.main === module) {
|
|
111
|
+
const prisma = new PrismaClient();
|
|
112
|
+
|
|
113
|
+
seedDataMngtPages(prisma)
|
|
114
|
+
.catch((e) => {
|
|
115
|
+
console.error('[seedDataMngtPages] Fatal error:', e);
|
|
116
|
+
process.exit(1);
|
|
117
|
+
})
|
|
118
|
+
.finally(() => prisma.$disconnect());
|
|
119
|
+
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { PrismaClient } from '@prisma/client';
|
|
2
|
-
import users from './users';
|
|
3
2
|
import { seedPermissions } from './permissions';
|
|
4
|
-
import
|
|
3
|
+
import users from './users';
|
|
5
4
|
|
|
6
5
|
const prisma = new PrismaClient();
|
|
7
6
|
|
|
8
7
|
export async function main() {
|
|
9
8
|
await prisma.user.createMany({ data: users, skipDuplicates: true });
|
|
10
9
|
await seedPermissions(prisma);
|
|
11
|
-
await seedDataMngtPages(prisma);
|
|
12
10
|
}
|
|
13
11
|
|
|
14
12
|
if (require.main === module) {
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { PrismaClient } from '@prisma/client';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
bindResourceToPage,
|
|
4
|
+
FULL_ACTIONS,
|
|
5
|
+
upsertPage,
|
|
6
|
+
upsertResource,
|
|
7
|
+
} from '../scripts/lib/page-helpers';
|
|
4
8
|
|
|
5
9
|
/**
|
|
6
10
|
* Seed permission-related tables so that the SYSTEM_ADMIN role is recognised
|
|
@@ -11,6 +15,13 @@ const FULL_ACTIONS = ['createAny', 'readAny', 'updateAny', 'deleteAny'];
|
|
|
11
15
|
* - config/prisma/page.prisma → role, page, resource resources
|
|
12
16
|
*
|
|
13
17
|
* Safe to re-run: every write uses upsert / createMany + skipDuplicates.
|
|
18
|
+
*
|
|
19
|
+
* Data model (single source of truth):
|
|
20
|
+
* resourceDefs[].pageCode — which page "owns" this resource.
|
|
21
|
+
* • undefined → pure system resource, no page binding (currently unused)
|
|
22
|
+
* • string → creates a t_page_resource row linking the resource to that page
|
|
23
|
+
* Multiple resources can share the same pageCode (e.g. rolePages + roleResource
|
|
24
|
+
* both belong to the 'role' page because that page's UI calls both APIs).
|
|
14
25
|
*/
|
|
15
26
|
export async function seedPermissions(prisma: PrismaClient) {
|
|
16
27
|
// ------------------------------------------------------------------ Role --
|
|
@@ -25,74 +36,89 @@ export async function seedPermissions(prisma: PrismaClient) {
|
|
|
25
36
|
console.log(`[seed] Role: SYSTEM_ADMIN (id=${systemAdminRole.id})`);
|
|
26
37
|
|
|
27
38
|
// --------------------------------------------------------------- Resources -
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
//
|
|
35
|
-
{ code: '
|
|
36
|
-
{ code: '
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
// pageCode: which leaf page "owns" this resource (drives t_page_resource rows).
|
|
40
|
+
const resourceDefs: {
|
|
41
|
+
code: string;
|
|
42
|
+
description: string;
|
|
43
|
+
pageCode?: string;
|
|
44
|
+
}[] = [
|
|
45
|
+
// ── permission module ────────────────────────────────────────────────────
|
|
46
|
+
{ code: 'user', description: 'User management', pageCode: 'user' },
|
|
47
|
+
{ code: 'role', description: 'Role management', pageCode: 'role' },
|
|
48
|
+
{
|
|
49
|
+
code: 'rolePages',
|
|
50
|
+
description: 'Role-page assignments',
|
|
51
|
+
pageCode: 'role',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
code: 'roleResource',
|
|
55
|
+
description: 'Role-resource grants',
|
|
56
|
+
pageCode: 'role',
|
|
57
|
+
},
|
|
58
|
+
{ code: 'page', description: 'Page / menu management', pageCode: 'page' },
|
|
59
|
+
{
|
|
60
|
+
code: 'pageResource',
|
|
61
|
+
description: 'Page-resource configuration',
|
|
62
|
+
pageCode: 'page',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
code: 'resource',
|
|
66
|
+
description: 'Resource management',
|
|
67
|
+
pageCode: 'resource',
|
|
68
|
+
},
|
|
69
|
+
{ code: 'audit', description: 'Audit logs', pageCode: 'audits' },
|
|
70
|
+
// ── business module ──────────────────────────────────────────────────────
|
|
71
|
+
{
|
|
72
|
+
code: 'game',
|
|
73
|
+
description: 'Business / Game management',
|
|
74
|
+
pageCode: 'game',
|
|
75
|
+
},
|
|
76
|
+
{ code: 'canvas', description: 'Canvas management', pageCode: 'canvas' },
|
|
44
77
|
];
|
|
45
78
|
|
|
46
|
-
const resources: { id: number;
|
|
79
|
+
const resources: { id: number; code: string }[] = [];
|
|
47
80
|
for (const def of resourceDefs) {
|
|
48
|
-
const r = await prisma.
|
|
49
|
-
|
|
50
|
-
|
|
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})`);
|
|
81
|
+
const r = await upsertResource(prisma, def.code, def.description);
|
|
82
|
+
resources.push({ id: r.id, code: r.code });
|
|
83
|
+
console.log(`[seed] Resource: ${r.code} (id=${r.id})`);
|
|
60
84
|
}
|
|
61
85
|
|
|
62
86
|
// ------------------------------------------------------------------ Pages --
|
|
63
|
-
//
|
|
87
|
+
// Created in order (parent first) so that parentId can be resolved.
|
|
64
88
|
|
|
65
89
|
const pages: { id: number; code: string }[] = [];
|
|
66
90
|
|
|
67
91
|
// Level 1: top-level group (系统管理)
|
|
68
|
-
const adminPage = await prisma
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
zhName: '系统管理',
|
|
75
|
-
enName: 'System Management',
|
|
76
|
-
isVirtual: false,
|
|
77
|
-
sortOrder: 1000,
|
|
78
|
-
},
|
|
92
|
+
const adminPage = await upsertPage(prisma, {
|
|
93
|
+
code: 'admin',
|
|
94
|
+
name: 'admin',
|
|
95
|
+
zhName: '系统管理',
|
|
96
|
+
enName: 'System Mgnt',
|
|
97
|
+
sortOrder: 1000,
|
|
79
98
|
});
|
|
80
99
|
pages.push({ id: adminPage.id, code: adminPage.code });
|
|
81
100
|
console.log(`[seed] Page: ${adminPage.code} (id=${adminPage.id})`);
|
|
82
101
|
|
|
102
|
+
// Level 2: 数据管理 — child of admin
|
|
103
|
+
const dataMngt = await upsertPage(prisma, {
|
|
104
|
+
code: 'dataMngt',
|
|
105
|
+
name: '数据管理',
|
|
106
|
+
zhName: '数据管理',
|
|
107
|
+
enName: 'Data Management',
|
|
108
|
+
sortOrder: 1000,
|
|
109
|
+
parentId: adminPage.id,
|
|
110
|
+
});
|
|
111
|
+
pages.push({ id: dataMngt.id, code: dataMngt.code });
|
|
112
|
+
console.log(`[seed] Page: ${dataMngt.code} (id=${dataMngt.id})`);
|
|
113
|
+
|
|
83
114
|
// Level 2: permission group (权限管理) — child of admin
|
|
84
|
-
const permissionPage = await prisma
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
enName: 'Permission Management',
|
|
92
|
-
isVirtual: false,
|
|
93
|
-
sortOrder: 1000,
|
|
94
|
-
parentId: adminPage.id,
|
|
95
|
-
},
|
|
115
|
+
const permissionPage = await upsertPage(prisma, {
|
|
116
|
+
code: 'permission',
|
|
117
|
+
name: 'permission',
|
|
118
|
+
zhName: '权限管理',
|
|
119
|
+
enName: 'Permission Mgnt',
|
|
120
|
+
sortOrder: 1010,
|
|
121
|
+
parentId: adminPage.id,
|
|
96
122
|
});
|
|
97
123
|
pages.push({ id: permissionPage.id, code: permissionPage.code });
|
|
98
124
|
console.log(`[seed] Page: ${permissionPage.code} (id=${permissionPage.id})`);
|
|
@@ -101,35 +127,35 @@ export async function seedPermissions(prisma: PrismaClient) {
|
|
|
101
127
|
const permissionChildDefs = [
|
|
102
128
|
{
|
|
103
129
|
code: 'permission_readme',
|
|
104
|
-
name: '
|
|
130
|
+
name: 'permission_readme',
|
|
105
131
|
zhName: '菜单指引',
|
|
106
132
|
enName: 'Menu Guide',
|
|
107
133
|
sortOrder: 1005,
|
|
108
134
|
},
|
|
109
135
|
{
|
|
110
136
|
code: 'user',
|
|
111
|
-
name: '
|
|
137
|
+
name: 'user',
|
|
112
138
|
zhName: '用户管理',
|
|
113
|
-
enName: 'User
|
|
139
|
+
enName: 'User Mgnt',
|
|
114
140
|
sortOrder: 1010,
|
|
115
141
|
},
|
|
116
142
|
{
|
|
117
143
|
code: 'role',
|
|
118
|
-
name: '
|
|
144
|
+
name: 'role',
|
|
119
145
|
zhName: '角色管理',
|
|
120
|
-
enName: 'Role
|
|
146
|
+
enName: 'Role Mgnt',
|
|
121
147
|
sortOrder: 1020,
|
|
122
148
|
},
|
|
123
149
|
{
|
|
124
150
|
code: 'page',
|
|
125
|
-
name: '
|
|
151
|
+
name: 'page',
|
|
126
152
|
zhName: '页面管理',
|
|
127
|
-
enName: 'Page
|
|
153
|
+
enName: 'Page Mgnt',
|
|
128
154
|
sortOrder: 1030,
|
|
129
155
|
},
|
|
130
156
|
{
|
|
131
157
|
code: 'resource',
|
|
132
|
-
name: '
|
|
158
|
+
name: 'resource',
|
|
133
159
|
zhName: '资源管理',
|
|
134
160
|
enName: 'Resource Management',
|
|
135
161
|
sortOrder: 1040,
|
|
@@ -137,117 +163,57 @@ export async function seedPermissions(prisma: PrismaClient) {
|
|
|
137
163
|
];
|
|
138
164
|
|
|
139
165
|
for (const def of permissionChildDefs) {
|
|
140
|
-
const p = await prisma.
|
|
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
|
-
});
|
|
166
|
+
const p = await upsertPage(prisma, { ...def, parentId: permissionPage.id });
|
|
153
167
|
pages.push({ id: p.id, code: p.code });
|
|
154
168
|
console.log(`[seed] Page: ${p.code} (id=${p.id})`);
|
|
155
169
|
}
|
|
156
170
|
|
|
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
171
|
// Level 2: other top-level children of admin (业务、审计日志)
|
|
175
172
|
const adminChildDefs = [
|
|
173
|
+
{
|
|
174
|
+
code: 'canvas',
|
|
175
|
+
name: 'canvas',
|
|
176
|
+
zhName: 'Canvas',
|
|
177
|
+
enName: 'Canvas',
|
|
178
|
+
sortOrder: 1005,
|
|
179
|
+
},
|
|
176
180
|
{
|
|
177
181
|
code: 'game',
|
|
178
|
-
name: '
|
|
179
|
-
zhName: '
|
|
180
|
-
enName: 'Business',
|
|
181
|
-
isVirtual: false,
|
|
182
|
+
name: 'game',
|
|
183
|
+
zhName: '业务管理',
|
|
184
|
+
enName: 'Business Mgnt',
|
|
182
185
|
sortOrder: 1050,
|
|
183
186
|
},
|
|
184
187
|
{
|
|
185
188
|
code: 'audits',
|
|
186
|
-
name: '
|
|
189
|
+
name: 'audits',
|
|
187
190
|
zhName: '审计日志',
|
|
188
191
|
enName: 'Audit Log',
|
|
189
|
-
isVirtual: false,
|
|
190
192
|
sortOrder: 1060,
|
|
191
193
|
},
|
|
192
194
|
];
|
|
193
195
|
|
|
194
196
|
for (const def of adminChildDefs) {
|
|
195
|
-
const p = await prisma.
|
|
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
|
-
});
|
|
197
|
+
const p = await upsertPage(prisma, { ...def, parentId: adminPage.id });
|
|
208
198
|
pages.push({ id: p.id, code: p.code });
|
|
209
199
|
console.log(`[seed] Page: ${p.code} (id=${p.id})`);
|
|
210
200
|
}
|
|
211
201
|
|
|
212
202
|
// ------------------------------------------------------- PageResource links -
|
|
213
|
-
|
|
214
|
-
|
|
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);
|
|
203
|
+
for (const def of resourceDefs) {
|
|
204
|
+
if (!def.pageCode) continue;
|
|
230
205
|
|
|
231
|
-
|
|
206
|
+
const targetPage = pages.find((p) => p.code === def.pageCode);
|
|
207
|
+
if (!targetPage) {
|
|
232
208
|
console.warn(
|
|
233
|
-
`[seed] PageResource:
|
|
209
|
+
`[seed] PageResource: page "${def.pageCode}" not found — skipping ${def.code}`,
|
|
234
210
|
);
|
|
235
211
|
continue;
|
|
236
212
|
}
|
|
237
213
|
|
|
238
|
-
await prisma.
|
|
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
|
-
});
|
|
214
|
+
await bindResourceToPage(prisma, targetPage.id, def.code, def.description);
|
|
249
215
|
console.log(
|
|
250
|
-
`[seed] PageResource: page(${
|
|
216
|
+
`[seed] PageResource: page(${def.pageCode}) ↔ resource(${def.code})`,
|
|
251
217
|
);
|
|
252
218
|
}
|
|
253
219
|
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
// eslint-disable-next-line import/order
|
|
2
1
|
import './lib/tracing'; // OpenTelemetry Prisma instrumentation - 必须第一个导入
|
|
3
2
|
|
|
4
3
|
import { AllExceptionsFilter, UserType } from '@gadmin2n/nest-common';
|
|
5
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
ClassSerializerInterceptor,
|
|
6
|
+
UnauthorizedException,
|
|
7
|
+
ValidationPipe,
|
|
8
|
+
} from '@nestjs/common';
|
|
6
9
|
import './alias.config';
|
|
7
10
|
|
|
8
11
|
import { ConfigService } from '@nestjs/config';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Test, TestingModule } from '@nestjs/testing';
|
|
2
|
+
import { CanvasController } from './canvas.controller';
|
|
3
|
+
import { CanvasService } from './canvas.service';
|
|
4
|
+
|
|
5
|
+
describe('CanvasController', () => {
|
|
6
|
+
let controller: CanvasController;
|
|
7
|
+
|
|
8
|
+
beforeEach(async () => {
|
|
9
|
+
const module: TestingModule = await Test.createTestingModule({
|
|
10
|
+
controllers: [CanvasController],
|
|
11
|
+
providers: [CanvasService],
|
|
12
|
+
}).compile();
|
|
13
|
+
|
|
14
|
+
controller = module.get<CanvasController>(CanvasController);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('should be defined', () => {
|
|
18
|
+
expect(controller).toBeDefined();
|
|
19
|
+
});
|
|
20
|
+
});
|