aldehyde 0.2.486 → 0.2.488

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 (196) hide show
  1. package/lib/controls/direct-file-view/index.d.ts.map +1 -1
  2. package/lib/controls/direct-file-view/index.js +2 -1
  3. package/lib/controls/direct-file-view/index.js.map +1 -1
  4. package/lib/controls/entry-control.d.ts +1 -0
  5. package/lib/controls/entry-control.d.ts.map +1 -1
  6. package/lib/controls/entry-control.js +2 -0
  7. package/lib/controls/entry-control.js.map +1 -1
  8. package/lib/draw-canvas-edit/components/asset-bar/index.d.ts.map +1 -1
  9. package/lib/draw-canvas-edit/components/asset-bar/index.js +26 -7
  10. package/lib/draw-canvas-edit/components/asset-bar/index.js.map +1 -1
  11. package/lib/draw-canvas-edit/components/asset-bar/index.less +1 -1
  12. package/lib/draw-canvas-edit/components/main-header/index.js +1 -1
  13. package/lib/draw-canvas-edit/components/render/draws/bg-draw.d.ts +1 -0
  14. package/lib/draw-canvas-edit/components/render/draws/bg-draw.d.ts.map +1 -1
  15. package/lib/draw-canvas-edit/components/render/draws/bg-draw.js +3 -2
  16. package/lib/draw-canvas-edit/components/render/draws/bg-draw.js.map +1 -1
  17. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.d.ts +1 -0
  18. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.d.ts.map +1 -1
  19. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.js +2 -1
  20. package/lib/draw-canvas-edit/components/render/draws/contextmenu-draw.js.map +1 -1
  21. package/lib/draw-canvas-edit/components/render/draws/graph-draw.d.ts +1 -0
  22. package/lib/draw-canvas-edit/components/render/draws/graph-draw.d.ts.map +1 -1
  23. package/lib/draw-canvas-edit/components/render/draws/graph-draw.js +9 -8
  24. package/lib/draw-canvas-edit/components/render/draws/graph-draw.js.map +1 -1
  25. package/lib/draw-canvas-edit/components/render/draws/link-draw.d.ts +1 -0
  26. package/lib/draw-canvas-edit/components/render/draws/link-draw.d.ts.map +1 -1
  27. package/lib/draw-canvas-edit/components/render/draws/link-draw.js +24 -23
  28. package/lib/draw-canvas-edit/components/render/draws/link-draw.js.map +1 -1
  29. package/lib/draw-canvas-edit/components/render/draws/preview-draw.d.ts +1 -0
  30. package/lib/draw-canvas-edit/components/render/draws/preview-draw.d.ts.map +1 -1
  31. package/lib/draw-canvas-edit/components/render/draws/preview-draw.js +6 -5
  32. package/lib/draw-canvas-edit/components/render/draws/preview-draw.js.map +1 -1
  33. package/lib/draw-canvas-edit/components/render/draws/ref-line-draw.d.ts +1 -0
  34. package/lib/draw-canvas-edit/components/render/draws/ref-line-draw.d.ts.map +1 -1
  35. package/lib/draw-canvas-edit/components/render/draws/ref-line-draw.js +3 -2
  36. package/lib/draw-canvas-edit/components/render/draws/ref-line-draw.js.map +1 -1
  37. package/lib/draw-canvas-edit/components/render/draws/ruler-draw.d.ts +1 -0
  38. package/lib/draw-canvas-edit/components/render/draws/ruler-draw.d.ts.map +1 -1
  39. package/lib/draw-canvas-edit/components/render/draws/ruler-draw.js +8 -7
  40. package/lib/draw-canvas-edit/components/render/draws/ruler-draw.js.map +1 -1
  41. package/lib/draw-canvas-edit/components/render/graphs/base-graph.js +3 -3
  42. package/lib/draw-canvas-edit/components/render/graphs/bezier.js +5 -5
  43. package/lib/draw-canvas-edit/components/render/graphs/circle.js +4 -4
  44. package/lib/draw-canvas-edit/components/render/graphs/curve.js +5 -5
  45. package/lib/draw-canvas-edit/components/render/graphs/line.js +5 -5
  46. package/lib/draw-canvas-edit/components/render/graphs/rect.js +4 -4
  47. package/lib/draw-canvas-edit/components/render/handlers/drag-handlers.d.ts +1 -0
  48. package/lib/draw-canvas-edit/components/render/handlers/drag-handlers.d.ts.map +1 -1
  49. package/lib/draw-canvas-edit/components/render/handlers/drag-handlers.js +7 -6
  50. package/lib/draw-canvas-edit/components/render/handlers/drag-handlers.js.map +1 -1
  51. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.d.ts +1 -0
  52. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.d.ts.map +1 -1
  53. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.js +13 -8
  54. package/lib/draw-canvas-edit/components/render/handlers/drag-outside-handlers.js.map +1 -1
  55. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.d.ts +1 -0
  56. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.d.ts.map +1 -1
  57. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.js +2 -1
  58. package/lib/draw-canvas-edit/components/render/handlers/graph-handlers.js.map +1 -1
  59. package/lib/draw-canvas-edit/components/render/handlers/key-move-handlers.d.ts +1 -0
  60. package/lib/draw-canvas-edit/components/render/handlers/key-move-handlers.d.ts.map +1 -1
  61. package/lib/draw-canvas-edit/components/render/handlers/key-move-handlers.js +5 -4
  62. package/lib/draw-canvas-edit/components/render/handlers/key-move-handlers.js.map +1 -1
  63. package/lib/draw-canvas-edit/components/render/handlers/link-handlers.d.ts +1 -0
  64. package/lib/draw-canvas-edit/components/render/handlers/link-handlers.d.ts.map +1 -1
  65. package/lib/draw-canvas-edit/components/render/handlers/link-handlers.js +3 -2
  66. package/lib/draw-canvas-edit/components/render/handlers/link-handlers.js.map +1 -1
  67. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.d.ts +1 -0
  68. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.d.ts.map +1 -1
  69. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.js +5 -4
  70. package/lib/draw-canvas-edit/components/render/handlers/selection-handlers.js.map +1 -1
  71. package/lib/draw-canvas-edit/components/render/handlers/shutcut-handlers.d.ts +1 -0
  72. package/lib/draw-canvas-edit/components/render/handlers/shutcut-handlers.d.ts.map +1 -1
  73. package/lib/draw-canvas-edit/components/render/handlers/shutcut-handlers.js +1 -0
  74. package/lib/draw-canvas-edit/components/render/handlers/shutcut-handlers.js.map +1 -1
  75. package/lib/draw-canvas-edit/components/render/handlers/text-handlers.d.ts +1 -0
  76. package/lib/draw-canvas-edit/components/render/handlers/text-handlers.d.ts.map +1 -1
  77. package/lib/draw-canvas-edit/components/render/handlers/text-handlers.js +1 -0
  78. package/lib/draw-canvas-edit/components/render/handlers/text-handlers.js.map +1 -1
  79. package/lib/draw-canvas-edit/components/render/handlers/zoom-handlers.d.ts +1 -0
  80. package/lib/draw-canvas-edit/components/render/handlers/zoom-handlers.d.ts.map +1 -1
  81. package/lib/draw-canvas-edit/components/render/handlers/zoom-handlers.js +7 -6
  82. package/lib/draw-canvas-edit/components/render/handlers/zoom-handlers.js.map +1 -1
  83. package/lib/draw-canvas-edit/components/render/index.d.ts.map +1 -1
  84. package/lib/draw-canvas-edit/components/render/index.js +49 -49
  85. package/lib/draw-canvas-edit/components/render/index.js.map +1 -1
  86. package/lib/draw-canvas-edit/components/render/tools/align-tool.js +4 -4
  87. package/lib/draw-canvas-edit/components/render/tools/asset-tool.js +1 -1
  88. package/lib/draw-canvas-edit/components/render/tools/copy-tool.js +4 -4
  89. package/lib/draw-canvas-edit/components/render/tools/import-export-tool.js +7 -7
  90. package/lib/draw-canvas-edit/components/render/tools/link-tool.js +9 -9
  91. package/lib/draw-canvas-edit/components/render/tools/position-tool.js +18 -18
  92. package/lib/draw-canvas-edit/components/render/tools/selection-tool.js +2 -2
  93. package/lib/draw-canvas-edit/components/render/tools/z-index-tool.js +16 -16
  94. package/lib/lowcode-components/bar-chart/index.d.ts +4 -1
  95. package/lib/lowcode-components/bar-chart/index.d.ts.map +1 -1
  96. package/lib/lowcode-components/bar-chart/index.js +3 -0
  97. package/lib/lowcode-components/bar-chart/index.js.map +1 -1
  98. package/lib/lowcode-components/column-3d-chart/index.d.ts +4 -1
  99. package/lib/lowcode-components/column-3d-chart/index.d.ts.map +1 -1
  100. package/lib/lowcode-components/column-3d-chart/index.js +3 -0
  101. package/lib/lowcode-components/column-3d-chart/index.js.map +1 -1
  102. package/lib/lowcode-components/column-chart/index.d.ts +6 -3
  103. package/lib/lowcode-components/column-chart/index.d.ts.map +1 -1
  104. package/lib/lowcode-components/column-chart/index.js +4 -1
  105. package/lib/lowcode-components/column-chart/index.js.map +1 -1
  106. package/lib/lowcode-components/line-bar-chart/index.d.ts +4 -1
  107. package/lib/lowcode-components/line-bar-chart/index.d.ts.map +1 -1
  108. package/lib/lowcode-components/line-bar-chart/index.js +3 -0
  109. package/lib/lowcode-components/line-bar-chart/index.js.map +1 -1
  110. package/lib/lowcode-components/line-chart/index.d.ts +5 -2
  111. package/lib/lowcode-components/line-chart/index.d.ts.map +1 -1
  112. package/lib/lowcode-components/line-chart/index.js +6 -2
  113. package/lib/lowcode-components/line-chart/index.js.map +1 -1
  114. package/lib/lowcode-components/pie-chart/index.d.ts +4 -1
  115. package/lib/lowcode-components/pie-chart/index.d.ts.map +1 -1
  116. package/lib/lowcode-components/pie-chart/index.js +3 -0
  117. package/lib/lowcode-components/pie-chart/index.js.map +1 -1
  118. package/lib/module/dtmpl-edit-card.d.ts +1 -1
  119. package/lib/module/dtmpl-edit-card.d.ts.map +1 -1
  120. package/lib/module/dtmpl-edit-card.js +50 -7
  121. package/lib/module/dtmpl-edit-card.js.map +1 -1
  122. package/lib/module/dtmpl-edit-page.d.ts +1 -1
  123. package/lib/module/dtmpl-edit-page.d.ts.map +1 -1
  124. package/lib/module/dtmpl-edit-page.js +50 -7
  125. package/lib/module/dtmpl-edit-page.js.map +1 -1
  126. package/lib/table/act-table.d.ts +2 -0
  127. package/lib/table/act-table.d.ts.map +1 -1
  128. package/lib/table/act-table.js +20 -17
  129. package/lib/table/act-table.js.map +1 -1
  130. package/lib/table/page-chart.d.ts +15 -0
  131. package/lib/table/page-chart.d.ts.map +1 -0
  132. package/lib/table/page-chart.js +147 -0
  133. package/lib/table/page-chart.js.map +1 -0
  134. package/lib/table/page-chart.less +10 -0
  135. package/lib/table/relation-table.d.ts +2 -0
  136. package/lib/table/relation-table.d.ts.map +1 -1
  137. package/lib/table/row-table.d.ts +11 -0
  138. package/lib/table/row-table.d.ts.map +1 -0
  139. package/lib/table/row-table.js +11 -0
  140. package/lib/table/row-table.js.map +1 -0
  141. package/lib/tmpl/interface.d.ts +12 -1
  142. package/lib/tmpl/interface.d.ts.map +1 -1
  143. package/lib/tmpl/interface.js.map +1 -1
  144. package/lib/tmpl/tmpl-config-analysis.js +1 -1
  145. package/lib/tmpl/tmpl-config-analysis.js.map +1 -1
  146. package/package.json +1 -1
  147. package/src/aldehyde/controls/direct-file-view/index.tsx +2 -1
  148. package/src/aldehyde/controls/entry-control.tsx +3 -0
  149. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.less +1 -1
  150. package/src/aldehyde/draw-canvas-edit/components/asset-bar/index.tsx +19 -6
  151. package/src/aldehyde/draw-canvas-edit/components/main-header/index.tsx +1 -1
  152. package/src/aldehyde/draw-canvas-edit/components/render/draws/bg-draw.ts +3 -2
  153. package/src/aldehyde/draw-canvas-edit/components/render/draws/contextmenu-draw.ts +2 -1
  154. package/src/aldehyde/draw-canvas-edit/components/render/draws/graph-draw.ts +249 -249
  155. package/src/aldehyde/draw-canvas-edit/components/render/draws/link-draw.ts +1415 -1414
  156. package/src/aldehyde/draw-canvas-edit/components/render/draws/preview-draw.ts +274 -273
  157. package/src/aldehyde/draw-canvas-edit/components/render/draws/ref-line-draw.ts +71 -70
  158. package/src/aldehyde/draw-canvas-edit/components/render/draws/ruler-draw.ts +166 -165
  159. package/src/aldehyde/draw-canvas-edit/components/render/graphs/base-graph.ts +3 -3
  160. package/src/aldehyde/draw-canvas-edit/components/render/graphs/bezier.ts +5 -5
  161. package/src/aldehyde/draw-canvas-edit/components/render/graphs/circle.ts +4 -4
  162. package/src/aldehyde/draw-canvas-edit/components/render/graphs/curve.ts +5 -5
  163. package/src/aldehyde/draw-canvas-edit/components/render/graphs/line.ts +5 -5
  164. package/src/aldehyde/draw-canvas-edit/components/render/graphs/rect.ts +4 -4
  165. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-handlers.ts +7 -6
  166. package/src/aldehyde/draw-canvas-edit/components/render/handlers/drag-outside-handlers.ts +8 -3
  167. package/src/aldehyde/draw-canvas-edit/components/render/handlers/graph-handlers.ts +2 -1
  168. package/src/aldehyde/draw-canvas-edit/components/render/handlers/key-move-handlers.ts +5 -4
  169. package/src/aldehyde/draw-canvas-edit/components/render/handlers/link-handlers.ts +3 -2
  170. package/src/aldehyde/draw-canvas-edit/components/render/handlers/selection-handlers.ts +5 -4
  171. package/src/aldehyde/draw-canvas-edit/components/render/handlers/shutcut-handlers.ts +1 -0
  172. package/src/aldehyde/draw-canvas-edit/components/render/handlers/text-handlers.ts +1 -0
  173. package/src/aldehyde/draw-canvas-edit/components/render/handlers/zoom-handlers.ts +7 -6
  174. package/src/aldehyde/draw-canvas-edit/components/render/index.ts +48 -49
  175. package/src/aldehyde/draw-canvas-edit/components/render/tools/align-tool.ts +4 -4
  176. package/src/aldehyde/draw-canvas-edit/components/render/tools/asset-tool.ts +1 -1
  177. package/src/aldehyde/draw-canvas-edit/components/render/tools/copy-tool.ts +4 -4
  178. package/src/aldehyde/draw-canvas-edit/components/render/tools/import-export-tool.ts +7 -7
  179. package/src/aldehyde/draw-canvas-edit/components/render/tools/link-tool.ts +9 -9
  180. package/src/aldehyde/draw-canvas-edit/components/render/tools/position-tool.ts +18 -18
  181. package/src/aldehyde/draw-canvas-edit/components/render/tools/selection-tool.ts +2 -2
  182. package/src/aldehyde/draw-canvas-edit/components/render/tools/z-index-tool.ts +16 -16
  183. package/src/aldehyde/lowcode-components/bar-chart/index.tsx +5 -1
  184. package/src/aldehyde/lowcode-components/column-3d-chart/index.tsx +5 -1
  185. package/src/aldehyde/lowcode-components/column-chart/index.tsx +7 -3
  186. package/src/aldehyde/lowcode-components/line-bar-chart/index.tsx +5 -1
  187. package/src/aldehyde/lowcode-components/line-chart/index.tsx +9 -5
  188. package/src/aldehyde/lowcode-components/pie-chart/index.tsx +5 -1
  189. package/src/aldehyde/module/dtmpl-edit-card.tsx +47 -7
  190. package/src/aldehyde/module/dtmpl-edit-page.tsx +47 -8
  191. package/src/aldehyde/table/act-table.tsx +31 -25
  192. package/src/aldehyde/table/page-chart.less +10 -0
  193. package/src/aldehyde/table/page-chart.tsx +192 -0
  194. package/src/aldehyde/table/row-table.tsx +23 -0
  195. package/src/aldehyde/tmpl/interface.tsx +13 -1
  196. package/src/aldehyde/tmpl/tmpl-config-analysis.tsx +1 -1
