vxe-gantt 4.1.18 → 4.1.20

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 (49) hide show
  1. package/README.md +20 -3
  2. package/es/gantt/src/emits.js +4 -1
  3. package/es/gantt/src/gantt-body.js +2 -2
  4. package/es/gantt/src/gantt-chart.js +75 -53
  5. package/es/gantt/src/gantt-view.js +19 -9
  6. package/es/gantt/src/gantt.js +79 -39
  7. package/es/gantt/src/util.js +0 -3
  8. package/es/gantt/style.css +16 -2
  9. package/es/gantt/style.min.css +1 -1
  10. package/es/style.css +1 -1
  11. package/es/style.min.css +1 -1
  12. package/es/ui/index.js +2 -1
  13. package/es/ui/src/log.js +1 -1
  14. package/es/vxe-gantt/style.css +16 -2
  15. package/es/vxe-gantt/style.min.css +1 -1
  16. package/lib/gantt/src/emits.js +1 -1
  17. package/lib/gantt/src/emits.min.js +1 -1
  18. package/lib/gantt/src/gantt-body.js +4 -2
  19. package/lib/gantt/src/gantt-body.min.js +1 -1
  20. package/lib/gantt/src/gantt-chart.js +72 -44
  21. package/lib/gantt/src/gantt-chart.min.js +1 -1
  22. package/lib/gantt/src/gantt-view.js +19 -9
  23. package/lib/gantt/src/gantt-view.min.js +1 -1
  24. package/lib/gantt/src/gantt.js +89 -38
  25. package/lib/gantt/src/gantt.min.js +1 -1
  26. package/lib/gantt/src/util.js +0 -4
  27. package/lib/gantt/src/util.min.js +1 -1
  28. package/lib/gantt/style/style.css +16 -2
  29. package/lib/gantt/style/style.min.css +1 -1
  30. package/lib/index.umd.js +184 -93
  31. package/lib/index.umd.min.js +1 -1
  32. package/lib/style.css +1 -1
  33. package/lib/style.min.css +1 -1
  34. package/lib/ui/index.js +2 -1
  35. package/lib/ui/index.min.js +1 -1
  36. package/lib/ui/src/log.js +1 -1
  37. package/lib/ui/src/log.min.js +1 -1
  38. package/lib/vxe-gantt/style/style.css +16 -2
  39. package/lib/vxe-gantt/style/style.min.css +1 -1
  40. package/package.json +3 -3
  41. package/packages/gantt/src/emits.ts +4 -1
  42. package/packages/gantt/src/gantt-body.ts +2 -2
  43. package/packages/gantt/src/gantt-chart.ts +78 -53
  44. package/packages/gantt/src/gantt-view.ts +19 -9
  45. package/packages/gantt/src/gantt.ts +84 -40
  46. package/packages/gantt/src/util.ts +0 -4
  47. package/packages/ui/index.ts +1 -0
  48. package/styles/components/gantt-module/gantt-chart.scss +14 -2
  49. package/styles/theme/base.scss +1 -0
