@gadmin2n/schematics 0.0.72 → 0.0.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +2 -0
  3. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/job.prisma +62 -0
  4. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +0 -21
  5. package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +171 -0
  6. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/AgendaJob.ts +60 -0
  7. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/Event.ts +1 -1
  8. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/WorkflowEventOutbox.ts +62 -0
  9. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/WorkflowNodeInstance.ts +62 -0
  10. package/dist/lib/application/files/gadmin2-game-angle-demo/config/ui/WorkflowNodeType.ts +62 -0
  11. package/dist/lib/application/files/gadmin2-game-angle-demo/server/.env +5 -0
  12. package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +5 -4
  13. package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +14 -7
  14. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/index.ts +4 -0
  15. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/permissions.ts +49 -3
  16. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +746 -0
  17. package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflows.ts +786 -0
  18. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agenda/agenda.controller.ts +6 -0
  19. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agenda/agenda.service.ts +79 -0
  20. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agendaJob/agendaJob.controller.spec.ts +20 -0
  21. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agendaJob/agendaJob.controller.ts +145 -0
  22. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agendaJob/agendaJob.module.ts +10 -0
  23. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/{canvas/canvas.service.spec.ts → agendaJob/agendaJob.service.spec.ts} +71 -65
  24. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/agendaJob/agendaJob.service.ts +83 -0
  25. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +2 -1
  26. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.module.ts +9 -0
  27. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/temporal.service.ts +100 -0
  28. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +19 -0
  29. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +43 -0
  30. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +317 -0
  31. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-node-type.controller.ts +16 -0
  32. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-node-type.service.ts +13 -0
  33. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +220 -0
  34. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.dto.ts +82 -0
  35. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +16 -0
  36. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +505 -0
  37. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.controller.spec.ts +22 -0
  38. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.controller.ts +147 -0
  39. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.module.ts +10 -0
  40. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.service.spec.ts +356 -0
  41. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowEventOutbox/workflowEventOutbox.service.ts +110 -0
  42. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.spec.ts +22 -0
  43. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.ts +216 -0
  44. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.module.ts +10 -0
  45. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +356 -0
  46. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +168 -0
  47. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.controller.spec.ts +22 -0
  48. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.controller.ts +199 -0
  49. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.module.ts +10 -0
  50. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.service.spec.ts +348 -0
  51. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeType/workflowNodeType.service.ts +106 -0
  52. package/dist/lib/application/files/gadmin2-game-angle-demo/server/yarn.lock +579 -1082
  53. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/README.md +278 -0
  54. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/config/development-sql.yaml +5 -0
  55. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/docker-compose.yml +25 -0
  56. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/package.json +13 -0
  57. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/sql/create-event-trigger.sql +87 -0
  58. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/.env +7 -0
  59. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/SANDBOX.md +122 -0
  60. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/package-lock.json +4285 -0
  61. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/package.json +28 -0
  62. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/__tests__/activities/code-execute.test.ts +44 -0
  63. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/__tests__/activities/http-request.test.ts +87 -0
  64. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/__tests__/helpers.test.ts +225 -0
  65. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/__tests__/node-type-consistency.test.ts +101 -0
  66. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/code-execute.ts +51 -0
  67. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/db-execute.ts +85 -0
  68. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/db-query.ts +35 -0
  69. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/http-request.ts +54 -0
  70. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/index.ts +6 -0
  71. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/reporting.ts +62 -0
  72. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/activities/send-notification.ts +47 -0
  73. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/config.ts +13 -0
  74. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/condition.ts +101 -0
  75. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/context.ts +58 -0
  76. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/graph.ts +184 -0
  77. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/helpers.ts +133 -0
  78. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/node-types.ts +57 -0
  79. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/dsl/types.ts +77 -0
  80. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/index.ts +36 -0
  81. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/outbox-poller.ts +226 -0
  82. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/src/workflows/dsl-workflow.ts +411 -0
  83. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/tsconfig.json +19 -0
  84. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/vitest.config.ts +8 -0
  85. package/dist/lib/application/files/gadmin2-game-angle-demo/temporal/worker/yarn.lock +1905 -0
  86. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package-lock.json +17555 -0
  87. package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +5 -2
  88. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +1 -0
  89. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +5 -1
  90. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/title.tsx +1 -1
  91. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +63 -0
  92. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +91 -2
  93. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +48 -2
  94. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +43 -2
  95. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +14 -9
  96. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +14 -9
  97. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +309 -56
  98. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/show.tsx +1 -3
  99. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/create.tsx +108 -0
  100. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/edit.tsx +124 -0
  101. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/index.tsx +4 -0
  102. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +245 -0
  103. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/show.tsx +70 -0
  104. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +0 -1
  105. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +160 -2
  106. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +120 -148
  107. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +74 -181
  108. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/LivePreview.tsx +15 -13
  109. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasConfigRegistry.tsx +2 -2
  110. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +338 -3
  111. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +18 -17
  112. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +10 -4
  113. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +10 -4
  114. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/{ChartViewerConfigModal.tsx → MultiChartConfigModal.tsx} +30 -18
  115. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartDataSourceModal.tsx +427 -0
  116. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +10 -4
  117. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +6 -14
  118. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +10 -4
  119. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +10 -4
  120. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/canvasModalProps.ts +24 -0
  121. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/demos.ts +45 -63
  122. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +99 -0
  123. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExportModal.tsx +87 -0
  124. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +322 -0
  125. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ImportModal.tsx +175 -0
  126. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeEditModal.tsx +60 -0
  127. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +1150 -0
  128. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +101 -0
  129. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +198 -0
  130. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +81 -0
  131. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +566 -0
  132. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +224 -0
  133. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +524 -0
  134. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +343 -0
  135. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +243 -0
  136. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/CreateNodeInstanceModal.tsx +363 -0
  137. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/DynamicConfigForm.tsx +154 -0
  138. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +176 -0
  139. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +77 -0
  140. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +112 -0
  141. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +305 -0
  142. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +282 -0
  143. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +469 -0
  144. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +92 -0
  145. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/create.tsx +111 -0
  146. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +127 -0
  147. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/index.tsx +4 -0
  148. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +254 -0
  149. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +74 -0
  150. package/dist/lib/application/files/gadmin2-game-angle-demo/web/yarn.lock +1501 -1199
  151. package/package.json +1 -1
  152. package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/app.controller.spec.ts +0 -22
  153. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/BarChart/index.tsx +0 -896
  154. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartSwitcher/index.tsx +0 -219
  155. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/ChartViewer/index.tsx +0 -159
  156. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Filter/index.tsx +0 -192
  157. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/LineChart/index.tsx +0 -1034
  158. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/NumCard.module.css +0 -8
  159. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumCard/index.tsx +0 -509
  160. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/NumLineCard/index.tsx +0 -66
  161. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/PieChart/index.tsx +0 -552
  162. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/RadarChart/index.tsx +0 -263
  163. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Section/index.tsx +0 -35
  164. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/Table/index.tsx +0 -207
  165. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/TreemapChart/index.tsx +0 -382
  166. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/WorldMap/index.tsx +0 -135
  167. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/chart-constants.ts +0 -53
  168. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/InfoIcon.tsx +0 -8
  169. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/icon/index.ts +0 -1
  170. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/config.ts +0 -31
  171. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/nameMap.json +0 -9
  172. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/map/world.geo.json +0 -39349
  173. package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/canvas/metric-info-tooltip/index.tsx +0 -19
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "gadmin2-demo-web",
2
+ "name": "web",
3
3
  "version": "0.0.1",
