cnhis-design-vue 2.1.34 → 2.1.35

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 (112) hide show
  1. package/CHANGELOG.md +28 -9
  2. package/es/affix/index.js +8 -8
  3. package/es/age/index.js +10 -10
  4. package/es/alert/index.js +8 -8
  5. package/es/anchor/index.js +8 -8
  6. package/es/auto-complete/index.js +8 -8
  7. package/es/avatar/index.js +8 -8
  8. package/es/back-top/index.js +8 -8
  9. package/es/badge/index.js +8 -8
  10. package/es/base/index.js +8 -8
  11. package/es/big-table/index.js +86 -86
  12. package/es/big-table/style.css +1 -1
  13. package/es/breadcrumb/index.js +8 -8
  14. package/es/button/index.js +22 -22
  15. package/es/calendar/index.js +8 -8
  16. package/es/captcha/index.js +3 -3
  17. package/es/card/index.js +8 -8
  18. package/es/carousel/index.js +8 -8
  19. package/es/cascader/index.js +8 -8
  20. package/es/checkbox/index.js +9 -9
  21. package/es/col/index.js +8 -8
  22. package/es/collapse/index.js +8 -8
  23. package/es/color-picker/index.js +1 -1
  24. package/es/comment/index.js +8 -8
  25. package/es/config-provider/index.js +8 -8
  26. package/es/date-picker/index.js +8 -8
  27. package/es/descriptions/index.js +8 -8
  28. package/es/divider/index.js +8 -8
  29. package/es/drag-layout/index.js +3 -3
  30. package/es/drawer/index.js +8 -8
  31. package/es/dropdown/index.js +8 -8
  32. package/es/editor/index.js +1 -1
  33. package/es/empty/index.js +8 -8
  34. package/es/fabric-chart/index.js +545 -2355
  35. package/es/fabric-chart/style.css +1 -1
  36. package/es/form/index.js +8 -8
  37. package/es/form-model/index.js +8 -8
  38. package/es/form-table/index.js +62 -62
  39. package/es/index/index.js +1117 -2909
  40. package/es/index/style.css +1 -1
  41. package/es/input/index.js +9 -9
  42. package/es/input-number/index.js +8 -8
  43. package/es/layout/index.js +8 -8
  44. package/es/list/index.js +8 -8
  45. package/es/locale-provider/index.js +8 -8
  46. package/es/map/index.js +9 -9
  47. package/es/mentions/index.js +8 -8
  48. package/es/menu/index.js +8 -8
  49. package/es/message/index.js +8 -8
  50. package/es/multi-chat/index.js +75 -75
  51. package/es/multi-chat-client/index.js +69 -69
  52. package/es/multi-chat-history/index.js +4 -4
  53. package/es/multi-chat-record/index.js +14 -14
  54. package/es/multi-chat-setting/index.js +22 -22
  55. package/es/multi-chat-sip/index.js +1 -1
  56. package/es/notification/index.js +8 -8
  57. package/es/page-header/index.js +8 -8
  58. package/es/pagination/index.js +8 -8
  59. package/es/popconfirm/index.js +8 -8
  60. package/es/popover/index.js +8 -8
  61. package/es/progress/index.js +8 -8
  62. package/es/radio/index.js +9 -9
  63. package/es/rate/index.js +8 -8
  64. package/es/result/index.js +8 -8
  65. package/es/row/index.js +8 -8
  66. package/es/scale-view/index.js +33 -33
  67. package/es/select/index.js +11 -11
  68. package/es/select-label/index.js +11 -11
  69. package/es/select-person/index.js +2 -2
  70. package/es/shortcut-setter/index.js +10 -10
  71. package/es/skeleton/index.js +8 -8
  72. package/es/slider/index.js +8 -8
  73. package/es/space/index.js +8 -8
  74. package/es/spin/index.js +8 -8
  75. package/es/statistic/index.js +8 -8
  76. package/es/steps/index.js +8 -8
  77. package/es/switch/index.js +8 -8
  78. package/es/table-filter/index.js +84 -73
  79. package/es/table-filter/style.css +1 -1
  80. package/es/tabs/index.js +8 -8
  81. package/es/tag/index.js +9 -9
  82. package/es/time-picker/index.js +8 -8
  83. package/es/timeline/index.js +8 -8
  84. package/es/tooltip/index.js +8 -8
  85. package/es/transfer/index.js +8 -8
  86. package/es/tree/index.js +8 -8
  87. package/es/tree-select/index.js +8 -8
  88. package/es/upload/index.js +8 -8
  89. package/es/verification-code/index.js +2 -2
  90. package/lib/cui.common.js +911 -2767
  91. package/lib/cui.umd.js +911 -2767
  92. package/lib/cui.umd.min.js +29 -29
  93. package/package.json +2 -1
  94. package/packages/big-table/src/components/AutoLayoutButton.vue +3 -3
  95. package/packages/fabric-chart/src/FabricChart.vue +0 -17
  96. package/packages/fabric-chart/src/FabricGrid.vue +3 -10
  97. package/packages/fabric-chart/src/components/TimeScaleValue.vue +10 -8
  98. package/packages/fabric-chart/src/const/defaultVaule.js +59 -59
  99. package/packages/fabric-chart/src/fabric-chart/FabricLines.vue +2 -22
  100. package/packages/fabric-chart/src/fabric-chart/FabricPolylines.vue +41 -34
  101. package/packages/fabric-chart/src/fabric-chart/FabricScaleValue.vue +5 -6
  102. package/packages/fabric-chart/src/fabric-chart/FabricTextGroup.vue +21 -16
  103. package/packages/fabric-chart/src/mixins/draw.js +2 -1
  104. package/packages/fabric-chart/src/mixins/fabricCommon.js +14 -4
  105. package/packages/scale-view/scaleView.vue +2010 -2010
  106. package/packages/table-filter/src/base-search-com/BaseSearch.vue +9 -0
  107. package/packages/fabric-chart/src/fabric-chart2/FabricBottom.vue +0 -108
  108. package/packages/fabric-chart/src/fabric-chart2/FabricCanvas.vue +0 -181
  109. package/packages/fabric-chart/src/fabric-chart2/FabricCenter.vue +0 -612
  110. package/packages/fabric-chart/src/fabric-chart2/FabricLeft.vue +0 -104
  111. package/packages/fabric-chart/src/fabric-chart2/FabricRight.vue +0 -112
  112. package/packages/fabric-chart/src/fabric-chart2/FabricTop.vue +0 -172