@@ -20,17 +20,16 @@ export default defineVxeComponent({
20
20
  const $xeGantt = inject('$xeGantt', {} as (VxeGanttConstructor & VxeGanttPrivateMethods))
21
21
  const $xeGanttView = inject('$xeGanttView', {} as VxeGanttViewConstructor & VxeGanttViewPrivateMethods)
22
22
 
23
- const { props: ganttProps, internalData: ganttInternalData } = $xeGantt
23
+ const { props: ganttProps, reactData: ganttReactData, internalData: ganttInternalData } = $xeGantt
24
24
  const { reactData: ganttViewReactData, internalData: ganttViewInternalData } = $xeGanttView
25
25
  const { computeProgressField, computeTitleField, computeTypeField, computeTaskBarOpts, computeScaleUnit, computeTaskLinkOpts, computeTaskBarMilestoneOpts } = $xeGantt.getComputeMaps()
26
26
 
27
27
  const refElem = ref<HTMLDivElement>()
28
28
  const refTaskWrapperElem = ref() as Ref<HTMLDivElement>
29
- const reflineWrapperElem = ref() as Ref<HTMLDivElement>
29
+ const refChartBeforeWrapperElem = ref() as Ref<HTMLDivElement>
30
+ const refChartAfterWrapperElem = ref() as Ref<HTMLDivElement>
30
31
 
31
32
  const renderTaskBar = ($xeTable: VxeTableConstructor & VxeTableMethods & VxeTablePrivateMethods, row: any, rowid: string, rowIndex: number, $rowIndex: number, _rowIndex: number) => {
32
- const tableProps = $xeTable.props
33
- const { treeConfig } = tableProps
34
33
  const tableReactData = $xeTable.reactData
35
34
  const { resizeHeightFlag } = tableReactData
36
35
  const tableInternalData = $xeTable.internalData
@@ -44,6 +43,7 @@ export default defineVxeComponent({
44
43
  const taskBarSlot = ganttSlots.taskBar || ganttSlots['task-bar']
45
44
 
46
45
  const { taskBarMilestoneConfig } = ganttProps
46
+ const { activeLink, activeBarRowid } = ganttReactData
47
47
  const titleField = computeTitleField.value
48
48
  const progressField = computeProgressField.value
49
49
  const typeField = computeTypeField.value
@@ -92,27 +92,12 @@ export default defineVxeComponent({
92
92
  rowIndex,
93
93
  _rowIndex
94
94
  }
95
- const ons: {
96
- onClick: any
97
- onDblclick: any
98
- onMousedown: any
95
+ const ctOns: {
99
96
  onMouseover?: any
100
97
  onMouseleave?: any
101
- } = {
102
- onClick (evnt: MouseEvent) {
103
- $xeGantt.handleTaskBarClickEvent(evnt, barParams)
104
- },
105
- onDblclick (evnt: MouseEvent) {
106
- $xeGantt.handleTaskBarDblclickEvent(evnt, barParams)
107
- },
108
- onMousedown (evnt: MouseEvent) {
109
- if ($xeGantt.handleTaskBarMousedownEvent) {
110
- $xeGantt.handleTaskBarMousedownEvent(evnt, barParams)
111
- }
112
- }
113
- }
98
+ } = {}
114
99
  if (showTooltip) {
115
- ons.onMouseover = (evnt: MouseEvent) => {
100
+ ctOns.onMouseover = (evnt: MouseEvent) => {
116
101
  const { dragBarRow } = ganttInternalData
117
102
  const ttParams = Object.assign({ $event: evnt }, ctParams)
118
103
  if (!dragBarRow) {
@@ -120,7 +105,7 @@ export default defineVxeComponent({
120
105
  }
121
106
  $xeGantt.dispatchEvent('task-bar-mouseenter', ttParams, evnt)
122
107
  }
123
- ons.onMouseleave = (evnt: MouseEvent) => {
108
+ ctOns.onMouseleave = (evnt: MouseEvent) => {
124
109
  const { dragBarRow } = ganttInternalData
125
110
  const ttParams = Object.assign({ $event: evnt }, ctParams)
126
111
  if (!dragBarRow) {
@@ -136,13 +121,16 @@ export default defineVxeComponent({
136
121
  isMilestone,
137
122
  title,
138
123
  vbStyle,
139
- vpStyle
124
+ vpStyle,
125
+ rowid,
126
+ ctOns
140
127
  })
141
128
  } else if (taskBarSlot) {
142
129
  cbVNs.push(
143
130
  h('div', {
144
131
  key: 'cbc',
145
- class: 'vxe-gantt-view--chart-custom-bar-content'
132
+ class: 'vxe-gantt-view--chart-custom-bar-content-wrapper',
133
+ ...ctOns
146
134
  }, $xeGantt.callSlot(taskBarSlot, barParams))
147
135
  )
148
136
  } else {
@@ -152,7 +140,8 @@ export default defineVxeComponent({
152
140
  cbVNs.push(
153
141
  h('div', {
154
142
  key: 'vcm',
155
- class: 'vxe-gantt-view--chart-milestone-wrapper'
143
+ class: 'vxe-gantt-view--chart-milestone-wrapper',
144
+ ...ctOns
156
145
  }, [
157
146
  h('div', {
158
147
  class: ['vxe-gantt-view--chart-milestone-icon', iconStatus ? `theme--${XEUtils.isFunction(iconStatus) ? iconStatus(tbmParams) : iconStatus}` : ''],
@@ -171,25 +160,31 @@ export default defineVxeComponent({
171
160
  )
172
161
  } else {
173
162
  cbVNs.push(
174
- showProgress
175
- ? h('div', {
176
- key: 'vcp',
177
- class: 'vxe-gantt-view--chart-progress',
178
- style: vpStyle
179
- })
180
- : renderEmptyElement($xeGantt),
181
- showContent
182
- ? h('div', {
183
- key: 'vcc',
184
- class: 'vxe-gantt-view--chart-content'
185
- }, title)
186
- : renderEmptyElement($xeGantt)
163
+ h('div', {
164
+ key: 'vbc',
165
+ class: 'vxe-gantt-view--chart-bar-content-wrapper',
166
+ ...ctOns
167
+ }, [
168
+ showProgress
169
+ ? h('div', {
170
+ key: 'vcp',
171
+ class: 'vxe-gantt-view--chart-progress',
172
+ style: vpStyle
173
+ })
174
+ : renderEmptyElement($xeGantt),
175
+ showContent
176
+ ? h('div', {
177
+ key: 'vcc',
178
+ class: 'vxe-gantt-view--chart-content'
179
+ }, title)
180
+ : renderEmptyElement($xeGantt)
181
+ ])
187
182
  )
188
183
  }
189
184
  }
190
185
 
191
186
  return h('div', {
192
- key: treeConfig ? rowid : $rowIndex,
187
+ key: rowid,
193
188
  rowid,
194
189
  class: ['vxe-gantt-view--chart-row', `is--${gettaskType(typeValue)}`, {
195
190
  'is--round': round,
@@ -203,10 +198,23 @@ export default defineVxeComponent({
203
198
  }
204
199
  }, [
205
200
  h('div', {
206
- class: [taskBarSlot ? 'vxe-gantt-view--chart-custom-bar' : 'vxe-gantt-view--chart-bar', `is--${gettaskType(typeValue)}`],
201
+ class: [taskBarSlot ? 'vxe-gantt-view--chart-custom-bar' : 'vxe-gantt-view--chart-bar', `is--${gettaskType(typeValue)}`, {
202
+ 'is--active': activeBarRowid === rowid,
203
+ 'active--link': activeLink && (rowid === `${activeLink.from}` || rowid === `${activeLink.to}`)
204
+ }],
207
205
  style: vbStyle,
208
206
  rowid,
209
- ...ons
207
+ onClick (evnt: MouseEvent) {
208
+ $xeGantt.handleTaskBarClickEvent(evnt, barParams)
209
+ },
210
+ onDblclick (evnt: MouseEvent) {
211
+ $xeGantt.handleTaskBarDblclickEvent(evnt, barParams)
212
+ },
213
+ onMousedown (evnt: MouseEvent) {
214
+ if ($xeGantt.handleTaskBarMousedownEvent) {
215
+ $xeGantt.handleTaskBarMousedownEvent(evnt, barParams)
216
+ }
217
+ }
210
218
  }, cbVNs)
211
219
  ])
212
220
  }
@@ -254,26 +262,41 @@ export default defineVxeComponent({
254
262
  const renderVN = () => {
255
263
  const $xeTable = ganttViewInternalData.xeTable
256
264
 
265
+ const { dragLinkFromStore } = ganttReactData
257
266
  const { tableData } = ganttViewReactData
258
267
  const taskLinkOpts = computeTaskLinkOpts.value
259
- const { showArrow } = taskLinkOpts
268
+ const taskBarOpts = computeTaskBarOpts.value
269
+ const { isCurrent, isHover } = taskLinkOpts
270
+ const { linkCreatable } = taskBarOpts
260
271
 
261
272
  return h('div', {
262
273
  ref: refElem,
263
- class: 'vxe-gantt-view--chart-wrapper'
274
+ class: ['vxe-gantt-view--chart-wrapper', {
275
+ 'is--cl-drag': dragLinkFromStore.rowid
276
+ }]
264
277
  }, [
265
- $xeGantt.renderGanttTaskLines
278
+ $xeGantt.renderGanttTaskChartBefores
266
279
  ? h('div', {
267
- ref: reflineWrapperElem,
268
- class: ['vxe-gantt-view--chart-line-wrapper', {
269
- 'show-arrow': showArrow
280
+ ref: refChartBeforeWrapperElem,
281
+ class: ['vxe-gantt-view--chart-before-wrapper', {
282
+ 'link--current': isCurrent,
283
+ 'link--hover': isHover
270
284
  }]
271
- }, $xeTable && isEnableConf(taskLinkOpts) ? $xeGantt.renderGanttTaskLines() : [])
285
+ }, $xeTable && isEnableConf(taskLinkOpts) ? $xeGantt.renderGanttTaskChartBefores() : [])
272
286
  : renderEmptyElement($xeGantt),
273
287
  h('div', {
274
288
  ref: refTaskWrapperElem,
275
- class: 'vxe-gantt-view--chart-task-wrapper'
276
- }, $xeTable ? renderTaskRows($xeTable, tableData) : [])
289
+ class: ['vxe-gantt-view--chart-task-wrapper', {
290
+ 'link--current': isCurrent,
291
+ 'link--create': linkCreatable
292
+ }]
293
+ }, $xeTable ? renderTaskRows($xeTable, tableData) : []),
294
+ $xeGantt.renderGanttTaskChartAfters
295
+ ? h('div', {
296
+ ref: refChartAfterWrapperElem,
297
+ class: 'vxe-gantt-view--chart-after-wrapper'
298
+ }, $xeTable && isEnableConf(taskLinkOpts) ? $xeGantt.renderGanttTaskChartAfters() : [])
299
+ : renderEmptyElement($xeGantt)
277
300
  ])
278
301
  }
279
302
 
@@ -281,14 +304,16 @@ export default defineVxeComponent({
281
304
  const { elemStore } = ganttViewInternalData
282
305
  const prefix = 'main-chart-'
283
306
  elemStore[`${prefix}task-wrapper`] = refTaskWrapperElem
284
- elemStore[`${prefix}line-wrapper`] = reflineWrapperElem
307
+ elemStore[`${prefix}before-wrapper`] = refChartBeforeWrapperElem
308
+ elemStore[`${prefix}after-wrapper`] = refChartAfterWrapperElem
285
309
  })
286
310
 
287
311
  onUnmounted(() => {
288
312
  const { elemStore } = ganttViewInternalData
289
313
  const prefix = 'main-chart-'
290
314
  elemStore[`${prefix}task-wrapper`] = null
291
- elemStore[`${prefix}line-wrapper`] = null
315
+ elemStore[`${prefix}before-wrapper`] = null
316
+ elemStore[`${prefix}after-wrapper`] = null
292
317
  })
293
318
 
294
319
  return renderVN
@@ -951,7 +951,7 @@ export default defineVxeComponent({
951
951
 
952
952
  return Promise.all([
953
953
  updateTaskChart(),
954
- $xeGantt.handleUpdateTaskLink ? $xeGantt.handleUpdateTaskLink($xeGanttView) : null
954
+ $xeGantt.handleUpdateTaskLinkStyle ? $xeGantt.handleUpdateTaskLinkStyle($xeGanttView) : null
955
955
  ])
956
956
  }
957
957
 
@@ -1115,10 +1115,15 @@ export default defineVxeComponent({
1115
1115
  scrollXSpaceEl.style.width = `${scrollXWidth}px`
1116
1116
  }
1117
1117
 
1118
- const lineWrapper = getRefElem(elemStore['main-chart-line-wrapper'])
1119
- const svgElem = lineWrapper ? lineWrapper.firstElementChild as HTMLDivElement : null
1120
- if (svgElem) {
1121
- svgElem.style.width = `${scrollXWidth}px`
1118
+ const beforeWrapper = getRefElem(elemStore['main-chart-before-wrapper'])
1119
+ const beforeSvgElem = beforeWrapper ? beforeWrapper.firstElementChild as HTMLDivElement : null
1120
+ if (beforeSvgElem) {
1121
+ beforeSvgElem.style.width = `${scrollXWidth}px`
1122
+ }
1123
+ const afterWrapper = getRefElem(elemStore['main-chart-after-wrapper'])
1124
+ const afterSvgElem = afterWrapper ? afterWrapper.firstElementChild as HTMLDivElement : null
1125
+ if (afterSvgElem) {
1126
+ afterSvgElem.style.width = `${scrollXWidth}px`
1122
1127
  }
1123
1128
 
1124
1129
  calcScrollbar()
@@ -1180,10 +1185,15 @@ export default defineVxeComponent({
1180
1185
  scrollYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : ''
1181
1186
  }
1182
1187
 
1183
- const lineWrapper = getRefElem(elemStore['main-chart-line-wrapper'])
1184
- const svgElem = lineWrapper ? lineWrapper.firstElementChild as HTMLDivElement : null
1185
- if (svgElem) {
1186
- svgElem.style.height = ySpaceHeight ? `${ySpaceHeight}px` : ''
1188
+ const beforeWrapper = getRefElem(elemStore['main-chart-before-wrapper'])
1189
+ const beforeSvgElem = beforeWrapper ? beforeWrapper.firstElementChild as HTMLDivElement : null
1190
+ if (beforeSvgElem) {
1191
+ beforeSvgElem.style.height = ySpaceHeight ? `${ySpaceHeight}px` : ''
1192
+ }
1193
+ const afterWrapper = getRefElem(elemStore['main-chart-after-wrapper'])
1194
+ const afterSvgElem = afterWrapper ? afterWrapper.firstElementChild as HTMLDivElement : null
1195
+ if (afterSvgElem) {
1196
+ afterSvgElem.style.height = ySpaceHeight ? `${ySpaceHeight}px` : ''
1187
1197
  }
1188
1198
 
1189
1199
  reactData.scrollYTop = scrollYTop
@@ -1,4 +1,4 @@
1
- import { h, ref, PropType, computed, provide, reactive, onUnmounted, watch, nextTick, VNode, onMounted } from 'vue'
1
+ import { h, ref, PropType, computed, provide, reactive, onBeforeUnmount, onUnmounted, watch, nextTick, VNode, onMounted } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import XEUtils from 'xe-utils'
4
4
  import { getLastZIndex, nextZIndex, isEnableConf, formatText } from '../../ui/src/utils'
@@ -30,9 +30,54 @@ function createInternalData (): GanttInternalData {
30
30
  linkFromKeyMaps: {},
31
31
  linkUniqueMaps: {},
32
32
  uFoot: false,
33
- resizeTableWidth: 0
34
- // barTipTimeout: null
35
- // dragBarRow: null
33
+ resizeTableWidth: 0,
34
+ // barTipTimeout: null,
35
+ // dragBarRow: null,
36
+ // dragLineRow: null,
37
+ dragLinkToStore: {
38
+ rowid: null,
39
+ type: 0
40
+ }
41
+ }
42
+ }
43
+
44
+ function createReactData (): GanttReactData {
45
+ return {
46
+ tableLoading: false,
47
+ proxyInited: false,
48
+ isZMax: false,
49
+ tableLinks: [],
50
+ tableData: [],
51
+ filterData: [],
52
+ formData: {},
53
+ sortData: [],
54
+ footerData: [],
55
+ tZindex: 0,
56
+ tablePage: {
57
+ total: 0,
58
+ pageSize: getConfig().pager?.pageSize || 10,
59
+ currentPage: 1
60
+ },
61
+ showLeftView: true,
62
+ showRightView: true,
63
+ taskScaleList: [],
64
+
65
+ barTipStore: {
66
+ row: null,
67
+ content: '',
68
+ visible: false,
69
+ params: null
70
+ },
71
+
72
+ dragLinkFromStore: {
73
+ rowid: null,
74
+ type: 0
75
+ },
76
+ activeBarRowid: null,
77
+ activeLink: null,
78
+ isActiveCeLe: false,
79
+ linkList: [],
80
+ upLinkFlag: 0
36
81
  }
37
82
  }
38
83
 
@@ -117,36 +162,7 @@ export default defineVxeComponent({
117
162
 
118
163
  const { computeSize } = useFns.useSize(props)
119
164
 
120
- const reactData = reactive<GanttReactData>({
121
- tableLoading: false,
122
- proxyInited: false,
123
- isZMax: false,
124
- tableLinks: [],
125
- tableData: [],
126
- filterData: [],
127
- formData: {},
128
- sortData: [],
129
- footerData: [],
130
- tZindex: 0,
131
- tablePage: {
132
- total: 0,
133
- pageSize: getConfig().pager?.pageSize || 10,
134
- currentPage: 1
135
- },
136
- showLeftView: true,
137
- showRightView: true,
138
- taskScaleList: [],
139
-
140
- barTipStore: {
141
- row: null,
142
- content: '',
143
- visible: false,
144
- params: null
145
- },
146
-
147
- linkList: [],
148
- upLinkFlag: 0
149
- })
165
+ const reactData = reactive(createReactData())
150
166
 
151
167
  const internalData = createInternalData()
152
168
 
@@ -288,6 +304,11 @@ export default defineVxeComponent({
288
304
  return scales
289
305
  })
290
306
 
307
+ const computeTaskLinkStyle = computed(() => {
308
+ const { lineType, lineWidth, lineStatus, lineColor } = computeTaskLinkOpts.value
309
+ return `${lineType || ''}_${lineWidth || ''}_${lineStatus || ''}_${lineColor || ''}`
310
+ })
311
+
291
312
  const computeTitleField = computed(() => {
292
313
  const taskOpts = computeTaskOpts.value
293
314
  return taskOpts.titleField || 'title'
@@ -1768,21 +1789,34 @@ export default defineVxeComponent({
1768
1789
  $xeTable.handleToggleCheckRowEvent(evnt, params)
1769
1790
  }
1770
1791
  }
1792
+ reactData.isActiveCeLe = false
1793
+ reactData.activeBarRowid = null
1794
+ reactData.activeLink = null
1771
1795
  $xeGantt.dispatchEvent('task-cell-click', params, evnt)
1772
1796
  },
1773
1797
  handleTaskCellDblclickEvent (evnt, params) {
1774
1798
  $xeGantt.dispatchEvent('task-cell-dblclick', params, evnt)
1775
1799
  },
1776
1800
  handleTaskBarClickEvent (evnt, params) {
1801
+ const $xeTable = refTable.value
1802
+ const taskBarOpts = computeTaskBarOpts.value
1803
+ const { linkCreatable } = taskBarOpts
1804
+ const { row } = params
1805
+ reactData.isActiveCeLe = !!linkCreatable
1806
+ reactData.activeBarRowid = $xeTable ? $xeTable.getRowid(row) : row
1807
+ reactData.activeLink = null
1777
1808
  $xeGantt.dispatchEvent('task-bar-click', params, evnt)
1778
1809
  },
1779
1810
  handleTaskBarDblclickEvent (evnt, params) {
1780
1811
  $xeGantt.dispatchEvent('task-bar-dblclick', params, evnt)
1781
1812
  },
1782
1813
  triggerTaskBarTooltipEvent (evnt, params) {
1783
- const { barTipStore } = reactData
1784
- const { dragBarRow } = internalData
1785
- if (dragBarRow) {
1814
+ const { barTipStore, activeLink } = reactData
1815
+ const { dragBarRow, dragLineRow } = internalData
1816
+ if (dragBarRow || dragLineRow) {
1817
+ return
1818
+ }
1819
+ if (activeLink) {
1786
1820
  return
1787
1821
  }
1788
1822
  const taskBarTooltipOpts = computeTaskBarTooltipOpts.value
@@ -2433,6 +2467,12 @@ export default defineVxeComponent({
2433
2467
  $xeGantt.refreshTaskView()
2434
2468
  })
2435
2469
 
2470
+ watch(computeTaskLinkStyle, () => {
2471
+ if ($xeGantt.handleUpdateTaskLinkData) {
2472
+ $xeGantt.handleUpdateTaskLinkData()
2473
+ }
2474
+ })
2475
+
2436
2476
  hooks.forEach((options) => {
2437
2477
  const { setupGantt } = options
2438
2478
  if (setupGantt) {
@@ -2443,16 +2483,16 @@ export default defineVxeComponent({
2443
2483
  }
2444
2484
  })
2445
2485
 
2446
- if ($xeGantt.handleTaskUpdateLinks) {
2486
+ if ($xeGantt.handleTaskLoadLinks) {
2447
2487
  if (props.links) {
2448
- $xeGantt.handleTaskUpdateLinks(props.links)
2488
+ $xeGantt.handleTaskLoadLinks(props.links)
2449
2489
  }
2450
2490
  }
2451
2491
  handleTaskScaleConfig()
2452
2492
  initPages()
2453
2493
 
2454
2494
  onMounted(() => {
2455
- if (!$xeGantt.handleUpdateTaskLink) {
2495
+ if (!$xeGantt.handleUpdateTaskLinkData) {
2456
2496
  if (props.links) {
2457
2497
  warnLog('vxe.error.notProp', ['links'])
2458
2498
  }
@@ -2508,6 +2548,10 @@ export default defineVxeComponent({
2508
2548
  globalEvents.on($xeGantt, 'keydown', handleGlobalKeydownEvent)
2509
2549
  })
2510
2550
 
2551
+ onBeforeUnmount(() => {
2552
+ XEUtils.assign(reactData, createReactData())
2553
+ })
2554
+
2511
2555
  onUnmounted(() => {
2512
2556
  globalEvents.off($xeGantt, 'keydown')
2513
2557
  XEUtils.assign(internalData, createInternalData())
@@ -42,10 +42,6 @@ export function getTaskBarWidth (chartRest: VxeGanttDefines.RowCacheItem | null,
42
42
  return Math.max(1, chartRest ? (Math.floor(viewCellWidth * chartRest.oWidthSize) - 1) : 0)
43
43
  }
44
44
 
45
- export function getTaskLinkKey (from: string | number, to: string | number) {
46
- return `${from}_${to}`
47
- }
48
-
49
45
  const taskTypeMaps: Record<string, boolean> = {
50
46
  milestone: true
51
47
  }
@@ -50,6 +50,7 @@ setConfig({
50
50
  },
51
51
  taskLinkConfig: {
52
52
  enabled: true,
53
+ isHover: true,
53
54
  showArrow: true
54
55
  },
55
56
  taskViewScaleConfig: {
@@ -16,6 +16,10 @@
16
16
  & > .vxe-gantt-view--chart-bar,
17
17
  & > .vxe-gantt-view--chart-custom-bar {
18
18
  border-radius: var(--vxe-ui-gantt-view-task-bar-border-radius);
19
+ .vxe-gantt-view--chart-bar-content-wrapper,
20
+ .vxe-gantt-view--chart-custom-bar-content-wrapper {
21
+ border-radius: var(--vxe-ui-gantt-view-task-bar-border-radius);
22
+ }
19
23
  &:hover {
20
24
  &::after {
21
25
  border-radius: var(--vxe-ui-gantt-view-task-bar-border-radius);
@@ -32,15 +36,23 @@
32
36
  top: 50%;
33
37
  left: 0;
34
38
  transform: translateY(-50%);
35
- overflow: hidden;
36
39
  pointer-events: all;
37
40
  &.is--default {
38
41
  color: #ffffff;
39
42
  background-color: var(--vxe-ui-gantt-view-task-bar-background-color);
40
43
  }
41
44
  }
42
- .vxe-gantt-view--chart-custom-bar-content {
45
+ .vxe-gantt-view--chart-bar-content-wrapper,
46
+ .vxe-gantt-view--chart-custom-bar-content-wrapper {
47
+ width: 100%;
48
+ overflow: hidden;
49
+ }
50
+ .vxe-gantt-view--chart-bar-content-wrapper {
43
51
  width: 100%;
52
+ height: 100%;
53
+ display: flex;
54
+ flex-direction: row;
55
+ align-items: center;
44
56
  }
45
57
  .vxe-gantt-view--chart-bar {
46
58
  align-items: center;
@@ -9,5 +9,6 @@
9
9
  --vxe-ui-gantt-view-task-bar-background-color: var(--vxe-ui-font-primary-lighten-color);
10
10
  --vxe-ui-gantt-view-task-bar-completed-background-color: var(--vxe-ui-font-primary-color);
11
11
  --vxe-ui-gantt-view-task-line-color: var(--vxe-ui-font-primary-color);
12
+ --vxe-ui-gantt-view-task-line-width: 2px;
12
13
  --vxe-ui-gantt-view-task-line-arrow-width: 5;
13
14
  }