aldehyde 0.2.478 → 0.2.480

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 (250) hide show
  1. package/lib/controls/2dEditor/components/card.js +2 -2
  2. package/lib/controls/2dEditor/components/card.js.map +1 -1
  3. package/lib/controls/2dEditor/components/image.js +1 -1
  4. package/lib/controls/2dEditor/components/image.js.map +1 -1
  5. package/lib/controls/entity-select/entity-select.js +3 -3
  6. package/lib/controls/entity-select/entity-select.js.map +1 -1
  7. package/lib/controls/upload/index.js +1 -1
  8. package/lib/controls/upload/index.js.map +1 -1
  9. package/lib/controls/upload/mult-file-upload.js +2 -2
  10. package/lib/controls/upload/mult-file-upload.js.map +1 -1
  11. package/lib/draw-canvas-edit/components/asset-bar/index.d.ts +1 -0
  12. package/lib/draw-canvas-edit/components/asset-bar/index.d.ts.map +1 -1
  13. package/lib/draw-canvas-edit/components/asset-bar/index.js +9 -7
  14. package/lib/draw-canvas-edit/components/asset-bar/index.js.map +1 -1
  15. package/lib/draw-canvas-edit/components/main-header/index.less +3 -0
  16. package/lib/draw-canvas-edit/components/render/draws/bg-draw.d.ts.map +1 -1
  17. package/lib/draw-canvas-edit/components/render/draws/bg-draw.js +14 -1
  18. package/lib/draw-canvas-edit/components/render/draws/bg-draw.js.map +1 -1
  19. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.d.ts.map +1 -1
  20. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.js +30 -6
  21. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.js.map +1 -1
  22. package/lib/draw-canvas-edit/components/render/graphs/bezier.js +3 -3
  23. package/lib/draw-canvas-edit/components/render/graphs/bezier.js.map +1 -1
  24. package/lib/draw-canvas-edit/components/render/graphs/circle.js +2 -2
  25. package/lib/draw-canvas-edit/components/render/graphs/circle.js.map +1 -1
  26. package/lib/draw-canvas-edit/components/render/graphs/curve.js +3 -3
  27. package/lib/draw-canvas-edit/components/render/graphs/curve.js.map +1 -1
  28. package/lib/draw-canvas-edit/components/render/graphs/line.js +3 -3
  29. package/lib/draw-canvas-edit/components/render/graphs/line.js.map +1 -1
  30. package/lib/draw-canvas-edit/components/render/graphs/rect.js +2 -2
  31. package/lib/draw-canvas-edit/components/render/graphs/rect.js.map +1 -1
  32. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.d.ts +1 -1
  33. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.d.ts.map +1 -1
  34. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.js +58 -122
  35. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.js.map +1 -1
  36. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.d.ts.map +1 -1
  37. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.js +2 -1
  38. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.js.map +1 -1
  39. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.d.ts.map +1 -1
  40. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.js +11 -4
  41. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.js.map +1 -1
  42. package/lib/draw-canvas-edit/components/render/index.d.ts +3 -1
  43. package/lib/draw-canvas-edit/components/render/index.d.ts.map +1 -1
  44. package/lib/draw-canvas-edit/components/render/index.js +38 -27
  45. package/lib/draw-canvas-edit/components/render/index.js.map +1 -1
  46. package/lib/draw-canvas-edit/components/render/tools/attract-tool.d.ts +2 -1
  47. package/lib/draw-canvas-edit/components/render/tools/attract-tool.d.ts.map +1 -1
  48. package/lib/draw-canvas-edit/components/render/tools/attract-tool.js +33 -8
  49. package/lib/draw-canvas-edit/components/render/tools/attract-tool.js.map +1 -1
  50. package/lib/draw-canvas-edit/components/render/tools/component-factory.d.ts +62 -0
  51. package/lib/draw-canvas-edit/components/render/tools/component-factory.d.ts.map +1 -0
  52. package/lib/draw-canvas-edit/components/render/tools/component-factory.js +289 -0
  53. package/lib/draw-canvas-edit/components/render/tools/component-factory.js.map +1 -0
  54. package/lib/draw-canvas-edit/components/render/tools/copy-tool.d.ts +0 -2
  55. package/lib/draw-canvas-edit/components/render/tools/copy-tool.d.ts.map +1 -1
  56. package/lib/draw-canvas-edit/components/render/tools/copy-tool.js +23 -45
  57. package/lib/draw-canvas-edit/components/render/tools/copy-tool.js.map +1 -1
  58. package/lib/draw-canvas-edit/components/render/tools/import-export-tool.d.ts.map +1 -1
  59. package/lib/draw-canvas-edit/components/render/tools/import-export-tool.js +20 -41
  60. package/lib/draw-canvas-edit/components/render/tools/import-export-tool.js.map +1 -1
  61. package/lib/draw-canvas-edit/components/render/tools/index.d.ts +1 -0
  62. package/lib/draw-canvas-edit/components/render/tools/index.d.ts.map +1 -1
  63. package/lib/draw-canvas-edit/components/render/tools/index.js +1 -0
  64. package/lib/draw-canvas-edit/components/render/tools/index.js.map +1 -1
  65. package/lib/draw-canvas-edit/components/render/tools/selection-tool.d.ts.map +1 -1
  66. package/lib/draw-canvas-edit/components/render/tools/selection-tool.js +32 -19
  67. package/lib/draw-canvas-edit/components/render/tools/selection-tool.js.map +1 -1
  68. package/lib/draw-canvas-edit/components/render/types.d.ts +8 -6
  69. package/lib/draw-canvas-edit/components/render/types.d.ts.map +1 -1
  70. package/lib/draw-canvas-edit/components/render/types.js.map +1 -1
  71. package/lib/draw-canvas-edit/components/setting-form/imag-upload.d.ts.map +1 -1
  72. package/lib/draw-canvas-edit/components/setting-form/imag-upload.js +3 -3
  73. package/lib/draw-canvas-edit/components/setting-form/imag-upload.js.map +1 -1
  74. package/lib/draw-canvas-edit/components/setting-form/index.d.ts.map +1 -1
  75. package/lib/draw-canvas-edit/components/setting-form/index.js +3 -5
  76. package/lib/draw-canvas-edit/components/setting-form/index.js.map +1 -1
  77. package/lib/draw-canvas-edit/index.d.ts.map +1 -1
  78. package/lib/draw-canvas-edit/index.js +6 -2
  79. package/lib/draw-canvas-edit/index.js.map +1 -1
  80. package/lib/draw-canvas-view/index.d.ts.map +1 -1
  81. package/lib/draw-canvas-view/index.js +4 -2
  82. package/lib/draw-canvas-view/index.js.map +1 -1
  83. package/lib/draw-canvas-view/view.d.ts +2 -0
  84. package/lib/draw-canvas-view/view.d.ts.map +1 -1
  85. package/lib/draw-canvas-view/view.js +46 -35
  86. package/lib/draw-canvas-view/view.js.map +1 -1
  87. package/lib/export/export-frame.d.ts.map +1 -1
  88. package/lib/export/export-frame.js +1 -1
  89. package/lib/export/export-frame.js.map +1 -1
  90. package/lib/export/select-code-export-frame.js +1 -1
  91. package/lib/export/select-code-export-frame.js.map +1 -1
  92. package/lib/form/criteria-form.js +17 -17
  93. package/lib/form/criteria-form.js.map +1 -1
  94. package/lib/form/dtmpl-form.d.ts.map +1 -1
  95. package/lib/form/dtmpl-form.js +9 -0
  96. package/lib/form/dtmpl-form.js.map +1 -1
  97. package/lib/form/form-Item-group.js +2 -2
  98. package/lib/form/form-Item-group.js.map +1 -1
  99. package/lib/import/excel-import.d.ts.map +1 -1
  100. package/lib/import/excel-import.js +1 -1
  101. package/lib/import/excel-import.js.map +1 -1
  102. package/lib/layout2/page.d.ts +1 -1
  103. package/lib/layout2/page.d.ts.map +1 -1
  104. package/lib/layout2/page.js +17 -4
  105. package/lib/layout2/page.js.map +1 -1
  106. package/lib/layout3/page.js +1 -1
  107. package/lib/layout3/page.js.map +1 -1
  108. package/lib/layout4/page.js +1 -1
  109. package/lib/layout4/page.js.map +1 -1
  110. package/lib/layout5/page.js +1 -1
  111. package/lib/layout5/page.js.map +1 -1
  112. package/lib/login/login.d.ts +1 -0
  113. package/lib/login/login.d.ts.map +1 -1
  114. package/lib/login/login.js +8 -6
  115. package/lib/login/login.js.map +1 -1
  116. package/lib/login2/login.d.ts +1 -0
  117. package/lib/login2/login.d.ts.map +1 -1
  118. package/lib/login2/login.js +10 -9
  119. package/lib/login2/login.js.map +1 -1
  120. package/lib/lowcode-components/base-button/index.js +1 -1
  121. package/lib/lowcode-components/base-button/index.js.map +1 -1
  122. package/lib/lowcode-components/base-image/index.js +1 -1
  123. package/lib/lowcode-components/base-image/index.js.map +1 -1
  124. package/lib/lowcode-components/base-map/index.js +1 -1
  125. package/lib/lowcode-components/base-map/index.js.map +1 -1
  126. package/lib/lowcode-components/base-tabs/index.js +1 -1
  127. package/lib/lowcode-components/base-tabs/index.js.map +1 -1
  128. package/lib/lowcode-components/carousel/index.js +1 -1
  129. package/lib/lowcode-components/carousel/index.js.map +1 -1
  130. package/lib/lowcode-components/effectScatter-map/index.js +1 -1
  131. package/lib/lowcode-components/effectScatter-map/index.js.map +1 -1
  132. package/lib/lowcode-components/effectScatter-map-3d/index.js +1 -1
  133. package/lib/lowcode-components/effectScatter-map-3d/index.js.map +1 -1
  134. package/lib/lowcode-components/lowcode-view/index.js +1 -1
  135. package/lib/lowcode-components/lowcode-view/index.js.map +1 -1
  136. package/lib/lowcode-components/radar-chart/index.js +3 -3
  137. package/lib/lowcode-components/radar-chart/index.js.map +1 -1
  138. package/lib/module/dtmpl-edit-card.js +4 -4
  139. package/lib/module/dtmpl-edit-card.js.map +1 -1
  140. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  141. package/lib/module/dtmpl-edit-page.js +7 -4
  142. package/lib/module/dtmpl-edit-page.js.map +1 -1
  143. package/lib/sso-Login/index.d.ts.map +1 -1
  144. package/lib/sso-Login/index.js +4 -3
  145. package/lib/sso-Login/index.js.map +1 -1
  146. package/lib/sso-Login/service/index.d.ts.map +1 -1
  147. package/lib/sso-Login/service/index.js +2 -1
  148. package/lib/sso-Login/service/index.js.map +1 -1
  149. package/lib/sso-Login/service/login.js +8 -7
  150. package/lib/sso-Login/service/login.js.map +1 -1
  151. package/lib/table/act-table.js +8 -8
  152. package/lib/table/act-table.js.map +1 -1
  153. package/lib/table/modal-select-table.d.ts +2 -2
  154. package/lib/table/modal-select-table.d.ts.map +1 -1
  155. package/lib/table/modal-select-table.js +10 -10
  156. package/lib/table/modal-select-table.js.map +1 -1
  157. package/lib/table/relation-table.d.ts +2 -2
  158. package/lib/table/relation-table.js +1 -1
  159. package/lib/table/relation-table.js.map +1 -1
  160. package/lib/table/select-table.js +2 -2
  161. package/lib/table/select-table.js.map +1 -1
  162. package/lib/tmpl/hc-data-source.js +2 -2
  163. package/lib/tmpl/hc-data-source.js.map +1 -1
  164. package/lib/tmpl/hcservice-v3.d.ts +7 -7
  165. package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
  166. package/lib/tmpl/hcservice-v3.js +22 -17
  167. package/lib/tmpl/hcservice-v3.js.map +1 -1
  168. package/lib/tmpl/interface.d.ts +8 -7
  169. package/lib/tmpl/interface.d.ts.map +1 -1
  170. package/lib/tmpl/superagent.d.ts +1 -0
  171. package/lib/tmpl/superagent.d.ts.map +1 -1
  172. package/lib/tmpl/superagent.js +7 -3
  173. package/lib/tmpl/superagent.js.map +1 -1
  174. package/lib/tmpl/tmpl-config-analysis.d.ts.map +1 -1
  175. package/lib/tmpl/tmpl-config-analysis.js +23 -23
  176. package/lib/tmpl/tmpl-config-analysis.js.map +1 -1
  177. package/lib/units/index.d.ts +7 -4
  178. package/lib/units/index.d.ts.map +1 -1
  179. package/lib/units/index.js +66 -24
  180. package/lib/units/index.js.map +1 -1
  181. package/lib/welcome/HCWelcome.js +4 -2
  182. package/lib/welcome/HCWelcome.js.map +1 -1
  183. package/package.json +1 -1
  184. package/src/aldehyde/controls/2dEditor/components/card.tsx +2 -2
  185. package/src/aldehyde/controls/2dEditor/components/image.tsx +1 -1
  186. package/src/aldehyde/controls/entity-select/entity-select.tsx +3 -3
  187. package/src/aldehyde/controls/upload/index.tsx +1 -1
  188. package/src/aldehyde/controls/upload/mult-file-upload.tsx +2 -2
  189. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.tsx +9 -7
  190. package/src/aldehyde/draw-canvas-edit/components/main-header/index.less +3 -0
  191. package/src/aldehyde/draw-canvas-edit/components/render/draws/bg-draw.ts +17 -1
  192. package/src/aldehyde/draw-canvas-edit/components/render/draws/contextmenu-draw.ts +30 -6
  193. package/src/aldehyde/draw-canvas-edit/components/render/graphs/bezier.ts +3 -3
  194. package/src/aldehyde/draw-canvas-edit/components/render/graphs/circle.ts +2 -2
  195. package/src/aldehyde/draw-canvas-edit/components/render/graphs/curve.ts +3 -3
  196. package/src/aldehyde/draw-canvas-edit/components/render/graphs/line.ts +3 -3
  197. package/src/aldehyde/draw-canvas-edit/components/render/graphs/rect.ts +2 -2
  198. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +45 -130
  199. package/src/aldehyde/draw-canvas-edit/components/render/handlers/graph-handlers.ts +7 -1
  200. package/src/aldehyde/draw-canvas-edit/components/render/handlers/selection-handlers.ts +11 -5
  201. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +39 -30
  202. package/src/aldehyde/draw-canvas-edit/components/render/tools/attract-tool.ts +30 -10
  203. package/src/aldehyde/draw-canvas-edit/components/render/tools/component-factory.ts +302 -0
  204. package/src/aldehyde/draw-canvas-edit/components/render/tools/copy-tool.ts +24 -46
  205. package/src/aldehyde/draw-canvas-edit/components/render/tools/import-export-tool.ts +22 -46
  206. package/src/aldehyde/draw-canvas-edit/components/render/tools/index.ts +1 -0
  207. package/src/aldehyde/draw-canvas-edit/components/render/tools/selection-tool.ts +34 -23
  208. package/src/aldehyde/draw-canvas-edit/components/render/types.ts +6 -6
  209. package/src/aldehyde/draw-canvas-edit/components/setting-form/imag-upload.tsx +3 -2
  210. package/src/aldehyde/draw-canvas-edit/components/setting-form/index.tsx +3 -5
  211. package/src/aldehyde/draw-canvas-edit/index.tsx +6 -2
  212. package/src/aldehyde/draw-canvas-view/index.tsx +3 -1
  213. package/src/aldehyde/draw-canvas-view/view.tsx +228 -212
  214. package/src/aldehyde/export/export-frame.tsx +27 -27
  215. package/src/aldehyde/export/select-code-export-frame.tsx +1 -1
  216. package/src/aldehyde/form/criteria-form.tsx +18 -18
  217. package/src/aldehyde/form/dtmpl-form.tsx +9 -0
  218. package/src/aldehyde/form/form-Item-group.tsx +2 -2
  219. package/src/aldehyde/import/excel-import.tsx +9 -9
  220. package/src/aldehyde/layout2/page.tsx +16 -4
  221. package/src/aldehyde/layout3/page.tsx +1 -1
  222. package/src/aldehyde/layout4/page.tsx +1 -1
  223. package/src/aldehyde/layout5/page.tsx +1 -1
  224. package/src/aldehyde/login/login.tsx +113 -110
  225. package/src/aldehyde/login2/login.tsx +14 -8
  226. package/src/aldehyde/lowcode-components/base-button/index.tsx +1 -1
  227. package/src/aldehyde/lowcode-components/base-image/index.tsx +1 -1
  228. package/src/aldehyde/lowcode-components/base-map/index.tsx +1 -1
  229. package/src/aldehyde/lowcode-components/base-tabs/index.tsx +1 -1
  230. package/src/aldehyde/lowcode-components/carousel/index.tsx +1 -1
  231. package/src/aldehyde/lowcode-components/effectScatter-map/index.tsx +1 -1
  232. package/src/aldehyde/lowcode-components/effectScatter-map-3d/index.tsx +1 -1
  233. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +1 -1
  234. package/src/aldehyde/lowcode-components/radar-chart/index.tsx +3 -3
  235. package/src/aldehyde/module/dtmpl-edit-card.tsx +4 -4
  236. package/src/aldehyde/module/dtmpl-edit-page.tsx +7 -4
  237. package/src/aldehyde/sso-Login/index.tsx +4 -3
  238. package/src/aldehyde/sso-Login/service/index.js +2 -1
  239. package/src/aldehyde/sso-Login/service/login.js +8 -7
  240. package/src/aldehyde/table/act-table.tsx +8 -8
  241. package/src/aldehyde/table/modal-select-table.tsx +10 -10
  242. package/src/aldehyde/table/relation-table.tsx +1 -1
  243. package/src/aldehyde/table/select-table.tsx +2 -2
  244. package/src/aldehyde/tmpl/hc-data-source.tsx +2 -2
  245. package/src/aldehyde/tmpl/hcservice-v3.tsx +23 -16
  246. package/src/aldehyde/tmpl/interface.tsx +8 -7
  247. package/src/aldehyde/tmpl/superagent.js +6 -2
  248. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +23 -24
  249. package/src/aldehyde/units/index.tsx +67 -30
  250. package/src/aldehyde/welcome/HCWelcome.js +3 -2
