@gadmin2n/schematics 0.0.72 → 0.0.74

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
@@ -2,6 +2,10 @@ import React, { useState, useEffect } from 'react';
2
2
  import { Modal, Checkbox, Input, Button, Select } from 'antd';
3
3
  import { PlusOutlined, MinusCircleOutlined } from '@ant-design/icons';
4
4
  import { useTranslation } from 'react-i18next';
5
+ import {
6
+ CANVAS_MODAL_PROPS,
7
+ CANVAS_MODAL_TITLE_STYLE,
8
+ } from './canvasModalProps';
5
9
 
6
10
  // ─── Types ────────────────────────────────────────────────────────────────────
7
11
 
@@ -77,15 +81,17 @@ const TableDataSourceModal: React.FC<TableDataSourceModalProps> = ({
77
81
 
78
82
  return (
79
83
  <Modal
80
- title={t('canvas.dataSourceModal.title')}
84
+ {...CANVAS_MODAL_PROPS}
85
+ title={
86
+ <span style={CANVAS_MODAL_TITLE_STYLE}>
87
+ {t('canvas.dataSourceModal.title')}
88
+ </span>
89
+ }
81
90
  open={open}
82
91
  onOk={handleConfirm}
83
92
  onCancel={onCancel}
84
93
  okText={t('canvas.dataSourceModal.ok')}
85
94
  cancelText={t('canvas.dataSourceModal.cancel')}
86
- width={480}
87
- centered
88
- destroyOnClose
89
95
  >
90
96
  <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
91
97
  {/* 列配置 */}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Canvas 编辑弹窗统一样式 Props
3
+ *
4
+ * 所有 Canvas 画布内的工具/配置弹窗共享这些 Modal props,
5
+ * 保证视觉风格一致(间距、无分隔线、居中、无关闭按钮)。
6
+ */
7
+ export const CANVAS_MODAL_PROPS = {
8
+ width: 420,
9
+ centered: true,
10
+ destroyOnClose: true,
11
+ closable: false,
12
+ styles: {
13
+ header: { padding: '16px 20px 0', marginBottom: 0 },
14
+ body: { padding: '12px 20px 16px' },
15
+ footer: { padding: '0 20px 16px', borderTop: 'none' },
16
+ },
17
+ } as const;
18
+
19
+ /** 统一标题样式 */
20
+ export const CANVAS_MODAL_TITLE_STYLE: React.CSSProperties = {
21
+ fontSize: 13,
22
+ fontWeight: 500,
23
+ color: '#595959',
24
+ };
@@ -6,7 +6,7 @@ const numCardDemo: ComponentDemo = {
6
6
  title: 'NumCard',
7
7
  description:
8
8
  "项目唯一的数字指标卡片,用于展示单一关键数字(如总数、成功率、延迟、金额)。传 null / undefined / NaN 自动显示 '--',无需手动判断。",
9
- imports: `import { NumCard } from "@/components/canvas/NumCard";`,
9
+ imports: `import { NumCard } from "@gadmin2n/charts";`,
10
10
  props: [
11
11
  {
12
12
  name: 'variant',
@@ -117,7 +117,7 @@ const filterDemo: ComponentDemo = {
117
117
  title: 'Filter',
118
118
  description:
119
119
  '项目统一的过滤条容器,封装布局标准化、搜索/重置按钮、Form 实例管理。3 种 layout:card-grid(Card+Grid)/ inline(单行)/ inline-right(右对齐,无按钮)。',
120
- imports: `import { Filter } from "@/components/canvas/Filter";
120
+ imports: `import { Filter } from "@gadmin2n/charts";
121
121
  import { Form, Select, DatePicker, Input } from "antd";`,
122
122
  props: [
123
123
  {
@@ -268,13 +268,13 @@ const barChartDemo: ComponentDemo = {
268
268
  title: 'BarChart',
269
269
  description:
270
270
  '项目统一柱状图,封装标准 ECharts 配置。支持纵柱、横柱、多系列堆叠、百分比堆叠,数据格式随 variant 不同。',
271
- imports: `import { BarChart } from "@/components/canvas/BarChart";`,
271
+ imports: `import { BarChart } from "@gadmin2n/charts";`,
272
272
  props: [
273
273
  {
274
274
  name: 'variant',
275
- type: '"bar" | "stackBar" | "stackBarPercent"',
275
+ type: '"bar" | "groupBar"',
276
276
  default: '"bar"',
277
- desc: 'bar: 单系列柱状图;stackBar: 多系列堆叠柱状图;stackBarPercent: 百分比堆叠柱状图(Y 轴 0–100%)',
277
+ desc: 'bar: 单系列柱状图;groupBar: 多系列柱状图(通过 stacked/percent 控制行为)',
278
278
  },
279
279
  {
280
280
  name: 'direction',
@@ -282,6 +282,18 @@ const barChartDemo: ComponentDemo = {
282
282
  default: '"vertical"',
283
283
  desc: '图表方向:vertical 为纵向(默认),horizontal 为横向',
284
284
  },
285
+ {
286
+ name: 'stacked',
287
+ type: 'boolean',
288
+ default: 'false',
289
+ desc: '多系列堆叠模式(仅 groupBar 生效)',
290
+ },
291
+ {
292
+ name: 'percent',
293
+ type: 'boolean',
294
+ default: 'false',
295
+ desc: '百分比堆叠(仅 stacked=true 时生效)',
296
+ },
285
297
  {
286
298
  name: 'data',
287
299
  type: 'BarDataSingle | BarDataMulti | BarDataPercent',
@@ -304,7 +316,7 @@ const barChartDemo: ComponentDemo = {
304
316
  name: 'showLabel',
305
317
  type: 'boolean',
306
318
  default: 'true',
307
- desc: '是否在柱顶/柱右显示数值标签;stackBar 堆叠模式仅最后一段显示总量',
319
+ desc: '是否在柱顶/柱右显示数值标签;堆叠模式仅最后一段显示总量',
308
320
  },
309
321
  {
310
322
  name: 'legendShow',
@@ -361,15 +373,14 @@ const barChartDemo: ComponentDemo = {
361
373
  unit="件"
362
374
  title="数据对比"
363
375
  height={300}
364
- legendShow={true}
365
376
  testId="canvas-barchart-bar"
366
377
  />`,
367
378
  },
368
379
  {
369
- name: 'stackBar',
370
- label: 'stackBar',
380
+ name: 'groupBar',
381
+ label: 'groupBar',
371
382
  code: `<BarChart
372
- variant="stackBar"
383
+ variant="groupBar"
373
384
  data={{
374
385
  xData: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
375
386
  series: [
@@ -379,38 +390,9 @@ const barChartDemo: ComponentDemo = {
379
390
  ],
380
391
  }}
381
392
  unit="万"
382
- title="构成分析"
383
- height={300}
384
- legendShow={true}
385
- testId="canvas-barchart-stack"
386
- />`,
387
- },
388
- {
389
- name: 'stackBarPercent',
390
- label: 'stackBarPercent',
391
- code: `<BarChart
392
- variant="stackBarPercent"
393
- data={{
394
- xData: ["Jan", "Feb", "Mar", "Apr", "May"],
395
- series: [
396
- { name: "类型A", data: [55, 58, 52, 60, 57] },
397
- { name: "类型B", data: [30, 28, 33, 25, 29] },
398
- { name: "类型C", data: [15, 14, 15, 15, 14] },
399
- ],
400
- allTypes: ["类型A", "类型B", "类型C"],
401
- originalData: {
402
- "Jan": [{ key: "类型A", active_device_cnt: 110 }, { key: "类型B", active_device_cnt: 60 }, { key: "类型C", active_device_cnt: 30 }],
403
- "Feb": [{ key: "类型A", active_device_cnt: 116 }, { key: "类型B", active_device_cnt: 56 }, { key: "类型C", active_device_cnt: 28 }],
404
- "Mar": [{ key: "类型A", active_device_cnt: 104 }, { key: "类型B", active_device_cnt: 66 }, { key: "类型C", active_device_cnt: 30 }],
405
- "Apr": [{ key: "类型A", active_device_cnt: 120 }, { key: "类型B", active_device_cnt: 50 }, { key: "类型C", active_device_cnt: 30 }],
406
- "May": [{ key: "类型A", active_device_cnt: 114 }, { key: "类型B", active_device_cnt: 58 }, { key: "类型C", active_device_cnt: 28 }],
407
- },
408
- }}
409
- unit="%"
410
- title="占比分析"
393
+ title="分组对比"
411
394
  height={300}
412
- legendShow={true}
413
- testId="canvas-barchart-stackpercent"
395
+ testId="canvas-barchart-group"
414
396
  />`,
415
397
  },
416
398
  ],
@@ -422,7 +404,7 @@ const lineChartDemo: ComponentDemo = {
422
404
  title: 'LineChart',
423
405
  description:
424
406
  '项目统一折线图,支持单系列、多系列堆叠、面积堆叠(hover 只高亮当前系列)、分组面积折线(hover 同父类分组高亮)、迷你趋势线、双 Y 轴混合图。',
425
- imports: `import { LineChart } from "@/components/canvas/LineChart";`,
407
+ imports: `import { LineChart } from "@gadmin2n/charts";`,
426
408
  props: [
427
409
  {
428
410
  name: 'variant',
@@ -532,7 +514,7 @@ const pieChartDemo: ComponentDemo = {
532
514
  title: 'PieChart',
533
515
  description:
534
516
  '项目统一饼图,支持标准饼图、环形图(甜甜圈)、旭日图。数据自动按 value 从大到小排序,超 topN 项自动合并为 Others。',
535
- imports: `import { PieChart } from "@/components/canvas/PieChart";`,
517
+ imports: `import { PieChart } from "@gadmin2n/charts";`,
536
518
  props: [
537
519
  {
538
520
  name: 'variant',
@@ -694,7 +676,7 @@ const radarChartDemo: ComponentDemo = {
694
676
  title: 'RadarChart',
695
677
  description:
696
678
  '项目统一雷达图,适用于多维度能力评估和多实体横向对比。indicators 和 series.data 长度必须相同。',
697
- imports: `import { RadarChart } from "@/components/canvas/RadarChart";`,
679
+ imports: `import { RadarChart } from "@gadmin2n/charts";`,
698
680
  props: [
699
681
  {
700
682
  name: 'indicators',
@@ -752,8 +734,8 @@ const radarChartDemo: ComponentDemo = {
752
734
  ],
753
735
  variants: [
754
736
  {
755
- name: 'demo',
756
- label: 'demo',
737
+ name: 'default',
738
+ label: 'default',
757
739
  code: `<RadarChart
758
740
  indicators={[
759
741
  { name: "维度A" }, { name: "维度B" },
@@ -777,7 +759,7 @@ const treemapChartDemo: ComponentDemo = {
777
759
  title: 'TreemapChart',
778
760
  description:
779
761
  '矩形树图,方块面积 = 数值大小,适合多分类占比展示(>8 项时替代饼图)。自动检测扁平 / 嵌套结构。',
780
- imports: `import { TreemapChart } from "@/components/canvas/TreemapChart";`,
762
+ imports: `import { TreemapChart } from "@gadmin2n/charts";`,
781
763
  props: [
782
764
  {
783
765
  name: 'data',
@@ -841,8 +823,8 @@ const treemapChartDemo: ComponentDemo = {
841
823
  ],
842
824
  variants: [
843
825
  {
844
- name: 'demo',
845
- label: 'demo',
826
+ name: 'default',
827
+ label: 'default',
846
828
  code: `<TreemapChart
847
829
  data={[
848
830
  {
@@ -886,7 +868,7 @@ const tableDemo: ComponentDemo = {
886
868
  title: 'Table',
887
869
  description:
888
870
  'drop-in 替换 antd Table,传 pagination 对象自动补 showSizeChanger + pageSizeOptions。不传 pagination 则不分页。',
889
- imports: `import { Table } from "@/components/canvas/Table";`,
871
+ imports: `import { Table } from "@gadmin2n/charts";`,
890
872
  props: [
891
873
  {
892
874
  name: 'dataSource',
@@ -963,7 +945,7 @@ const worldMapDemo: ComponentDemo = {
963
945
  title: 'WorldMap',
964
946
  description:
965
947
  '项目统一世界地图,封装标准 geo 基准配置(Highcharts 坐标系,aspectScale 固定为 1)。通过 option 透传 series、geo 差异字段即可。',
966
- imports: `import { WorldMap } from "@/components/canvas/WorldMap";`,
948
+ imports: `import { WorldMap } from "@gadmin2n/charts";`,
967
949
  props: [
968
950
  {
969
951
  name: 'option',
@@ -1016,8 +998,8 @@ const worldMapDemo: ComponentDemo = {
1016
998
  ],
1017
999
  variants: [
1018
1000
  {
1019
- name: 'demo',
1020
- label: 'demo',
1001
+ name: 'default',
1002
+ label: 'default',
1021
1003
  code: `<WorldMap
1022
1004
  option={{
1023
1005
  geo: {
@@ -1078,13 +1060,13 @@ const worldMapDemo: ComponentDemo = {
1078
1060
  ],
1079
1061
  };
1080
1062
 
1081
- // ─── ChartViewer ──────────────────────────────────────────────────────────────
1082
- const chartViewerDemo: ComponentDemo = {
1083
- id: 'chart-viewer',
1084
- title: 'ChartViewer',
1063
+ // ─── MultiChart ──────────────────────────────────────────────────────────────
1064
+ const multiChartDemo: ComponentDemo = {
1065
+ id: 'multi-chart',
1066
+ title: 'MultiChart',
1085
1067
  description:
1086
- '图表切换容器:右上角三个图标按钮可在柱状图、折线图、饼图之间切换。内置 mock 数据,状态内聚,零配置使用。',
1087
- imports: `import { ChartViewer } from "@/components/canvas/ChartViewer";`,
1068
+ '复合图表:右上角按钮切换柱状图、折线图、饼图。支持配置包含哪些图表、右键切换和各图表独立配置。',
1069
+ imports: `import { MultiChart } from "@gadmin2n/charts";`,
1088
1070
  props: [
1089
1071
  { name: 'height', type: 'number', default: '300', desc: '图表高度(px)' },
1090
1072
  {
@@ -1106,9 +1088,9 @@ const chartViewerDemo: ComponentDemo = {
1106
1088
  {
1107
1089
  name: 'default',
1108
1090
  label: 'default',
1109
- code: `<ChartViewer
1091
+ code: `<MultiChart
1110
1092
  height={300}
1111
- testId="canvas-chartviewer-default"
1093
+ testId="canvas-multichart-default"
1112
1094
  />`,
1113
1095
  },
1114
1096
  ],
@@ -1119,7 +1101,7 @@ const sectionDemo: ComponentDemo = {
1119
1101
  id: 'section',
1120
1102
  title: 'Section',
1121
1103
  description: '白色背景容器,左上角标题,其他组件可放在其上方形成视觉分组。',
1122
- imports: `import { Section } from "@/components/canvas/Section";`,
1104
+ imports: `import { Section } from "@gadmin2n/charts";`,
1123
1105
  props: [
1124
1106
  { name: 'title', type: 'string', desc: '左上角标题文字' },
1125
1107
  {
@@ -1148,6 +1130,6 @@ export const allDemos: ComponentDemo[] = [
1148
1130
  treemapChartDemo,
1149
1131
  tableDemo,
1150
1132
  worldMapDemo,
1151
- chartViewerDemo,
1133
+ multiChartDemo,
1152
1134
  sectionDemo,
1153
1135
  ];
@@ -0,0 +1,99 @@
1
+ import React, { memo } from 'react';
2
+ import { Handle, Position, type NodeProps } from '@xyflow/react';
3
+
4
+ const CATEGORY_COLORS: Record<string, { bg: string; border: string }> = {
5
+ TRIGGER: { bg: '#e6f7ff', border: '#91caff' },
6
+ ACTION: { bg: '#f6ffed', border: '#b7eb8f' },
7
+ CONDITION: { bg: '#fff7e6', border: '#ffd591' },
8
+ LOOP: { bg: '#f9f0ff', border: '#d3adf7' },
9
+ APPROVAL: { bg: '#fff1f0', border: '#ffa39e' },
10
+ SUB_WORKFLOW: { bg: '#f0f5ff', border: '#adc6ff' },
11
+ };
12
+
13
+ export interface CustomNodeData {
14
+ label: string;
15
+ category: string;
16
+ isSelected: boolean;
17
+ readonly?: boolean;
18
+ [key: string]: unknown;
19
+ }
20
+
21
+ export const CustomNode = memo(({ data }: NodeProps) => {
22
+ const nodeData = data as CustomNodeData;
23
+ const colors = CATEGORY_COLORS[nodeData.category] || CATEGORY_COLORS.ACTION;
24
+
25
+ return (
26
+ <div
27
+ style={{
28
+ background: colors.bg,
29
+ border: nodeData.isSelected
30
+ ? '2px solid #1677ff'
31
+ : `1px solid ${colors.border}`,
32
+ borderRadius: 8,
33
+ padding: '8px 16px',
34
+ fontSize: 14,
35
+ minWidth: 120,
36
+ textAlign: 'center',
37
+ boxShadow: nodeData.isSelected
38
+ ? '0 0 0 2px rgba(22,119,255,0.2)'
39
+ : undefined,
40
+ }}
41
+ >
42
+ {!nodeData.readonly && (
43
+ <Handle
44
+ type="target"
45
+ position={Position.Top}
46
+ style={{
47
+ width: 14,
48
+ height: 14,
49
+ background: '#fff',
50
+ border: '2px solid #555',
51
+ cursor: 'crosshair',
52
+ }}
53
+ />
54
+ )}
55
+ {nodeData.readonly && (
56
+ <Handle
57
+ type="target"
58
+ position={Position.Top}
59
+ style={{
60
+ width: 0,
61
+ height: 0,
62
+ border: 'none',
63
+ background: 'transparent',
64
+ visibility: 'hidden',
65
+ }}
66
+ />
67
+ )}
68
+ <div>{nodeData.label}</div>
69
+ {!nodeData.readonly && (
70
+ <Handle
71
+ type="source"
72
+ position={Position.Bottom}
73
+ style={{
74
+ width: 14,
75
+ height: 14,
76
+ background: '#fff',
77
+ border: '2px solid #555',
78
+ cursor: 'crosshair',
79
+ }}
80
+ />
81
+ )}
82
+ {nodeData.readonly && (
83
+ <Handle
84
+ type="source"
85
+ position={Position.Bottom}
86
+ style={{
87
+ width: 0,
88
+ height: 0,
89
+ border: 'none',
90
+ background: 'transparent',
91
+ visibility: 'hidden',
92
+ }}
93
+ />
94
+ )}
95
+ </div>
96
+ );
97
+ });
98
+
99
+ CustomNode.displayName = 'CustomNode';
@@ -0,0 +1,87 @@
1
+ import React, { useCallback, useEffect, useState } from 'react';
2
+ import { Button, Input, Modal, Space, message } from 'antd';
3
+ import { CopyOutlined, LoadingOutlined } from '@ant-design/icons';
4
+ import { customRequest } from 'helpers/http';
5
+
6
+ interface ExportModalProps {
7
+ open: boolean;
8
+ workflowId: string | null;
9
+ onClose: () => void;
10
+ }
11
+
12
+ export function ExportModal({ open, workflowId, onClose }: ExportModalProps) {
13
+ const [url, setUrl] = useState<string>('');
14
+ const [loading, setLoading] = useState(false);
15
+
16
+ useEffect(() => {
17
+ if (open && workflowId) {
18
+ setUrl('');
19
+ setLoading(true);
20
+ customRequest<{ url: string }>(
21
+ `workflow/${workflowId}/export-token`,
22
+ 'POST',
23
+ )
24
+ .then((res) => setUrl(res.url))
25
+ .catch((e: any) =>
26
+ message.error(e?.message ?? 'Failed to generate export URL'),
27
+ )
28
+ .finally(() => setLoading(false));
29
+ }
30
+ }, [open, workflowId]);
31
+
32
+ const handleCopy = useCallback(async () => {
33
+ try {
34
+ await navigator.clipboard.writeText(url);
35
+ message.success('URL copied to clipboard');
36
+ } catch {
37
+ // Fallback for older browsers
38
+ const textarea = document.getElementById(
39
+ 'export-url-input',
40
+ ) as HTMLTextAreaElement;
41
+ textarea?.select();
42
+ document.execCommand('copy');
43
+ message.success('URL copied to clipboard');
44
+ }
45
+ }, [url]);
46
+
47
+ return (
48
+ <Modal
49
+ title="Export Workflow"
50
+ open={open}
51
+ onCancel={onClose}
52
+ footer={
53
+ <Space>
54
+ <Button onClick={onClose}>Close</Button>
55
+ <Button
56
+ type="primary"
57
+ icon={<CopyOutlined />}
58
+ onClick={handleCopy}
59
+ disabled={!url}
60
+ >
61
+ Copy URL
62
+ </Button>
63
+ </Space>
64
+ }
65
+ >
66
+ {loading ? (
67
+ <div style={{ textAlign: 'center', padding: 24 }}>
68
+ <LoadingOutlined style={{ fontSize: 24 }} />
69
+ <p>Generating export URL...</p>
70
+ </div>
71
+ ) : (
72
+ <>
73
+ <p style={{ marginBottom: 8, color: '#666' }}>
74
+ Export URL (valid for 30 minutes):
75
+ </p>
76
+ <Input.TextArea
77
+ id="export-url-input"
78
+ value={url}
79
+ readOnly
80
+ autoSize={{ minRows: 3, maxRows: 5 }}
81
+ onFocus={(e) => e.target.select()}
82
+ />
83
+ </>
84
+ )}
85
+ </Modal>
86
+ );
87
+ }