4
4
  "description": "",
5
5
  "author": "",
@@ -10,7 +10,8 @@
10
10
  "@dnd-kit/modifiers": "^9.0.0",
11
11
  "@dnd-kit/sortable": "^7.0.2",
12
12
  "@dnd-kit/utilities": "^3.2.2",
13
- "@gadmin2n/react-common": "^0.0.62",
13
+ "@gadmin2n/charts": "^0.0.7",
14
+ "@gadmin2n/react-common": "^0.0.64",
14
15
  "@monaco-editor/react": "^4.7.0",
15
16
  "@refinedev/antd": "^5.47.0",
16
17
  "@refinedev/cli": "^2.16.51",
@@ -20,6 +21,7 @@
20
21
  "@refinedev/react-router-v6": "^4.6.0",
21
22
  "@tanstack/react-query": "^4.36.1",
22
23
  "@uiw/react-md-editor": "^3.19.5",
24
+ "@xyflow/react": "^12.10.2",
23
25
  "antd": "^5.24.6",
24
26
  "class-validator": "^0.14.0",
25
27
  "dayjs": "^1.11.19",
@@ -35,6 +37,7 @@
35
37
  "lodash.memoize": "^4.1.2",
36
38
  "react": "^18.2.0",
37
39
  "react-diff-viewer": "^3.1.1",
