aldehyde 0.2.503 → 0.2.504

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 (113) hide show
  1. package/lib/controls/action/index.d.ts +3 -1
  2. package/lib/controls/action/index.d.ts.map +1 -1
  3. package/lib/controls/action/index.js +17 -1
  4. package/lib/controls/action/index.js.map +1 -1
  5. package/lib/controls/icon-selector/icon/phonenode-menu-icon/iconfont.css +99 -99
  6. package/lib/draw-canvas-edit/components/asset-bar/index.less +35 -35
  7. package/lib/draw-canvas-edit/components/main-header/index.less +23 -23
  8. package/lib/lowcode-components/base-table/index.less +61 -61
  9. package/lib/lowcode-components/column-3d-chart/index.d.ts +1 -0
  10. package/lib/lowcode-components/column-3d-chart/index.d.ts.map +1 -1
  11. package/lib/lowcode-components/column-3d-chart/index.js +3 -1
  12. package/lib/lowcode-components/column-3d-chart/index.js.map +1 -1
  13. package/lib/lowcode-components/column-chart/index.d.ts +1 -0
  14. package/lib/lowcode-components/column-chart/index.d.ts.map +1 -1
  15. package/lib/lowcode-components/column-chart/index.js +3 -1
  16. package/lib/lowcode-components/column-chart/index.js.map +1 -1
  17. package/lib/lowcode-components/data-number/index.less +10 -10
  18. package/lib/lowcode-components/date-time/index.less +4 -4
  19. package/lib/lowcode-components/four-angle-glow-border/index.less +49 -49
  20. package/lib/lowcode-components/line-bar-chart/index.d.ts +1 -0
  21. package/lib/lowcode-components/line-bar-chart/index.d.ts.map +1 -1
  22. package/lib/lowcode-components/line-bar-chart/index.js +3 -1
  23. package/lib/lowcode-components/line-bar-chart/index.js.map +1 -1
  24. package/lib/lowcode-components/line-chart/index.d.ts +1 -0
  25. package/lib/lowcode-components/line-chart/index.d.ts.map +1 -1
  26. package/lib/lowcode-components/line-chart/index.js +3 -1
  27. package/lib/lowcode-components/line-chart/index.js.map +1 -1
  28. package/lib/lowcode-components/lowcode-view/component/font/FontGlobal.css +26 -26
  29. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.less +13 -13
  30. package/lib/lowcode-components/lowcode-view/index.d.ts.map +1 -1
  31. package/lib/lowcode-components/lowcode-view/index.js +8 -0
  32. package/lib/lowcode-components/lowcode-view/index.js.map +1 -1
  33. package/lib/lowcode-components/text-scroller/index.less +28 -28
  34. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  35. package/lib/module/dtmpl-edit-page.js +7 -7
  36. package/lib/module/dtmpl-edit-page.js.map +1 -1
  37. package/lib/table/act-table.d.ts.map +1 -1
  38. package/lib/table/act-table.js +6 -6
  39. package/lib/table/act-table.js.map +1 -1
  40. package/lib/table/column/column-builder.d.ts +1 -0
  41. package/lib/table/column/column-builder.d.ts.map +1 -1
  42. package/lib/table/column/column-builder.js +25 -16
  43. package/lib/table/column/column-builder.js.map +1 -1
  44. package/lib/table/column/index.less +8 -8
  45. package/lib/table/report-table.d.ts.map +1 -1
  46. package/lib/table/report-table.js +3 -3
  47. package/lib/table/report-table.js.map +1 -1
  48. package/lib/tmpl/interface.d.ts +7 -0
  49. package/lib/tmpl/interface.d.ts.map +1 -1
  50. package/lib/tmpl/interface.js.map +1 -1
  51. package/package.json +1 -1
  52. package/src/aldehyde/controls/action/index.tsx +33 -2
  53. package/src/aldehyde/controls/icon-selector/icon/phonenode-menu-icon/iconfont.css +99 -99
  54. package/src/aldehyde/controls/icon-selector/icon/phonenode-menu-icon/iconfont.json +156 -156
  55. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.less +35 -35
  56. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.tsx +110 -110
  57. package/src/aldehyde/draw-canvas-edit/components/main-header/index.less +23 -23
  58. package/src/aldehyde/draw-canvas-edit/components/main-header/index.tsx +263 -263
  59. package/src/aldehyde/draw-canvas-edit/components/render/draws/index.ts +7 -7
  60. package/src/aldehyde/draw-canvas-edit/components/render/graphs/base-graph.ts +241 -241
  61. package/src/aldehyde/draw-canvas-edit/components/render/graphs/circle.ts +699 -699
  62. package/src/aldehyde/draw-canvas-edit/components/render/graphs/curve.ts +500 -500
  63. package/src/aldehyde/draw-canvas-edit/components/render/graphs/index.ts +5 -5
  64. package/src/aldehyde/draw-canvas-edit/components/render/graphs/line.ts +493 -493
  65. package/src/aldehyde/draw-canvas-edit/components/render/graphs/rect.ts +680 -680
  66. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-handlers.ts +68 -68
  67. package/src/aldehyde/draw-canvas-edit/components/render/handlers/graph-handlers.ts +113 -113
  68. package/src/aldehyde/draw-canvas-edit/components/render/handlers/index.ts +9 -9
  69. package/src/aldehyde/draw-canvas-edit/components/render/handlers/key-move-handlers.ts +49 -49
  70. package/src/aldehyde/draw-canvas-edit/components/render/handlers/link-handlers.ts +45 -45
  71. package/src/aldehyde/draw-canvas-edit/components/render/handlers/shutcut-handlers.ts +45 -45
  72. package/src/aldehyde/draw-canvas-edit/components/render/handlers/text-handlers.ts +81 -81
  73. package/src/aldehyde/draw-canvas-edit/components/render/handlers/zoom-handlers.ts +59 -59
  74. package/src/aldehyde/draw-canvas-edit/components/render/tools/align-tool.ts +89 -89
  75. package/src/aldehyde/draw-canvas-edit/components/render/tools/asset-tool.ts +154 -154
  76. package/src/aldehyde/draw-canvas-edit/components/render/tools/link-tool.ts +222 -222
  77. package/src/aldehyde/draw-canvas-edit/components/render/tools/z-index-tool.ts +224 -224
  78. package/src/aldehyde/draw-canvas-edit/components/render/utils/a-star.ts +116 -116
  79. package/src/aldehyde/draw-canvas-edit/components/render/utils/bezier-scene-func.ts +72 -72
  80. package/src/aldehyde/draw-canvas-edit/components/setting-form/imag-upload.tsx +119 -119
  81. package/src/aldehyde/layout4/imgs/user.svg +26 -26
  82. package/src/aldehyde/lowcode-components/base-color-block/index.tsx +31 -31
  83. package/src/aldehyde/lowcode-components/base-table/index.less +61 -61
  84. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +3 -1
  85. package/src/aldehyde/lowcode-components/column-chart/index.tsx +3 -1
  86. package/src/aldehyde/lowcode-components/data-number/index.less +10 -10
  87. package/src/aldehyde/lowcode-components/date-time/index.less +4 -4
  88. package/src/aldehyde/lowcode-components/date-time/index.tsx +64 -64
  89. package/src/aldehyde/lowcode-components/four-angle-glow-border/index.less +49 -49
  90. package/src/aldehyde/lowcode-components/four-angle-glow-border/index.tsx +53 -53
  91. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +3 -1
  92. package/src/aldehyde/lowcode-components/line-chart/index.tsx +3 -1
  93. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-controller.ts +64 -64
  94. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-definition.ts +77 -77
  95. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-designer-loader.ts +36 -36
  96. package/src/aldehyde/lowcode-components/lowcode-view/component/component-container.tsx +144 -144
  97. package/src/aldehyde/lowcode-components/lowcode-view/component/font/FontGlobal.css +26 -26
  98. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/controller.ts +36 -36
  99. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/definition.ts +53 -53
  100. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/index.tsx +15 -15
  101. package/src/aldehyde/lowcode-components/lowcode-view/component/layer-builder.tsx +98 -98
  102. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.less +13 -13
  103. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.tsx +121 -121
  104. package/src/aldehyde/lowcode-components/lowcode-view/index.tsx +9 -0
  105. package/src/aldehyde/lowcode-components/placeholder-component/index.tsx +81 -81
  106. package/src/aldehyde/lowcode-components/text-scroller/index.less +28 -28
  107. package/src/aldehyde/lowcode-components/text-scroller/index.tsx +173 -173
  108. package/src/aldehyde/module/dtmpl-edit-page.tsx +10 -10
  109. package/src/aldehyde/table/act-table.tsx +6 -6
  110. package/src/aldehyde/table/column/column-builder.tsx +26 -36
  111. package/src/aldehyde/table/column/index.less +8 -8
  112. package/src/aldehyde/table/report-table.tsx +3 -2
  113. package/src/aldehyde/tmpl/interface.tsx +7 -0
