aldehyde 0.2.516 → 0.2.518

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 (186) hide show
  1. package/lib/controls/auto-complete/index.d.ts.map +1 -1
  2. package/lib/controls/auto-complete/index.js +2 -4
  3. package/lib/controls/auto-complete/index.js.map +1 -1
  4. package/lib/controls/direct-file-view/index.d.ts.map +1 -1
  5. package/lib/controls/direct-file-view/index.js +4 -1
  6. package/lib/controls/direct-file-view/index.js.map +1 -1
  7. package/lib/controls/entry-control.d.ts.map +1 -1
  8. package/lib/controls/entry-control.js +4 -0
  9. package/lib/controls/entry-control.js.map +1 -1
  10. package/lib/controls/icon-selector/icon/phonenode-menu-icon/iconfont.css +99 -99
  11. package/lib/controls/view-control.d.ts.map +1 -1
  12. package/lib/controls/view-control.js +1 -0
  13. package/lib/controls/view-control.js.map +1 -1
  14. package/lib/detail/view/act-dtmpl-view.d.ts +2 -0
  15. package/lib/detail/view/act-dtmpl-view.d.ts.map +1 -1
  16. package/lib/detail/view/act-dtmpl-view.js +3 -2
  17. package/lib/detail/view/act-dtmpl-view.js.map +1 -1
  18. package/lib/detail/view/dtmpl-view.d.ts +11 -0
  19. package/lib/detail/view/dtmpl-view.d.ts.map +1 -1
  20. package/lib/detail/view/dtmpl-view.js +20 -17
  21. package/lib/detail/view/dtmpl-view.js.map +1 -1
  22. package/lib/detail/view/field-view-group.d.ts +9 -0
  23. package/lib/detail/view/field-view-group.d.ts.map +1 -1
  24. package/lib/detail/view/field-view-group.js +17 -15
  25. package/lib/detail/view/field-view-group.js.map +1 -1
  26. package/lib/detail/view/index.less +6 -0
  27. package/lib/draw-canvas-edit/components/asset-bar/index.less +35 -35
  28. package/lib/draw-canvas-edit/components/main-header/index.less +23 -23
  29. package/lib/form/dtmpl-form.d.ts +12 -1
  30. package/lib/form/dtmpl-form.d.ts.map +1 -1
  31. package/lib/form/dtmpl-form.js +35 -27
  32. package/lib/form/dtmpl-form.js.map +1 -1
  33. package/lib/form/form-Item-group.d.ts +9 -0
  34. package/lib/form/form-Item-group.d.ts.map +1 -1
  35. package/lib/form/form-Item-group.js +13 -3
  36. package/lib/form/form-Item-group.js.map +1 -1
  37. package/lib/list/card-list/card-list-item.d.ts.map +1 -1
  38. package/lib/list/card-list/card-list-item.js +28 -6
  39. package/lib/list/card-list/card-list-item.js.map +1 -1
  40. package/lib/lowcode-components/base-table/index.less +61 -61
  41. package/lib/lowcode-components/data-number/index.d.ts +2 -0
  42. package/lib/lowcode-components/data-number/index.d.ts.map +1 -1
  43. package/lib/lowcode-components/data-number/index.js +21 -1
  44. package/lib/lowcode-components/data-number/index.js.map +1 -1
  45. package/lib/lowcode-components/data-number/index.less +10 -10
  46. package/lib/lowcode-components/date-time/index.less +4 -4
  47. package/lib/lowcode-components/four-angle-glow-border/index.less +49 -49
  48. package/lib/lowcode-components/line-chart/index.js +7 -7
  49. package/lib/lowcode-components/line-chart/index.js.map +1 -1
  50. package/lib/lowcode-components/lowcode-view/component/font/FontGlobal.css +26 -26
  51. package/lib/lowcode-components/lowcode-view/component/screen-fit/index.less +13 -13
  52. package/lib/lowcode-components/text-scroller/index.less +28 -28
  53. package/lib/module/dtmpl-edit-page.d.ts +1 -0
  54. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  55. package/lib/module/dtmpl-edit-page.js +5 -5
  56. package/lib/module/dtmpl-edit-page.js.map +1 -1
  57. package/lib/module/dtmpl-view-card.d.ts +2 -0
  58. package/lib/module/dtmpl-view-card.d.ts.map +1 -1
  59. package/lib/module/dtmpl-view-card.js +7 -4
  60. package/lib/module/dtmpl-view-card.js.map +1 -1
  61. package/lib/module/dtmpl-view-drawer.d.ts +2 -0
  62. package/lib/module/dtmpl-view-drawer.d.ts.map +1 -1
  63. package/lib/module/dtmpl-view-drawer.js +3 -2
  64. package/lib/module/dtmpl-view-drawer.js.map +1 -1
  65. package/lib/module/dtmpl-view-modal.d.ts +2 -0
  66. package/lib/module/dtmpl-view-modal.d.ts.map +1 -1
  67. package/lib/module/dtmpl-view-modal.js +3 -2
  68. package/lib/module/dtmpl-view-modal.js.map +1 -1
  69. package/lib/module/ttmpl-table.d.ts.map +1 -1
  70. package/lib/module/ttmpl-table.js +1 -1
  71. package/lib/module/ttmpl-table.js.map +1 -1
  72. package/lib/routable/index.less +5 -0
  73. package/lib/routable/ltmpl-route.d.ts +1 -0
  74. package/lib/routable/ltmpl-route.d.ts.map +1 -1
  75. package/lib/routable/ltmpl-route.js +37 -7
  76. package/lib/routable/ltmpl-route.js.map +1 -1
  77. package/lib/routable/ttmpl-table-route.d.ts.map +1 -1
  78. package/lib/routable/ttmpl-table-route.js +2 -1
  79. package/lib/routable/ttmpl-table-route.js.map +1 -1
  80. package/lib/table/act-table.d.ts +3 -0
  81. package/lib/table/act-table.d.ts.map +1 -1
  82. package/lib/table/act-table.js +9 -6
  83. package/lib/table/act-table.js.map +1 -1
  84. package/lib/table/column/column-builder.d.ts.map +1 -1
  85. package/lib/table/column/column-builder.js +22 -10
  86. package/lib/table/column/column-builder.js.map +1 -1
  87. package/lib/table/pagination.js +1 -1
  88. package/lib/table/pagination.js.map +1 -1
  89. package/lib/table/relation-table.d.ts +5 -0
  90. package/lib/table/relation-table.d.ts.map +1 -1
  91. package/lib/table/relation-table.js +54 -10
  92. package/lib/table/relation-table.js.map +1 -1
  93. package/lib/tmpl/control-type-supportor.d.ts.map +1 -1
  94. package/lib/tmpl/control-type-supportor.js +1 -0
  95. package/lib/tmpl/control-type-supportor.js.map +1 -1
  96. package/lib/tmpl/hcservice-v3.d.ts +2 -0
  97. package/lib/tmpl/hcservice-v3.d.ts.map +1 -1
  98. package/lib/tmpl/hcservice-v3.js +26 -0
  99. package/lib/tmpl/hcservice-v3.js.map +1 -1
  100. package/lib/tmpl/interface.d.ts +8 -1
  101. package/lib/tmpl/interface.d.ts.map +1 -1
  102. package/lib/tmpl/interface.js.map +1 -1
  103. package/lib/units/index.d.ts +2 -0
  104. package/lib/units/index.d.ts.map +1 -1
  105. package/lib/units/index.js +45 -0
  106. package/lib/units/index.js.map +1 -1
  107. package/package.json +1 -1
  108. package/src/aldehyde/controls/auto-complete/index.tsx +4 -6
  109. package/src/aldehyde/controls/direct-file-view/index.tsx +4 -1
  110. package/src/aldehyde/controls/entry-control.tsx +4 -0
  111. package/src/aldehyde/controls/icon-selector/icon/phonenode-menu-icon/iconfont.css +99 -99
  112. package/src/aldehyde/controls/icon-selector/icon/phonenode-menu-icon/iconfont.json +156 -156
  113. package/src/aldehyde/controls/view-control.tsx +1 -0
  114. package/src/aldehyde/detail/view/act-dtmpl-view.tsx +4 -1
  115. package/src/aldehyde/detail/view/dtmpl-view.tsx +20 -26
  116. package/src/aldehyde/detail/view/field-view-group.tsx +20 -22
  117. package/src/aldehyde/detail/view/index.less +6 -0
  118. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.less +35 -35
  119. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.tsx +110 -110
  120. package/src/aldehyde/draw-canvas-edit/components/main-header/index.less +23 -23
  121. package/src/aldehyde/draw-canvas-edit/components/main-header/index.tsx +263 -263
  122. package/src/aldehyde/draw-canvas-edit/components/render/draws/index.ts +7 -7
  123. package/src/aldehyde/draw-canvas-edit/components/render/graphs/base-graph.ts +241 -241
  124. package/src/aldehyde/draw-canvas-edit/components/render/graphs/circle.ts +699 -699
  125. package/src/aldehyde/draw-canvas-edit/components/render/graphs/curve.ts +500 -500
  126. package/src/aldehyde/draw-canvas-edit/components/render/graphs/index.ts +5 -5
  127. package/src/aldehyde/draw-canvas-edit/components/render/graphs/line.ts +493 -493
  128. package/src/aldehyde/draw-canvas-edit/components/render/graphs/rect.ts +680 -680
  129. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-handlers.ts +68 -68
  130. package/src/aldehyde/draw-canvas-edit/components/render/handlers/graph-handlers.ts +113 -113
  131. package/src/aldehyde/draw-canvas-edit/components/render/handlers/index.ts +9 -9
  132. package/src/aldehyde/draw-canvas-edit/components/render/handlers/key-move-handlers.ts +49 -49
  133. package/src/aldehyde/draw-canvas-edit/components/render/handlers/link-handlers.ts +45 -45
  134. package/src/aldehyde/draw-canvas-edit/components/render/handlers/shutcut-handlers.ts +45 -45
  135. package/src/aldehyde/draw-canvas-edit/components/render/handlers/text-handlers.ts +81 -81
  136. package/src/aldehyde/draw-canvas-edit/components/render/handlers/zoom-handlers.ts +59 -59
  137. package/src/aldehyde/draw-canvas-edit/components/render/tools/align-tool.ts +89 -89
  138. package/src/aldehyde/draw-canvas-edit/components/render/tools/asset-tool.ts +154 -154
  139. package/src/aldehyde/draw-canvas-edit/components/render/tools/link-tool.ts +222 -222
  140. package/src/aldehyde/draw-canvas-edit/components/render/tools/z-index-tool.ts +224 -224
  141. package/src/aldehyde/draw-canvas-edit/components/render/utils/a-star.ts +116 -116
  142. package/src/aldehyde/draw-canvas-edit/components/render/utils/bezier-scene-func.ts +72 -72
  143. package/src/aldehyde/draw-canvas-edit/components/setting-form/imag-upload.tsx +119 -119
  144. package/src/aldehyde/form/dtmpl-form.tsx +59 -55
  145. package/src/aldehyde/form/form-Item-group.tsx +16 -5
  146. package/src/aldehyde/layout4/imgs/user.svg +26 -26
  147. package/src/aldehyde/list/card-list/card-list-item.tsx +26 -7
  148. package/src/aldehyde/lowcode-components/base-color-block/index.tsx +31 -31
  149. package/src/aldehyde/lowcode-components/base-table/index.less +61 -61
  150. package/src/aldehyde/lowcode-components/data-number/index.less +10 -10
  151. package/src/aldehyde/lowcode-components/data-number/index.tsx +22 -1
  152. package/src/aldehyde/lowcode-components/date-time/index.less +4 -4
  153. package/src/aldehyde/lowcode-components/date-time/index.tsx +64 -64
  154. package/src/aldehyde/lowcode-components/four-angle-glow-border/index.less +49 -49
  155. package/src/aldehyde/lowcode-components/four-angle-glow-border/index.tsx +53 -53
  156. package/src/aldehyde/lowcode-components/line-chart/index.tsx +7 -7
  157. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-controller.ts +64 -64
  158. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-definition.ts +77 -77
  159. package/src/aldehyde/lowcode-components/lowcode-view/component/abstract-designer-loader.ts +36 -36
  160. package/src/aldehyde/lowcode-components/lowcode-view/component/component-container.tsx +144 -144
  161. package/src/aldehyde/lowcode-components/lowcode-view/component/font/FontGlobal.css +26 -26
  162. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/controller.ts +36 -36
  163. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/definition.ts +53 -53
  164. package/src/aldehyde/lowcode-components/lowcode-view/component/group-layer/index.tsx +15 -15
  165. package/src/aldehyde/lowcode-components/lowcode-view/component/layer-builder.tsx +98 -98
  166. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.less +13 -13
  167. package/src/aldehyde/lowcode-components/lowcode-view/component/screen-fit/index.tsx +121 -121
  168. package/src/aldehyde/lowcode-components/placeholder-component/index.tsx +81 -81
  169. package/src/aldehyde/lowcode-components/text-scroller/index.less +28 -28
  170. package/src/aldehyde/lowcode-components/text-scroller/index.tsx +173 -173
  171. package/src/aldehyde/module/dtmpl-edit-page.tsx +10 -1
  172. package/src/aldehyde/module/dtmpl-view-card.tsx +39 -34
  173. package/src/aldehyde/module/dtmpl-view-drawer.tsx +4 -2
  174. package/src/aldehyde/module/dtmpl-view-modal.tsx +4 -2
  175. package/src/aldehyde/module/ttmpl-table.tsx +1 -0
  176. package/src/aldehyde/routable/index.less +5 -0
  177. package/src/aldehyde/routable/ltmpl-route.tsx +39 -4
  178. package/src/aldehyde/routable/ttmpl-table-route.tsx +3 -0
  179. package/src/aldehyde/table/act-table.tsx +11 -6
  180. package/src/aldehyde/table/column/column-builder.tsx +14 -3
  181. package/src/aldehyde/table/pagination.tsx +1 -1
  182. package/src/aldehyde/table/relation-table.tsx +77 -16
  183. package/src/aldehyde/tmpl/control-type-supportor.tsx +1 -0
  184. package/src/aldehyde/tmpl/hcservice-v3.tsx +23 -0
  185. package/src/aldehyde/tmpl/interface.tsx +9 -2
  186. package/src/aldehyde/units/index.tsx +44 -0
