@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
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
I18N_T,
|
|
5
5
|
ModelsFieldsTypeMap,
|
|
6
6
|
convertPrismaDecimal,
|
|
7
|
-
} from
|
|
7
|
+
} from '@gadmin2n/react-common';
|
|
8
8
|
import {
|
|
9
9
|
TextField,
|
|
10
10
|
DateField,
|
|
@@ -17,10 +17,10 @@ import {
|
|
|
17
17
|
UrlField,
|
|
18
18
|
ShowButton,
|
|
19
19
|
TagField,
|
|
20
|
-
} from
|
|
21
|
-
import { CheckCircleTwoTone, CloseCircleTwoTone } from
|
|
22
|
-
import { FilterDropdownProps } from
|
|
23
|
-
import { Select, Table, Space, SelectProps } from
|
|
20
|
+
} from '@refinedev/antd';
|
|
21
|
+
import { CheckCircleTwoTone, CloseCircleTwoTone } from '@ant-design/icons';
|
|
22
|
+
import { FilterDropdownProps } from 'antd/lib/table/interface';
|
|
23
|
+
import { Select, Table, Space, SelectProps } from 'antd';
|
|
24
24
|
import {
|
|
25
25
|
CrudSorting,
|
|
26
26
|
CrudFilters,
|
|
@@ -28,10 +28,10 @@ import {
|
|
|
28
28
|
getDefaultSortOrder,
|
|
29
29
|
getDefaultFilter,
|
|
30
30
|
stringifyTableParams,
|
|
31
|
-
} from
|
|
32
|
-
import { DefaultOptionType } from
|
|
33
|
-
import { ModelConfig } from
|
|
34
|
-
import { agentAttrs } from
|
|
31
|
+
} from '@refinedev/core';
|
|
32
|
+
import { DefaultOptionType } from 'antd/es/select';
|
|
33
|
+
import { ModelConfig } from 'generated/types/config.types';
|
|
34
|
+
import { agentAttrs } from '../components/agentPanel/agentAttributes';
|
|
35
35
|
import dayjs from 'dayjs';
|
|
36
36
|
|
|
37
37
|
export function getTableParams(filters: Record<string, string> = {}) {
|
|
@@ -40,7 +40,7 @@ export function getTableParams(filters: Record<string, string> = {}) {
|
|
|
40
40
|
sorters: [],
|
|
41
41
|
filters: Object.entries(filters).map(([field, value]) => ({
|
|
42
42
|
field,
|
|
43
|
-
operator:
|
|
43
|
+
operator: 'eq',
|
|
44
44
|
value: encodeURIComponent(value),
|
|
45
45
|
})),
|
|
46
46
|
});
|
|
@@ -55,7 +55,7 @@ export interface TableColumnContext {
|
|
|
55
55
|
model: ModelType;
|
|
56
56
|
modelsEnum: Record<string, Record<string, string>>;
|
|
57
57
|
modelsMap: ModelsFieldsTypeMap;
|
|
58
|
-
tableConfig: ModelConfig[
|
|
58
|
+
tableConfig: ModelConfig['table'];
|
|
59
59
|
sorter: CrudSorting | undefined;
|
|
60
60
|
filters: CrudFilters | undefined;
|
|
61
61
|
relationSelectProps: Record<
|
|
@@ -83,13 +83,13 @@ export function getTableColumn(
|
|
|
83
83
|
model: ModelType,
|
|
84
84
|
modelsEnum: Record<string, Record<string, string>>,
|
|
85
85
|
modelsMap: ModelsFieldsTypeMap,
|
|
86
|
-
tableConfig: ModelConfig[
|
|
86
|
+
tableConfig: ModelConfig['table'],
|
|
87
87
|
sorter: CrudSorting | undefined,
|
|
88
88
|
filters: CrudFilters | undefined,
|
|
89
89
|
relationSelectProps: Record<
|
|
90
90
|
string,
|
|
91
91
|
SelectProps<{ value: string; label: string }, DefaultOptionType>
|
|
92
|
-
|
|
92
|
+
>,
|
|
93
93
|
) {
|
|
94
94
|
return getTableColumnV2({
|
|
95
95
|
col,
|
|
@@ -126,19 +126,19 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
126
126
|
const { type: fieldType, args } = col.uiType.formItem;
|
|
127
127
|
const fieldName = col.name;
|
|
128
128
|
const props: any = {
|
|
129
|
-
dataIndex: fieldName.includes(
|
|
129
|
+
dataIndex: fieldName.includes('.') ? fieldName.split('.') : fieldName,
|
|
130
130
|
key: fieldName,
|
|
131
131
|
title: t(`resources.${resourceName}.fields.${fieldName}`, fieldName),
|
|
132
132
|
render: (value: any) => <TextField value={value} />,
|
|
133
133
|
};
|
|
134
134
|
|
|
135
|
-
if (col.kind ===
|
|
136
|
-
const entityName = model[fieldName]?.type ||
|
|
137
|
-
props.dataIndex = [fieldName,
|
|
135
|
+
if (col.kind === 'object' && !col.isList && !fieldName.includes('.')) {
|
|
136
|
+
const entityName = model[fieldName]?.type || '';
|
|
137
|
+
props.dataIndex = [fieldName, 'id'];
|
|
138
138
|
props.key = `${fieldName}.id`;
|
|
139
139
|
props.title = t(
|
|
140
140
|
`resources.${resourceName}.fields.${fieldName}`,
|
|
141
|
-
t(`resources.${entityName.toLowerCase()}.name`, entityName)
|
|
141
|
+
t(`resources.${entityName.toLowerCase()}.name`, entityName),
|
|
142
142
|
);
|
|
143
143
|
props.render = (_: any, record: any) =>
|
|
144
144
|
record?.[fieldName]?.id !== undefined ? (
|
|
@@ -149,43 +149,47 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
149
149
|
resource={entityName.toLowerCase()}
|
|
150
150
|
recordItemId={record[fieldName].id}
|
|
151
151
|
>
|
|
152
|
-
{
|
|
152
|
+
{
|
|
153
|
+
record[fieldName][
|
|
154
|
+
modelsMap[entityName]?.meta?.nameKeys?.[0] || 'id'
|
|
155
|
+
]
|
|
156
|
+
}
|
|
153
157
|
</ShowButton>
|
|
154
158
|
) : null;
|
|
155
|
-
} else if (fieldName.startsWith(
|
|
156
|
-
const entityName = model[fieldName.split(
|
|
159
|
+
} else if (fieldName.startsWith('_count.')) {
|
|
160
|
+
const entityName = model[fieldName.split('.')[1]]?.type || '';
|
|
157
161
|
props.title = t(
|
|
158
162
|
`resources.${resourceName}.fields.${fieldName}`,
|
|
159
|
-
|
|
163
|
+
'Count ' + t(`resources.${entityName.toLowerCase()}.name`, entityName),
|
|
160
164
|
);
|
|
161
|
-
} else if (fieldType ===
|
|
165
|
+
} else if (fieldType === 'DateTime') {
|
|
162
166
|
props.render = (value: any) => {
|
|
163
167
|
return <DateField value={value} format="YYYY-MM-DD HH:mm:ss" />;
|
|
164
168
|
};
|
|
165
|
-
} else if ([
|
|
169
|
+
} else if (['Int', 'BigInt', 'Float', 'Decimal'].includes(fieldType)) {
|
|
166
170
|
props.render = (value: any) => {
|
|
167
171
|
// Handle Prisma Decimal objects (which have {s, e, d} keys from decimal.js)
|
|
168
172
|
const displayValue = convertPrismaDecimal(value);
|
|
169
173
|
if (
|
|
170
|
-
fieldName !==
|
|
174
|
+
fieldName !== 'id' &&
|
|
171
175
|
displayValue !== undefined &&
|
|
172
176
|
displayValue !== null &&
|
|
173
177
|
!isNaN(Number(displayValue))
|
|
174
178
|
) {
|
|
175
|
-
return <NumberField value={displayValue ??
|
|
179
|
+
return <NumberField value={displayValue ?? ''} />;
|
|
176
180
|
} else {
|
|
177
181
|
return <TextField value={displayValue} />;
|
|
178
182
|
}
|
|
179
183
|
};
|
|
180
|
-
} else if (fieldType ===
|
|
184
|
+
} else if (fieldType === 'Url') {
|
|
181
185
|
props.render = (value: any) => {
|
|
182
186
|
return <UrlField value={value} />;
|
|
183
187
|
};
|
|
184
|
-
} else if (fieldType ===
|
|
188
|
+
} else if (fieldType === 'Email') {
|
|
185
189
|
props.render = (value: any) => {
|
|
186
190
|
return <EmailField value={value} />;
|
|
187
191
|
};
|
|
188
|
-
} else if (fieldType ===
|
|
192
|
+
} else if (fieldType === 'Boolean') {
|
|
189
193
|
props.render = (value: any) => {
|
|
190
194
|
return (
|
|
191
195
|
<BooleanField
|
|
@@ -195,44 +199,44 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
195
199
|
/>
|
|
196
200
|
);
|
|
197
201
|
};
|
|
198
|
-
} else if (fieldType ===
|
|
202
|
+
} else if (fieldType === 'Radio' || col.kind === 'enum') {
|
|
199
203
|
props.render = (value: any) => {
|
|
200
204
|
return (
|
|
201
205
|
<TagField
|
|
202
206
|
value={t(
|
|
203
207
|
`resources.${resourceName}.enums.${fieldName}.${value}`,
|
|
204
|
-
String(value)
|
|
208
|
+
String(value),
|
|
205
209
|
)}
|
|
206
210
|
/>
|
|
207
211
|
);
|
|
208
212
|
};
|
|
209
|
-
} else if (fieldType ===
|
|
213
|
+
} else if (fieldType === 'CheckBox') {
|
|
210
214
|
props.render = (value: any) => {
|
|
211
215
|
return (
|
|
212
216
|
<Space>
|
|
213
|
-
{JSON.parse(value ||
|
|
217
|
+
{JSON.parse(value || '[]')?.map?.((v: string, index: number) => (
|
|
214
218
|
<TagField
|
|
215
219
|
key={index}
|
|
216
220
|
value={t(
|
|
217
221
|
`resources.${resourceName}.enums.${fieldName}.${v}`,
|
|
218
|
-
String(v)
|
|
222
|
+
String(v),
|
|
219
223
|
)}
|
|
220
224
|
/>
|
|
221
225
|
))}
|
|
222
226
|
</Space>
|
|
223
227
|
);
|
|
224
228
|
};
|
|
225
|
-
} else if (fieldType ===
|
|
226
|
-
if ([
|
|
229
|
+
} else if (fieldType === 'Select') {
|
|
230
|
+
if (['multiple', 'tags'].includes((args as any).mode)) {
|
|
227
231
|
props.render = (value: any) => {
|
|
228
232
|
return (
|
|
229
233
|
<Space>
|
|
230
|
-
{JSON.parse(value ||
|
|
234
|
+
{JSON.parse(value || '[]')?.map?.((v: string, index: number) => (
|
|
231
235
|
<TagField
|
|
232
236
|
key={index}
|
|
233
237
|
value={t(
|
|
234
238
|
`resources.${resourceName}.enums.${fieldName}.${v}`,
|
|
235
|
-
String(v)
|
|
239
|
+
String(v),
|
|
236
240
|
)}
|
|
237
241
|
/>
|
|
238
242
|
))}
|
|
@@ -245,17 +249,17 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
245
249
|
<TagField
|
|
246
250
|
value={t(
|
|
247
251
|
`resources.${resourceName}.enums.${fieldName}.${value}`,
|
|
248
|
-
String(value)
|
|
252
|
+
String(value),
|
|
249
253
|
)}
|
|
250
254
|
/>
|
|
251
255
|
);
|
|
252
256
|
};
|
|
253
257
|
}
|
|
254
|
-
} else if (fieldType ===
|
|
258
|
+
} else if (fieldType === 'Image') {
|
|
255
259
|
props.render = (value: any) => {
|
|
256
260
|
return (
|
|
257
261
|
<Space wrap>
|
|
258
|
-
{JSON.parse(value ||
|
|
262
|
+
{JSON.parse(value || '[]')?.map?.((img: any) => (
|
|
259
263
|
<ImageField
|
|
260
264
|
key={img?.response?.name}
|
|
261
265
|
value={img?.thumbUrl}
|
|
@@ -266,11 +270,11 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
266
270
|
</Space>
|
|
267
271
|
);
|
|
268
272
|
};
|
|
269
|
-
} else if (fieldType ===
|
|
273
|
+
} else if (fieldType === 'File') {
|
|
270
274
|
props.render = (value: any) => {
|
|
271
275
|
return (
|
|
272
276
|
<Space wrap>
|
|
273
|
-
{JSON.parse((value as any) ||
|
|
277
|
+
{JSON.parse((value as any) || '[]')?.map?.((file: any) => (
|
|
274
278
|
<FileField
|
|
275
279
|
key={file?.response?.name}
|
|
276
280
|
src={file?.thumbUrl}
|
|
@@ -292,11 +296,11 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
292
296
|
const { type: fieldType, args } = col.uiType.formItem;
|
|
293
297
|
|
|
294
298
|
if (
|
|
295
|
-
field.kind ===
|
|
296
|
-
[
|
|
299
|
+
field.kind === 'enum' ||
|
|
300
|
+
['Radio', 'Select', 'CheckBox'].includes(fieldType)
|
|
297
301
|
) {
|
|
298
302
|
let options = {};
|
|
299
|
-
if (field.kind ===
|
|
303
|
+
if (field.kind === 'enum') {
|
|
300
304
|
options = (modelsEnum as any)[field.type];
|
|
301
305
|
} else {
|
|
302
306
|
options = (args as any).options.reduce(
|
|
@@ -304,7 +308,7 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
304
308
|
acc[cur] = cur;
|
|
305
309
|
return acc;
|
|
306
310
|
},
|
|
307
|
-
{}
|
|
311
|
+
{},
|
|
308
312
|
);
|
|
309
313
|
}
|
|
310
314
|
props.filterDropdown = (p: FilterDropdownProps) => {
|
|
@@ -322,21 +326,21 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
322
326
|
mode="multiple"
|
|
323
327
|
placeholder={t(
|
|
324
328
|
`resources.${resourceName}.filters.${fieldName}`,
|
|
325
|
-
|
|
329
|
+
'Select value',
|
|
326
330
|
)}
|
|
327
331
|
options={Object.entries(options).map(([k, v]) => ({
|
|
328
332
|
value: v,
|
|
329
333
|
label: t(
|
|
330
334
|
`resources.${resourceName}.enums.${fieldName}.${k}`,
|
|
331
|
-
String(k)
|
|
335
|
+
String(k),
|
|
332
336
|
),
|
|
333
337
|
}))}
|
|
334
338
|
/>
|
|
335
339
|
</FilterDropdown>
|
|
336
340
|
);
|
|
337
341
|
};
|
|
338
|
-
props.defaultFilteredValue = getDefaultFilter(fieldName, filters,
|
|
339
|
-
} else if (field.kind ===
|
|
342
|
+
props.defaultFilteredValue = getDefaultFilter(fieldName, filters, 'in');
|
|
343
|
+
} else if (field.kind === 'object') {
|
|
340
344
|
props.filterDropdown = (p: FilterDropdownProps) => {
|
|
341
345
|
const { setSelectedKeys, confirm } = p;
|
|
342
346
|
return (
|
|
@@ -355,7 +359,7 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
355
359
|
mode="multiple"
|
|
356
360
|
placeholder={t(
|
|
357
361
|
`resources.${field.type.toLowerCase()}.name`,
|
|
358
|
-
String(field.type)
|
|
362
|
+
String(field.type),
|
|
359
363
|
)}
|
|
360
364
|
{...relationSelectProps[field.name]}
|
|
361
365
|
/>
|
|
@@ -365,13 +369,13 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
365
369
|
props.defaultFilteredValue = getDefaultFilter(
|
|
366
370
|
`${field.name}.id`,
|
|
367
371
|
filters,
|
|
368
|
-
|
|
372
|
+
'in',
|
|
369
373
|
);
|
|
370
374
|
}
|
|
371
375
|
}
|
|
372
376
|
|
|
373
377
|
const agentHeaderAttrs = agentAttrs({
|
|
374
|
-
type: '
|
|
378
|
+
type: 'list-column',
|
|
375
379
|
field: fieldName,
|
|
376
380
|
resource: resourceName,
|
|
377
381
|
meta: {
|
|
@@ -381,27 +385,29 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
|
|
|
381
385
|
},
|
|
382
386
|
});
|
|
383
387
|
|
|
388
|
+
const { key: colKey, ...restProps } = props;
|
|
389
|
+
|
|
384
390
|
return (
|
|
385
391
|
<Table.Column
|
|
386
|
-
{
|
|
392
|
+
key={colKey}
|
|
393
|
+
{...restProps}
|
|
387
394
|
{...col}
|
|
388
395
|
onHeaderCell={() => agentHeaderAttrs}
|
|
389
396
|
/>
|
|
390
397
|
);
|
|
391
398
|
}
|
|
392
399
|
|
|
393
|
-
|
|
394
400
|
interface SearchFormOptions {
|
|
395
401
|
/** 日期字段名,设为 null 则不使用日期筛选,默认 'createdAt' */
|
|
396
402
|
dateField?: string | null;
|
|
397
403
|
}
|
|
398
404
|
|
|
399
|
-
/**
|
|
400
|
-
* 从 parsedFilters 生成搜索表单的 initialValues
|
|
405
|
+
/**
|
|
406
|
+
* 从 parsedFilters 生成搜索表单的 initialValues
|
|
401
407
|
*/
|
|
402
408
|
export function getSearchFormInitialValues(
|
|
403
409
|
parsedFilters: any[],
|
|
404
|
-
options: SearchFormOptions = {}
|
|
410
|
+
options: SearchFormOptions = {},
|
|
405
411
|
) {
|
|
406
412
|
const { dateField = 'createdAt' } = options;
|
|
407
413
|
|
|
@@ -409,30 +415,38 @@ export function getSearchFormInitialValues(
|
|
|
409
415
|
q: parsedFilters.find((f: any) => f.field === 'q')?.value,
|
|
410
416
|
};
|
|
411
417
|
|
|
412
|
-
// 仅当 dateField 存在时才处理日期筛选
|
|
418
|
+
// 仅当 dateField 存在时才处理日期筛选
|
|
413
419
|
if (dateField) {
|
|
414
420
|
const hasDateFilter = parsedFilters.find(
|
|
415
|
-
(f: any) => f.field === dateField && f.operator === 'gte'
|
|
421
|
+
(f: any) => f.field === dateField && f.operator === 'gte',
|
|
416
422
|
);
|
|
417
423
|
|
|
418
424
|
initialValues[dateField] = hasDateFilter
|
|
419
425
|
? [
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
426
|
+
dayjs(
|
|
427
|
+
parsedFilters.find(
|
|
428
|
+
(f: any) => f.field === dateField && f.operator === 'gte',
|
|
429
|
+
)?.value,
|
|
430
|
+
),
|
|
431
|
+
dayjs(
|
|
432
|
+
parsedFilters.find(
|
|
433
|
+
(f: any) => f.field === dateField && f.operator === 'lte',
|
|
434
|
+
)?.value,
|
|
435
|
+
),
|
|
436
|
+
]
|
|
423
437
|
: [undefined, undefined];
|
|
424
438
|
}
|
|
425
439
|
|
|
426
440
|
return initialValues;
|
|
427
441
|
}
|
|
428
442
|
|
|
429
|
-
/**
|
|
430
|
-
* 创建搜索表单的 onFinish 处理函数
|
|
443
|
+
/**
|
|
444
|
+
* 创建搜索表单的 onFinish 处理函数
|
|
431
445
|
*/
|
|
432
446
|
export function createSearchFormOnFinish(
|
|
433
447
|
setCurrent: (page: number) => void,
|
|
434
448
|
setFilters: (fn: (prev: CrudFilters) => CrudFilters) => void,
|
|
435
|
-
options: SearchFormOptions = {}
|
|
449
|
+
options: SearchFormOptions = {},
|
|
436
450
|
) {
|
|
437
451
|
const { dateField = 'createdAt' } = options;
|
|
438
452
|
const filterFields = dateField ? ['q', dateField] : ['q'];
|
|
@@ -441,25 +455,37 @@ export function createSearchFormOnFinish(
|
|
|
441
455
|
const fs: CrudFilters = [];
|
|
442
456
|
const trimedQ = (values.q || '').trim();
|
|
443
457
|
|
|
444
|
-
// 处理日期筛选
|
|
458
|
+
// 处理日期筛选
|
|
445
459
|
if (dateField) {
|
|
446
460
|
const dateValue = values[dateField];
|
|
447
461
|
if (dateValue && dateValue[0]) {
|
|
448
462
|
fs.push(
|
|
449
|
-
{
|
|
450
|
-
|
|
463
|
+
{
|
|
464
|
+
field: dateField,
|
|
465
|
+
operator: 'gte',
|
|
466
|
+
value: dateValue[0]?.toISOString?.(),
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
field: dateField,
|
|
470
|
+
operator: 'lte',
|
|
471
|
+
value: dateValue[1]?.toISOString?.(),
|
|
472
|
+
},
|
|
451
473
|
);
|
|
452
474
|
}
|
|
453
475
|
}
|
|
454
476
|
|
|
455
|
-
// 处理关键词筛选
|
|
477
|
+
// 处理关键词筛选
|
|
456
478
|
if (trimedQ) {
|
|
457
479
|
fs.push({ field: 'q', operator: 'eq', value: trimedQ });
|
|
458
480
|
}
|
|
459
481
|
|
|
460
482
|
setCurrent(1);
|
|
461
483
|
setFilters((prevFilters) =>
|
|
462
|
-
unionFilters(
|
|
484
|
+
unionFilters(
|
|
485
|
+
[],
|
|
486
|
+
fs,
|
|
487
|
+
prevFilters.filter((item: any) => !filterFields.includes(item.field)),
|
|
488
|
+
),
|
|
463
489
|
);
|
|
464
490
|
};
|
|
465
|
-
}
|
|
491
|
+
}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import Cookies from
|
|
2
|
-
import { getApiUrl } from
|
|
1
|
+
import Cookies from 'js-cookie';
|
|
2
|
+
import { getApiUrl } from 'config/http';
|
|
3
3
|
|
|
4
|
-
export const GAdminTokenName =
|
|
4
|
+
export const GAdminTokenName = 'gadmin-token';
|
|
5
5
|
|
|
6
6
|
export function getUrlParams(search = window.location.search) {
|
|
7
|
-
const hashes = search.slice(search.indexOf(
|
|
8
|
-
return hashes.reduce(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
const hashes = search.slice(search.indexOf('?') + 1).split('&');
|
|
8
|
+
return hashes.reduce(
|
|
9
|
+
(acc, hash) => {
|
|
10
|
+
const [key, val] = hash.split('=');
|
|
11
|
+
if (val) acc[key] = decodeURIComponent(val);
|
|
12
|
+
return acc;
|
|
13
|
+
},
|
|
14
|
+
{} as Record<string, string>,
|
|
15
|
+
);
|
|
13
16
|
}
|
|
14
17
|
|
|
15
18
|
type LoginCookie = {
|
|
@@ -19,15 +22,10 @@ type LoginCookie = {
|
|
|
19
22
|
// ─── 认证 / 会话 ──────────────────────────────────────────────────────────────
|
|
20
23
|
|
|
21
24
|
export function login() {
|
|
22
|
-
// woa域名直接刷新页面
|
|
23
|
-
if (window.location.hostname.endsWith(".woa.com")) {
|
|
24
|
-
window.location.reload();
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
25
|
clearLoginCookie();
|
|
28
26
|
const apiUrl = getApiUrl();
|
|
29
27
|
window.location.href = `${apiUrl}/login?redirect_url=${encodeURIComponent(
|
|
30
|
-
window.location.href
|
|
28
|
+
window.location.href,
|
|
31
29
|
)}`;
|
|
32
30
|
}
|
|
33
31
|
|
|
@@ -35,7 +33,7 @@ export function logout() {
|
|
|
35
33
|
clearLoginCookie();
|
|
36
34
|
const apiUrl = getApiUrl();
|
|
37
35
|
window.location.href = `${apiUrl}/logout?redirect_url=${encodeURIComponent(
|
|
38
|
-
window.location.origin
|
|
36
|
+
window.location.origin,
|
|
39
37
|
)}`;
|
|
40
38
|
}
|
|
41
39
|
|
|
@@ -43,14 +41,7 @@ export function logout() {
|
|
|
43
41
|
* 通过cookie检测是否登录及参数转cookie(for dev)
|
|
44
42
|
*/
|
|
45
43
|
export function checkLogin(): boolean {
|
|
46
|
-
|
|
47
|
-
return true;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (Cookies.get(GAdminTokenName)) {
|
|
51
|
-
return true;
|
|
52
|
-
}
|
|
53
|
-
|
|
44
|
+
// 优先处理 URL 参数中的 token,确保 token 被写入 cookie(任何域名下都需要)
|
|
54
45
|
const params = getUrlParams();
|
|
55
46
|
const gadminToken = params[GAdminTokenName];
|
|
56
47
|
if (gadminToken) {
|
|
@@ -58,6 +49,10 @@ export function checkLogin(): boolean {
|
|
|
58
49
|
return true;
|
|
59
50
|
}
|
|
60
51
|
|
|
52
|
+
if (Cookies.get(GAdminTokenName)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
|
|
61
56
|
return false;
|
|
62
57
|
}
|
|
63
58
|
|
|
@@ -72,12 +67,12 @@ export function clearLoginCookie() {
|
|
|
72
67
|
|
|
73
68
|
export function requestHeaders() {
|
|
74
69
|
const gadminToken = Cookies.get(GAdminTokenName);
|
|
75
|
-
const business = JSON.parse(Cookies.get(
|
|
70
|
+
const business = JSON.parse(Cookies.get('Business') || '{}');
|
|
76
71
|
return {
|
|
77
|
-
|
|
72
|
+
'X-Requested-With': 'XMLHttpRequest',
|
|
78
73
|
// 防止 business.name 含中文等非 ASCII 字符导致 HTTP header 500
|
|
79
74
|
...(Object.keys(business).length > 0 && {
|
|
80
|
-
|
|
75
|
+
'X-Gadmin-Business': JSON.stringify({
|
|
81
76
|
...business,
|
|
82
77
|
name: encodeURIComponent(business.name),
|
|
83
78
|
}),
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export interface PageTreeNode {
|
|
2
|
+
title: string;
|
|
3
|
+
value: string;
|
|
4
|
+
key: string;
|
|
5
|
+
children?: PageTreeNode[];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface RawPage {
|
|
9
|
+
id: number | string;
|
|
10
|
+
parentId?: number | string | null;
|
|
11
|
+
sortOrder?: number | null;
|
|
12
|
+
[key: string]: any;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 将平铺的 page 列表构建成 TreeSelect 所需的树结构。
|
|
17
|
+
*
|
|
18
|
+
* @param pages 后端返回的平铺 page 数组
|
|
19
|
+
* @param getTitle 从单条 page 记录提取显示文本的函数(支持多语言/自定义逻辑)
|
|
20
|
+
*/
|
|
21
|
+
export function buildPageTree(
|
|
22
|
+
pages: RawPage[],
|
|
23
|
+
getTitle: (page: RawPage) => string,
|
|
24
|
+
): PageTreeNode[] {
|
|
25
|
+
const nodeMap = new Map<
|
|
26
|
+
string,
|
|
27
|
+
{ node: PageTreeNode; parentId: string | null; sortOrder: number | null }
|
|
28
|
+
>();
|
|
29
|
+
|
|
30
|
+
pages.forEach((page) => {
|
|
31
|
+
const id = String(page.id);
|
|
32
|
+
const parentId = page.parentId != null ? String(page.parentId) : null;
|
|
33
|
+
const sortOrder = page.sortOrder ?? null;
|
|
34
|
+
nodeMap.set(id, {
|
|
35
|
+
node: { title: getTitle(page), value: id, key: id, children: [] },
|
|
36
|
+
parentId,
|
|
37
|
+
sortOrder,
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const roots: PageTreeNode[] = [];
|
|
42
|
+
nodeMap.forEach(({ node, parentId }) => {
|
|
43
|
+
if (parentId !== null && nodeMap.has(parentId)) {
|
|
44
|
+
nodeMap.get(parentId)!.node.children!.push(node);
|
|
45
|
+
} else {
|
|
46
|
+
roots.push(node);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const sortOrderMap = new Map<string, number | null>();
|
|
51
|
+
nodeMap.forEach(({ sortOrder }, id) => sortOrderMap.set(id, sortOrder));
|
|
52
|
+
|
|
53
|
+
const sortNodes = (nodes: PageTreeNode[]) => {
|
|
54
|
+
nodes.sort((a, b) => {
|
|
55
|
+
const orderA = sortOrderMap.get(a.key) ?? Infinity;
|
|
56
|
+
const orderB = sortOrderMap.get(b.key) ?? Infinity;
|
|
57
|
+
return (orderA as number) - (orderB as number);
|
|
58
|
+
});
|
|
59
|
+
nodes.forEach((n) => {
|
|
60
|
+
if (n.children?.length) sortNodes(n.children);
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const pruneEmptyChildren = (nodes: PageTreeNode[]): PageTreeNode[] =>
|
|
65
|
+
nodes.map((n) => {
|
|
66
|
+
if (n.children?.length)
|
|
67
|
+
return { ...n, children: pruneEmptyChildren(n.children) };
|
|
68
|
+
const { children, ...rest } = n;
|
|
69
|
+
return rest as PageTreeNode;
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
sortNodes(roots);
|
|
73
|
+
return pruneEmptyChildren(roots);
|
|
74
|
+
}
|