@@ -1,54 +1,54 @@
1
- import {
2
- AbstractDefinition,
3
- ActionInfo,
4
- BaseInfoType
5
- } from "../abstract-definition";
6
- import GroupLayerController, { GroupLayerProps } from "./controller";
7
- import AbstractController from "../abstract-controller";
8
-
9
- export default class GroupLayerDefinition extends AbstractDefinition<GroupLayerController, GroupLayerProps> {
10
- getBaseInfo(): BaseInfoType {
11
- return {
12
- compName: "",
13
- compKey: "group",
14
- };
15
- }
16
-
17
- getChartImg(): string | null {
18
- return null;
19
- }
20
-
21
- getController() {
22
- return null;
23
- }
24
-
25
- getInitConfig(): GroupLayerProps {
26
- return {
27
- base: {
28
- id: "",
29
- name: '分组图层',
30
- type: 'group',
31
- }
32
- };
33
- }
34
-
35
- getActionList(): ActionInfo[] {
36
- return [
37
- {
38
- name: "显示",
39
- id: "show",
40
- handler: (controller: AbstractController) => {
41
- (controller as GroupLayerController).show();
42
- }
43
- },
44
- {
45
- name: "隐藏",
46
- id: "hide",
47
- handler: (controller: AbstractController) => {
48
- (controller as GroupLayerController).hide();
49
- }
50
- }
51
- ];
52
- }
53
-
1
+ import {
2
+ AbstractDefinition,
3
+ ActionInfo,
4
+ BaseInfoType
5
+ } from "../abstract-definition";
6
+ import GroupLayerController, { GroupLayerProps } from "./controller";
7
+ import AbstractController from "../abstract-controller";
8
+
9
+ export default class GroupLayerDefinition extends AbstractDefinition<GroupLayerController, GroupLayerProps> {
10
+ getBaseInfo(): BaseInfoType {
11
+ return {
12
+ compName: "",
13
+ compKey: "group",
14
+ };
15
+ }
16
+
17
+ getChartImg(): string | null {
18
+ return null;
19
+ }
20
+
21
+ getController() {
22
+ return null;
23
+ }
24
+
25
+ getInitConfig(): GroupLayerProps {
26
+ return {
27
+ base: {
28
+ id: "",
29
+ name: '分组图层',
30
+ type: 'group',
31
+ }
32
+ };
33
+ }
34
+
35
+ getActionList(): ActionInfo[] {
36
+ return [
37
+ {
38
+ name: "显示",
39
+ id: "show",
40
+ handler: (controller: AbstractController) => {
41
+ (controller as GroupLayerController).show();
42
+ }
43
+ },
44
+ {
45
+ name: "隐藏",
46
+ id: "hide",
47
+ handler: (controller: AbstractController) => {
48
+ (controller as GroupLayerController).hide();
49
+ }
50
+ }
51
+ ];
52
+ }
53
+
54
54
  }
@@ -1,16 +1,16 @@
1
- import React from "react";
2
-
3
- export interface GroupLayerStyleProps {
4
- children?: React.ReactNode;
5
- }
6
-
7
- export default class GroupLayer extends React.PureComponent<GroupLayerStyleProps> {
8
- state = {
9
- load: true
10
- }
11
-
12
- render() {
13
- const { load } = this.state;
14
- return load ? <div style={{ position: 'absolute' }}>{this.props.children}</div> : "";
15
- }
1
+ import React from "react";
2
+
3
+ export interface GroupLayerStyleProps {
4
+ children?: React.ReactNode;
5
+ }
6
+
7
+ export default class GroupLayer extends React.PureComponent<GroupLayerStyleProps> {
8
+ state = {
9
+ load: true
10
+ }
11
+
12
+ render() {
13
+ const { load } = this.state;
14
+ return load ? <div style={{ position: 'absolute' }}>{this.props.children}</div> : "";
15
+ }
16
16
  }
@@ -1,99 +1,99 @@
1
- import { createElement, ReactElement } from "react";
2
- import cloneDeep from "lodash/cloneDeep";
3
- import ComponentContainer from "./component-container";
4
- import { ILayerItem, LayerManagerDataType, } from "../interface";
5
- import GroupLayer from "./group-layer";
6
-
7
- export enum LayerOrder {
8
- ASC,
9
- DESC,
10
- }
11
-
12
- class LayerBuilder {
13
-
14
- /**
15
- * 解析函数
16
- */
17
- public parser = (layerManager: LayerManagerDataType, order: LayerOrder = LayerOrder.DESC): ILayerItem[] => {
18
- const { layerHeader, layerConfigs } = layerManager;
19
- const layerMap = cloneDeep(layerConfigs);
20
- let sourceLayerArr: ILayerItem[] = [];
21
-
22
- const iterateLayers = (currentLayer: ILayerItem, res: ILayerItem[]): void => {
23
- if (currentLayer) {
24
- res.push(currentLayer);
25
- if (currentLayer.childHeader) {
26
- let childLayer = layerMap[currentLayer.childHeader];
27
- iterateLayers(childLayer, res);
28
- }
29
- let next = currentLayer.next;
30
- while (next) {
31
- const nextLayer = layerMap[next!];
32
- if (nextLayer?.childHeader)
33
- iterateLayers(layerMap[nextLayer.childHeader], res);
34
- nextLayer && res.push(nextLayer);
35
- next = nextLayer?.next;
36
- }
37
- }
38
- }
39
-
40
- iterateLayers(layerMap[layerHeader!], sourceLayerArr);
41
-
42
- if (order === LayerOrder.ASC)
43
- sourceLayerArr = sourceLayerArr.reverse();
44
-
45
- // 构建树结构
46
- const resData: ILayerItem[] = [];
47
- for (const layerItem of sourceLayerArr) {
48
- if (!layerItem?.pid) {
49
- // 根节点
50
- resData.push(layerItem);
51
- } else {
52
- // 非根节点,将其加入父节点的 children 中
53
- const parent = layerMap[layerItem.pid];
54
- if (parent) {
55
- parent.children = parent.children || [];
56
- parent.children.push(layerItem);
57
- }
58
- }
59
- }
60
- return resData;
61
- };
62
-
63
- private order: number = 1;
64
-
65
- /**
66
- * 构建设计器主画布组件
67
- * @param layerMap
68
- */
69
- public buildCanvasComponents = (layerManager: LayerManagerDataType): ReactElement[] => {
70
- const res: ReactElement[] = [];
71
- //渲染顺序,先渲染顶层容器,再逐步渲染底层的子容器
72
- this.parser(layerManager, LayerOrder.ASC).forEach((item: ILayerItem) => {
73
- res.push(this.buildComponents(layerManager, item));
74
- });
75
- //重置排序编号
76
- this.order = 1;
77
- return res;
78
- }
79
-
80
- private buildComponents = (layerManager: LayerManagerDataType, layer: ILayerItem): ReactElement => {
81
- const { type, children } = layer;
82
- const { layerConfigs } = layerManager;
83
- const targetLayer = layerConfigs[layer.id!];
84
- //给每个图层重新设置排序编号,用于在图层移动的过程中提供更好的体验
85
- if (targetLayer)
86
- targetLayer.order = this.order++;
87
- if (type === 'group') {
88
- //先生成子元素再包裹groupItem
89
- const childDomArr: ReactElement[] = children?.map((item: ILayerItem) => this.buildComponents(layerManager, item));
90
- return createElement(GroupLayer, { key: layer.id }, ...childDomArr);
91
- } else {
92
- return createElement(ComponentContainer, { layer, key: layer.id, layerManager });
93
- }
94
- }
95
-
96
- }
97
-
98
- const layerBuilder = new LayerBuilder();
1
+ import { createElement, ReactElement } from "react";
2
+ import cloneDeep from "lodash/cloneDeep";
3
+ import ComponentContainer from "./component-container";
4
+ import { ILayerItem, LayerManagerDataType, } from "../interface";
5
+ import GroupLayer from "./group-layer";
6
+
7
+ export enum LayerOrder {
8
+ ASC,
9
+ DESC,
10
+ }
11
+
12
+ class LayerBuilder {
13
+
14
+ /**
15
+ * 解析函数
16
+ */
17
+ public parser = (layerManager: LayerManagerDataType, order: LayerOrder = LayerOrder.DESC): ILayerItem[] => {
18
+ const { layerHeader, layerConfigs } = layerManager;
19
+ const layerMap = cloneDeep(layerConfigs);
20
+ let sourceLayerArr: ILayerItem[] = [];
21
+
22
+ const iterateLayers = (currentLayer: ILayerItem, res: ILayerItem[]): void => {
23
+ if (currentLayer) {
24
+ res.push(currentLayer);
25
+ if (currentLayer.childHeader) {
26
+ let childLayer = layerMap[currentLayer.childHeader];
27
+ iterateLayers(childLayer, res);
28
+ }
29
+ let next = currentLayer.next;
30
+ while (next) {
31
+ const nextLayer = layerMap[next!];
32
+ if (nextLayer?.childHeader)
33
+ iterateLayers(layerMap[nextLayer.childHeader], res);
34
+ nextLayer && res.push(nextLayer);
35
+ next = nextLayer?.next;
36
+ }
37
+ }
38
+ }
39
+
40
+ iterateLayers(layerMap[layerHeader!], sourceLayerArr);
41
+
42
+ if (order === LayerOrder.ASC)
43
+ sourceLayerArr = sourceLayerArr.reverse();
44
+
45
+ // 构建树结构
46
+ const resData: ILayerItem[] = [];
47
+ for (const layerItem of sourceLayerArr) {
48
+ if (!layerItem?.pid) {
49
+ // 根节点
50
+ resData.push(layerItem);
51
+ } else {
52
+ // 非根节点,将其加入父节点的 children 中
53
+ const parent = layerMap[layerItem.pid];
54
+ if (parent) {
55
+ parent.children = parent.children || [];
56
+ parent.children.push(layerItem);
57
+ }
58
+ }
59
+ }
60
+ return resData;
61
+ };
62
+
63
+ private order: number = 1;
64
+
65
+ /**
66
+ * 构建设计器主画布组件
67
+ * @param layerMap
68
+ */
69
+ public buildCanvasComponents = (layerManager: LayerManagerDataType): ReactElement[] => {
70
+ const res: ReactElement[] = [];
71
+ //渲染顺序,先渲染顶层容器,再逐步渲染底层的子容器
72
+ this.parser(layerManager, LayerOrder.ASC).forEach((item: ILayerItem) => {
73
+ res.push(this.buildComponents(layerManager, item));
74
+ });
75
+ //重置排序编号
76
+ this.order = 1;
77
+ return res;
78
+ }
79
+
80
+ private buildComponents = (layerManager: LayerManagerDataType, layer: ILayerItem): ReactElement => {
81
+ const { type, children } = layer;
82
+ const { layerConfigs } = layerManager;
83
+ const targetLayer = layerConfigs[layer.id!];
84
+ //给每个图层重新设置排序编号,用于在图层移动的过程中提供更好的体验
85
+ if (targetLayer)
86
+ targetLayer.order = this.order++;
87
+ if (type === 'group') {
88
+ //先生成子元素再包裹groupItem
89
+ const childDomArr: ReactElement[] = children?.map((item: ILayerItem) => this.buildComponents(layerManager, item));
90
+ return createElement(GroupLayer, { key: layer.id }, ...childDomArr);
91
+ } else {
92
+ return createElement(ComponentContainer, { layer, key: layer.id, layerManager });
93
+ }
94
+ }
95
+
96
+ }
97
+
98
+ const layerBuilder = new LayerBuilder();
99
99
  export default layerBuilder;
@@ -1,14 +1,14 @@
1
- .react-screen-box {
2
- background-size: 100% 100%;
3
- width: 100%;
4
- height: 100%;
5
- overflow: hidden;
6
-
7
- .screen-wrapper {
8
- transition-property: all;
9
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
10
- transition-duration: 300ms;
11
- position: relative;
12
- transform-origin: left top;
13
- }
1
+ .react-screen-box {
2
+ background-size: 100% 100%;
3
+ width: 100%;
4
+ height: 100%;
5
+ overflow: hidden;
6
+
7
+ .screen-wrapper {
8
+ transition-property: all;
9
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
10
+ transition-duration: 300ms;
11
+ position: relative;
12
+ transform-origin: left top;
13
+ }
14
14
  }
@@ -1,122 +1,122 @@
1
- /* eslint-disable no-unused-expressions */
2
- import React, { ReactNode, useEffect, useRef, useState } from 'react'
3
- import debounce from "lodash/debounce";
4
- import './index.less';
5
- import { AdaptationType } from "../../interface";
6
-
7
- interface ScreenFitProps {
8
- children?: ReactNode,
9
- width: number | string,
10
- height: number | string,
11
- bodyOverflowHidden?: boolean,
12
- delay?: number,
13
- mode?: AdaptationType,
14
- scaleChange?: (xScale: number, yScale: number) => void,
15
- }
16
-
17
-
18
- export default function ScreenFit(props: ScreenFitProps) {
19
- const { width, height, bodyOverflowHidden = true, delay = 200, scaleChange } = props
20
- let bodyOverflow: string
21
- const elRef = useRef<HTMLDivElement>(null);
22
- const canvasRef = useRef(null);
23
- const [size, setSize] = useState({ width, height, originalHeight: 0, originalWidth: 0 })
24
-
25
- let observer: ResizeObserver;
26
-
27
- function updateSize() {
28
- if (size.width && size.height) {
29
- elRef.current.style.width = `${size.width}px`
30
- elRef.current.style.height = `${size.height}px`
31
- } else {
32
- elRef.current.style.width = `${size.originalWidth}px`
33
- elRef.current.style.height = `${size.originalHeight}px`
34
- }
35
- }
36
-
37
- function updateScale() {
38
- // 获取真实视口尺寸
39
- const currentWidth = canvasRef.current?.clientWidth || 0;
40
- const currentHeight = canvasRef.current?.clientHeight || 0;
41
- // 获取大屏最终的宽高
42
- const realWidth = size.width || size.originalWidth;
43
- const realHeight = size.height || size.originalHeight;
44
- // 计算缩放比例
45
- const widthScale = currentWidth / +realWidth;
46
- const heightScale = currentHeight / +realHeight;
47
- switch (props.mode) {
48
- case 'full-screen':
49
- // 若要铺满全屏,则按照各自比例缩放
50
- elRef.current.style.transform = `scale(${widthScale},${heightScale})`;
51
- scaleChange?.(widthScale, heightScale);
52
- break;
53
- case 'full-x':
54
- elRef.current.style.transform = `scale(${widthScale})`;
55
- canvasRef.current.style.height = `${Number(realHeight) * widthScale}px`;
56
- scaleChange?.(widthScale, widthScale);
57
- break;
58
- case 'full-y':
59
- elRef.current.style.transform = `scale(${heightScale})`;
60
- canvasRef.current.style.width = `${Number(realWidth) * heightScale}px`;
61
- scaleChange?.(heightScale, heightScale);
62
- if (currentWidth > (+realWidth * heightScale)) {
63
- elRef.current.style.margin = `0px ${(currentWidth - +realWidth * heightScale) / 2}px`;
64
- } else {
65
- elRef.current.style.margin = "0px";
66
- }
67
- break;
68
- default:
69
- // 按照宽高最小比例进行缩放
70
- const scale = Math.min(widthScale, heightScale);
71
- elRef.current.style.transform = `scale(${scale},${scale})`;
72
- const domWidth = elRef.current.clientWidth;
73
- const domHeight = elRef.current.clientHeight;
74
- const mx = Math.max((currentWidth - domWidth * scale) / 2, 0);
75
- const my = Math.max((currentHeight - domHeight * scale) / 2, 0);
76
- elRef.current.style.margin = `${my}px ${mx}px`;
77
- scaleChange?.(scale, scale);
78
- break;
79
- }
80
- }
81
-
82
- const onResize = debounce(() => {
83
- if (!elRef.current && !canvasRef.current) return;
84
- updateSize();
85
- updateScale();
86
- }, delay)
87
-
88
- function initState() {
89
- if (bodyOverflowHidden) {
90
- bodyOverflow = document.body.style.overflow;
91
- document.body.style.overflow = 'hidden';
92
- }
93
- observer = new ResizeObserver(() => onResize());
94
- observer.observe(canvasRef.current);
95
- setSize({
96
- ...size,
97
- originalWidth: window.screen.width,
98
- originalHeight: window.screen.height
99
- })
100
- updateSize();
101
- updateScale();
102
- window.addEventListener('resize', onResize);
103
- }
104
-
105
- useEffect(() => {
106
- initState();
107
- return () => {
108
- observer.disconnect();
109
- window.removeEventListener('resize', onResize);
110
- if (bodyOverflowHidden)
111
- document.body.style.overflow = bodyOverflow;
112
- }
113
- }, [])
114
-
115
- return (
116
- <div ref={canvasRef} className={'react-screen-box'} >
117
- <div className={'screen-wrapper'} ref={elRef}>
118
- {props.children}
119
- </div>
120
- </div>
121
- )
1
+ /* eslint-disable no-unused-expressions */
2
+ import React, { ReactNode, useEffect, useRef, useState } from 'react'
3
+ import debounce from "lodash/debounce";
4
+ import './index.less';
5
+ import { AdaptationType } from "../../interface";
6
+
7
+ interface ScreenFitProps {
8
+ children?: ReactNode,
9
+ width: number | string,
10
+ height: number | string,
11
+ bodyOverflowHidden?: boolean,
12
+ delay?: number,
13
+ mode?: AdaptationType,
14
+ scaleChange?: (xScale: number, yScale: number) => void,
15
+ }
16
+
17
+
18
+ export default function ScreenFit(props: ScreenFitProps) {
19
+ const { width, height, bodyOverflowHidden = true, delay = 200, scaleChange } = props
20
+ let bodyOverflow: string
21
+ const elRef = useRef<HTMLDivElement>(null);
22
+ const canvasRef = useRef(null);
23
+ const [size, setSize] = useState({ width, height, originalHeight: 0, originalWidth: 0 })
24
+
25
+ let observer: ResizeObserver;
26
+
27
+ function updateSize() {
28
+ if (size.width && size.height) {
29
+ elRef.current.style.width = `${size.width}px`
30
+ elRef.current.style.height = `${size.height}px`
31
+ } else {
32
+ elRef.current.style.width = `${size.originalWidth}px`
33
+ elRef.current.style.height = `${size.originalHeight}px`
34
+ }
35
+ }
36
+
37
+ function updateScale() {
38
+ // 获取真实视口尺寸
39
+ const currentWidth = canvasRef.current?.clientWidth || 0;
40
+ const currentHeight = canvasRef.current?.clientHeight || 0;
41
+ // 获取大屏最终的宽高
42
+ const realWidth = size.width || size.originalWidth;
43
+ const realHeight = size.height || size.originalHeight;
44
+ // 计算缩放比例
45
+ const widthScale = currentWidth / +realWidth;
46
+ const heightScale = currentHeight / +realHeight;
47
+ switch (props.mode) {
48
+ case 'full-screen':
49
+ // 若要铺满全屏,则按照各自比例缩放
50
+ elRef.current.style.transform = `scale(${widthScale},${heightScale})`;
51
+ scaleChange?.(widthScale, heightScale);
52
+ break;
53
+ case 'full-x':
54
+ elRef.current.style.transform = `scale(${widthScale})`;
55
+ canvasRef.current.style.height = `${Number(realHeight) * widthScale}px`;
56
+ scaleChange?.(widthScale, widthScale);
57
+ break;
58
+ case 'full-y':
59
+ elRef.current.style.transform = `scale(${heightScale})`;
60
+ canvasRef.current.style.width = `${Number(realWidth) * heightScale}px`;
61
+ scaleChange?.(heightScale, heightScale);
62
+ if (currentWidth > (+realWidth * heightScale)) {
63
+ elRef.current.style.margin = `0px ${(currentWidth - +realWidth * heightScale) / 2}px`;
64
+ } else {
65
+ elRef.current.style.margin = "0px";
66
+ }
67
+ break;
68
+ default:
69
+ // 按照宽高最小比例进行缩放
70
+ const scale = Math.min(widthScale, heightScale);
71
+ elRef.current.style.transform = `scale(${scale},${scale})`;
72
+ const domWidth = elRef.current.clientWidth;
73
+ const domHeight = elRef.current.clientHeight;
74
+ const mx = Math.max((currentWidth - domWidth * scale) / 2, 0);
75
+ const my = Math.max((currentHeight - domHeight * scale) / 2, 0);
76
+ elRef.current.style.margin = `${my}px ${mx}px`;
77
+ scaleChange?.(scale, scale);
78
+ break;
79
+ }
80
+ }
81
+
82
+ const onResize = debounce(() => {
83
+ if (!elRef.current && !canvasRef.current) return;
84
+ updateSize();
85
+ updateScale();
86
+ }, delay)
87
+
88
+ function initState() {
89
+ if (bodyOverflowHidden) {
90
+ bodyOverflow = document.body.style.overflow;
91
+ document.body.style.overflow = 'hidden';
92
+ }
93
+ observer = new ResizeObserver(() => onResize());
94
+ observer.observe(canvasRef.current);
95
+ setSize({
96
+ ...size,
97
+ originalWidth: window.screen.width,
98
+ originalHeight: window.screen.height
99
+ })
100
+ updateSize();
101
+ updateScale();
102
+ window.addEventListener('resize', onResize);
103
+ }
104
+
105
+ useEffect(() => {
106
+ initState();
107
+ return () => {
108
+ observer.disconnect();
109
+ window.removeEventListener('resize', onResize);
110
+ if (bodyOverflowHidden)
111
+ document.body.style.overflow = bodyOverflow;
112
+ }
113
+ }, [])
114
+
115
+ return (
116
+ <div ref={canvasRef} className={'react-screen-box'} >
117
+ <div className={'screen-wrapper'} ref={elRef}>
118
+ {props.children}
119
+ </div>
120
+ </div>
121
+ )
122
122
  }
@@ -13,6 +13,7 @@ import abstractDesignerLoader from "./component/abstract-designer-loader";
13
13
  import { merge } from "./component/util";
14
14
  import ProgramConfig from ".././../units";
15
15
  import { useLocale } from "../../index";
16
+ import * as echarts from "echarts";
16
17
  import "./index.less";
17
18
 
18
19
  export const ControllerContext = createContext(null);
@@ -87,6 +88,13 @@ const LowcodeView = (props: Props) => {
87
88
 
88
89
  const backgroundImage = useMemo(() => handleImgUrl(canvasConfig?.backgroundImage), [canvasConfig]);
89
90
 
91
+ // 设置echarts图表联动
92
+ const handleEchartsConnect = (configs: { [key: string]: any }) => {
93
+ const groupTypes = Object.values(configs || {}).map(r => r.style?.groupType).filter(Boolean);
94
+ const groups = [...new Set(groupTypes)];
95
+ groups.forEach(r => echarts.connect(r));
96
+ }
97
+
90
98
  useEffect(() => {
91
99
  //加载
92
100
  abstractDesignerLoader.load();
@@ -101,6 +109,7 @@ const LowcodeView = (props: Props) => {
101
109
  const { entity } = await HcserviceV3.requestDDpageData(ddpageId);
102
110
  const data = entity?.fieldMap || {};
103
111
  const { layerManager, canvasManager } = data["内容"] ? JSON.parse(fromBase64(data["内容"]) || '{}') : {};
112
+ handleEchartsConnect(layerManager?.elemConfigs || {});
104
113
  setLayerManager(layerManager);
105
114
  setCanvasConfig(canvasManager);
106
115
  setLoading(false);