@@ -1,29 +1,29 @@
1
- .text-scroller-container {
2
- --speed: 10s;
3
- --container-width: 320px;
4
-
5
- width: 100%;
6
- height: 100%;
7
- overflow: hidden;
8
- white-space: nowrap;
9
- position: relative;
10
-
11
- .text-scroller {
12
- height: inherit;
13
- position: absolute;
14
- color: white;
15
- animation: scrollText var(--speed) linear infinite;
16
- display: flex;
17
- align-items: center;
18
- }
19
-
20
- @keyframes scrollText {
21
- 0% {
22
- transform: translateX(var(--container-width));
23
- }
24
-
25
- 100% {
26
- transform: translateX(-100%);
27
- }
28
- }
1
+ .text-scroller-container {
2
+ --speed: 10s;
3
+ --container-width: 320px;
4
+
5
+ width: 100%;
6
+ height: 100%;
7
+ overflow: hidden;
8
+ white-space: nowrap;
9
+ position: relative;
10
+
11
+ .text-scroller {
12
+ height: inherit;
13
+ position: absolute;
14
+ color: white;
15
+ animation: scrollText var(--speed) linear infinite;
16
+ display: flex;
17
+ align-items: center;
18
+ }
19
+
20
+ @keyframes scrollText {
21
+ 0% {
22
+ transform: translateX(var(--container-width));
23
+ }
24
+
25
+ 100% {
26
+ transform: translateX(-100%);
27
+ }
28
+ }
29
29
  }
@@ -1,174 +1,174 @@
1
- import React, { forwardRef, ForwardedRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
2
- import './index.less';
3
- import _ from "lodash";
4
- import { useLocale } from "../../locale/useLocale";
5
- import HydrocarbonService from "../../tmpl/hcservice-v3";
6
- import { DataConfigProps } from "../data";
7
-
8
- // 处理数据格式
9
- const handleData = (data: { config: { [key: string]: string }, value: { [key: string]: any }[] }[]) => {
10
- const temData = data?.[0]?.value?.[0]?.v1;
11
- return temData;
12
- }
13
-
14
- export interface ComponentStyle {
15
- speed?: number;
16
- fontSize?: number;
17
- color?: string;
18
- fontFamily?: string;
19
- fontWeight?: number;
20
- defaultValue?: string;
21
- }
22
-
23
- export interface ComponentProps {
24
- style?: ComponentStyle;
25
- data?: DataConfigProps;
26
- isDesignMode?: boolean; // 是否编辑模式
27
- initSearchParams?: { [key: string]: any }; // 全局初始化外部参数,例:传参包含设备id,则在查询时带上设备id
28
- }
29
-
30
- export interface ComponentRef {
31
- updateConfig: (newConfig: ComponentProps) => void;
32
- destroy: () => void;
33
- }
34
-
35
- const Index = forwardRef((props: ComponentProps, ref: ForwardedRef<ComponentRef>) => {
36
- const { style, data: propsData, isDesignMode } = props;
37
- const [config, setConfig] = useState<ComponentStyle>(style || {});
38
- const [speed, setSpeed] = useState<number>(style?.speed || 5);
39
- const [dataConfig, setDataConfig] = useState<DataConfigProps>({ ...propsData }); // 数据源配置
40
- const [data, setData] = useState<string>('');
41
- const [searchParams, setSearchParams] = useState<{ [key: string]: any }>();
42
- const [initSearchParams, setInitSearchParams] = useState<{ [key: string]: any }>();
43
- const textScrollerRef = useRef<HTMLDivElement>(null);
44
- const textContainerRef = useRef<HTMLDivElement>(null);
45
- const resizeObserverRef = useRef<ResizeObserver | null>(null);
46
- const pollingIntervalRef = useRef<number | NodeJS.Timeout>(null);
47
- const { translate } = useLocale();
48
-
49
- const handleDestroy = () => {
50
- resizeObserverRef.current && resizeObserverRef.current.disconnect();
51
- pollingIntervalRef.current && clearInterval(pollingIntervalRef.current);
52
- };
53
-
54
- // 全局初始化请求数据处理
55
- const handleInitData = (val: DataConfigProps) => {
56
- if (val.sourceType === "sourceId" && val.isInit && val.initData) {
57
- const { config, value } = val.initData;
58
- const temData = handleData(value);
59
- setData(temData);
60
- if (config?.requestMode === "polling") {
61
- pollingIntervalRef.current = setInterval(() => { getData() }, config?.pollingInterval || 60000);
62
- }
63
- }
64
- }
65
-
66
- // ws订阅数据更新
67
- const handleWSData = (val: DataConfigProps) => {
68
- if (val.sourceType === "sourceId" && val.wsData) {
69
- const { value } = val.initData;
70
- const temData = handleData(value);
71
- setData(temData);
72
- }
73
- }
74
-
75
- useImperativeHandle(ref, () => ({
76
- updateConfig: (newConfig) => {
77
- const { style: newStyle, data: newDataConfig, initSearchParams: newISParams } = newConfig;
78
- setConfig({ ...(newStyle || {}) });
79
- setSpeed(newStyle?.speed || 5);
80
- setDataConfig({ ...newDataConfig });
81
- handleInitData(newDataConfig);
82
- setSearchParams(newDataConfig.searchParams);
83
- setInitSearchParams(newISParams);
84
- handleWSData(newDataConfig);
85
- },
86
- destroy: handleDestroy,
87
- }));
88
-
89
- useEffect(() => {
90
- if (textContainerRef.current) {
91
- resizeObserverRef.current = new ResizeObserver(_.debounce((entries) => {
92
- for (const entry of entries) {
93
- const { width } = entry.contentRect;
94
- textContainerRef.current.style.setProperty('--container-width', `${width}px`);
95
- }
96
- }, 100));
97
- // 开始观察
98
- resizeObserverRef.current.observe(textContainerRef.current);
99
- }
100
- return () => {
101
- handleDestroy();
102
- }
103
- }, []);
104
-
105
- useEffect(() => {
106
- if (textContainerRef.current) {
107
- textContainerRef.current.style.setProperty('--speed', `${speed || 5}s`);
108
- }
109
- }, [speed]);
110
-
111
- // 请求数据
112
- const getData = async (params?: object) => {
113
- const { data } = await HydrocarbonService.requestChartData(null, dataConfig?.sourceId, params) || {};
114
- const { config, value } = data || {};
115
- const temData = handleData(value);
116
- setData(temData);
117
- return config;
118
- };
119
-
120
- // 初始化请求数据
121
- const getInitData = async (params?: object) => {
122
- pollingIntervalRef.current && clearInterval(pollingIntervalRef.current);
123
- const config = await getData(params);
124
- if (config?.requestMode === "polling") {
125
- pollingIntervalRef.current = setInterval(() => getData(params), config?.pollingInterval || 60000);
126
- }
127
- };
128
-
129
- // 静态数据处理
130
- useEffect(() => {
131
- if (dataConfig?.sourceType === 'staticData') {
132
- const { value } = dataConfig.staticData || {};
133
- setData(value);
134
- }
135
- }, [dataConfig?.sourceType, dataConfig?.staticData]);
136
-
137
- /**
138
- * 数据源数据请求
139
- * 1、编辑态不请求数据
140
- */
141
- useEffect(() => {
142
- if (!isDesignMode && dataConfig?.sourceType === 'sourceId' && dataConfig?.sourceId && !dataConfig?.isInit && dataConfig?.isDefRequest !== false) {
143
- if (dataConfig?.isInitParams) { // 组件数据源接收外部参数
144
- initSearchParams && getInitData(initSearchParams);
145
- } else {
146
- getInitData();
147
- }
148
- } else if (dataConfig?.sourceType === 'sourceId') {
149
- setData("文本跑马灯");
150
- }
151
- }, [dataConfig?.sourceType, dataConfig?.sourceId, initSearchParams]);
152
-
153
- // 搜索参数变化时重新请求数据
154
- useEffect(() => {
155
- if (searchParams) {
156
- const params = { ...(initSearchParams || {}), ...searchParams };
157
- if (dataConfig?.isInitParams) { // 数据源接收外部参数,则参数存在再请求
158
- initSearchParams && getInitData(params);
159
- } else {
160
- getInitData(params);
161
- }
162
- }
163
- }, [searchParams, initSearchParams]);
164
-
165
- return (
166
- <div className="text-scroller-container" ref={textContainerRef}>
167
- <div className="text-scroller" style={{ ...config }} ref={textScrollerRef}>
168
- {translate("${" + data + "}")}
169
- </div>
170
- </div>
171
- );
172
- });
173
-
1
+ import React, { forwardRef, ForwardedRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
2
+ import './index.less';
3
+ import _ from "lodash";
4
+ import { useLocale } from "../../locale/useLocale";
5
+ import HydrocarbonService from "../../tmpl/hcservice-v3";
6
+ import { DataConfigProps } from "../data";
7
+
8
+ // 处理数据格式
9
+ const handleData = (data: { config: { [key: string]: string }, value: { [key: string]: any }[] }[]) => {
10
+ const temData = data?.[0]?.value?.[0]?.v1;
11
+ return temData;
12
+ }
13
+
14
+ export interface ComponentStyle {
15
+ speed?: number;
16
+ fontSize?: number;
17
+ color?: string;
18
+ fontFamily?: string;
19
+ fontWeight?: number;
20
+ defaultValue?: string;
21
+ }
22
+
23
+ export interface ComponentProps {
24
+ style?: ComponentStyle;
25
+ data?: DataConfigProps;
26
+ isDesignMode?: boolean; // 是否编辑模式
27
+ initSearchParams?: { [key: string]: any }; // 全局初始化外部参数,例:传参包含设备id,则在查询时带上设备id
28
+ }
29
+
30
+ export interface ComponentRef {
31
+ updateConfig: (newConfig: ComponentProps) => void;
32
+ destroy: () => void;
33
+ }
34
+
35
+ const Index = forwardRef((props: ComponentProps, ref: ForwardedRef<ComponentRef>) => {
36
+ const { style, data: propsData, isDesignMode } = props;
37
+ const [config, setConfig] = useState<ComponentStyle>(style || {});
38
+ const [speed, setSpeed] = useState<number>(style?.speed || 5);
39
+ const [dataConfig, setDataConfig] = useState<DataConfigProps>({ ...propsData }); // 数据源配置
40
+ const [data, setData] = useState<string>('');
41
+ const [searchParams, setSearchParams] = useState<{ [key: string]: any }>();
42
+ const [initSearchParams, setInitSearchParams] = useState<{ [key: string]: any }>();
43
+ const textScrollerRef = useRef<HTMLDivElement>(null);
44
+ const textContainerRef = useRef<HTMLDivElement>(null);
45
+ const resizeObserverRef = useRef<ResizeObserver | null>(null);
46
+ const pollingIntervalRef = useRef<number | NodeJS.Timeout>(null);
47
+ const { translate } = useLocale();
48
+
49
+ const handleDestroy = () => {
50
+ resizeObserverRef.current && resizeObserverRef.current.disconnect();
51
+ pollingIntervalRef.current && clearInterval(pollingIntervalRef.current);
52
+ };
53
+
54
+ // 全局初始化请求数据处理
55
+ const handleInitData = (val: DataConfigProps) => {
56
+ if (val.sourceType === "sourceId" && val.isInit && val.initData) {
57
+ const { config, value } = val.initData;
58
+ const temData = handleData(value);
59
+ setData(temData);
60
+ if (config?.requestMode === "polling") {
61
+ pollingIntervalRef.current = setInterval(() => { getData() }, config?.pollingInterval || 60000);
62
+ }
63
+ }
64
+ }
65
+
66
+ // ws订阅数据更新
67
+ const handleWSData = (val: DataConfigProps) => {
68
+ if (val.sourceType === "sourceId" && val.wsData) {
69
+ const { value } = val.initData;
70
+ const temData = handleData(value);
71
+ setData(temData);
72
+ }
73
+ }
74
+
75
+ useImperativeHandle(ref, () => ({
76
+ updateConfig: (newConfig) => {
77
+ const { style: newStyle, data: newDataConfig, initSearchParams: newISParams } = newConfig;
78
+ setConfig({ ...(newStyle || {}) });
79
+ setSpeed(newStyle?.speed || 5);
80
+ setDataConfig({ ...newDataConfig });
81
+ handleInitData(newDataConfig);
82
+ setSearchParams(newDataConfig.searchParams);
83
+ setInitSearchParams(newISParams);
84
+ handleWSData(newDataConfig);
85
+ },
86
+ destroy: handleDestroy,
87
+ }));
88
+
89
+ useEffect(() => {
90
+ if (textContainerRef.current) {
91
+ resizeObserverRef.current = new ResizeObserver(_.debounce((entries) => {
92
+ for (const entry of entries) {
93
+ const { width } = entry.contentRect;
94
+ textContainerRef.current.style.setProperty('--container-width', `${width}px`);
95
+ }
96
+ }, 100));
97
+ // 开始观察
98
+ resizeObserverRef.current.observe(textContainerRef.current);
99
+ }
100
+ return () => {
101
+ handleDestroy();
102
+ }
103
+ }, []);
104
+
105
+ useEffect(() => {
106
+ if (textContainerRef.current) {
107
+ textContainerRef.current.style.setProperty('--speed', `${speed || 5}s`);
108
+ }
109
+ }, [speed]);
110
+
111
+ // 请求数据
112
+ const getData = async (params?: object) => {
113
+ const { data } = await HydrocarbonService.requestChartData(null, dataConfig?.sourceId, params) || {};
114
+ const { config, value } = data || {};
115
+ const temData = handleData(value);
116
+ setData(temData);
117
+ return config;
118
+ };
119
+
120
+ // 初始化请求数据
121
+ const getInitData = async (params?: object) => {
122
+ pollingIntervalRef.current && clearInterval(pollingIntervalRef.current);
123
+ const config = await getData(params);
124
+ if (config?.requestMode === "polling") {
125
+ pollingIntervalRef.current = setInterval(() => getData(params), config?.pollingInterval || 60000);
126
+ }
127
+ };
128
+
129
+ // 静态数据处理
130
+ useEffect(() => {
131
+ if (dataConfig?.sourceType === 'staticData') {
132
+ const { value } = dataConfig.staticData || {};
133
+ setData(value);
134
+ }
135
+ }, [dataConfig?.sourceType, dataConfig?.staticData]);
136
+
137
+ /**
138
+ * 数据源数据请求
139
+ * 1、编辑态不请求数据
140
+ */
141
+ useEffect(() => {
142
+ if (!isDesignMode && dataConfig?.sourceType === 'sourceId' && dataConfig?.sourceId && !dataConfig?.isInit && dataConfig?.isDefRequest !== false) {
143
+ if (dataConfig?.isInitParams) { // 组件数据源接收外部参数
144
+ initSearchParams && getInitData(initSearchParams);
145
+ } else {
146
+ getInitData();
147
+ }
148
+ } else if (dataConfig?.sourceType === 'sourceId') {
149
+ setData("文本跑马灯");
150
+ }
151
+ }, [dataConfig?.sourceType, dataConfig?.sourceId, initSearchParams]);
152
+
153
+ // 搜索参数变化时重新请求数据
154
+ useEffect(() => {
155
+ if (searchParams) {
156
+ const params = { ...(initSearchParams || {}), ...searchParams };
157
+ if (dataConfig?.isInitParams) { // 数据源接收外部参数,则参数存在再请求
158
+ initSearchParams && getInitData(params);
159
+ } else {
160
+ getInitData(params);
161
+ }
162
+ }
163
+ }, [searchParams, initSearchParams]);
164
+
165
+ return (
166
+ <div className="text-scroller-container" ref={textContainerRef}>
167
+ <div className="text-scroller" style={{ ...config }} ref={textScrollerRef}>
168
+ {translate("${" + data + "}")}
169
+ </div>
170
+ </div>
171
+ );
172
+ });
173
+
174
174
  export default Index;
@@ -41,6 +41,7 @@ interface ModalEditorProps extends DtmplBaseProps {
41
41
  title?: ReactNode;
42
42
  extendButtons?: ReactNode[];
43
43
  isCopy?: boolean;
44
+ isAudit?: boolean; // 是否审计编辑页
44
45
  }
45
46
 
46
47
  interface ModalEditorState {
@@ -488,11 +489,12 @@ export default class DtmplEditPage extends React.PureComponent<
488
489
  sourceId,
489
490
  open,
490
491
  mainCode,
492
+ code,
491
493
  width,
492
494
  pageType,
493
495
  maxColsOnRow,
494
496
  title,
495
- serverKey, parentFormInstance
497
+ serverKey, parentFormInstance, isAudit
496
498
  } = this.props;
497
499
  const { dtmplConfig, id, dtmplData, valueFieldMap, drawerSize } = this.state;
498
500
  const placement = this.props.placement || "left";
@@ -535,6 +537,8 @@ export default class DtmplEditPage extends React.PureComponent<
535
537
  onValuesChange={this.onValuesChange}
536
538
  parentFormInstance={parentFormInstance}
537
539
  valueFieldMap={valueFieldMap}
540
+ isAudit={isAudit}
541
+ code={code}
538
542
  />
539
543
  </div>
540
544
  </Scrollbars>}
@@ -550,6 +554,7 @@ export default class DtmplEditPage extends React.PureComponent<
550
554
  size={drawerSize}
551
555
  maxSize={maxSize}
552
556
  closable={true}
557
+ destroyOnHidden={true}
553
558
  mask={false}
554
559
  onClose={onCancel}
555
560
  open={open}
@@ -572,6 +577,8 @@ export default class DtmplEditPage extends React.PureComponent<
572
577
  onValuesChange={this.onValuesChange}
573
578
  parentFormInstance={parentFormInstance}
574
579
  valueFieldMap={valueFieldMap}
580
+ isAudit={isAudit}
581
+ code={code}
575
582
  />
576
583
  </div>
577
584
  </Drawer>
@@ -591,6 +598,8 @@ export default class DtmplEditPage extends React.PureComponent<
591
598
  onValuesChange={this.onValuesChange}
592
599
  parentFormInstance={parentFormInstance}
593
600
  valueFieldMap={valueFieldMap}
601
+ isAudit={isAudit}
602
+ code={code}
594
603
  />
595
604
  </Card>
596
605
  )}