@@ -1,273 +1,274 @@
1
- import Konva from 'konva';
2
- import { BaseDraw, Draw, Render, MouseButton } from '../types';
3
- import { LinkDraw } from '../draws';
4
-
5
- // 编辑页预览框
6
-
7
- export interface PreviewDrawOption {
8
- size: number
9
- }
10
-
11
- export class PreviewDraw extends BaseDraw implements Draw {
12
- option: PreviewDrawOption;
13
-
14
- state: { [index: string]: any } = {
15
- moving: false // 正在预览框内部拖动
16
- }
17
-
18
- constructor(render: Render, layer: Konva.Layer, option: PreviewDrawOption) {
19
- super(render, layer);
20
- this.option = option;
21
- }
22
-
23
- override draw() {
24
- this.clear();
25
- const stageState = this.render.getStageState();
26
- const { pageWidth, pageHeight, background, backgroundImg } = this.render.getPageSettings(); // 画布尺寸
27
- const previewMargin = 20; // 预览框的外边距
28
- // 预览框 group
29
- const group = new Konva.Group({
30
- name: 'preview',
31
- scale: {
32
- x: this.render.toStageValue(this.option.size),
33
- y: this.render.toStageValue(this.option.size)
34
- },
35
- width: stageState.width,
36
- height: stageState.height
37
- });
38
- const main = this.render.stage.find('#main')[0] as Konva.Layer;
39
- const cover = this.render.stage.find('#cover')[0] as Konva.Layer;
40
- // 提取节点
41
- const nodes = [
42
- ...main.getChildren((node) => !this.render.ignore(node)),
43
- // 补充连线
44
- ...cover.getChildren((node) => node.name() === LinkDraw.name)
45
- ]
46
- // 计算节点占用的区域
47
- let minX = 0;
48
- let maxX = group.width();
49
- let minY = 0;
50
- let maxY = group.height();
51
-
52
- for (const node of nodes) {
53
- const { x, y, width, height } = ((rect) => ({
54
- x: this.render.toStageValue(rect.x - stageState.x),
55
- y: this.render.toStageValue(rect.y - stageState.y),
56
- width: this.render.toStageValue(rect.width),
57
- height: this.render.toStageValue(rect.height)
58
- }))(node.getClientRect());
59
- if (x < minX) {
60
- minX = x;
61
- }
62
- if (x + width > maxX) {
63
- maxX = x + width;
64
- }
65
- if (y < minY) {
66
- minY = y;
67
- }
68
- if (y + height > maxY) {
69
- maxY = y + height;
70
- }
71
- }
72
-
73
- // 根据占用的区域调整预览框的大小
74
- group.setAttrs({
75
- x: this.render.toStageValue(
76
- -stageState.x +
77
- this.render.rulerSize +
78
- stageState.width -
79
- maxX * this.option.size -
80
- previewMargin
81
- ),
82
- y: this.render.toStageValue(
83
- -stageState.y +
84
- this.render.rulerSize +
85
- stageState.height -
86
- maxY * this.option.size -
87
- previewMargin
88
- ),
89
- width: maxX - minX,
90
- height: maxY - minY
91
- });
92
-
93
- // 预览框背景
94
- const bg = new Konva.Rect({
95
- name: this.constructor.name,
96
- x: minX,
97
- y: minY,
98
- width: group.width(),
99
- height: group.height(),
100
- stroke: '#666',
101
- strokeWidth: this.render.toStageValue(1),
102
- });
103
-
104
- // 根据预览框内部拖动,同步画布的移动
105
- const move = () => {
106
- this.state.moving = true;
107
- const pos = this.render.stage.getPointerPosition();
108
- if (pos) {
109
- const pWidth = group.width() * this.option.size;
110
- const pHeight = group.height() * this.option.size;
111
- const pOffsetX = pWidth - (stageState.width - pos.x - previewMargin);
112
- const pOffsetY = pHeight - (stageState.height - pos.y - previewMargin);
113
- const offsetX = pOffsetX / this.option.size;
114
- const offsetY = pOffsetY / this.option.size;
115
- // 点击预览框,点击位置作为画布中心
116
- this.render.positionTool.updateCenter(
117
- offsetX - this.render.rulerSize / this.option.size,
118
- offsetY - this.render.rulerSize / this.option.size
119
- );
120
- }
121
- }
122
- // 预览框内拖动事件处理
123
- bg.on('mousedown', (e) => {
124
- if (e.evt.button === MouseButton.左键) {
125
- move();
126
- }
127
- e.evt.preventDefault();
128
- });
129
- bg.on('mousemove', (e) => {
130
- if (this.state.moving) {
131
- move();
132
- }
133
- e.evt.preventDefault();
134
- })
135
- bg.on('mouseup', () => {
136
- this.state.moving = false;
137
- })
138
- group.add(bg);
139
- // 预览框 画布
140
- const canvas = new Konva.Rect({
141
- name: this.constructor.name,
142
- x: 0,
143
- y: 0,
144
- width: this.render.toStageValue(pageWidth * stageState.scale),
145
- height: this.render.toStageValue(pageHeight * stageState.scale),
146
- stroke: 'rgba(255,0,0,0.2)',
147
- strokeWidth: 1 / this.option.size,
148
- listening: false,
149
- fill: !background ? "#ffffff" : background
150
- });
151
-
152
- group.add(canvas);
153
-
154
- // // 处理背景图(异步)
155
- // if (backgroundImg?.src) {
156
- // const img = new Image();
157
- // img.crossOrigin = 'anonymous'; // 如果图片在 CDN 上,必须加上此属性防止跨域问题
158
- // img.src = backgroundImg.src;
159
- // img.onload = () => {
160
- // canvas.fill(null);
161
- // canvas.fillPatternImage(img);
162
- // canvas.fillPatternRepeat('no-repeat');
163
- // // 让图片自适应填满矩形(等比缩放裁剪效果)
164
- // const scaleX = pageWidth / img.width;
165
- // const scaleY = pageHeight / img.height;
166
- // canvas.fillPatternScaleX(scaleX);
167
- // canvas.fillPatternScaleY(scaleY);
168
- // };
169
- // }
170
-
171
- // 复制提取的节点,用作预览
172
- for (const node of nodes) {
173
- const copy = node.clone();
174
- // 消除连接线选中状态
175
- copy.find('.link-line').forEach((link: Konva.Line) => {
176
- const dash = link.dash();
177
- if (dash && dash.length === 2 && dash.every((o) => o === 1)) {
178
- link.dash([]);
179
- }
180
- });
181
- // 不显示 调整点
182
- copy.find('.link-point').map((o: Konva.Shape) => o.destroy());
183
- copy.find('.link-manual-point').map((o: Konva.Shape) => o.destroy());
184
- // 不可交互
185
- copy.listening(false);
186
- // 设置名称用于 ignore
187
- copy.name(this.constructor.name);
188
- group.add(copy);
189
- }
190
- // 放大的时候,显示当前可视区域提示框
191
- if (stageState.scale > 1) {
192
- // 画布可视区域起点坐标(左上)
193
- let x1 = this.render.toStageValue(-stageState.x + this.render.rulerSize);
194
- let y1 = this.render.toStageValue(-stageState.y + this.render.rulerSize);
195
- // 限制可视区域提示框不能超出预览区域
196
- x1 = x1 > minX ? x1 : minX;
197
- x1 = x1 < maxX ? x1 : maxX;
198
- y1 = y1 > minY ? y1 : minY;
199
- y1 = y1 < maxY ? y1 : maxY;
200
- // 画布可视区域起点坐标(右下)
201
- let x2 =
202
- this.render.toStageValue(-stageState.x + this.render.rulerSize) +
203
- this.render.toStageValue(stageState.width);
204
- let y2 =
205
- this.render.toStageValue(-stageState.y + this.render.rulerSize) +
206
- this.render.toStageValue(stageState.height);
207
- // 限制可视区域提示框不能超出预览区域
208
- x2 = x2 > minX ? x2 : minX;
209
- x2 = x2 < maxX ? x2 : maxX;
210
- y2 = y2 > minY ? y2 : minY;
211
- y2 = y2 < maxY ? y2 : maxY;
212
- // 可视区域提示框 连线坐标序列
213
- let points: Array<[x: number, y: number]> = [];
214
-
215
- // 可视区域提示框“超出”预览区域影响的“边”不做绘制
216
- // "超出"(上面实际处理:把超过的坐标设置为上/下线,判断方式如[以正则表达式表示]:(x|y)(1|2) === (min|max)(X|Y))
217
- // 简单直接穷举 9 种情况:
218
- // 不超出
219
- // 上超出 下超出
220
- // 左超出 右超出
221
- // 左上超出 右上超出
222
- // 左下超出 右下超出
223
-
224
- // 不超出,绘制完整矩形
225
- if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
226
- points = [[x1, y1], [x2, y1], [x2, y2], [x1, y2], [x1, y1]];
227
- }
228
- // 上超出,不绘制“上边”
229
- if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
230
- points = [[x2, y1], [x2, y2], [x1, y2], [x1, y1]];
231
- }
232
- // 下超出,不绘制“下边”
233
- if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
234
- points = [[x1, y2], [x1, y1], [x2, y1], [x2, y2]];
235
- }
236
- // 左超出,不绘制“左边”
237
- if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
238
- points = [[x1, y1], [x2, y1], [x2, y2], [x1, y2]];
239
- }
240
- // 右超出,不绘制“右边”
241
- if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
242
- points = [[x2, y1], [x1, y1], [x1, y2], [x2, y2]];
243
- }
244
- // 左上超出,不绘制“上边”、“左边”
245
- if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
246
- points = [[x2, y1], [x2, y2], [x1, y2]];
247
- }
248
- // 右上超出,不绘制“上边”、“右边”
249
- if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
250
- points = [[x2, y2], [x1, y2], [x1, y1]];
251
- }
252
- // 左下超出,不绘制“下边”、“左边”
253
- if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
254
- points = [[x1, y1], [x2, y1], [x2, y2]];
255
- }
256
- // 右下超出,不绘制“下边”、“右边”
257
- if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
258
- points = [[x2, y1], [x1, y1], [x1, y2]];
259
- }
260
- // 可视区域提示框
261
- group.add(
262
- new Konva.Line({
263
- name: this.constructor.name,
264
- points: points.flat(),
265
- stroke: 'blue',
266
- strokeWidth: 1 / this.option.size,
267
- listening: false
268
- })
269
- );
270
- }
271
- this.group.add(group);
272
- }
273
- }
1
+ import Konva from 'konva';
2
+ import { BaseDraw, Draw, Render, MouseButton } from '../types';
3
+ import { LinkDraw } from '../draws';
4
+
5
+ // 编辑页预览框
6
+
7
+ export interface PreviewDrawOption {
8
+ size: number
9
+ }
10
+
11
+ export class PreviewDraw extends BaseDraw implements Draw {
12
+ static readonly NAME = 'PreviewDraw';
13
+ option: PreviewDrawOption;
14
+
15
+ state: { [index: string]: any } = {
16
+ moving: false // 正在预览框内部拖动
17
+ }
18
+
19
+ constructor(render: Render, layer: Konva.Layer, option: PreviewDrawOption) {
20
+ super(render, layer);
21
+ this.option = option;
22
+ }
23
+
24
+ override draw() {
25
+ this.clear();
26
+ const stageState = this.render.getStageState();
27
+ const { pageWidth, pageHeight, background, backgroundImg } = this.render.getPageSettings(); // 画布尺寸
28
+ const previewMargin = 20; // 预览框的外边距
29
+ // 预览框 group
30
+ const group = new Konva.Group({
31
+ name: 'preview',
32
+ scale: {
33
+ x: this.render.toStageValue(this.option.size),
34
+ y: this.render.toStageValue(this.option.size)
35
+ },
36
+ width: stageState.width,
37
+ height: stageState.height
38
+ });
39
+ const main = this.render.stage.find('#main')[0] as Konva.Layer;
40
+ const cover = this.render.stage.find('#cover')[0] as Konva.Layer;
41
+ // 提取节点
42
+ const nodes = [
43
+ ...main.getChildren((node) => !this.render.ignore(node)),
44
+ // 补充连线
45
+ ...cover.getChildren((node) => node.name() === LinkDraw.NAME)
46
+ ]
47
+ // 计算节点占用的区域
48
+ let minX = 0;
49
+ let maxX = group.width();
50
+ let minY = 0;
51
+ let maxY = group.height();
52
+
53
+ for (const node of nodes) {
54
+ const { x, y, width, height } = ((rect) => ({
55
+ x: this.render.toStageValue(rect.x - stageState.x),
56
+ y: this.render.toStageValue(rect.y - stageState.y),
57
+ width: this.render.toStageValue(rect.width),
58
+ height: this.render.toStageValue(rect.height)
59
+ }))(node.getClientRect());
60
+ if (x < minX) {
61
+ minX = x;
62
+ }
63
+ if (x + width > maxX) {
64
+ maxX = x + width;
65
+ }
66
+ if (y < minY) {
67
+ minY = y;
68
+ }
69
+ if (y + height > maxY) {
70
+ maxY = y + height;
71
+ }
72
+ }
73
+
74
+ // 根据占用的区域调整预览框的大小
75
+ group.setAttrs({
76
+ x: this.render.toStageValue(
77
+ -stageState.x +
78
+ this.render.rulerSize +
79
+ stageState.width -
80
+ maxX * this.option.size -
81
+ previewMargin
82
+ ),
83
+ y: this.render.toStageValue(
84
+ -stageState.y +
85
+ this.render.rulerSize +
86
+ stageState.height -
87
+ maxY * this.option.size -
88
+ previewMargin
89
+ ),
90
+ width: maxX - minX,
91
+ height: maxY - minY
92
+ });
93
+
94
+ // 预览框背景
95
+ const bg = new Konva.Rect({
96
+ name: PreviewDraw.NAME,
97
+ x: minX,
98
+ y: minY,
99
+ width: group.width(),
100
+ height: group.height(),
101
+ stroke: '#666',
102
+ strokeWidth: this.render.toStageValue(1),
103
+ });
104
+
105
+ // 根据预览框内部拖动,同步画布的移动
106
+ const move = () => {
107
+ this.state.moving = true;
108
+ const pos = this.render.stage.getPointerPosition();
109
+ if (pos) {
110
+ const pWidth = group.width() * this.option.size;
111
+ const pHeight = group.height() * this.option.size;
112
+ const pOffsetX = pWidth - (stageState.width - pos.x - previewMargin);
113
+ const pOffsetY = pHeight - (stageState.height - pos.y - previewMargin);
114
+ const offsetX = pOffsetX / this.option.size;
115
+ const offsetY = pOffsetY / this.option.size;
116
+ // 点击预览框,点击位置作为画布中心
117
+ this.render.positionTool.updateCenter(
118
+ offsetX - this.render.rulerSize / this.option.size,
119
+ offsetY - this.render.rulerSize / this.option.size
120
+ );
121
+ }
122
+ }
123
+ // 预览框内拖动事件处理
124
+ bg.on('mousedown', (e) => {
125
+ if (e.evt.button === MouseButton.左键) {
126
+ move();
127
+ }
128
+ e.evt.preventDefault();
129
+ });
130
+ bg.on('mousemove', (e) => {
131
+ if (this.state.moving) {
132
+ move();
133
+ }
134
+ e.evt.preventDefault();
135
+ })
136
+ bg.on('mouseup', () => {
137
+ this.state.moving = false;
138
+ })
139
+ group.add(bg);
140
+ // 预览框 画布
141
+ const canvas = new Konva.Rect({
142
+ name: PreviewDraw.NAME,
143
+ x: 0,
144
+ y: 0,
145
+ width: this.render.toStageValue(pageWidth * stageState.scale),
146
+ height: this.render.toStageValue(pageHeight * stageState.scale),
147
+ stroke: 'rgba(255,0,0,0.2)',
148
+ strokeWidth: 1 / this.option.size,
149
+ listening: false,
150
+ fill: !background ? "#ffffff" : background
151
+ });
152
+
153
+ group.add(canvas);
154
+
155
+ // // 处理背景图(异步)
156
+ // if (backgroundImg?.src) {
157
+ // const img = new Image();
158
+ // img.crossOrigin = 'anonymous'; // 如果图片在 CDN 上,必须加上此属性防止跨域问题
159
+ // img.src = backgroundImg.src;
160
+ // img.onload = () => {
161
+ // canvas.fill(null);
162
+ // canvas.fillPatternImage(img);
163
+ // canvas.fillPatternRepeat('no-repeat');
164
+ // // 让图片自适应填满矩形(等比缩放裁剪效果)
165
+ // const scaleX = pageWidth / img.width;
166
+ // const scaleY = pageHeight / img.height;
167
+ // canvas.fillPatternScaleX(scaleX);
168
+ // canvas.fillPatternScaleY(scaleY);
169
+ // };
170
+ // }
171
+
172
+ // 复制提取的节点,用作预览
173
+ for (const node of nodes) {
174
+ const copy = node.clone();
175
+ // 消除连接线选中状态
176
+ copy.find('.link-line').forEach((link: Konva.Line) => {
177
+ const dash = link.dash();
178
+ if (dash && dash.length === 2 && dash.every((o) => o === 1)) {
179
+ link.dash([]);
180
+ }
181
+ });
182
+ // 不显示 调整点
183
+ copy.find('.link-point').map((o: Konva.Shape) => o.destroy());
184
+ copy.find('.link-manual-point').map((o: Konva.Shape) => o.destroy());
185
+ // 不可交互
186
+ copy.listening(false);
187
+ // 设置名称用于 ignore
188
+ copy.name(PreviewDraw.NAME);
189
+ group.add(copy);
190
+ }
191
+ // 放大的时候,显示当前可视区域提示框
192
+ if (stageState.scale > 1) {
193
+ // 画布可视区域起点坐标(左上)
194
+ let x1 = this.render.toStageValue(-stageState.x + this.render.rulerSize);
195
+ let y1 = this.render.toStageValue(-stageState.y + this.render.rulerSize);
196
+ // 限制可视区域提示框不能超出预览区域
197
+ x1 = x1 > minX ? x1 : minX;
198
+ x1 = x1 < maxX ? x1 : maxX;
199
+ y1 = y1 > minY ? y1 : minY;
200
+ y1 = y1 < maxY ? y1 : maxY;
201
+ // 画布可视区域起点坐标(右下)
202
+ let x2 =
203
+ this.render.toStageValue(-stageState.x + this.render.rulerSize) +
204
+ this.render.toStageValue(stageState.width);
205
+ let y2 =
206
+ this.render.toStageValue(-stageState.y + this.render.rulerSize) +
207
+ this.render.toStageValue(stageState.height);
208
+ // 限制可视区域提示框不能超出预览区域
209
+ x2 = x2 > minX ? x2 : minX;
210
+ x2 = x2 < maxX ? x2 : maxX;
211
+ y2 = y2 > minY ? y2 : minY;
212
+ y2 = y2 < maxY ? y2 : maxY;
213
+ // 可视区域提示框 连线坐标序列
214
+ let points: Array<[x: number, y: number]> = [];
215
+
216
+ // 可视区域提示框“超出”预览区域影响的“边”不做绘制
217
+ // "超出"(上面实际处理:把超过的坐标设置为上/下线,判断方式如[以正则表达式表示]:(x|y)(1|2) === (min|max)(X|Y))
218
+ // 简单直接穷举 9 种情况:
219
+ // 不超出
220
+ // 上超出 下超出
221
+ // 左超出 右超出
222
+ // 左上超出 右上超出
223
+ // 左下超出 右下超出
224
+
225
+ // 不超出,绘制完整矩形
226
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
227
+ points = [[x1, y1], [x2, y1], [x2, y2], [x1, y2], [x1, y1]];
228
+ }
229
+ // 上超出,不绘制“上边”
230
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
231
+ points = [[x2, y1], [x2, y2], [x1, y2], [x1, y1]];
232
+ }
233
+ // 下超出,不绘制“下边”
234
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
235
+ points = [[x1, y2], [x1, y1], [x2, y1], [x2, y2]];
236
+ }
237
+ // 左超出,不绘制“左边”
238
+ if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
239
+ points = [[x1, y1], [x2, y1], [x2, y2], [x1, y2]];
240
+ }
241
+ // 右超出,不绘制“右边”
242
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 > minY && y1 < maxY && y2 > minY && y2 < maxY) {
243
+ points = [[x2, y1], [x1, y1], [x1, y2], [x2, y2]];
244
+ }
245
+ // 左上超出,不绘制“上边”、“左边”
246
+ if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
247
+ points = [[x2, y1], [x2, y2], [x1, y2]];
248
+ }
249
+ // 右上超出,不绘制“上边”、“右边”
250
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 === minY && y1 < maxY && y2 > minY && y2 < maxY) {
251
+ points = [[x2, y2], [x1, y2], [x1, y1]];
252
+ }
253
+ // 左下超出,不绘制“下边”、“左边”
254
+ if (x1 === minX && x1 < maxX && x2 > minX && x2 < maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
255
+ points = [[x1, y1], [x2, y1], [x2, y2]];
256
+ }
257
+ // 右下超出,不绘制“下边”、“右边”
258
+ if (x1 > minX && x1 < maxX && x2 > minX && x2 === maxX && y1 > minY && y1 < maxY && y2 > minY && y2 === maxY) {
259
+ points = [[x2, y1], [x1, y1], [x1, y2]];
260
+ }
261
+ // 可视区域提示框
262
+ group.add(
263
+ new Konva.Line({
264
+ name: PreviewDraw.NAME,
265
+ points: points.flat(),
266
+ stroke: 'blue',
267
+ strokeWidth: 1 / this.option.size,
268
+ listening: false
269
+ })
270
+ );
271
+ }
272
+ this.group.add(group);
273
+ }
274
+ }