@@ -257,7 +257,9 @@ const Index = (props: Props) => {
257
257
  // 表单数据实时回显更新
258
258
  const formSetFieldsValue = () => {
259
259
  const nodeId = assetCurrent?.getAttr("id");
260
- const temVal = _.cloneDeep(formData);
260
+ // 表单回显,同类型组件默认清空值再赋值
261
+ const allKey = formConfigs.reduce((total, item) => ({ ...total, [item.id]: undefined }), {})
262
+ const temVal = _.cloneDeep({ ...allKey, ...formData });
261
263
  Object.keys(temVal).forEach((key) => { // 使用公共表单组件,转换指定类型值
262
264
  const extControlType = formConfigs.find((item: any) => item.id === key)?.extControlType;
263
265
  if (["yes-no-switch"].includes(extControlType)) { // 处理是否转换boolean值
@@ -265,10 +267,6 @@ const Index = (props: Props) => {
265
267
  return;
266
268
  }
267
269
  });
268
- const dataSourceConfig = formConfigs.find((item: any) => item.id === "dataSource");
269
- if (dataSourceConfig) { // 数据源-无配置设置默认值
270
- temVal["dataSource"] = temVal["dataSource"] || dataSourceConfig.defValue;
271
- }
272
270
  form.setFieldsValue({ ...temVal, id: nodeId });
273
271
  }
274
272
 
@@ -1,6 +1,6 @@
1
1
  import React, { useEffect, useRef, useState, useCallback } from 'react';
2
2
  import { gunzipSync, strFromU8 } from 'fflate';
3
- import { Spin } from "antd";
3
+ import { Spin, theme } from "antd";
4
4
  import { hexToUint8Array } from 'uint8array-extras';
5
5
  import HcserviceV3 from "../tmpl/hcservice-v3";
6
6
  import { Render } from './components/render';
@@ -28,10 +28,11 @@ const Index = (props: Props) => {
28
28
  const [assetCurrent, setAssetCurrent] = useState<Konva.Node>(); // 当前选中组件
29
29
  const [linkCurrent, setLinkCurrent] = useState<Konva.Line>(); // 当前选中连线
30
30
  const [texting, setTexting] = useState<boolean>(false); // 添加文本状态
31
- const [showGrid, setShowGrid] = useState<boolean>(true); // 是否显示网格
31
+ const [showGrid, setShowGrid] = useState<boolean>(false); // 是否显示网格
32
32
  const [showAttract, setShowAttract] = useState<boolean>(true); // 是否显示磁吸
33
33
  const assetCurrentRef = useRef<Konva.Node>(null); // 当前选中组件Ref
34
34
  const [loading, setLoading] = useState<boolean>(false);
35
+ const { token: themeToken } = theme.useToken();
35
36
 
36
37
  // 获取视图数据
37
38
  const getViewData = async () => {
@@ -50,6 +51,7 @@ const Index = (props: Props) => {
50
51
  setLoading(false);
51
52
  // 重置画面数据
52
53
  await renderRef.current.importExportTool.restore(originalData as string);
54
+ await renderRef.current.positionTool.positionFit(); // 画布默认自适应居中
53
55
  }
54
56
 
55
57
  useEffect(() => {
@@ -66,6 +68,7 @@ const Index = (props: Props) => {
66
68
  showBg: true, showRuler: true, showRefLine: true,
67
69
  showPreview: false, showContextmenu: true,
68
70
  attractResize: true, attractBg: true, attractNode: true,
71
+ themeToken
69
72
  });
70
73
  renderRef.current = render;
71
74
  // 初始化设置
@@ -106,6 +109,7 @@ const Index = (props: Props) => {
106
109
  const { width, height } = boardRef.current.getBoundingClientRect();
107
110
  if (renderRef.current) {
108
111
  renderRef.current.resize(width, height);
112
+ renderRef.current.positionTool.positionFit();
109
113
  } else {
110
114
  initRender(width, height);
111
115
  }
@@ -12,6 +12,7 @@ interface Props {
12
12
 
13
13
  const Index = (props: Props) => {
14
14
  const { recordCode } = props;
15
+ const [viewId, setViewId] = useState<string>();
15
16
  const [jsonData, setJsonData] = useState("{}"); // 画面数据
16
17
  const [loading, setLoading] = useState(false); // 加载状态
17
18
 
@@ -30,6 +31,7 @@ const Index = (props: Props) => {
30
31
  const originalData = strFromU8(decompressedBuffer);
31
32
  setLoading(false);
32
33
  setJsonData(originalData);
34
+ setViewId(data?.[0]?.id);
33
35
  }
34
36
 
35
37
  useEffect(() => {
@@ -42,7 +44,7 @@ const Index = (props: Props) => {
42
44
  return <div className="view-loading"><Spin /></div>;
43
45
  }
44
46
 
45
- return <Viewer data={jsonData} />;
47
+ return <Viewer data={jsonData} viewId={viewId} recordCode={recordCode} />;
46
48
  };
47
49
 
48
50
  export default Index;
@@ -1,212 +1,228 @@
1
- import React, { useEffect, useRef, useCallback } from 'react';
2
- import { Space, Button } from "antd";
3
- import { ExpandOutlined } from '@ant-design/icons';
4
- import chunk from "lodash/chunk";
5
- import HcserviceV3 from "../tmpl/hcservice-v3";
6
- import WebSocket from "../tmpl/web-socket";
7
- import { AssetSettings } from '../draw-canvas-edit/components/render/types';
8
- import { Render } from '../draw-canvas-edit/components/render';
9
- import './index.less';
10
-
11
- // nodeId组件ID
12
- type DataSourceConfig = { sourceId: string, nodeId: string } & { [key: string]: any };
13
-
14
- interface ViewerProps {
15
- data?: string; // 画布 JSON 数据
16
- width?: number | string;
17
- height?: number | string;
18
- // 组件数据源初始化查询参数;公共参数、指定组件参数:例:{公共参数key:value,指定组件Id(编辑页获取):{参数key:value}}
19
- initSearchParams?: { [key: string]: any },
20
- }
21
-
22
- const Index = (props: ViewerProps) => {
23
- const { data, width = '100%', height = '100%', initSearchParams } = props;
24
- const boardRef = useRef<HTMLDivElement>(null);
25
- const stageRef = useRef<HTMLDivElement>(null);
26
- const renderRef = useRef<Render | null>(null);
27
- const observerRef = useRef<ResizeObserver | null>(null);
28
- const wsRef = useRef(undefined); // 实时数据websocket连接
29
- const subscribeRef = useRef(undefined); // 实时数据订阅
30
-
31
- // 初始化渲染器(只读模式)
32
- const initRender = useCallback(
33
- (width: number, height: number) => {
34
- if (renderRef.current || !stageRef.current) return;
35
- const render = new Render(stageRef.current, {
36
- width,
37
- height,
38
- showRuler: false, // 不需要标尺
39
- showRefLine: false, // 不需要参考线
40
- showPreview: false, // 不需要预览框
41
- showContextmenu: false, // 不需要右键菜单
42
- showBg: true,
43
- readonly: true // ★ 只读模式
44
- });
45
- renderRef.current = render;
46
- // 如果有数据,恢复画布
47
- if (data) {
48
- loadData(render, data);
49
- }
50
- },
51
- [data]
52
- );
53
-
54
- // 更新组件数据->更新画面
55
- const updateAssetSettings = (id: string, settings: Partial<AssetSettings>) => {
56
- if (!renderRef.current || !id || !settings) return;
57
- renderRef.current.updateAssetById(id, settings);
58
- };
59
-
60
- // all(所有数据源组件)、init(初始化请求组件)
61
- const handleDataSourceParams = (nodes: { [key: string]: any }[]) => {
62
- // publicParams 组件公共参数
63
- const publicParams = Object.keys(initSearchParams || {}).reduce((total, next) => {
64
- if (!nodes.find(node => node.id === next)) {
65
- total[next] = initSearchParams[next];
66
- }
67
- return total;
68
- }, {});
69
- const dataSourceConfigs = nodes.reduce((total, next) => {
70
- const settings = next.settings || {};
71
- const temParams = { ...publicParams, ...(initSearchParams?.[next.id] || {}) }; // 指定组件传参,指定传参可覆盖公共
72
- if (settings.isInitParams) { // 组件数据源接收外部参数,更新参数
73
- }
74
- if (settings.dataSource) { // 整合初始化请求/ws请求参数
75
- const itemConfig = { sourceId: settings.dataSource, nodeId: next.id, ...(settings.isInitParams ? temParams : {}) };
76
- if (settings.isInit) { // 初始化请求
77
- total.initDataSource.push(itemConfig);
78
- }
79
- total.allDataSource.push(itemConfig);
80
- }
81
- return total;
82
- }, { allDataSource: [], initDataSource: [] });
83
- return dataSourceConfigs;
84
- }
85
-
86
- // 获取初始化组件数据
87
- const getInitComponentData = async (dataSourceConfigs: DataSourceConfig[]) => {
88
- if (!dataSourceConfigs.length) return;
89
- const temSourceConfigs = chunk(dataSourceConfigs, 10); // 每批处理10个组件数据
90
- temSourceConfigs.forEach(i => {
91
- HcserviceV3.requestCharMultitData(null, JSON.stringify(i)).then(rs => {
92
- const { status, ...data } = rs || {};
93
- if (status === "success") {
94
- for (const item in data) { // 更新组件数据
95
- // updateAssetSettings(item, { data: data[item] || {} };
96
- }
97
- }
98
- })
99
- })
100
- };
101
-
102
- // 获取当前画面数据源配置
103
- const getCharWSConfig = async (dataSourceConfigs: DataSourceConfig[]) => {
104
- if (!dataSourceConfigs.length) return;
105
- const sourceIds = dataSourceConfigs.map(r => r.sourceId);
106
- const res = await HcserviceV3.requestCharWSConfig(null, sourceIds);
107
- const wsSourceIds = Object.keys(res?.config || {});
108
- if (!wsSourceIds?.length) {
109
- return;
110
- }
111
- return dataSourceConfigs.filter(r => wsSourceIds.includes(r.sourceId));
112
- }
113
-
114
- // 实时订阅组件数据
115
- const webSocketComponentData = async (dataSourceConfigs: DataSourceConfig[]) => {
116
- if (subscribeRef.current) { subscribeRef.current.unsubscribe(); }
117
- const temArr = await getCharWSConfig(dataSourceConfigs);
118
- if (!temArr?.length) {
119
- return;
120
- }
121
- wsRef.current = WebSocket.getInstance("v3/kk-ws");
122
- // 订阅数据
123
- subscribeRef.current = await wsRef.current.subscribe(``, { dataSourceConfigs: JSON.stringify(temArr) }, (data) => {
124
- for (const item in data) { // 更新组件数据
125
- // updateAssetSettings(item, { data: data[item] || {} };
126
- }
127
- });
128
- }
129
-
130
- // 获取所有组件-更新数据
131
- const onAssetsLoaded = () => {
132
- if (!renderRef.current) return;
133
- const assets = renderRef.current.getAllAssets();
134
- if (!assets?.length) return;
135
- const { allDataSource, initDataSource } = handleDataSourceParams(assets);
136
- getInitComponentData(initDataSource); // 初始化请求
137
- webSocketComponentData(allDataSource); // ws订阅数据
138
- }
139
-
140
- // 加载画布数据
141
- const loadData = useCallback(async (render: Render, jsonData: string) => {
142
- try {
143
- await render.importExportTool.restore(jsonData);
144
- // 数据加载完成后自适应居中
145
- render.positionTool.positionFit();
146
- onAssetsLoaded();
147
- } catch (e) {
148
- console.error('Failed to load canvas data:', e);
149
- }
150
- }, []);
151
-
152
- // 监听容器尺寸变化
153
- useEffect(() => {
154
- if (!boardRef.current) return;
155
- const observer = new ResizeObserver(() => {
156
- const { width, height } = boardRef.current.getBoundingClientRect();
157
- if (renderRef.current) {
158
- renderRef.current.resize(width, height); // 更新尺寸
159
- renderRef.current.positionTool.positionFit(); // 自适应居中
160
- } else {
161
- initRender(width, height);
162
- }
163
- });
164
- observer.observe(boardRef.current);
165
- observerRef.current = observer;
166
- return () => {
167
- observer.disconnect();
168
- };
169
- }, []);
170
-
171
- // 当外部 data 更新时,重新加载
172
- useEffect(() => {
173
- if (renderRef.current && data) {
174
- loadData(renderRef.current, data);
175
- }
176
- }, [data, loadData]);
177
-
178
- const handleFit = useCallback(() => {
179
- if (!renderRef.current) return;
180
- renderRef.current.positionTool.positionFit();
181
- }, []);
182
-
183
- // 清理
184
- useEffect(() => {
185
- return () => {
186
- if (renderRef.current) {
187
- renderRef.current.stage.destroy();
188
- renderRef.current = null;
189
- }
190
- if (observerRef.current) {
191
- observerRef.current.disconnect();
192
- observerRef.current = null;
193
- }
194
- };
195
- }, []);
196
-
197
- return (
198
- <div className="draw-viewer" style={{ width, height }}>
199
- <div className="draw-viewer-toolbar">
200
- <Space>
201
- <Button type="text" className='fit' onClick={handleFit} icon={<ExpandOutlined />} />
202
- </Space>
203
- </div>
204
- {/* 画布区域 */}
205
- <div className="draw-viewer-content" ref={boardRef}>
206
- <div ref={stageRef} />
207
- </div>
208
- </div>
209
- );
210
- };
211
-
212
- export default Index;
1
+ import React, { useEffect, useRef, useCallback } from 'react';
2
+ import { Space, Button } from "antd";
3
+ import { ExpandOutlined } from '@ant-design/icons';
4
+ import chunk from "lodash/chunk";
5
+ import HcserviceV3 from "../tmpl/hcservice-v3";
6
+ import WebSocket from "../tmpl/web-socket";
7
+ import { Render } from '../draw-canvas-edit/components/render';
8
+ import './index.less';
9
+
10
+ // 数据源请求结果
11
+ interface DataSource {
12
+ config: { [key: string]: any };
13
+ value: {
14
+ config: { [key: string]: any };
15
+ value: { [key: string]: any }[]
16
+ }[];
17
+ }
18
+
19
+ interface ViewerProps {
20
+ data?: string; // 画布 JSON 数据
21
+ viewId?: string; // 画面ID
22
+ recordCode: string; // 画面关联实例Code,用于数据源请求过滤
23
+ width?: number | string;
24
+ height?: number | string;
25
+ // 组件数据源初始化查询参数;公共参数、指定组件参数:例:{公共参数key:value,指定组件Id(编辑页获取):{参数key:value}}
26
+ initSearchParams?: { [key: string]: any },
27
+ }
28
+
29
+ const Index = (props: ViewerProps) => {
30
+ const { recordCode, viewId, data, width = '100%', height = '100%' } = props;
31
+ const boardRef = useRef<HTMLDivElement>(null);
32
+ const stageRef = useRef<HTMLDivElement>(null);
33
+ const renderRef = useRef<Render | null>(null);
34
+ const observerRef = useRef<ResizeObserver | null>(null);
35
+ const wsRef = useRef(undefined); // 实时数据websocket连接
36
+ const subscribeRef = useRef(undefined); // 实时数据订阅
37
+
38
+ // 初始化渲染器(只读模式)
39
+ const initRender = useCallback(
40
+ (width: number, height: number) => {
41
+ if (renderRef.current || !stageRef.current) return;
42
+ const render = new Render(stageRef.current, {
43
+ width,
44
+ height,
45
+ showRuler: false, // 不需要标尺
46
+ showRefLine: false, // 不需要参考线
47
+ showPreview: false, // 不需要预览框
48
+ showContextmenu: false, // 不需要右键菜单
49
+ showBg: true,
50
+ readonly: true // ★ 只读模式
51
+ });
52
+ renderRef.current = render;
53
+ // 如果有数据,恢复画布
54
+ if (data) {
55
+ loadData(render, data);
56
+ }
57
+ },
58
+ [data]
59
+ );
60
+
61
+ // 更新指定组件设置
62
+ const updateComponentSetting = (node: { [key: string]: any }, data: DataSource) => {
63
+ const { componentType, id, settings } = node;
64
+ let temSetting;
65
+ switch (componentType) {
66
+ case "workstation": // 工位(v1:工位状态枚举颜色,d1:工位编号)
67
+ const temVals = data.value?.[0]?.value;
68
+ const value = temVals.find(r => r.d1 === settings.workstationNumber)?.v1;
69
+ temSetting = value ? { fill: value } : undefined;
70
+ break;
71
+ default:
72
+ break;
73
+ }
74
+ temSetting && renderRef.current.updateAssetById(id, temSetting);
75
+ }
76
+
77
+ // 更新组件数据->更新画面
78
+ const updateAssetSettings = (nodes: { [key: string]: any }[], data: DataSource) => {
79
+ if (!renderRef.current || !nodes?.length || !data) return;
80
+ nodes.forEach(node => updateComponentSetting(node, data));
81
+ };
82
+
83
+ // 整理组件数据源
84
+ const handleDataSourceParams = (nodes: { [key: string]: any }[]) => {
85
+ const dataSourceConfigs = nodes.reduce((total, item) => {
86
+ const { dataSource } = item.settings || {};
87
+ if (dataSource && total[dataSource]) {
88
+ total[dataSource].nodes.push(item);
89
+ } else if (dataSource) {
90
+ total[dataSource] = { params: { sourceId: dataSource, chartCode: dataSource, secondCriterion: recordCode }, nodes: [item] };
91
+ }
92
+ return total;
93
+ }, {});
94
+ return dataSourceConfigs;
95
+ }
96
+
97
+ // 获取初始化组件数据
98
+ const getInitComponentData = async (dataSourceConfigs: { [key: string]: any }) => {
99
+ const dataSources = Object.keys(dataSourceConfigs).map(r => dataSourceConfigs[r].params);
100
+ if (!dataSources.length) return;
101
+ const temSourceConfigs = chunk(dataSources, 10); // 每批处理10个组件数据
102
+ temSourceConfigs.forEach(i => {
103
+ HcserviceV3.requestCharMultitData(null, JSON.stringify(i)).then(rs => {
104
+ const { status, ...data } = rs || {};
105
+ if (status === "success") {
106
+ for (const item in data) { // 更新组件数据
107
+ updateAssetSettings(dataSourceConfigs[item].nodes, data[item]);
108
+ }
109
+ }
110
+ })
111
+ })
112
+ };
113
+
114
+ // 获取当前画面数据源配置
115
+ const getCharWSConfig = async (dataSourceConfigs: { [key: string]: any }) => {
116
+ const dataSourceIds = Object.keys(dataSourceConfigs).map(r => dataSourceConfigs[r].params.sourceId);
117
+ if (!dataSourceIds.length) return;
118
+ const res = await HcserviceV3.requestCharWSConfig(null, dataSourceIds);
119
+ const wsSourceIds = Object.keys(res?.config || {});
120
+ if (!wsSourceIds?.length) {
121
+ return;
122
+ }
123
+ return wsSourceIds.map(r => dataSourceConfigs[r].params);
124
+ }
125
+
126
+ // 实时订阅组件数据
127
+ const webSocketComponentData = async (dataSourceConfigs: { [key: string]: any }) => {
128
+ if (subscribeRef.current) { subscribeRef.current.unsubscribe(); }
129
+ const temArr = await getCharWSConfig(dataSourceConfigs);
130
+ if (!viewId || !temArr?.length) {
131
+ return;
132
+ }
133
+ wsRef.current = WebSocket.getInstance("v3/kk-ws");
134
+ // 订阅数据
135
+ subscribeRef.current = await wsRef.current.subscribe(`/user/queue/chart-data/${viewId}`, { dataSourceConfigs: JSON.stringify(temArr) }, (data) => {
136
+ for (const item in data) { // 更新组件数据
137
+ updateAssetSettings(dataSourceConfigs[item].nodes, data[item]);
138
+ }
139
+ });
140
+ }
141
+
142
+ // 获取所有组件-更新数据
143
+ const onAssetsLoaded = () => {
144
+ if (!renderRef.current) return;
145
+ const assets = renderRef.current.getAllAssets();
146
+ if (!assets?.length) return;
147
+ const allDataSource = handleDataSourceParams(assets);
148
+ getInitComponentData(allDataSource); // 初始化请求
149
+ webSocketComponentData(allDataSource); // ws订阅数据
150
+ }
151
+
152
+ // 加载画布数据
153
+ const loadData = useCallback(async (render: Render, jsonData: string) => {
154
+ try {
155
+ await render.importExportTool.restore(jsonData);
156
+ // 数据加载完成后自适应居中
157
+ render.positionTool.positionFit();
158
+ onAssetsLoaded();
159
+ } catch (e) {
160
+ console.error('Failed to load canvas data:', e);
161
+ }
162
+ }, []);
163
+
164
+ // 监听容器尺寸变化
165
+ useEffect(() => {
166
+ if (!boardRef.current) return;
167
+ const observer = new ResizeObserver(() => {
168
+ if (!boardRef.current) return;
169
+ const { width, height } = boardRef.current.getBoundingClientRect();
170
+ if (renderRef.current) {
171
+ renderRef.current.resize(width, height); // 更新尺寸
172
+ renderRef.current.positionTool.positionFit(); // 自适应居中
173
+ } else {
174
+ initRender(width, height);
175
+ }
176
+ });
177
+ observer.observe(boardRef.current);
178
+ observerRef.current = observer;
179
+ return () => {
180
+ observer.disconnect();
181
+ };
182
+ }, []);
183
+
184
+ // 当外部 data 更新时,重新加载
185
+ useEffect(() => {
186
+ if (renderRef.current && data) {
187
+ loadData(renderRef.current, data);
188
+ }
189
+ }, [data, loadData]);
190
+
191
+ const handleFit = useCallback(() => {
192
+ if (!renderRef.current) return;
193
+ renderRef.current.positionTool.positionFit();
194
+ }, []);
195
+
196
+ // 清理
197
+ useEffect(() => {
198
+ return () => {
199
+ if (renderRef.current) {
200
+ renderRef.current.stage.destroy();
201
+ renderRef.current = null;
202
+ }
203
+ if (observerRef.current) {
204
+ observerRef.current.disconnect();
205
+ observerRef.current = null;
206
+ }
207
+ if (subscribeRef.current) { // 清理订阅
208
+ subscribeRef.current.unsubscribe();
209
+ }
210
+ };
211
+ }, []);
212
+
213
+ return (
214
+ <div className="draw-viewer" style={{ width, height }}>
215
+ <div className="draw-viewer-toolbar">
216
+ <Space>
217
+ <Button type="text" className='fit' onClick={handleFit} icon={<ExpandOutlined />} />
218
+ </Space>
219
+ </div>
220
+ {/* 画布区域 */}
221
+ <div className="draw-viewer-content" ref={boardRef}>
222
+ <div ref={stageRef} />
223
+ </div>
224
+ </div>
225
+ );
226
+ };
227
+
228
+ export default Index;