@@ -1,62 +1,67 @@
1
1
  import React from 'react'
2
2
  import ActDtmplView from "./../detail/view/act-dtmpl-view";
3
3
  import DtmplEditModal from './dtmpl-edit-modal';
4
- import {CodeSource} from "../tmpl/interface";
4
+ import { CodeSource } from "../tmpl/interface";
5
5
 
6
6
  //以列表为入口的,页面内列表,基本原则是所有交互在页面内完成,不会触发路由。
7
7
 
8
- export interface DtmplViewCardProps {
9
- title?:any,
10
- serverKey?:string,
11
- sourceId?:string,
12
- addTmplId?:string,
13
- code?:string;
14
- mainCode?:string;
15
- editable?:boolean;
16
- codeSource?:CodeSource,
17
- showHeader?:boolean,
8
+ export interface DtmplViewCardProps {
9
+ title?: any,
10
+ serverKey?: string,
11
+ sourceId?: string,
12
+ addTmplId?: string,
13
+ code?: string;
14
+ mainCode?: string;
15
+ editable?: boolean;
16
+ codeSource?: CodeSource,
17
+ showHeader?: boolean,
18
+ isAudit?: boolean, // 是否审计
18
19
  };
19
20
 
20
- export interface DtmplViewCardState {
21
- showDtmplEdit?:boolean;
21
+ export interface DtmplViewCardState {
22
+ showDtmplEdit?: boolean;
22
23
  };
23
24
 
24
25
  class DtmplViewCard extends React.PureComponent<DtmplViewCardProps, DtmplViewCardState> {
25
26
 
26
27
  state = {
27
- showDtmplEdit:false,
28
+ showDtmplEdit: false,
28
29
  }
29
30
 
30
- static defaultProps={editable:true,
31
- showHeader:true}
31
+ static defaultProps = {
32
+ editable: true,
33
+ showHeader: true,
34
+ isAudit: false,
35
+ }
32
36
 
33
- goDtmpl=()=>{
37
+ goDtmpl = () => {
34
38
  this.setState({
35
- showDtmplEdit:true,
39
+ showDtmplEdit: true,
36
40
  })
37
41
  }
38
42
 
39
- handleDtmplEdit = (code: string) => {
43
+ handleDtmplEdit = (code: string) => {
40
44
  this.setState({
41
- showDtmplEdit:false,
45
+ showDtmplEdit: false,
42
46
  })
43
47
  }
44
48
 
45
49
  render() {
46
- const {showDtmplEdit} = this.state;
47
- const { sourceId,code,mainCode,editable,serverKey,codeSource,title,showHeader,addTmplId} = this.props;
48
- return <>
49
- <ActDtmplView showHeader={showHeader} title={title} codeSource={codeSource} serverKey={serverKey}
50
- goDtmpl={editable?this.goDtmpl:null} sourceId={sourceId}
51
- code={code} mainCode={mainCode}></ActDtmplView>
52
- {showDtmplEdit? <DtmplEditModal addTmplId={addTmplId} codeSource={codeSource} serverKey={serverKey} open={showDtmplEdit} onCancel={()=>{
53
- this.setState({
54
- showDtmplEdit:false,
55
- })}}
56
- sourceId={sourceId}
57
- code={code}
58
- onOk={this.handleDtmplEdit} />:null}
59
- </>
50
+ const { showDtmplEdit } = this.state;
51
+ const { sourceId, code, mainCode, editable, serverKey, codeSource, title, showHeader, addTmplId, isAudit } = this.props;
52
+ return <>
53
+ <ActDtmplView showHeader={showHeader} title={title} codeSource={codeSource} serverKey={serverKey}
54
+ goDtmpl={editable ? this.goDtmpl : null} sourceId={sourceId}
55
+ code={code} mainCode={mainCode} isAudit={isAudit} />
56
+ {showDtmplEdit ? <DtmplEditModal addTmplId={addTmplId} codeSource={codeSource} serverKey={serverKey} open={showDtmplEdit} onCancel={() => {
57
+ this.setState({
58
+ showDtmplEdit: false,
59
+ })
60
+ }}
61
+ sourceId={sourceId}
62
+ code={code}
63
+ onOk={this.handleDtmplEdit} /> : null}
64
+ </>
60
65
  }
61
66
  }
62
67
 
@@ -12,6 +12,7 @@ interface DtmplViewDrawerProps extends DtmplBaseProps {
12
12
  height?: string | number,
13
13
  cancelText: string,
14
14
  editable?: boolean,
15
+ isAudit?: boolean, // 是否审计
15
16
  }
16
17
 
17
18
  interface DtmplViewDrawerState {
@@ -32,6 +33,7 @@ class DtmplViewDrawer extends React.PureComponent<DtmplViewDrawerProps, DtmplVie
32
33
  placement: 'left',
33
34
  open: false,
34
35
  editable: true,
36
+ isAudit: false
35
37
  }
36
38
 
37
39
  async componentDidMount() {
@@ -41,7 +43,7 @@ class DtmplViewDrawer extends React.PureComponent<DtmplViewDrawerProps, DtmplVie
41
43
  }
42
44
 
43
45
  render() {
44
- const { title, sourceId, code, open, onClose, cancelText, editable, serverKey, codeSource } = this.props;
46
+ const { title, sourceId, code, open, onClose, cancelText, editable, serverKey, codeSource, isAudit } = this.props;
45
47
  const { drawerSize } = this.state;
46
48
  const placement = this.props.placement || 'left';
47
49
  const maxSize = ["top", "bottom"].includes(placement) ? document.documentElement.clientHeight : document.documentElement.clientWidth * 0.9;
@@ -64,7 +66,7 @@ class DtmplViewDrawer extends React.PureComponent<DtmplViewDrawerProps, DtmplVie
64
66
  </Space>
65
67
  }
66
68
  >
67
- <DtmplViewCard codeSource={codeSource} serverKey={serverKey} editable={editable} sourceId={sourceId} code={code} />
69
+ <DtmplViewCard isAudit={isAudit} codeSource={codeSource} serverKey={serverKey} editable={editable} sourceId={sourceId} code={code} />
68
70
  </Drawer>)
69
71
  }
70
72
  }
@@ -11,6 +11,7 @@ interface DtmplViewModalProps extends DtmplBaseProps {
11
11
  onClose: () => void,
12
12
  width?: string | number,
13
13
  height?: string | number,
14
+ isAudit?: boolean;
14
15
  }
15
16
 
16
17
  interface DtmplViewModalState {
@@ -29,6 +30,7 @@ class DtmplViewModal extends React.PureComponent<DtmplViewModalProps, DtmplViewM
29
30
  forceRender: true,
30
31
  style: { maxWidth: 'calc(100vw - 60px)', maxHeight: 'calc(100vh - 50px)' },
31
32
  open: false,
33
+ isAudit: false,
32
34
  }
33
35
 
34
36
  async componentDidMount() {
@@ -36,7 +38,7 @@ class DtmplViewModal extends React.PureComponent<DtmplViewModalProps, DtmplViewM
36
38
  }
37
39
 
38
40
  render() {
39
- const { title, sourceId, code, open, onClose, width, height, serverKey, codeSource } = this.props;
41
+ const { title, sourceId, code, open, onClose, width, height, serverKey, codeSource, isAudit } = this.props;
40
42
  return <DraggableModal
41
43
  open={open}
42
44
  width={width}
@@ -48,7 +50,7 @@ class DtmplViewModal extends React.PureComponent<DtmplViewModalProps, DtmplViewM
48
50
  className='dtmpl-view-modal'
49
51
  >
50
52
  <Scrollbars autoHide autoHideTimeout={1000}>
51
- <DtmplViewCard codeSource={codeSource} serverKey={serverKey} sourceId={sourceId} code={code}></DtmplViewCard>
53
+ <DtmplViewCard isAudit={isAudit} codeSource={codeSource} serverKey={serverKey} sourceId={sourceId} code={code} />
52
54
  </Scrollbars>
53
55
  </DraggableModal>
54
56
  }
@@ -282,6 +282,7 @@ const TtmplTable = (props: TtmplTableProps) => {
282
282
  bordered={bordered}
283
283
  showHeader={showHeader}
284
284
  expandable={(subNodes?.length || recursiveRatmplId) ? { expandedRowRender } : undefined} // 嵌套表格
285
+ showEmpty={false}
285
286
  />
286
287
  {buttons.includes("detail") && showDtmplView ? (
287
288
  <ModalDtmplView
@@ -28,5 +28,10 @@
28
28
  .ttmpl-table-route {
29
29
  .ant-table-expanded-row>.ant-table-cell {
30
30
  padding: 0 8px !important;
31
+ border-bottom: none;
32
+ }
33
+
34
+ .ant-table-expanded-row .ant-table-placeholder {
35
+ display: none;
31
36
  }
32
37
  }