@gadmin2n/schematics 0.0.69 → 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 +1 -1
- 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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import React, { useEffect, useMemo } from
|
|
2
|
-
import { useTranslation } from
|
|
3
|
-
import { Descriptions, Drawer, Space, Table, Tabs, Tag } from
|
|
4
|
-
import { useFetchData } from
|
|
5
|
-
import type { Resource } from
|
|
1
|
+
import React, { useEffect, useMemo } from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
3
|
+
import { Descriptions, Drawer, Space, Table, Tabs, Tag } from 'antd';
|
|
4
|
+
import { useFetchData } from '@/hooks/useFetchData';
|
|
5
|
+
import type { Resource } from '../types';
|
|
6
6
|
|
|
7
7
|
interface ResourceDetailDrawerProps {
|
|
8
8
|
resource: Resource;
|
|
@@ -16,25 +16,35 @@ export const ResourceDetailDrawer: React.FC<ResourceDetailDrawerProps> = ({
|
|
|
16
16
|
onClose,
|
|
17
17
|
}) => {
|
|
18
18
|
const { i18n } = useTranslation();
|
|
19
|
-
const isChinese = i18n.language ===
|
|
19
|
+
const isChinese = i18n.language === 'zh_CN' || i18n.language === 'zh';
|
|
20
20
|
|
|
21
21
|
const {
|
|
22
22
|
data: pageResourceData,
|
|
23
23
|
loading: pageLoading,
|
|
24
24
|
fetchData: fetchPageResources,
|
|
25
|
-
} = useFetchData(
|
|
25
|
+
} = useFetchData('pageResource/findMany', 'post', undefined, true);
|
|
26
26
|
|
|
27
27
|
const {
|
|
28
28
|
data: roleData,
|
|
29
29
|
loading: roleLoading,
|
|
30
30
|
fetchData: fetchRoles,
|
|
31
|
-
} = useFetchData(
|
|
31
|
+
} = useFetchData('role/findMany', 'post', undefined, true);
|
|
32
32
|
|
|
33
33
|
useEffect(() => {
|
|
34
34
|
if (open) {
|
|
35
35
|
fetchPageResources({
|
|
36
36
|
where: { resourceId: resource.id },
|
|
37
|
-
include: {
|
|
37
|
+
include: {
|
|
38
|
+
page: {
|
|
39
|
+
select: {
|
|
40
|
+
id: true,
|
|
41
|
+
name: true,
|
|
42
|
+
code: true,
|
|
43
|
+
zhName: true,
|
|
44
|
+
enName: true,
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
38
48
|
take: 1000,
|
|
39
49
|
});
|
|
40
50
|
// Query roles with filtered roleResources for this resource
|
|
@@ -61,12 +71,12 @@ export const ResourceDetailDrawer: React.FC<ResourceDetailDrawerProps> = ({
|
|
|
61
71
|
return list.map((item: any) => {
|
|
62
72
|
const page = item.page;
|
|
63
73
|
const pageName = isChinese
|
|
64
|
-
?
|
|
65
|
-
:
|
|
74
|
+
? page?.zhName || page?.name || '-'
|
|
75
|
+
: page?.enName || page?.name || '-';
|
|
66
76
|
return {
|
|
67
77
|
key: item.id,
|
|
68
78
|
pageName,
|
|
69
|
-
pageCode: page?.code ||
|
|
79
|
+
pageCode: page?.code || '-',
|
|
70
80
|
actions: Array.isArray(item.actions) ? item.actions : [],
|
|
71
81
|
};
|
|
72
82
|
});
|
|
@@ -79,8 +89,8 @@ export const ResourceDetailDrawer: React.FC<ResourceDetailDrawerProps> = ({
|
|
|
79
89
|
const actions = roleResource?.actions;
|
|
80
90
|
return {
|
|
81
91
|
key: item.id,
|
|
82
|
-
roleName: item.name ||
|
|
83
|
-
roleCode: item.code ||
|
|
92
|
+
roleName: item.name || '-',
|
|
93
|
+
roleCode: item.code || '-',
|
|
84
94
|
actions: Array.isArray(actions) ? actions : [],
|
|
85
95
|
};
|
|
86
96
|
});
|
|
@@ -88,11 +98,11 @@ export const ResourceDetailDrawer: React.FC<ResourceDetailDrawerProps> = ({
|
|
|
88
98
|
|
|
89
99
|
const permissionColumns = [
|
|
90
100
|
{
|
|
91
|
-
title:
|
|
92
|
-
dataIndex:
|
|
101
|
+
title: 'Permissions',
|
|
102
|
+
dataIndex: 'actions',
|
|
93
103
|
render: (actions: string[]) => (
|
|
94
104
|
<Space size={[0, 4]} wrap>
|
|
95
|
-
{actions.map(a => (
|
|
105
|
+
{actions.map((a) => (
|
|
96
106
|
<Tag key={a}>{a}</Tag>
|
|
97
107
|
))}
|
|
98
108
|
</Space>
|
|
@@ -108,18 +118,25 @@ export const ResourceDetailDrawer: React.FC<ResourceDetailDrawerProps> = ({
|
|
|
108
118
|
width={560}
|
|
109
119
|
destroyOnClose
|
|
110
120
|
>
|
|
111
|
-
<Descriptions
|
|
121
|
+
<Descriptions
|
|
122
|
+
column={1}
|
|
123
|
+
size="small"
|
|
124
|
+
bordered
|
|
125
|
+
style={{ marginBottom: 16 }}
|
|
126
|
+
>
|
|
112
127
|
<Descriptions.Item label="Code">{resource.code}</Descriptions.Item>
|
|
113
128
|
<Descriptions.Item label="Name">{resource.name}</Descriptions.Item>
|
|
114
129
|
{resource.description && (
|
|
115
|
-
<Descriptions.Item label="Description">
|
|
130
|
+
<Descriptions.Item label="Description">
|
|
131
|
+
{resource.description}
|
|
132
|
+
</Descriptions.Item>
|
|
116
133
|
)}
|
|
117
134
|
</Descriptions>
|
|
118
135
|
|
|
119
136
|
<Tabs
|
|
120
137
|
items={[
|
|
121
138
|
{
|
|
122
|
-
key:
|
|
139
|
+
key: 'pages',
|
|
123
140
|
label: `Referenced by Pages (${pages.length})`,
|
|
124
141
|
children: (
|
|
125
142
|
<Table
|
|
@@ -129,15 +146,15 @@ export const ResourceDetailDrawer: React.FC<ResourceDetailDrawerProps> = ({
|
|
|
129
146
|
size="small"
|
|
130
147
|
pagination={pages.length > 10 ? { pageSize: 10 } : false}
|
|
131
148
|
columns={[
|
|
132
|
-
{ title:
|
|
133
|
-
{ title:
|
|
149
|
+
{ title: 'Page Name', dataIndex: 'pageName', width: '35%' },
|
|
150
|
+
{ title: 'Page Code', dataIndex: 'pageCode', width: '25%' },
|
|
134
151
|
...permissionColumns,
|
|
135
152
|
]}
|
|
136
153
|
/>
|
|
137
154
|
),
|
|
138
155
|
},
|
|
139
156
|
{
|
|
140
|
-
key:
|
|
157
|
+
key: 'roles',
|
|
141
158
|
label: `Visible to Roles (${roles.length})`,
|
|
142
159
|
children: (
|
|
143
160
|
<Table
|
|
@@ -147,7 +164,7 @@ export const ResourceDetailDrawer: React.FC<ResourceDetailDrawerProps> = ({
|
|
|
147
164
|
size="small"
|
|
148
165
|
pagination={roles.length > 10 ? { pageSize: 10 } : false}
|
|
149
166
|
columns={[
|
|
150
|
-
{ title:
|
|
167
|
+
{ title: 'Role Name', dataIndex: 'roleName', width: '35%' },
|
|
151
168
|
...permissionColumns,
|
|
152
169
|
]}
|
|
153
170
|
/>
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import { useModalForm } from
|
|
3
|
-
import { type HttpError, useList } from
|
|
4
|
-
import { Checkbox, Form, Input, Modal, Select } from
|
|
5
|
-
import type { Resource } from
|
|
6
|
-
import { ResourceSelect } from
|
|
7
|
-
import { PROTECTED_RESOURCES } from
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useModalForm } from '@refinedev/antd';
|
|
3
|
+
import { type HttpError, useList } from '@refinedev/core';
|
|
4
|
+
import { Checkbox, Form, Input, Modal, Select } from 'antd';
|
|
5
|
+
import type { Resource } from '../types';
|
|
6
|
+
import { ResourceSelect } from '../queries';
|
|
7
|
+
import { PROTECTED_RESOURCES } from '../list';
|
|
8
8
|
|
|
9
9
|
type ResourceFormFields = Partial<Resource>;
|
|
10
10
|
|
|
11
11
|
type Props = {
|
|
12
|
-
action:
|
|
12
|
+
action: 'create' | 'edit';
|
|
13
13
|
id?: number;
|
|
14
14
|
onMutationSuccess?: () => void;
|
|
15
15
|
onCancel?: () => void;
|
|
@@ -18,9 +18,18 @@ type Props = {
|
|
|
18
18
|
// Pattern to detect special characters - only allows letters, numbers, and underscores
|
|
19
19
|
const SPECIAL_CHAR_PATTERN = /[^a-zA-Z0-9_]/;
|
|
20
20
|
|
|
21
|
-
export const ResourceFormModal: React.FC<Props> = ({
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
export const ResourceFormModal: React.FC<Props> = ({
|
|
22
|
+
action,
|
|
23
|
+
id,
|
|
24
|
+
onCancel,
|
|
25
|
+
onMutationSuccess,
|
|
26
|
+
}) => {
|
|
27
|
+
const { formProps, modalProps, close } = useModalForm<
|
|
28
|
+
Resource,
|
|
29
|
+
HttpError,
|
|
30
|
+
ResourceFormFields
|
|
31
|
+
>({
|
|
32
|
+
resource: 'resource',
|
|
24
33
|
action,
|
|
25
34
|
id,
|
|
26
35
|
defaultVisible: true,
|
|
@@ -34,14 +43,14 @@ export const ResourceFormModal: React.FC<Props> = ({ action, id, onCancel, onMut
|
|
|
34
43
|
|
|
35
44
|
// Fetch all resources for code duplication check
|
|
36
45
|
const { data: resourcesData } = useList<Resource>({
|
|
37
|
-
resource:
|
|
46
|
+
resource: 'resource',
|
|
38
47
|
pagination: {
|
|
39
|
-
mode:
|
|
48
|
+
mode: 'off',
|
|
40
49
|
},
|
|
41
50
|
});
|
|
42
51
|
|
|
43
52
|
// Check if current resource is protected (for edit mode)
|
|
44
|
-
const currentResource = resourcesData?.data?.find(r => r.id === id);
|
|
53
|
+
const currentResource = resourcesData?.data?.find((r) => r.id === id);
|
|
45
54
|
const isProtectedResource = currentResource
|
|
46
55
|
? PROTECTED_RESOURCES.includes(currentResource.code.toLowerCase())
|
|
47
56
|
: false;
|
|
@@ -57,18 +66,18 @@ export const ResourceFormModal: React.FC<Props> = ({ action, id, onCancel, onMut
|
|
|
57
66
|
}
|
|
58
67
|
close();
|
|
59
68
|
}}
|
|
60
|
-
title={action ===
|
|
69
|
+
title={action === 'create' ? 'Create Resource' : 'Edit Resource'}
|
|
61
70
|
>
|
|
62
71
|
<Form {...formProps} layout="vertical">
|
|
63
72
|
{isProtectedResource && (
|
|
64
73
|
<div
|
|
65
74
|
style={{
|
|
66
|
-
padding:
|
|
67
|
-
marginBottom:
|
|
68
|
-
backgroundColor:
|
|
69
|
-
border:
|
|
70
|
-
borderRadius:
|
|
71
|
-
color:
|
|
75
|
+
padding: '12px',
|
|
76
|
+
marginBottom: '16px',
|
|
77
|
+
backgroundColor: '#fff7e6',
|
|
78
|
+
border: '1px solid #ffd591',
|
|
79
|
+
borderRadius: '4px',
|
|
80
|
+
color: '#d46b08',
|
|
72
81
|
}}
|
|
73
82
|
>
|
|
74
83
|
⚠️ This is a system resource and cannot be modified.
|
|
@@ -76,10 +85,11 @@ export const ResourceFormModal: React.FC<Props> = ({ action, id, onCancel, onMut
|
|
|
76
85
|
)}
|
|
77
86
|
<Form.Item
|
|
78
87
|
rules={[
|
|
79
|
-
{ required: true, message:
|
|
88
|
+
{ required: true, message: 'Resource Code is required' },
|
|
80
89
|
{
|
|
81
90
|
pattern: /^[a-zA-Z0-9_]+$/,
|
|
82
|
-
message:
|
|
91
|
+
message:
|
|
92
|
+
'Resource Code can only contain letters, numbers and underscores',
|
|
83
93
|
},
|
|
84
94
|
{
|
|
85
95
|
validator: async (_, value) => {
|
|
@@ -91,29 +101,39 @@ export const ResourceFormModal: React.FC<Props> = ({ action, id, onCancel, onMut
|
|
|
91
101
|
const trimmedValue = value.trim();
|
|
92
102
|
|
|
93
103
|
// In edit mode, if value hasn't changed, skip validation
|
|
94
|
-
if (
|
|
104
|
+
if (
|
|
105
|
+
action === 'edit' &&
|
|
106
|
+
currentResource &&
|
|
107
|
+
trimmedValue === currentResource.code
|
|
108
|
+
) {
|
|
95
109
|
return Promise.resolve();
|
|
96
110
|
}
|
|
97
111
|
|
|
98
112
|
// Check if trying to use a protected resource code
|
|
99
113
|
if (PROTECTED_RESOURCES.includes(trimmedValue.toLowerCase())) {
|
|
100
114
|
return Promise.reject(
|
|
101
|
-
new Error(
|
|
115
|
+
new Error(
|
|
116
|
+
'This resource code is reserved for system use and cannot be used.',
|
|
117
|
+
),
|
|
102
118
|
);
|
|
103
119
|
}
|
|
104
120
|
|
|
105
121
|
// Check if resource code already exists (case-insensitive)
|
|
106
|
-
const isDuplicate = existingResources.some(resource => {
|
|
122
|
+
const isDuplicate = existingResources.some((resource) => {
|
|
107
123
|
// Skip current resource when editing
|
|
108
|
-
if (action ===
|
|
124
|
+
if (action === 'edit' && resource.id === id) {
|
|
109
125
|
return false;
|
|
110
126
|
}
|
|
111
|
-
return
|
|
127
|
+
return (
|
|
128
|
+
resource.code.toLowerCase() === trimmedValue.toLowerCase()
|
|
129
|
+
);
|
|
112
130
|
});
|
|
113
131
|
|
|
114
132
|
if (isDuplicate) {
|
|
115
133
|
return Promise.reject(
|
|
116
|
-
new Error(
|
|
134
|
+
new Error(
|
|
135
|
+
'Resource code already exists. Please use a different code.',
|
|
136
|
+
),
|
|
117
137
|
);
|
|
118
138
|
}
|
|
119
139
|
|
|
@@ -126,20 +146,22 @@ export const ResourceFormModal: React.FC<Props> = ({ action, id, onCancel, onMut
|
|
|
126
146
|
>
|
|
127
147
|
<Input
|
|
128
148
|
placeholder="Enter resource code (e.g., networkincidents, pageresources)"
|
|
129
|
-
disabled={isProtectedResource || action ===
|
|
149
|
+
disabled={isProtectedResource || action === 'edit'}
|
|
130
150
|
/>
|
|
131
151
|
</Form.Item>
|
|
132
152
|
|
|
133
153
|
<Form.Item
|
|
134
154
|
rules={[
|
|
135
|
-
{ required: true, message:
|
|
155
|
+
{ required: true, message: 'Resource name is required' },
|
|
136
156
|
{
|
|
137
157
|
validator: (_, value) => {
|
|
138
158
|
if (!value || !SPECIAL_CHAR_PATTERN.test(value)) {
|
|
139
159
|
return Promise.resolve();
|
|
140
160
|
}
|
|
141
161
|
return Promise.reject(
|
|
142
|
-
new Error(
|
|
162
|
+
new Error(
|
|
163
|
+
'Special characters are not allowed in resource name.',
|
|
164
|
+
),
|
|
143
165
|
);
|
|
144
166
|
},
|
|
145
167
|
},
|
|
@@ -153,17 +175,23 @@ export const ResourceFormModal: React.FC<Props> = ({ action, id, onCancel, onMut
|
|
|
153
175
|
const trimmedValue = value.trim();
|
|
154
176
|
|
|
155
177
|
// In edit mode, if value hasn't changed, skip validation
|
|
156
|
-
if (
|
|
178
|
+
if (
|
|
179
|
+
action === 'edit' &&
|
|
180
|
+
currentResource &&
|
|
181
|
+
trimmedValue === currentResource.name
|
|
182
|
+
) {
|
|
157
183
|
return Promise.resolve();
|
|
158
184
|
}
|
|
159
185
|
|
|
160
186
|
// Check if resource name already exists (case-insensitive) - warning only
|
|
161
|
-
const isDuplicate = existingResources.some(resource => {
|
|
187
|
+
const isDuplicate = existingResources.some((resource) => {
|
|
162
188
|
// Skip current resource when editing
|
|
163
|
-
if (action ===
|
|
189
|
+
if (action === 'edit' && resource.id === id) {
|
|
164
190
|
return false;
|
|
165
191
|
}
|
|
166
|
-
return
|
|
192
|
+
return (
|
|
193
|
+
resource.name.toLowerCase() === trimmedValue.toLowerCase()
|
|
194
|
+
);
|
|
167
195
|
});
|
|
168
196
|
|
|
169
197
|
if (isDuplicate) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ResourceManagementListPage } from
|
|
2
|
-
export type { Resource } from
|
|
1
|
+
export { ResourceManagementListPage } from './list';
|
|
2
|
+
export type { Resource } from './types';
|
|
@@ -1,17 +1,33 @@
|
|
|
1
|
-
import React, { useState, useMemo } from
|
|
2
|
-
import { useTable, FilterDropdown } from
|
|
3
|
-
import { Table, Button, Space, Tooltip, Input } from
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import {
|
|
1
|
+
import React, { useState, useMemo } from 'react';
|
|
2
|
+
import { useTable, FilterDropdown } from '@refinedev/antd';
|
|
3
|
+
import { Table, Button, Space, Tooltip, Input } from 'antd';
|
|
4
|
+
import {
|
|
5
|
+
EditOutlined,
|
|
6
|
+
EyeOutlined,
|
|
7
|
+
SearchOutlined,
|
|
8
|
+
CodeOutlined,
|
|
9
|
+
} from '@ant-design/icons';
|
|
10
|
+
import {
|
|
11
|
+
getDefaultFilter,
|
|
12
|
+
type HttpError,
|
|
13
|
+
useGetIdentity,
|
|
14
|
+
} from '@refinedev/core';
|
|
15
|
+
import type { Resource } from './types';
|
|
16
|
+
import { EditModal } from './Components/EditModal';
|
|
17
|
+
import { CreateModal } from './Components/CreateModal';
|
|
18
|
+
import { ResourceDetailDrawer } from './Components/ResourceDetailDrawer';
|
|
19
|
+
import { SqlModal, generateResourceSql } from '../../components/SqlModal';
|
|
11
20
|
|
|
12
21
|
// System resources that cannot be modified (use Set for O(1) lookup performance)
|
|
13
22
|
// System resources that cannot be modified
|
|
14
|
-
export const PROTECTED_RESOURCES = [
|
|
23
|
+
export const PROTECTED_RESOURCES = [
|
|
24
|
+
'pageresource',
|
|
25
|
+
'resource',
|
|
26
|
+
'page',
|
|
27
|
+
'rolepages',
|
|
28
|
+
'role',
|
|
29
|
+
'roleresource',
|
|
30
|
+
];
|
|
15
31
|
|
|
16
32
|
export const ResourceManagementListPage: React.FC = () => {
|
|
17
33
|
const { data: identity } = useGetIdentity<any>();
|
|
@@ -20,33 +36,32 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
20
36
|
HttpError,
|
|
21
37
|
Partial<Resource>
|
|
22
38
|
>({
|
|
23
|
-
resource:
|
|
39
|
+
resource: 'resource',
|
|
24
40
|
syncWithLocation: false, // Disable URL sync to keep URL clean
|
|
25
41
|
pagination: {
|
|
26
42
|
pageSize: 20,
|
|
27
43
|
},
|
|
28
44
|
onSearch: (values: Partial<Resource>) => {
|
|
29
45
|
return Object.entries(values)
|
|
30
|
-
.filter(([, value]) => value !== undefined && value !==
|
|
46
|
+
.filter(([, value]) => value !== undefined && value !== '')
|
|
31
47
|
.map(([field, value]) => ({
|
|
32
48
|
field,
|
|
33
|
-
operator:
|
|
34
|
-
value: value ||
|
|
49
|
+
operator: 'contains' as const,
|
|
50
|
+
value: value || '',
|
|
35
51
|
}));
|
|
36
52
|
},
|
|
37
53
|
filters: {
|
|
38
54
|
initial: [
|
|
39
|
-
{ field:
|
|
40
|
-
{ field:
|
|
55
|
+
{ field: 'code', operator: 'contains', value: '' },
|
|
56
|
+
{ field: 'name', operator: 'contains', value: '' },
|
|
41
57
|
],
|
|
42
|
-
defaultBehavior:
|
|
43
|
-
},
|
|
44
|
-
sorters: {
|
|
58
|
+
defaultBehavior: 'merge',
|
|
45
59
|
},
|
|
60
|
+
sorters: {},
|
|
46
61
|
});
|
|
47
62
|
|
|
48
63
|
const [showModal, setShowModal] = useState<{
|
|
49
|
-
type:
|
|
64
|
+
type: 'edit' | 'create' | null;
|
|
50
65
|
id: number | null;
|
|
51
66
|
}>({
|
|
52
67
|
type: null,
|
|
@@ -59,18 +74,21 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
59
74
|
open: boolean;
|
|
60
75
|
title: string;
|
|
61
76
|
sql: string;
|
|
62
|
-
}>({ open: false, title:
|
|
77
|
+
}>({ open: false, title: '', sql: '' });
|
|
63
78
|
|
|
64
79
|
const handleShowSql = (record: Resource) => {
|
|
65
|
-
const operator = {
|
|
80
|
+
const operator = {
|
|
81
|
+
authorId: identity?.userid,
|
|
82
|
+
authorName: identity?.username,
|
|
83
|
+
};
|
|
66
84
|
const sql = generateResourceSql(record, operator);
|
|
67
85
|
setSqlModal({ open: true, title: `SQL — Resource: ${record.code}`, sql });
|
|
68
86
|
};
|
|
69
87
|
|
|
70
88
|
// fix for ant design filter dropdown contains operator
|
|
71
|
-
filters.map(filter => {
|
|
72
|
-
if (filter.operator ===
|
|
73
|
-
filter.value = filter.value.join(
|
|
89
|
+
filters.map((filter) => {
|
|
90
|
+
if (filter.operator === 'contains' && Array.isArray(filter.value)) {
|
|
91
|
+
filter.value = filter.value.join(',');
|
|
74
92
|
}
|
|
75
93
|
});
|
|
76
94
|
|
|
@@ -80,7 +98,10 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
80
98
|
const dataSource = tableProps.dataSource || [];
|
|
81
99
|
const map = new Map<number, boolean>();
|
|
82
100
|
dataSource.forEach((record: Resource) => {
|
|
83
|
-
map.set(
|
|
101
|
+
map.set(
|
|
102
|
+
record.id,
|
|
103
|
+
PROTECTED_RESOURCES.includes(record.code.toLowerCase()),
|
|
104
|
+
);
|
|
84
105
|
});
|
|
85
106
|
return map;
|
|
86
107
|
}, [tableProps.dataSource]);
|
|
@@ -101,7 +122,7 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
101
122
|
type="primary"
|
|
102
123
|
onClick={() =>
|
|
103
124
|
setShowModal({
|
|
104
|
-
type:
|
|
125
|
+
type: 'create',
|
|
105
126
|
id: null,
|
|
106
127
|
})
|
|
107
128
|
}
|
|
@@ -114,8 +135,8 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
114
135
|
dataIndex="code"
|
|
115
136
|
title="Code"
|
|
116
137
|
sorter={(a: Resource, b: Resource) => a.code.localeCompare(b.code)}
|
|
117
|
-
defaultFilteredValue={getDefaultFilter(
|
|
118
|
-
filterDropdown={props => (
|
|
138
|
+
defaultFilteredValue={getDefaultFilter('code', filters, 'contains')}
|
|
139
|
+
filterDropdown={(props) => (
|
|
119
140
|
<FilterDropdown
|
|
120
141
|
{...props}
|
|
121
142
|
clearFilters={() => {
|
|
@@ -132,8 +153,8 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
132
153
|
dataIndex="name"
|
|
133
154
|
title="Name"
|
|
134
155
|
sorter={(a: Resource, b: Resource) => a.name.localeCompare(b.name)}
|
|
135
|
-
defaultFilteredValue={getDefaultFilter(
|
|
136
|
-
filterDropdown={props => (
|
|
156
|
+
defaultFilteredValue={getDefaultFilter('name', filters, 'contains')}
|
|
157
|
+
filterDropdown={(props) => (
|
|
137
158
|
<FilterDropdown
|
|
138
159
|
{...props}
|
|
139
160
|
clearFilters={() => {
|
|
@@ -150,7 +171,9 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
150
171
|
<Table.Column
|
|
151
172
|
dataIndex="creator"
|
|
152
173
|
title="Creator"
|
|
153
|
-
sorter={(a: Resource, b: Resource) =>
|
|
174
|
+
sorter={(a: Resource, b: Resource) =>
|
|
175
|
+
(a.creator || '').localeCompare(b.creator || '')
|
|
176
|
+
}
|
|
154
177
|
/>
|
|
155
178
|
<Table.Column
|
|
156
179
|
title="Actions"
|
|
@@ -166,13 +189,21 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
166
189
|
onClick={() => setDrawerResource(record)}
|
|
167
190
|
/>
|
|
168
191
|
</Tooltip>
|
|
169
|
-
<Tooltip
|
|
192
|
+
<Tooltip
|
|
193
|
+
title={
|
|
194
|
+
isProtected
|
|
195
|
+
? 'This is a system resource and cannot be modified'
|
|
196
|
+
: 'Edit'
|
|
197
|
+
}
|
|
198
|
+
>
|
|
170
199
|
<Button
|
|
171
200
|
type="default"
|
|
172
201
|
size="small"
|
|
173
202
|
icon={<EditOutlined />}
|
|
174
203
|
disabled={isProtected}
|
|
175
|
-
onClick={() =>
|
|
204
|
+
onClick={() =>
|
|
205
|
+
setShowModal({ type: 'edit', id: record.id })
|
|
206
|
+
}
|
|
176
207
|
/>
|
|
177
208
|
</Tooltip>
|
|
178
209
|
<Tooltip title="Generate SQL">
|
|
@@ -188,11 +219,18 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
188
219
|
}}
|
|
189
220
|
/>
|
|
190
221
|
</Table>
|
|
191
|
-
{showModal.type ===
|
|
192
|
-
<EditModal
|
|
222
|
+
{showModal.type === 'edit' && showModal.id && (
|
|
223
|
+
<EditModal
|
|
224
|
+
id={showModal.id}
|
|
225
|
+
onClose={handleModalClose}
|
|
226
|
+
onSuccess={handleModalSuccess}
|
|
227
|
+
/>
|
|
193
228
|
)}
|
|
194
|
-
{showModal.type ===
|
|
195
|
-
<CreateModal
|
|
229
|
+
{showModal.type === 'create' && (
|
|
230
|
+
<CreateModal
|
|
231
|
+
onClose={handleModalClose}
|
|
232
|
+
onSuccess={handleModalSuccess}
|
|
233
|
+
/>
|
|
196
234
|
)}
|
|
197
235
|
{drawerResource && (
|
|
198
236
|
<ResourceDetailDrawer
|
|
@@ -203,7 +241,7 @@ export const ResourceManagementListPage: React.FC = () => {
|
|
|
203
241
|
)}
|
|
204
242
|
<SqlModal
|
|
205
243
|
open={sqlModal.open}
|
|
206
|
-
onClose={() => setSqlModal({ open: false, title:
|
|
244
|
+
onClose={() => setSqlModal({ open: false, title: '', sql: '' })}
|
|
207
245
|
title={sqlModal.title}
|
|
208
246
|
sql={sqlModal.sql}
|
|
209
247
|
/>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import React from
|
|
1
|
+
import React from 'react';
|
|
2
2
|
|
|
3
|
-
import { RoleFormModal } from
|
|
4
|
-
import type { RolePageTreeNode } from
|
|
3
|
+
import { RoleFormModal } from './modal';
|
|
4
|
+
import type { RolePageTreeNode } from '../types';
|
|
5
5
|
|
|
6
6
|
interface CreateModalProps {
|
|
7
7
|
onClose: () => void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import React from
|
|
1
|
+
import React from 'react';
|
|
2
2
|
|
|
3
|
-
import { RoleFormModal } from
|
|
4
|
-
import type { RolePageTreeNode } from
|
|
3
|
+
import { RoleFormModal } from './modal';
|
|
4
|
+
import type { RolePageTreeNode } from '../types';
|
|
5
5
|
|
|
6
6
|
type RolePermissionSummary = {
|
|
7
7
|
pageIds: number[];
|
|
@@ -25,7 +25,7 @@ export const EditModal: React.FC<EditModalProps> = ({
|
|
|
25
25
|
rolePermissionSummary,
|
|
26
26
|
}) => {
|
|
27
27
|
const normalizedPageIds = rolePermissionSummary?.pageIds?.map((pageId) =>
|
|
28
|
-
String(pageId)
|
|
28
|
+
String(pageId),
|
|
29
29
|
);
|
|
30
30
|
|
|
31
31
|
const handleMutationSuccess = () => {
|