40
+ "react-diff-viewer-continued": "^4.2.2",
38
41
  "react-dom": "^18.2.0",
39
42
  "react-grid-layout": "^2.2.3",
40
43
  "react-i18next": "^15.4.1",
@@ -16,6 +16,7 @@ import { BusinessContextProvider } from 'components/contexts/business';
16
16
  import { AgentProvider, ElementInspector } from 'components/agentPanel';
17
17
  import { authProvider } from 'authProvider';
18
18
  import '@refinedev/antd/dist/reset.css';
19
+ import '@gadmin2n/charts/style.css';
19
20
  import './styles/antd.css';
20
21
  import './styles/fc.css';
21
22
  import './styles/index.css';
@@ -138,7 +138,11 @@ export const Sider: React.FC = () => {
138
138
  if (children.length > 0) {
139
139
  return {
140
140
  key: item.key || Math.random().toString(),
141
- label: getMenuLabel(name, meta, currentLocale),
141
+ label: (
142
+ <span style={{ fontWeight: 600 }}>
143
+ {getMenuLabel(name, meta, currentLocale)}
144
+ </span>
145
+ ),
142
146
  icon: icon ?? <UnorderedListOutlined />,
143
147
  children: renderTreeView(children, currentSelectedKey),
144
148
  };
@@ -9,7 +9,7 @@ import { Logo } from './logo';
9
9
 
10
10
  const { useToken } = theme;
11
11
 
12
- const name = 'Opinions admin';
12
+ const name = 'Ops Admin';
13
13
 
14
14
  export const Title: React.FC<RefineLayoutThemedTitleProps> = ({
15
15
  collapsed,
@@ -160,6 +160,16 @@ const S = ({ children }: { children: React.ReactNode }) => (
160
160
  );
161
161
 
162
162
  // ─── Route Registry ──────────────────────────────────────────────────────────
163
+ //
164
+ // 路由路径命名规则:
165
+ // Sider 组件会对不在菜单中的路径执行 auto-redirect。只有路径中包含
166
+ // `/edit/`、`/show/` 或以 `/create` 结尾的页面才会被豁免。
167
+ // 因此,所有不在侧边栏菜单中的子页面(详情、编辑、创建等),
168
+ // 路径必须包含上述关键词,例如:
169
+ // ✅ instance/show/:id
170
+ // ✅ node-instances/edit/:id
171
+ // ❌ instance/:id ← 会被 auto-redirect 导致 404
172
+ //
163
173
 
164
174
  export const routeRegistry: Record<string, RouteEntry> = {
165
175
  // ── Administration ─────────────────────────────────────────────────────────
@@ -291,6 +301,59 @@ export const routeRegistry: Record<string, RouteEntry> = {
291
301
  },
292
302
  },
293
303
  },
304
+ // Workflow — code: admin.workflow (parent menu)
305
+ workflow: {
306
+ path: 'workflow',
307
+ children: {
308
+ workflow_list: {
309
+ path: '',
310
+ index: true,
311
+ component: lazy(() => import('routes/workflow')),
312
+ },
313
+ editor_new: {
314
+ path: 'create',
315
+ component: lazy(() => import('routes/workflow/editor')),
316
+ },
317
+ instances: {
318
+ path: 'instances/show/:workflowId',
319
+ component: lazy(() => import('routes/workflow/instances')),
320
+ },
321
+ instanceDetail: {
322
+ path: 'instance/show/:instanceId',
323
+ component: lazy(() => import('routes/workflow/instance-detail')),
324
+ },
325
+ editor: {
326
+ path: 'edit/:id',
327
+ component: lazy(() => import('routes/workflow/editor')),
328
+ },
329
+ show: {
330
+ path: 'show/:id',
331
+ component: lazy(() => import('routes/workflow/show')),
332
+ },
333
+ workflow_node_instance: {
334
+ path: 'node-instances',
335
+ component: lazy(() => import('routes/workflow/node-instances')),
336
+ },
337
+ nodeInstanceCreate: {
338
+ path: 'node-instances/create',
339
+ component: lazy(
340
+ () => import('routes/workflow/node-instances/create'),
341
+ ),
342
+ },
343
+ nodeInstanceEdit: {
344
+ path: 'node-instances/edit/:id',
345
+ component: lazy(
346
+ () => import('routes/workflow/node-instances/edit'),
347
+ ),
348
+ },
349
+ nodeInstanceShow: {
350
+ path: 'node-instances/show/:id',
351
+ component: lazy(
352
+ () => import('routes/workflow/node-instances/show'),
353
+ ),
354
+ },
355
+ },
356
+ },
294
357
  // 操作日志 — sortOrder 1070, code: admin.audit
295
358
  audits: {
296
359
  path: 'audit-log-list',
@@ -121,7 +121,7 @@ export default function DevShell() {
121
121
  function tryInit(remaining: number) {
122
122
  if (window.ChatSDK) {
123
123
  window.ChatSDK.init({
124
- header: { logo: '', title: 'Gadmin Coding Agent' },
124
+ header: { logo: '', title: 'Coding Agent' },
125
125
  empty: '',
126
126
  streamingTimeout: 1800,
127
127
  initialConversation: true,
@@ -215,6 +215,95 @@ export default function DevShell() {
215
215
  case 'INSPECT_STATE':
216
216
  setIsInspecting(!!data.payload);
217
217
  break;
218
+ case 'WORKFLOW_AGENT_REQUEST': {
219
+ const sdk = sdkRef.current;
220
+ const reqId = data.requestId;
221
+ if (!sdk) {
222
+ iframeRef.current?.contentWindow?.postMessage(
223
+ {
224
+ type: 'WORKFLOW_AGENT_ERROR',
225
+ requestId: reqId,
226
+ error: 'Agent not ready',
227
+ },
228
+ '*',
229
+ );
230
+ break;
231
+ }
232
+ setAgentVisible(true);
233
+
234
+ setTimeout(() => {
235
+ // Persistent listener: forward ALL agent responses until WORKFLOW_AGENT_DONE received
236
+ const handleStreamStop = (...args: any[]) => {
237
+ try {
238
+ const rawContent = args[0]?.message?.content || '';
239
+ const lines = rawContent.split('\n');
240
+ let fullText = '';
241
+ for (const line of lines) {
242
+ if (!line.trim()) continue;
243
+ try {
244
+ const event = JSON.parse(line);
245
+ if (event.type === 'TEXT_MESSAGE_CONTENT' && event.delta) {
246
+ fullText += event.delta;
247
+ }
248
+ } catch {
249
+ // skip non-JSON lines
250
+ }
251
+ }
252
+ if (fullText.length > 0) {
253
+ iframeRef.current?.contentWindow?.postMessage(
254
+ {
255
+ type: 'WORKFLOW_AGENT_MESSAGE',
256
+ requestId: reqId,
257
+ response: fullText,
258
+ },
259
+ '*',
260
+ );
261
+ }
262
+ } catch {
263
+ // ignore parse errors
264
+ }
265
+ };
266
+
267
+ // Listen for iframe signaling it got valid DSL or abort
268
+ const handleDone = (e: MessageEvent) => {
269
+ if (
270
+ e.data?.type === 'WORKFLOW_AGENT_DONE' &&
271
+ e.data?.requestId === reqId
272
+ ) {
273
+ cleanup();
274
+ }
275
+ };
276
+
277
+ function cleanup() {
278
+ const keys = window.ChatSDK?.ChatEventKey;
279
+ if (keys?.STREAMING_STOP) {
280
+ sdk.off(keys.STREAMING_STOP, handleStreamStop);
281
+ }
282
+ window.removeEventListener('message', handleDone);
283
+ }
284
+
285
+ window.addEventListener('message', handleDone);
286
+
287
+ // Register persistent STREAMING_STOP listener
288
+ const keys = window.ChatSDK?.ChatEventKey;
289
+ if (keys?.STREAMING_STOP) {
290
+ sdk.on(keys.STREAMING_STOP, handleStreamStop);
291
+ }
292
+
293
+ sdk.sendUserPrompt(data.prompt).catch((err: any) => {
294
+ cleanup();
295
+ iframeRef.current?.contentWindow?.postMessage(
296
+ {
297
+ type: 'WORKFLOW_AGENT_ERROR',
298
+ requestId: reqId,
299
+ error: err?.message || 'Agent send failed',
300
+ },
301
+ '*',
302
+ );
303
+ });
304
+ }, 300);
305
+ break;
306
+ }
218
307
  }
219
308
  }
220
309
  window.addEventListener('message', handleMessage);
@@ -262,7 +351,7 @@ export default function DevShell() {
262
351
  />
263
352
 
264
353
  {/* Toggle agent button */}
265
- <Tooltip title="Gadmin Coding Agent" placement="left">
354
+ <Tooltip title="Coding Agent" placement="left">
266
355
  <button
267
356
  id="toggle-btn"
268
357
  className={agentVisible ? 'active' : ''}
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import {
2
3
  FieldDataType,
3
4
  ModelType,
@@ -20,7 +21,7 @@ import {
20
21
  } from '@refinedev/antd';
21
22
  import { CheckCircleTwoTone, CloseCircleTwoTone } from '@ant-design/icons';
22
23
  import { FilterDropdownProps } from 'antd/lib/table/interface';
23
- import { Select, Table, Space, SelectProps } from 'antd';
24
+ import { Select, Table, Space, SelectProps, Tooltip, Typography } from 'antd';
24
25
  import {
25
26
  CrudSorting,
26
27
  CrudFilters,
@@ -129,7 +130,17 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
129
130
  dataIndex: fieldName.includes('.') ? fieldName.split('.') : fieldName,
130
131
  key: fieldName,
131
132
  title: t(`resources.${resourceName}.fields.${fieldName}`, fieldName),
132
- render: (value: any) => <TextField value={value} />,
133
+ render: (value: any) => {
134
+ // 兜底:未识别 fieldType 但 value 是普通对象,stringify 避免渲染崩溃
135
+ if (
136
+ typeof value === 'object' &&
137
+ value !== null &&
138
+ !React.isValidElement(value)
139
+ ) {
140
+ return <TextField value={JSON.stringify(value)} />;
141
+ }
142
+ return <TextField value={value} />;
143
+ },
133
144
  };
134
145
 
135
146
  if (col.kind === 'object' && !col.isList && !fieldName.includes('.')) {
@@ -284,6 +295,41 @@ export function getTableColumnV2({ col, context }: GetTableColumnParams) {
284
295
  </Space>
285
296
  );
286
297
  };
298
+ } else if (fieldType === 'JSON') {
299
+ props.render = (value: any) => {
300
+ if (value === null || value === undefined) {
301
+ return <TextField value={value} />;
302
+ }
303
+ const text = typeof value === 'string' ? value : JSON.stringify(value);
304
+ const pretty =
305
+ typeof value === 'string' ? value : JSON.stringify(value, null, 2);
306
+ return (
307
+ <Tooltip
308
+ title={
309
+ <pre
310
+ style={{
311
+ margin: 0,
312
+ maxWidth: 480,
313
+ maxHeight: 360,
314
+ overflow: 'auto',
315
+ whiteSpace: 'pre-wrap',
316
+ wordBreak: 'break-word',
317
+ }}
318
+ >
319
+ {pretty}
320
+ </pre>
321
+ }
322
+ >
323
+ <Typography.Text
324
+ code
325
+ style={{ maxWidth: 320, display: 'inline-block' }}
326
+ ellipsis
327
+ >
328
+ {text}
329
+ </Typography.Text>
330
+ </Tooltip>
331
+ );
332
+ };
287
333
  }
288
334
 
289
335
  if (tableConfig.header.sorter.includes(fieldName)) {
@@ -67,8 +67,8 @@ export function getShowField(
67
67
  } else if (fieldType === 'Text') {
68
68
  element = (
69
69
  <>
70
- {(value || '').split('\n').map((row: string) => (
71
- <TextField style={{ display: 'block' }} value={row} />
70
+ {(value || '').split('\n').map((row: string, index: number) => (
71
+ <TextField key={index} style={{ display: 'block' }} value={row} />
72
72
  ))}
73
73
  </>
74
74
  );
@@ -103,6 +103,7 @@ export function getShowField(
103
103
  <Space>
104
104
  {JSON.parse(value || '[]')?.map?.((v: string) => (
105
105
  <TagField
106
+ key={v}
106
107
  value={t(
107
108
  `resources.${resourceName}.enums.${fieldName}.${v}`,
108
109
  String(v),
@@ -135,6 +136,7 @@ export function getShowField(
135
136
  <Space>
136
137
  {JSON.parse(value || '[]')?.map?.((v: string) => (
137
138
  <TagField
139
+ key={v}
138
140
  value={t(
139
141
  `resources.${resourceName}.enums.${fieldName}.${v}`,
140
142
  String(v),
@@ -166,6 +168,45 @@ export function getShowField(
166
168
  ) {
167
169
  element = <NumberField value={displayValue ?? ''} />;
168
170
  }
171
+ } else if (fieldType === 'JSON') {
172
+ if (value === null || value === undefined) {
173
+ element = <Text type="secondary">-</Text>;
174
+ } else {
175
+ const text =
176
+ typeof value === 'string' ? value : JSON.stringify(value, null, 2);
177
+ element = (
178
+ <Text
179
+ code
180
+ style={{
181
+ whiteSpace: 'pre-wrap',
182
+ wordBreak: 'break-word',
183
+ display: 'block',
184
+ width: '100%',
185
+ }}
186
+ >
187
+ {text}
188
+ </Text>
189
+ );
190
+ }
191
+ } else if (
192
+ typeof value === 'object' &&
193
+ value !== null &&
194
+ !React.isValidElement(value)
195
+ ) {
196
+ // 兜底:未识别 fieldType 但 value 是普通对象,stringify 避免渲染崩溃
197
+ element = (
198
+ <Text
199
+ code
200
+ style={{
201
+ whiteSpace: 'pre-wrap',
202
+ wordBreak: 'break-word',
203
+ display: 'block',
204
+ width: '100%',
205
+ }}
206
+ >
207
+ {JSON.stringify(value, null, 2)}
208
+ </Text>
209
+ );
169
210
  }
170
211
  return (
171
212
  <div
@@ -153,11 +153,12 @@
153
153
  "emptyHint": "Drag components from the library",
154
154
  "exitPreview": "Exit Preview",
155
155
  "config": "Configure",
156
+ "configCharts": "Configure Charts & Order",
156
157
  "editCode": "Edit Code",
157
158
  "duplicate": "Duplicate",
158
159
  "delete": "Delete",
159
- "custom": "Custom",
160
- "customAction": "Custom Action",
160
+ "custom": "Ask AI...",
161
+ "customAction": "Ask AI...",
161
162
  "customPlaceholder": "Describe what you want to do with this component",
162
163
  "components": {
163
164
  "NumCard": "Metric Card",
@@ -167,24 +168,23 @@
167
168
  "RadarChart": "Radar Chart",
168
169
  "TreemapChart": "Treemap",
169
170
  "Table": "Table",
170
- "WorldMap": "World Map"
171
+ "WorldMap": "World Map",
172
+ "MultiChart": "Multi Chart"
171
173
  },
172
174
  "variants": {
173
175
  "default": "Default",
174
- "bar": "Bar",
175
- "stackBar": "Stacked Bar",
176
- "stackBarPercent": "Percent Stack",
176
+ "bar": "Single Series",
177
+ "groupBar": "Multi Series",
177
178
  "pie": "Pie",
178
179
  "ring": "Ring",
179
180
  "sunburst": "Sunburst",
180
181
  "heatmap": "Heatmap",
181
- "demo": "Demo",
182
182
  "card-grid": "Card Grid",
183
183
  "inline": "Inline",
184
184
  "inline-right": "Inline Right"
185
185
  },
186
186
  "dataSource": {
187
- "label": "Modify Data Source",
187
+ "label": "Ask AI to change data source...",
188
188
  "placeholder": "Describe the data, e.g.: revenue comparison over last 30 days"
189
189
  },
190
190
  "dataSourceModal": {
@@ -258,10 +258,15 @@
258
258
  "showDotsLabel": "Show Dot Values",
259
259
  "disableStacked": "Disable Stacking",
260
260
  "enableStacked": "Enable Stacking",
261
+ "disablePercent": "Disable Percent",
262
+ "enablePercent": "Enable Percent",
261
263
  "disableArea": "Disable Area Fill",
262
264
  "enableArea": "Enable Area Fill",
263
265
  "disableSmooth": "Disable Smooth",
264
- "enableSmooth": "Enable Smooth"
266
+ "enableSmooth": "Enable Smooth",
267
+ "switchTo": "Switch to",
268
+ "showDownload": "Show Download",
269
+ "hideDownload": "Hide Download"
265
270
  },
266
271
  "list": {
267
272
  "title": "My Canvas",
@@ -155,11 +155,12 @@
155
155
  "emptyHint": "从组件库拖拽组件到此处",
156
156
  "exitPreview": "退出预览",
157
157
  "config": "配置",
158
+ "configCharts": "配置显示图表与顺序",
158
159
  "editCode": "编辑代码",
159
160
  "duplicate": "复制",
160
161
  "delete": "删除",
161
- "custom": "自定义",
162
- "customAction": "自定义操作",
162
+ "custom": "让 AI 修改...",
163
+ "customAction": "让 AI 修改...",
163
164
  "customPlaceholder": "描述你想对这个组件做的修改",
164
165
  "components": {
165
166
  "NumCard": "数字卡片",
@@ -169,24 +170,23 @@
169
170
  "RadarChart": "雷达图",
170
171
  "TreemapChart": "矩形树图",
171
172
  "Table": "表格",
172
- "WorldMap": "世界地图"
173
+ "WorldMap": "世界地图",
174
+ "MultiChart": "复合图表"
173
175
  },
174
176
  "variants": {
175
177
  "default": "默认",
176
- "bar": "柱状图",
177
- "stackBar": "堆叠柱",
178
- "stackBarPercent": "百分比堆叠",
178
+ "bar": "单系列柱",
179
+ "groupBar": "多系列柱",
179
180
  "pie": "饼图",
180
181
  "ring": "环形",
181
182
  "sunburst": "旭日图",
182
183
  "heatmap": "热力图",
183
- "demo": "示例",
184
184
  "card-grid": "卡片网格",
185
185
  "inline": "行内",
186
186
  "inline-right": "行内右对齐"
187
187
  },
188
188
  "dataSource": {
189
- "label": "修改数据来源",
189
+ "label": "让 AI 修改数据来源...",
190
190
  "placeholder": "描述要展示的数据,例如:近30天游戏收益对比、各部门人数分布、近90天考勤状态统计"
191
191
  },
192
192
  "dataSourceModal": {
@@ -260,10 +260,15 @@
260
260
  "showDotsLabel": "显示坐标点数据",
261
261
  "disableStacked": "关闭堆叠",
262
262
  "enableStacked": "开启堆叠",
263
+ "disablePercent": "关闭百分比",
264
+ "enablePercent": "开启百分比",
263
265
  "disableArea": "关闭面积",
264
266
  "enableArea": "开启面积",
265
267
  "disableSmooth": "关闭拟合曲线",
266
- "enableSmooth": "开启拟合曲线"
268
+ "enableSmooth": "开启拟合曲线",
269
+ "switchTo": "切换到",
270
+ "showDownload": "显示下载按钮",
271
+ "hideDownload": "隐藏下载按钮"
267
272
  },
268
273
  "list": {
269
274
  "title": "我的 Canvas",