@@ -1,612 +0,0 @@
1
- <template>
2
- <div class="poly-line">
3
- <MouseRightClick v-if="isRightVisible" :getContainer="getContainer" :nodeList="rightClickNode" :rightPos="rightPos" @nodeClick="handleRightClick" @closeRight="isRightVisible = false" />
4
-
5
- <DropPopup v-if="isDropVisible" :val="dropVal" :dropPos="dropPos" />
6
- </div>
7
- </template>
8
- <script>
9
- import fabricCommon from '../mixins/fabricCommon';
10
- import draw from '../mixins/draw';
11
- import eventCommon from '../mixins/eventCommon';
12
- import MouseRightClick from '../components/MouseRightClick';
13
- import DropPopup from '../components/DropPopup';
14
- import defaultVaule from '../const/defaultVaule';
15
-
16
- const rightClickNode = [
17
- { name: '新增节点', type: 'add' },
18
- { name: '删除节点', type: 'delete' }
19
- ];
20
- export default {
21
- name: 'fabric-center2',
22
- mixins: [fabricCommon, draw, eventCommon],
23
- props: {
24
- other: {
25
- type: Object,
26
- default: () => {}
27
- },
28
- polyline: {
29
- type: Array,
30
- required: true
31
- }
32
- },
33
- components: {
34
- MouseRightClick,
35
- DropPopup
36
- },
37
- data() {
38
- return {
39
- polylineList: [],
40
- isDropVisible: false,
41
- dropVal: {},
42
- dropPos: { clientX: 0, clientY: 0 },
43
- isRightVisible: false,
44
- rightPos: { clientX: 0, clientY: 0 },
45
- rightClickNode: [],
46
- activeEvent: null, // 当前可右键活动的对象
47
- };
48
- },
49
- watch: {
50
- polyline: {
51
- handler(value) {
52
- if (value) {
53
- this.repaintPolyline();
54
- }
55
- },
56
- deep: true
57
- },
58
- polylineList(value) {
59
- if (value) {
60
- this.polylineList.forEach((polylineType, index) => {
61
- this.createPolyline(polylineType, polylineType.type);
62
- });
63
- }
64
- }
65
- },
66
- created() {},
67
- mounted() {
68
- this.$nextTick(() => {
69
- this.init();
70
- });
71
- },
72
- computed: {
73
- eventStyle() {
74
- return this.propItems.eventStyle;
75
- }
76
- },
77
- methods: {
78
- init() {
79
- this.drawOther(this.other);
80
- this.eventStyle.evented && this.createEvent();
81
- this.polylineList = JSON.parse(JSON.stringify(this.polyline));
82
- },
83
- getContainer() {
84
- return this.$el;
85
- },
86
- createEvent() {
87
- this.canvas.on('mouse:up', event => {
88
- if (event.button === 3) {
89
- const { x, y } = event.pointer;
90
- const { originX, originY, endX, endY } = this.$propItems();
91
- if (!(x < originX || x > endX || y < originY || y > endY)) {
92
- this.activeEvent = event;
93
- document.querySelector('.upper-canvas').addEventListener('contextmenu', this.addEventListenerContextmenu, true);
94
- }
95
- }
96
- });
97
- },
98
- createPolyline(polylineType, type) {
99
- polylineType.dataList.forEach((item, index) => {
100
- this.drawPolyline(item, index, polylineType, type);
101
- });
102
- const data = this.getShadowData(polylineType, type);
103
- data?.length && this.drawShadow(data, polylineType.shadowStyle);
104
- },
105
- // 画出阴影线段
106
- drawShadow(data, shadowStyle) {
107
- const { canvasHeight } = this.propItems;
108
- const lines = [];
109
- data.forEach(v => {
110
- const line1 = this.computeShadow(v.line1, shadowStyle.moveMode);
111
- const line2 = this.computeShadow(v.line2, shadowStyle.moveMode);
112
- const maxLine = line1.length >= line2.length ? line1 : line2;
113
- const minLine = line1.length < line2.length ? line1 : line2;
114
- // 如果存在两个数组长度不相等,则节点多的数组多余节点的阴影线段只存在节点多的线段组上,而没有与长度小的线段组相交
115
- let i = 0;
116
- maxLine.forEach((k, j) => {
117
- if (minLine[j]) {
118
- const line = this.drawLine([k.x, canvasHeight - k.y, minLine[j].x, canvasHeight - minLine[j].y], {
119
- ...defaultVaule.style,
120
- ...shadowStyle
121
- });
122
- lines.push(line);
123
- } else {
124
- if ( i % 2 === 0 && maxLine[j + 1]) {
125
- const line = this.drawLine([k.x, canvasHeight - k.y, maxLine[j + 1].x, canvasHeight - maxLine[j + 1].y], {
126
- ...defaultVaule.style,
127
- ...shadowStyle
128
- });
129
- lines.push(line);
130
- }
131
- i++;
132
- }
133
- });
134
- });
135
- this.canvas.add(...lines);
136
- this.canvas.renderAll();
137
- },
138
- /**
139
- * @description: 计算阴影线段坐标数组
140
- * @param {*} lineGroup
141
- * @param {*} moveMode
142
- * @return {*}
143
- */
144
- computeShadow(lineGroup, moveMode) {
145
- const { canvasWidth } = this.propItems;
146
- // 结果坐标集合
147
- let resultArr = [];
148
- if (lineGroup.length < 2) return;
149
- const beginPoint = lineGroup[0];
150
- const endPoint = lineGroup[lineGroup.length - 1];
151
- const b = beginPoint.y + beginPoint.x; // y = b - x;(斜率k的值为-1)
152
- // const count = Math.round((endPoint.x - beginPoint.x) / moveMode);
153
- const count = Math.round(canvasWidth / moveMode);
154
- for (let i = 0; i < count; i++) {
155
- for (let j = 0; j < lineGroup.length; j++) {
156
- if (lineGroup[j + 1]) {
157
- const point1 = lineGroup[j];
158
- const point2 = lineGroup[j + 1];
159
- const point11 = { x: 0, y: b + moveMode * i };
160
- const point22 = { x: endPoint.x, y: b + moveMode * i - endPoint.x };
161
- const intersectPoint = this.getIntersectPoint(point1, point2, point11, point22);
162
- intersectPoint && resultArr.push(intersectPoint);
163
- }
164
- }
165
- }
166
- return resultArr;
167
- },
168
- // 获取两个线段相交的点的坐标,ab一个线段,cd一个线段
169
- getIntersectPoint(a, b, c, d) {
170
- // 三角形abc 面积的2倍
171
- const area_abc = (a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x);
172
- // 三角形abd 面积的2倍
173
- const area_abd = (a.x - d.x) * (b.y - d.y) - (a.y - d.y) * (b.x - d.x);
174
- // 面积符号相同则两点在线段同侧,不相交 (对点在线段上的情况,本例当作不相交处理);
175
- if (area_abc * area_abd >= 0) {
176
- return false;
177
- }
178
- // 三角形cda 面积的2倍
179
- const area_cda = (c.x - a.x) * (d.y - a.y) - (c.y - a.y) * (d.x - a.x);
180
- // 三角形cdb 面积的2倍
181
- // 注意: 这里有一个小优化.不需要再用公式计算面积,而是通过已知的三个面积加减得出.
182
- const area_cdb = area_cda + area_abc - area_abd;
183
- if (area_cda * area_cdb >= 0) {
184
- return false;
185
- }
186
- // 计算交点坐标
187
- const t = area_cda / (area_abd - area_abc);
188
- const dx = t * (b.x - a.x),
189
- dy = t * (b.y - a.y);
190
- return { x: a.x + dx, y: a.y + dy };
191
- },
192
- /**
193
- * @description: 获取阴影部分所有点的数组
194
- * @param {*} polylineType 折线数据,leftYScalevalue
195
- * @param {*} type 类型,呼吸还是心率等
196
- * @return {*} 返回一个数组,数组中每一个对象{line1, line2}即表示一块阴影,eg: [{line1, line2}, {line1, line2}]
197
- */
198
- getShadowData(polylineType, type) {
199
- // 说明,次方法待完善,存在阴影部分上下线段的节点个数不同的情况和时间不等值也不等的节点的情况(拖动节点后就会出现了。)
200
- const { dataList } = polylineType;
201
- const { canvasHeight } = this.propItems;
202
- const data = [];
203
- if (type === 'pulse' && dataList.length > 1) {
204
- dataList.forEach((v, i) => {
205
- if (i === 0) {
206
- let line1 = [];
207
- let line2 = [];
208
- const list = v.list.flat();
209
- const list2 = dataList[1].list.flat();
210
- list.forEach((k, j) => {
211
- if (k.time === list2[j].time && k.value !== list2[j].value) {
212
- line1.push({
213
- x: this.cumputedX(k.time),
214
- y: canvasHeight - this.cumputedY(polylineType, k.value, type)
215
- });
216
- line2.push({
217
- x: this.cumputedX(k.time),
218
- y: canvasHeight - this.cumputedY(polylineType, list2[j].value, type)
219
- });
220
- if (list[j - 1] && line1.length === 1) {
221
- const obj = {
222
- x: this.cumputedX(list[j - 1].time),
223
- y: canvasHeight - this.cumputedY(polylineType, list[j - 1].value, type)
224
- };
225
- line1.unshift(obj);
226
- line2.unshift(obj);
227
- }
228
- if (list[j + 1] && list[j + 1].time === list2[j + 1].time && list[j + 1].value === list2[j + 1].value) {
229
- const obj = {
230
- x: this.cumputedX(list[j + 1].time),
231
- y: canvasHeight - this.cumputedY(polylineType, list[j + 1].value, type)
232
- };
233
- line1.push(obj);
234
- line2.push(obj);
235
- }
236
- } else {
237
- line1.length && line2.length && data.push({ line1, line2 });
238
- line1 = [];
239
- line2 = [];
240
- }
241
- });
242
- }
243
- });
244
- }
245
- return data;
246
- },
247
- drawPolyline(polyline, polylineIndex, polylineType, type) {
248
- const { pointAttr } = polyline;
249
- this._iconClassName = polyline.type === 'img' && pointAttr.iconClassName ? pointAttr.iconClassName : '';
250
- const list = polyline.list;
251
- const pointList = [];
252
- let lineList = [];
253
- const otherList = [];
254
- const otherAsyncList = [];
255
- const { xScaleList, yCellHeight } = this.propItems;
256
- const minTime = Math.min(...xScaleList);
257
- const maxTime = Math.max(...xScaleList);
258
- list.forEach((v, i) => {
259
- // 当前点
260
- let points = null;
261
- if (v.time && v.value) {
262
- const x = this.cumputedX(v.time);
263
- const y = this.cumputedY(polylineType, v.value, type);
264
- const time = new Date(v.time).getTime();
265
- if (time >= minTime && time <= maxTime) points = [x, y];
266
- }
267
- // 下一个点
268
- const nextPoints = list[i + 1];
269
- let nextPoint = null;
270
- if (nextPoints?.time && nextPoints?.value) {
271
- const nextX = this.cumputedX(nextPoints.time);
272
- const nextY = this.cumputedY(polylineType, nextPoints.value, type);
273
- const nextTime = new Date(nextPoints.time).getTime();
274
- if (nextTime > minTime && nextTime <= maxTime) nextPoint = [nextX, nextY];
275
- }
276
-
277
- const pointOthers = { type, polylineIndex: polylineIndex, pointIndex: i, ...pointAttr };
278
-
279
- // 其他标志
280
- let coolLine, coolPoint, noRiseText, arrowGroup, verifiedText;
281
- if (points && type === 'centigrade') {
282
- // 体温不升
283
- if (v.noRise) {
284
- const { noRiseStyle } = polyline;
285
- // 文字形式
286
- if (v.noRise.text) {
287
- noRiseText = this.drawText(v.noRise.text.split('').join('\n'), points[0], points[1] + 5, { polylineIndex, pointIndex: i, originX: 'center', ...noRiseStyle });
288
- otherList.push(noRiseText);
289
- } else {
290
- // 下箭头形式
291
- const top = points[1] + yCellHeight * 2;
292
- const arrowLine = this.drawLine([...points, points[0], top], { polylineIndex: polylineIndex, lineIndex: i, ...polyline.lineAttr, stroke: noRiseStyle.fill });
293
- const arrow = this.drawText('v', points[0] + 0.5, top + 3, { polylineIndex, pointIndex: i, originX: 'center', originY: 'bottom', fontSize: 16, ...noRiseStyle }); // 加0.5会虚,不加箭头没有完全对称,top值同理
294
- arrowGroup = new this.fabric.Group([arrowLine, arrow], { ...defaultVaule.style, originX: 'center', originY: 'top' });
295
- otherList.push(arrowGroup);
296
- }
297
- }
298
- // 体温已核实
299
- if (v.verified) {
300
- const { verifiedStyle } = polyline;
301
- verifiedText = this.drawText('v', points[0], points[1] - 5, { polylineIndex, pointIndex: i, originX: 'center', originY: 'bottom', ...verifiedStyle });
302
- otherList.push(verifiedText);
303
- }
304
- // 物理降温
305
- if (v.cooling) {
306
- const { coolingStyle } = polyline;
307
- const coolingLineStyle = { ...polyline.lineAttr, stroke: coolingStyle.stroke, strokeDashArray: [3, 3] };
308
- const coolY = this.cumputedY(polylineType, v.cooling, type);
309
- coolLine = this.drawLine([...points, points[0], coolY], { polylineIndex: polylineIndex, lineIndex: i, ...coolingLineStyle });
310
- const otherObj = Object.assign({}, pointOthers, coolingStyle, { isCooling: true });
311
- const lineObj = { line1: coolLine, line2: null, line3: null, noRiseText, arrowGroup, verifiedText };
312
- coolPoint = this.drawPoint(points[0], coolY, lineObj, 'circle', otherObj);
313
- otherList.push(coolLine);
314
- otherAsyncList.push(coolPoint);
315
- }
316
- }
317
-
318
- let line;
319
- let point;
320
- let previousLine;
321
-
322
- line = points && nextPoint ? this.drawLine([...points, ...nextPoint], { polylineIndex: polylineIndex, lineIndex: i, ...polyline.lineAttr }) : null;
323
-
324
- previousLine = lineList[i - 1];
325
-
326
- if (previousLine) {
327
- const lineObj = { line1: previousLine, line2: line, line3: coolLine, noRiseText, arrowGroup, verifiedText };
328
- point = points && this.drawPoint(previousLine.get('x2'), previousLine.get('y2'), lineObj, polyline.type, pointOthers);
329
- } else {
330
- if (points) {
331
- const lineObj = { line1: null, line2: line, line3: coolLine, noRiseText, arrowGroup, verifiedText };
332
- point = this.drawPoint(...points, lineObj, polyline.type, pointOthers);
333
- }
334
- }
335
- lineList.push(line);
336
- point && pointList.push(point);
337
- });
338
-
339
- Promise.all(pointList).then(res => {
340
- lineList = lineList.filter(v => v);
341
- let prevPoint = null;
342
- res = res.filter(v => {
343
- if (v && prevPoint) {
344
- prevPoint.nextPoint = v; // 记录下一个点 id
345
- v.prevPoint = prevPoint;
346
- }
347
- prevPoint = v || prevPoint;
348
- return v;
349
- });
350
-
351
- Promise.all(otherAsyncList).then(r => {
352
- this.canvas.add(...lineList, ...res, ...otherList, ...r);
353
- this.canvas.requestRenderAll();
354
- });
355
- });
356
- },
357
- /**
358
- * 绘制折线点
359
- * @param {left, top} 折线点坐标
360
- * @param {lineObj} 与折线点关联的对象
361
- * @param {type} 折线点类型
362
- * @param {others} 参数 polylineIndex | pointIndex | ...polyline.pointAttr
363
- */
364
- async drawPoint(left, top, lineObj, type, others) {
365
- const pointId = `${others.type}_${others.polylineIndex}_${others.pointIndex}_polylinePoint_${new Date().getTime()}`;
366
- const ele = this._iconClassName && (await this.createImage(this._iconClassName, others));
367
- let point = await this.createPoint(type, {
368
- id: pointId,
369
- left: left,
370
- top: top,
371
- ele: ele || '',
372
- ...defaultVaule.pointStyle,
373
- ...others,
374
- ...this.propItems.eventStyle
375
- });
376
- point.hasControls = point.hasBorders = false;
377
- lineObj.line1 && (point.line1 = lineObj.line1);
378
- lineObj.line2 && (point.line2 = lineObj.line2);
379
- lineObj.line3 && (point.line3 = lineObj.line3);
380
- lineObj.noRiseText && (point.noRiseText = lineObj.noRiseText);
381
- lineObj.arrowGroup && (point.arrowGroup = lineObj.arrowGroup);
382
- lineObj.verifiedText && (point.verifiedText = lineObj.verifiedText);
383
- point.on('mouseover', () => {
384
- this.showDrapPopup(point);
385
- });
386
- point.on('mouseout', () => {
387
- this.isDropVisible = false;
388
- });
389
- // 折线点移动中 实时更新相关联的线的坐标
390
- point.on('moving', () => {
391
- this.pointMoveLimit(point);
392
- this.pointMoveUpdateLine(point);
393
- this.canvas.renderAll();
394
- this.showDrapPopup(point);
395
- });
396
- // 折线点停止拖拽后 更新polylineList中对应的坐标
397
- point.on('moved', () => {
398
- if (point && point.id.includes('_polylinePoint_')) {
399
- this.isDropVisible = false;
400
- const data = this.getValue(point);
401
- this.$emit('pointChange', data);
402
- }
403
- });
404
- return point;
405
- },
406
- showDrapPopup(point) {
407
- this.isDropVisible = true;
408
- this.dropPos = {
409
- left: point.left,
410
- top: point.top
411
- };
412
- const { value, title } = this.getValue(point);
413
- this.dropVal = {
414
- title,
415
- list: [
416
- {id: '11', name: '时间', value: value.time},
417
- {id: '22', name: '值', value: Math.round(value.value)},
418
- ],
419
- };
420
- },
421
- // 折线点移动时 setCoords()方法手动更新相关联的线坐标
422
- pointMoveUpdateLine(point) {
423
- if (point.line1) {
424
- point.line1.setCoords();
425
- point.line1.set({ x2: point.left, y2: point.top });
426
- }
427
- if (point.line2) {
428
- point.line2.setCoords();
429
- point.line2.set({ x1: point.left, y1: point.top });
430
- }
431
- if (point.line3) {
432
- point.line3.setCoords();
433
- point.line3.set({ x1: point.left, y1: point.top });
434
- }
435
- if (point.noRiseText) {
436
- point.noRiseText.setCoords();
437
- point.noRiseText.set({ left: point.left, top: point.top + 5 });
438
- }
439
- if (point.arrowGroup) {
440
- point.arrowGroup.setCoords();
441
- point.arrowGroup.set({ left: point.left, top: point.top });
442
- }
443
- if (point.verifiedText) {
444
- point.verifiedText.setCoords();
445
- point.verifiedText.set({ left: point.left, top: point.top - 5 });
446
- }
447
- },
448
- drawLine(lines, others) {
449
- const lineId = `${others.polylineIndex}_${others.pointIndex}_polylineLine_${new Date().getTime()}`;
450
- const line = new this.fabric.Line(lines, {
451
- id: lineId,
452
- hoverCursor: 'pointer',
453
- objectCaching: false,
454
- selectable: false,
455
- evented: false,
456
- ...others
457
- });
458
-
459
- return line;
460
- },
461
- drawText(value, left, top, others) {
462
- const id = `${others.polylineIndex}_${others.pointIndex}_polylineText_${new Date().getTime()}`;
463
- const text = new this.fabric.Text(String(value), {
464
- id,
465
- originX: others.originX || 'left',
466
- originY: others.originY || 'top',
467
- left,
468
- top,
469
- ...defaultVaule.style,
470
- ...defaultVaule.textStyle,
471
- ...others
472
- });
473
- return text;
474
- },
475
- cumputedX(value) {
476
- const { xScaleList, xScaleCell, originX, xCellWidth } = this.propItems;
477
- const time = new Date(value).getTime();
478
- const minScale = Math.min(...xScaleList);
479
- const i = Math.floor((time - minScale) / xScaleCell);
480
- return originX + xCellWidth * i + xCellWidth / 2;
481
- },
482
- cumputedY(polylineType, value, type) {
483
- const yScaleCell = this.propItems[`${type}YCell`];
484
- const yCellUnit = value - Math.min(...polylineType.list);
485
- return this.propItems.endY - yScaleCell * yCellUnit;
486
- },
487
- getXValue(left) {
488
- const { xScaleList, xScaleCell, xCellWidth, originX } = this.propItems;
489
- const minScale = Math.min(...xScaleList);
490
- const time = minScale + ((left - originX) / xCellWidth) * xScaleCell;
491
- let d = new Date(time);
492
- const month = `00${d.getMonth() + 1}`.slice(-2);
493
- const day = `00${d.getDate()}`.slice(-2);
494
- const date = `${d.getFullYear()}-${month}-${day} ${d.getHours()}:00`;
495
- return date;
496
- },
497
- getYValue(type, top) {
498
- const yScaleCell = this.propItems[`${type}YCell`];
499
- const list = this.polyline.find(v => v.type === type)?.list || [];
500
- const minVal = list.length ? Math.min(...list) : 0;
501
- const y = (this.propItems.endY - top) / yScaleCell + minVal;
502
- return y;
503
- },
504
- getValue(point) {
505
- if (point.id) {
506
- const { polylineIndex, pointIndex, type, left, top } = point;
507
- const data = this.polylineList.find(v => v.type === type);
508
- const title = data?.dataList?.[polylineIndex]?.title || '';
509
- // const obj = this.getListIndexValue(data?.dataList?.[polylineIndex]?.list, pointIndex);
510
- const obj = {
511
- data: data?.dataList?.[polylineIndex]?.list?.[pointIndex]?.data || '',
512
- value: {}
513
- };
514
- obj.value.time = this.getXValue(left);
515
- obj.value.value = this.getYValue(type, top);
516
- return {
517
- title,
518
- type,
519
- dataIndex: polylineIndex,
520
- pointIndex,
521
- ...obj
522
- };
523
- } else {
524
- const x = this.getXValue(point.left);
525
- const valueList = this.polylineList.map(v => ({ type: v.type, value: this.getYValue(v.type, point.top) }));
526
- return { x, valueList };
527
- }
528
- },
529
- drawOther(other) {
530
- const { originY } = this.propItems;
531
- if (!other || !other.list) return false;
532
- const list = [];
533
- // 数据列表
534
- other.list.forEach(arr => {
535
- arr.dataList.forEach((v, i) => {
536
- const text = new this.fabric.Text(String(v[1].split('').join('\n')), {
537
- originX: 'center',
538
- top: originY,
539
- left: this.cumputedX(v[0]),
540
- textAlign: 'center',
541
- ...defaultVaule.style,
542
- ...arr.style
543
- });
544
- list.push(text);
545
- });
546
- });
547
- const group = list.length > 0 ? new this.fabric.Group([...list], { ...defaultVaule.style }) : null;
548
- group && group.sendToBack(); // 向下跳底层
549
- group && this.canvas.add(group);
550
- this.canvas.renderAll();
551
- },
552
- // 关闭右键菜单,打开添加节点弹窗表单
553
- handleRightClick({ type }) {
554
- this.isRightVisible = false;
555
- const point = this._currentPoint;
556
- this._currentPoint = '';
557
- const { left, top } = this._active;
558
- let data = point ? this.getValue(point) : this.getValue({ left, top });
559
- this.$emit('pointOperation', type, data);
560
- },
561
- // 打开右键菜单
562
- openRightModal(event) {
563
- if (!this.propItems.eventStyle.evented) {
564
- return;
565
- }
566
- this.rightPos = {
567
- clientX: event.e.clientX || event.e.pageX,
568
- clientY: event.e.clientY || event.e.pageY
569
- };
570
- this.isRightVisible = false;
571
- const target = event.target;
572
- const id = target ? target.id : '';
573
- const nextId = target ? target.nextId : '';
574
- this.$nextTick(() => {
575
- if (id && id.includes('_polylinePoint_')) {
576
- this._currentPoint = target;
577
- this.rightClickNode = Object.freeze(rightClickNode.slice());
578
- } else {
579
- this._currentPoint = '';
580
- this.rightClickNode = Object.freeze(rightClickNode.slice(0, 1));
581
- }
582
- this.isRightVisible = true;
583
- });
584
- },
585
- removePolyline(id) {
586
- if (id) {
587
- const point = this.canvas.getObjects().find(item => item.id === id);
588
- if (point) {
589
- this.canvas.remove(point);
590
- point.line1 && this.canvas.remove(point.line1);
591
- point.line3 && this.canvas.remove(point.line3);
592
- point.noRiseText && this.canvas.remove(point.noRiseText);
593
- point.arrowGroup && this.canvas.remove(point.arrowGroup);
594
- point.verifiedText && this.canvas.remove(point.verifiedText);
595
- }
596
- return;
597
- }
598
- this.canvas.forEachObject(obj => {
599
- if (obj.id && /_polyline(Point|Line|Text)_/.test(obj.id)) {
600
- this.canvas.remove(obj);
601
- }
602
- });
603
- },
604
- repaintPolyline() {
605
- if (this.polylineList.length) {
606
- this.removePolyline();
607
- }
608
- this.polylineList = JSON.parse(JSON.stringify(this.polyline));
609
- }
610
- },
611
- };
612
- </script>