vxe-gantt 4.1.5 → 4.1.7

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 (65) hide show
  1. package/es/gantt/index.js +3 -0
  2. package/es/gantt/src/emits.js +7 -1
  3. package/es/gantt/src/gantt-body.js +2 -5
  4. package/es/gantt/src/gantt-chart.js +64 -35
  5. package/es/gantt/src/gantt-view.js +23 -10
  6. package/es/gantt/src/gantt.js +66 -5
  7. package/es/gantt/src/static.js +22 -0
  8. package/es/gantt/src/table-emits.js +4 -0
  9. package/es/gantt/src/util.js +9 -0
  10. package/es/gantt/style.css +2 -2
  11. package/es/gantt/style.min.css +1 -1
  12. package/es/style.css +1 -1
  13. package/es/style.min.css +1 -1
  14. package/es/ui/index.js +6 -13
  15. package/es/ui/src/depend.js +14 -0
  16. package/es/ui/src/log.js +1 -1
  17. package/es/vxe-gantt/style.css +2 -2
  18. package/es/vxe-gantt/style.min.css +1 -1
  19. package/lib/gantt/index.js +18 -0
  20. package/lib/gantt/index.min.js +1 -1
  21. package/lib/gantt/src/emits.js +1 -1
  22. package/lib/gantt/src/emits.min.js +1 -1
  23. package/lib/gantt/src/gantt-body.js +2 -5
  24. package/lib/gantt/src/gantt-body.min.js +1 -1
  25. package/lib/gantt/src/gantt-chart.js +44 -21
  26. package/lib/gantt/src/gantt-chart.min.js +1 -1
  27. package/lib/gantt/src/gantt-view.js +19 -9
  28. package/lib/gantt/src/gantt-view.min.js +1 -1
  29. package/lib/gantt/src/gantt.js +88 -5
  30. package/lib/gantt/src/gantt.min.js +1 -1
  31. package/lib/gantt/src/static.js +28 -0
  32. package/lib/gantt/src/static.min.js +1 -0
  33. package/lib/gantt/src/table-emits.js +1 -1
  34. package/lib/gantt/src/table-emits.min.js +1 -1
  35. package/lib/gantt/src/util.js +12 -0
  36. package/lib/gantt/src/util.min.js +1 -1
  37. package/lib/gantt/style/style.css +2 -2
  38. package/lib/gantt/style/style.min.css +1 -1
  39. package/lib/index.umd.js +226 -69
  40. package/lib/index.umd.min.js +1 -1
  41. package/lib/style.css +1 -1
  42. package/lib/style.min.css +1 -1
  43. package/lib/ui/index.js +6 -13
  44. package/lib/ui/index.min.js +1 -1
  45. package/lib/ui/src/depend.js +19 -0
  46. package/lib/ui/src/depend.min.js +1 -0
  47. package/lib/ui/src/log.js +1 -1
  48. package/lib/ui/src/log.min.js +1 -1
  49. package/lib/vxe-gantt/style/style.css +2 -2
  50. package/lib/vxe-gantt/style/style.min.css +1 -1
  51. package/package.json +3 -7
  52. package/packages/gantt/index.ts +4 -0
  53. package/packages/gantt/src/emits.ts +7 -1
  54. package/packages/gantt/src/gantt-body.ts +2 -5
  55. package/packages/gantt/src/gantt-chart.ts +65 -36
  56. package/packages/gantt/src/gantt-view.ts +25 -10
  57. package/packages/gantt/src/gantt.ts +74 -6
  58. package/packages/gantt/src/static.ts +21 -0
  59. package/packages/gantt/src/table-emits.ts +5 -0
  60. package/packages/gantt/src/util.ts +12 -0
  61. package/packages/ui/index.ts +5 -12
  62. package/packages/ui/src/depend.ts +14 -0
  63. package/styles/components/gantt-module/gantt-chart.scss +3 -2
  64. package/styles/components/gantt.scss +0 -1
  65. package/styles/theme/base.scss +2 -0
package/es/gantt/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
+ import { checkDependVersion } from '../ui/src/depend';
2
3
  import VxeGanttComponent from './src/gantt';
3
4
  export const VxeGantt = Object.assign({}, VxeGanttComponent, {
4
5
  install(app) {
6
+ checkDependVersion();
5
7
  app.component(VxeGanttComponent.name, VxeGanttComponent);
6
8
  }
7
9
  });
@@ -9,5 +11,6 @@ if (VxeUI.dynamicApp) {
9
11
  VxeUI.dynamicApp.use(VxeGantt);
10
12
  }
11
13
  VxeUI.component(VxeGanttComponent);
14
+ export * from './src/static';
12
15
  export const Gantt = VxeGantt;
13
16
  export default VxeGantt;
@@ -8,5 +8,11 @@ export const ganttEmits = [
8
8
  'task-bar-click',
9
9
  'task-bar-dblclick',
10
10
  'task-view-cell-click',
11
- 'task-view-cell-dblclick'
11
+ 'task-view-cell-dblclick',
12
+ 'task-move-start',
13
+ 'task-move-drag',
14
+ 'task-move-end',
15
+ 'task-resize-start',
16
+ 'task-resize-drag',
17
+ 'task-resize-end'
12
18
  ];
@@ -39,9 +39,7 @@ export default defineVxeComponent({
39
39
  const { cellClassName, cellStyle } = viewStyle || {};
40
40
  const todayValue = showNowLine && scaleItem ? todayDateMaps[scaleItem.type] : null;
41
41
  const rowRest = fullAllDataRowIdData[rowid] || {};
42
- const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
43
- const isRsHeight = resizeHeight > 0;
44
- const cellHeight = getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight);
42
+ const cellHeight = resizeHeightFlag ? getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight) : 0;
45
43
  const tdVNs = [];
46
44
  if (isAllRowDrag && rowOpts.resizable) {
47
45
  const cellParams = {
@@ -92,8 +90,7 @@ export default defineVxeComponent({
92
90
  class: [
93
91
  'vxe-gantt-view--body-column',
94
92
  {
95
- 'is--now': showNowLine && todayValue === field,
96
- 'col--rs-height': isRsHeight
93
+ 'is--now': showNowLine && todayValue === field
97
94
  },
98
95
  getClass(cellClassName, ctParams)
99
96
  ],
@@ -3,7 +3,7 @@ import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import { VxeUI } from '@vxe-ui/core';
4
4
  import XEUtils from 'xe-utils';
5
5
  import { getCellRestHeight } from './util';
6
- import { getStringValue } from '../../ui/src/utils';
6
+ import { getStringValue, isEnableConf } from '../../ui/src/utils';
7
7
  const { renderEmptyElement } = VxeUI;
8
8
  const sourceType = 'gantt';
9
9
  const viewType = 'chart';
@@ -13,9 +13,11 @@ export default defineVxeComponent({
13
13
  const $xeGantt = inject('$xeGantt', {});
14
14
  const $xeGanttView = inject('$xeGanttView', {});
15
15
  const { internalData: ganttInternalData } = $xeGantt;
16
- const { reactData, internalData } = $xeGanttView;
17
- const { computeProgressField, computeTitleField, computeTaskBarOpts, computeScaleUnit } = $xeGantt.getComputeMaps();
16
+ const { reactData: ganttViewReactData, internalData: ganttViewInternalData } = $xeGanttView;
17
+ const { computeProgressField, computeTitleField, computeTaskBarOpts, computeScaleUnit, computeTaskLinkOpts } = $xeGantt.getComputeMaps();
18
18
  const refElem = ref();
19
+ const refTaskWrapperElem = ref();
20
+ const reflineWrapperElem = ref();
19
21
  const renderTaskBar = ($xeTable, row, rowid, rowIndex, $rowIndex, _rowIndex) => {
20
22
  const tableProps = $xeTable.props;
21
23
  const { treeConfig } = tableProps;
@@ -34,14 +36,12 @@ export default defineVxeComponent({
34
36
  const taskBarOpts = computeTaskBarOpts.value;
35
37
  const scaleUnit = computeScaleUnit.value;
36
38
  const barParams = { $gantt: $xeGantt, row, scaleType: scaleUnit };
37
- const { showProgress, showContent, contentMethod, barStyle, drag, showTooltip } = taskBarOpts;
39
+ const { showProgress, showContent, contentMethod, barStyle, move, showTooltip } = taskBarOpts;
38
40
  const isBarRowStyle = XEUtils.isFunction(barStyle);
39
41
  const barStyObj = (barStyle ? (isBarRowStyle ? barStyle(barParams) : barStyle) : {}) || {};
40
42
  const { round } = barStyObj;
41
43
  const rowRest = fullAllDataRowIdData[rowid] || {};
42
- const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
43
- const isRsHeight = resizeHeight > 0;
44
- const cellHeight = getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight);
44
+ const cellHeight = resizeHeightFlag ? getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight) : 0;
45
45
  let title = getStringValue(XEUtils.get(row, titleField));
46
46
  const progressValue = showProgress ? Math.min(100, Math.max(0, XEUtils.toNumber(XEUtils.get(row, progressField)))) : 0;
47
47
  const vbStyle = {};
@@ -106,8 +106,7 @@ export default defineVxeComponent({
106
106
  rowid,
107
107
  class: ['vxe-gantt-view--chart-row', {
108
108
  'is--round': round,
109
- 'is--drag': drag,
110
- 'col--rs-height': isRsHeight
109
+ 'is--move': move
111
110
  }],
112
111
  style: {
113
112
  height: `${cellHeight}px`
@@ -116,24 +115,37 @@ export default defineVxeComponent({
116
115
  $xeGantt.handleTaskBarContextmenuEvent(evnt, ctParams);
117
116
  }
118
117
  }, [
119
- h('div', Object.assign({ class: taskBarSlot ? 'vxe-gantt-view--chart-custom-bar' : 'vxe-gantt-view--chart-bar', style: vbStyle, rowid }, ons), taskBarSlot
120
- ? $xeGantt.callSlot(taskBarSlot, barParams)
121
- : [
122
- showProgress
123
- ? h('div', {
124
- class: 'vxe-gantt-view--chart-progress',
125
- style: vpStyle
126
- })
127
- : renderEmptyElement($xeGantt),
128
- showContent
129
- ? h('div', {
130
- class: 'vxe-gantt-view--chart-content'
131
- }, title)
132
- : renderEmptyElement($xeGantt)
133
- ])
118
+ h('div', Object.assign({ class: taskBarSlot ? 'vxe-gantt-view--chart-custom-bar' : 'vxe-gantt-view--chart-bar', style: vbStyle, rowid }, ons), $xeGantt.renderGanttTaskBarContent
119
+ ? $xeGantt.renderGanttTaskBarContent(ctParams, {
120
+ title,
121
+ vbStyle,
122
+ vpStyle
123
+ })
124
+ : (taskBarSlot
125
+ ? [
126
+ h('div', {
127
+ key: 'cbc',
128
+ class: 'vxe-gantt-view--chart-custom-bar-content'
129
+ }, $xeGantt.callSlot(taskBarSlot, barParams))
130
+ ]
131
+ : [
132
+ showProgress
133
+ ? h('div', {
134
+ key: 'vcp',
135
+ class: 'vxe-gantt-view--chart-progress',
136
+ style: vpStyle
137
+ })
138
+ : renderEmptyElement($xeGantt),
139
+ showContent
140
+ ? h('div', {
141
+ key: 'vcc',
142
+ class: 'vxe-gantt-view--chart-content'
143
+ }, title)
144
+ : renderEmptyElement($xeGantt)
145
+ ]))
134
146
  ]);
135
147
  };
136
- const renderRows = ($xeTable, tableData) => {
148
+ const renderTaskRows = ($xeTable, tableData) => {
137
149
  const tableProps = $xeTable.props;
138
150
  const { treeConfig } = tableProps;
139
151
  const tableReactData = $xeTable.reactData;
@@ -144,10 +156,10 @@ export default defineVxeComponent({
144
156
  const treeOpts = computeTreeOpts.value;
145
157
  const { transform } = treeOpts;
146
158
  const childrenField = treeOpts.children || treeOpts.childrenField;
147
- const { scrollYLoad } = reactData;
159
+ const { scrollYLoad } = ganttViewReactData;
148
160
  const trVNs = [];
149
161
  tableData.forEach((row, $rowIndex) => {
150
- const rowid = $xeTable ? $xeTable.getRowid(row) : '';
162
+ const rowid = $xeTable.getRowid(row);
151
163
  const rowRest = fullAllDataRowIdData[rowid] || {};
152
164
  let rowIndex = $rowIndex;
153
165
  let _rowIndex = -1;
@@ -164,28 +176,45 @@ export default defineVxeComponent({
164
176
  }
165
177
  // 如果是树形表格
166
178
  if (isExpandTree) {
167
- trVNs.push(...renderRows($xeTable, rowChildren));
179
+ trVNs.push(...renderTaskRows($xeTable, rowChildren));
168
180
  }
169
181
  });
170
182
  return trVNs;
171
183
  };
172
184
  const renderVN = () => {
173
- const $xeTable = $xeGanttView.internalData.xeTable;
174
- const { tableData } = reactData;
185
+ const $xeTable = ganttViewInternalData.xeTable;
186
+ const { tableData } = ganttViewReactData;
187
+ const taskLinkOpts = computeTaskLinkOpts.value;
188
+ const { showArrow } = taskLinkOpts;
175
189
  return h('div', {
176
190
  ref: refElem,
177
191
  class: 'vxe-gantt-view--chart-wrapper'
178
- }, $xeTable ? renderRows($xeTable, tableData) : []);
192
+ }, [
193
+ $xeGantt.renderGanttTaskLines
194
+ ? h('div', {
195
+ ref: reflineWrapperElem,
196
+ class: ['vxe-gantt-view--chart-line-wrapper', {
197
+ 'show-arrow': showArrow
198
+ }]
199
+ }, $xeTable && isEnableConf(taskLinkOpts) ? $xeGantt.renderGanttTaskLines() : [])
200
+ : renderEmptyElement($xeGantt),
201
+ h('div', {
202
+ ref: refTaskWrapperElem,
203
+ class: 'vxe-gantt-view--chart-task-wrapper'
204
+ }, $xeTable ? renderTaskRows($xeTable, tableData) : [])
205
+ ]);
179
206
  };
180
207
  onMounted(() => {
181
- const { elemStore } = internalData;
208
+ const { elemStore } = ganttViewInternalData;
182
209
  const prefix = 'main-chart-';
183
- elemStore[`${prefix}wrapper`] = refElem;
210
+ elemStore[`${prefix}task-wrapper`] = refTaskWrapperElem;
211
+ elemStore[`${prefix}line-wrapper`] = reflineWrapperElem;
184
212
  });
185
213
  onUnmounted(() => {
186
- const { elemStore } = internalData;
214
+ const { elemStore } = ganttViewInternalData;
187
215
  const prefix = 'main-chart-';
188
- elemStore[`${prefix}wrapper`] = null;
216
+ elemStore[`${prefix}task-wrapper`] = null;
217
+ elemStore[`${prefix}line-wrapper`] = null;
189
218
  });
190
219
  return renderVN;
191
220
  }
@@ -2,7 +2,7 @@ import { h, ref, reactive, nextTick, inject, watch, provide, computed, onMounted
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import { setScrollTop, setScrollLeft, removeClass, addClass } from '../../ui/src/dom';
4
4
  import { VxeUI } from '@vxe-ui/core';
5
- import { getRefElem, getStandardGapTime } from './util';
5
+ import { getRefElem, getStandardGapTime, getTaskBarLeft, getTaskBarWidth } from './util';
6
6
  import XEUtils from 'xe-utils';
7
7
  import GanttViewHeaderComponent from './gantt-header';
8
8
  import GanttViewBodyComponent from './gantt-body';
@@ -86,7 +86,7 @@ export default defineVxeComponent({
86
86
  tableData: [],
87
87
  tableColumn: [],
88
88
  headerGroups: [],
89
- viewCellWidth: 20
89
+ viewCellWidth: 40
90
90
  });
91
91
  const internalData = createInternalData();
92
92
  const refMaps = {
@@ -704,12 +704,12 @@ export default defineVxeComponent({
704
704
  reactData.overflowX = overflowX;
705
705
  }
706
706
  };
707
- const updateChart = () => {
707
+ const updateTaskChart = () => {
708
708
  const { dragBarRow } = ganttInternalData;
709
709
  const { viewCellWidth } = reactData;
710
710
  const { elemStore, chartMaps } = internalData;
711
711
  const $xeTable = internalData.xeTable;
712
- const chartWrapper = getRefElem(elemStore['main-chart-wrapper']);
712
+ const chartWrapper = getRefElem(elemStore['main-chart-task-wrapper']);
713
713
  if (chartWrapper && $xeTable) {
714
714
  XEUtils.arrayEach(chartWrapper.children, (rowEl) => {
715
715
  const barEl = rowEl.children[0];
@@ -720,9 +720,9 @@ export default defineVxeComponent({
720
720
  if (dragBarRow && $xeTable.getRowid(dragBarRow) === rowid) {
721
721
  return;
722
722
  }
723
- const rowRest = rowid ? chartMaps[rowid] : null;
724
- barEl.style.left = `${rowRest ? viewCellWidth * rowRest.oLeftSize : 0}px`;
725
- barEl.style.width = `${rowRest ? viewCellWidth * rowRest.oWidthSize : 0}px`;
723
+ const chartRest = rowid ? chartMaps[rowid] : null;
724
+ barEl.style.left = `${getTaskBarLeft(chartRest, viewCellWidth)}px`;
725
+ barEl.style.width = `${getTaskBarWidth(chartRest, viewCellWidth)}px`;
726
726
  });
727
727
  }
728
728
  return nextTick();
@@ -735,6 +735,9 @@ export default defineVxeComponent({
735
735
  if (!el) {
736
736
  return;
737
737
  }
738
+ if (!$xeGantt) {
739
+ return;
740
+ }
738
741
  const scrollbarOpts = computeScrollbarOpts.value;
739
742
  const scrollbarXToTop = computeScrollbarXToTop.value;
740
743
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
@@ -834,7 +837,10 @@ export default defineVxeComponent({
834
837
  bodyTableElem.style.width = `${vmTableWidth}px`;
835
838
  }
836
839
  reactData.scrollXWidth = viewTableWidth;
837
- return updateChart();
840
+ return Promise.all([
841
+ updateTaskChart(),
842
+ $xeGantt.handleUpdateTaskLink ? $xeGantt.handleUpdateTaskLink($xeGanttView) : null
843
+ ]);
838
844
  };
839
845
  const handleRecalculateStyle = () => {
840
846
  const el = refElem.value;
@@ -842,9 +848,11 @@ export default defineVxeComponent({
842
848
  if (!el || !el.clientWidth) {
843
849
  return nextTick();
844
850
  }
851
+ if (!$xeGantt) {
852
+ return nextTick();
853
+ }
845
854
  calcScrollbar();
846
855
  updateStyle();
847
- updateChart();
848
856
  return computeScrollLoad();
849
857
  };
850
858
  const handleLazyRecalculate = () => {
@@ -1016,7 +1024,7 @@ export default defineVxeComponent({
1016
1024
  }
1017
1025
  ySpaceHeight = maxYHeight;
1018
1026
  }
1019
- const bodyChartWrapperElem = getRefElem(elemStore['main-chart-wrapper']);
1027
+ const bodyChartWrapperElem = getRefElem(elemStore['main-chart-task-wrapper']);
1020
1028
  if (bodyTableElem) {
1021
1029
  bodyTableElem.style.transform = `translate(${reactData.scrollXLeft || 0}px, ${scrollYTop}px)`;
1022
1030
  }
@@ -1031,6 +1039,11 @@ export default defineVxeComponent({
1031
1039
  if (scrollYSpaceEl) {
1032
1040
  scrollYSpaceEl.style.height = ySpaceHeight ? `${ySpaceHeight}px` : '';
1033
1041
  }
1042
+ const lineWrapper = getRefElem(elemStore['main-chart-line-wrapper']);
1043
+ const svgElem = lineWrapper ? lineWrapper.firstElementChild : null;
1044
+ if (svgElem) {
1045
+ svgElem.style.height = ySpaceHeight ? `${ySpaceHeight}px` : '';
1046
+ }
1034
1047
  reactData.scrollYTop = scrollYTop;
1035
1048
  reactData.scrollYHeight = scrollYHeight;
1036
1049
  reactData.isScrollYBig = isScrollYBig;
@@ -5,6 +5,7 @@ import { getLastZIndex, nextZIndex, isEnableConf, formatText } from '../../ui/sr
5
5
  import { getOffsetHeight, getPaddingTopBottomSize, getDomNode, toCssUnit, addClass, removeClass } from '../../ui/src/dom';
6
6
  import { getSlotVNs } from '../../ui/src/vn';
7
7
  import { VxeUI } from '@vxe-ui/core';
8
+ import { getTaskLinkKey } from './util';
8
9
  import { ganttEmits } from './emits';
9
10
  import { tableEmits } from './table-emits';
10
11
  import { warnLog, errLog } from '../../ui/src/log';
@@ -17,6 +18,9 @@ const tableComponentMethodKeys = ['clearAll', 'syncData', 'updateData', 'loadDat
17
18
  const defaultLayouts = [['Form'], ['Toolbar', 'Top', 'Gantt', 'Bottom', 'Pager']];
18
19
  function createInternalData() {
19
20
  return {
21
+ linkFromConfMaps: {},
22
+ linkFromKeyMaps: {},
23
+ linkUniqueMaps: {},
20
24
  uFoot: false,
21
25
  resizeTableWidth: 0
22
26
  // barTipTimeout: null
@@ -40,7 +44,7 @@ function getViewTypeLevel(type) {
40
44
  export default defineVxeComponent({
41
45
  name: 'VxeGantt',
42
46
  mixins: [],
43
- props: Object.assign(Object.assign({}, tableProps), { columns: Array, pagerConfig: Object, proxyConfig: Object, toolbarConfig: Object, formConfig: Object, zoomConfig: Object, layouts: Array, taskConfig: Object, taskViewScaleConfig: Object, taskViewConfig: Object, taskBarConfig: Object, taskBarTooltipConfig: Object, taskSplitConfig: Object, taskBarResizeConfig: Object, taskBarDragConfig: Object, size: {
47
+ props: Object.assign(Object.assign({}, tableProps), { columns: Array, pagerConfig: Object, proxyConfig: Object, toolbarConfig: Object, formConfig: Object, zoomConfig: Object, links: Array, layouts: Array, taskConfig: Object, taskViewScaleConfig: Object, taskViewConfig: Object, taskLinkConfig: Object, taskBarConfig: Object, taskBarTooltipConfig: Object, taskSplitConfig: Object, taskBarResizeConfig: Object, taskBarMoveConfig: Object, size: {
44
48
  type: String,
45
49
  default: () => getConfig().gantt.size || getConfig().size
46
50
  } }),
@@ -60,6 +64,7 @@ export default defineVxeComponent({
60
64
  tableLoading: false,
61
65
  proxyInited: false,
62
66
  isZMax: false,
67
+ tableLinks: [],
63
68
  tableData: [],
64
69
  filterData: [],
65
70
  formData: {},
@@ -79,7 +84,9 @@ export default defineVxeComponent({
79
84
  content: '',
80
85
  visible: false,
81
86
  params: null
82
- }
87
+ },
88
+ linkList: [],
89
+ upLinkFlag: 0
83
90
  });
84
91
  const internalData = createInternalData();
85
92
  const refElem = ref();
@@ -156,8 +163,8 @@ export default defineVxeComponent({
156
163
  const computeTaskBarOpts = computed(() => {
157
164
  return Object.assign({}, getConfig().gantt.taskBarConfig, props.taskBarConfig);
158
165
  });
159
- const computeTaskBarDragOpts = computed(() => {
160
- return Object.assign({}, getConfig().gantt.taskBarDragConfig, props.taskBarDragConfig);
166
+ const computeTaskBarMoveOpts = computed(() => {
167
+ return Object.assign({}, getConfig().gantt.taskBarMoveConfig, props.taskBarMoveConfig);
161
168
  });
162
169
  const computeTaskBarResizeOpts = computed(() => {
163
170
  return Object.assign({}, getConfig().gantt.taskBarResizeConfig, props.taskBarResizeConfig);
@@ -168,6 +175,9 @@ export default defineVxeComponent({
168
175
  const computeTaskBarTooltipOpts = computed(() => {
169
176
  return Object.assign({}, getConfig().gantt.taskBarTooltipConfig, props.taskBarTooltipConfig);
170
177
  });
178
+ const computeTaskLinkOpts = computed(() => {
179
+ return Object.assign({}, getConfig().gantt.taskLinkConfig, props.taskLinkConfig);
180
+ });
171
181
  const computeScaleUnit = computed(() => {
172
182
  const minScale = computeMinScale.value;
173
183
  return minScale ? minScale.type : 'date';
@@ -395,10 +405,11 @@ export default defineVxeComponent({
395
405
  computeTaskViewScaleOpts,
396
406
  computeTaskViewOpts,
397
407
  computeTaskBarOpts,
398
- computeTaskBarDragOpts,
408
+ computeTaskBarMoveOpts,
399
409
  computeTaskBarResizeOpts,
400
410
  computeTaskSplitOpts,
401
411
  computeTaskBarTooltipOpts,
412
+ computeTaskLinkOpts,
402
413
  computeTaskViewScales,
403
414
  computeScaleUnit,
404
415
  computeMinScale,
@@ -797,6 +808,42 @@ export default defineVxeComponent({
797
808
  const handleSplitRightViewEvent = () => {
798
809
  reactData.showRightView = !reactData.showRightView;
799
810
  };
811
+ const handleTableLinks = () => {
812
+ const { linkList } = reactData;
813
+ reactData.tableLinks = linkList.slice(0);
814
+ };
815
+ const handleTaskAddLink = (item, linkConfs, fromConfMaps, fromKeyMaps, uniqueMaps) => {
816
+ if (item) {
817
+ const { type, from, to, lineStatus, lineColor, lineTyle, lineWidth, showArrow } = item;
818
+ const tlKey = getTaskLinkKey(from, to);
819
+ if (from && to && !uniqueMaps[tlKey]) {
820
+ let confs = fromConfMaps[from];
821
+ if (!confs) {
822
+ confs = fromConfMaps[from] = [];
823
+ }
824
+ const confObj = { type, from, to, lineStatus, lineColor, lineTyle, lineWidth, showArrow };
825
+ confs.push(confObj);
826
+ linkConfs.push(confObj);
827
+ fromKeyMaps[from] = confObj;
828
+ uniqueMaps[tlKey] = confObj;
829
+ }
830
+ }
831
+ };
832
+ const handleTaskUpdateLinks = (links) => {
833
+ const linkConfs = [];
834
+ const fromConfMaps = {};
835
+ const fromKeyMaps = {};
836
+ const uniqueMaps = {};
837
+ XEUtils.each(links || [], item => {
838
+ handleTaskAddLink(item, linkConfs, fromConfMaps, fromKeyMaps, uniqueMaps);
839
+ });
840
+ reactData.linkList = linkConfs;
841
+ internalData.linkFromConfMaps = fromConfMaps;
842
+ internalData.linkFromKeyMaps = fromKeyMaps;
843
+ internalData.linkUniqueMaps = uniqueMaps;
844
+ $xeGantt.handleTableLinks();
845
+ return nextTick();
846
+ };
800
847
  const tableCompEvents = {};
801
848
  tableEmits.forEach(name => {
802
849
  const type = XEUtils.camelCase(`on-${name}`);
@@ -1686,6 +1733,9 @@ export default defineVxeComponent({
1686
1733
  $xeGantt.closeTaskBarTooltip();
1687
1734
  }
1688
1735
  },
1736
+ handleTableLinks,
1737
+ handleTaskAddLink,
1738
+ handleTaskUpdateLinks,
1689
1739
  handleTaskHeaderContextmenuEvent(evnt, params) {
1690
1740
  const $xeTable = refTable.value;
1691
1741
  if ($xeTable) {
@@ -2229,9 +2279,20 @@ export default defineVxeComponent({
2229
2279
  }
2230
2280
  }
2231
2281
  });
2282
+ if (props.links) {
2283
+ $xeGantt.handleTaskUpdateLinks(props.links);
2284
+ }
2232
2285
  handleTaskScaleConfig();
2233
2286
  initPages();
2234
2287
  onMounted(() => {
2288
+ if (!$xeGantt.handleUpdateTaskLink) {
2289
+ if (props.links) {
2290
+ warnLog('vxe.error.notProp', ['links']);
2291
+ }
2292
+ if (props.taskLinkConfig) {
2293
+ warnLog('vxe.error.notProp', ['task-link-config']);
2294
+ }
2295
+ }
2235
2296
  nextTick(() => {
2236
2297
  const { columns } = props;
2237
2298
  const proxyOpts = computeProxyOpts.value;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 依赖线枚举类型
3
+ */
4
+ export var VxeGanttDependencyType;
5
+ (function (VxeGanttDependencyType) {
6
+ /**
7
+ * 结束后才开始,表示一个任务必须在另一个任务开始之前完成
8
+ */
9
+ VxeGanttDependencyType[VxeGanttDependencyType["FinishToStart"] = 0] = "FinishToStart";
10
+ /**
11
+ * 开始到结束,表示从某个过程的开始到结束的整个过程
12
+ */
13
+ VxeGanttDependencyType[VxeGanttDependencyType["StartToFinish"] = 1] = "StartToFinish";
14
+ /**
15
+ * 开始后才开始,表示一个活动结束了,另一个活动才能开始,它们之间按先后顺序进行
16
+ */
17
+ VxeGanttDependencyType[VxeGanttDependencyType["StartToStart"] = 2] = "StartToStart";
18
+ /**
19
+ * 完成到完成,表示一个任务必须在另一个任务完成之后才能完成
20
+ */
21
+ VxeGanttDependencyType[VxeGanttDependencyType["FinishToFinish"] = 3] = "FinishToFinish";
22
+ })(VxeGanttDependencyType || (VxeGanttDependencyType = {}));
@@ -1,4 +1,7 @@
1
1
  export const tableEmits = [
2
+ 'ready',
3
+ 'init-rendered',
4
+ 'data-rendered',
2
5
  'update:data',
3
6
  'keydown-start',
4
7
  'keydown',
@@ -6,6 +9,7 @@ export const tableEmits = [
6
9
  'paste',
7
10
  'copy',
8
11
  'cut',
12
+ 'context-menu',
9
13
  'columns-change',
10
14
  'data-change',
11
15
  'footer-data-change',
@@ -27,3 +27,12 @@ export function getStandardGapTime(type) {
27
27
  }
28
28
  return 1000 * 60 * 60 * 24;
29
29
  }
30
+ export function getTaskBarLeft(chartRest, viewCellWidth) {
31
+ return chartRest ? viewCellWidth * chartRest.oLeftSize : 0;
32
+ }
33
+ export function getTaskBarWidth(chartRest, viewCellWidth) {
34
+ return Math.max(1, chartRest ? (Math.floor(viewCellWidth * chartRest.oWidthSize) - 1) : 0);
35
+ }
36
+ export function getTaskLinkKey(from, to) {
37
+ return `${from}_${to}`;
38
+ }
@@ -1,5 +1,5 @@
1
1
  @charset "UTF-8";
2
- .vxe-gantt-view--chart-wrapper {
2
+ .vxe-gantt-view--chart-task-wrapper {
3
3
  position: absolute;
4
4
  top: 0;
5
5
  left: 0;
@@ -17,7 +17,7 @@
17
17
  .vxe-gantt-view--chart-row.is--round > .vxe-gantt-view--chart-bar:hover::after, .vxe-gantt-view--chart-row.is--round > .vxe-gantt-view--chart-custom-bar:hover::after {
18
18
  border-radius: var(--vxe-ui-gantt-view-task-bar-border-radius);
19
19
  }
20
- .vxe-gantt-view--chart-row.is--drag > .vxe-gantt-view--chart-bar, .vxe-gantt-view--chart-row.is--drag > .vxe-gantt-view--chart-custom-bar {
20
+ .vxe-gantt-view--chart-row.is--move > .vxe-gantt-view--chart-bar, .vxe-gantt-view--chart-row.is--move > .vxe-gantt-view--chart-custom-bar {
21
21
  -webkit-user-select: none;
22
22
  -moz-user-select: none;
23
23
  user-select: none;
@@ -1 +1 @@
1
- @charset "UTF-8";.vxe-gantt-view--chart-wrapper{position:absolute;top:0;left:0;pointer-events:none}.vxe-gantt-view--chart-row{position:relative;width:100%;height:0}.vxe-gantt-view--chart-row.is--round>.vxe-gantt-view--chart-bar,.vxe-gantt-view--chart-row.is--round>.vxe-gantt-view--chart-custom-bar{border-radius:var(--vxe-ui-gantt-view-task-bar-border-radius)}.vxe-gantt-view--chart-row.is--round>.vxe-gantt-view--chart-bar:hover::after,.vxe-gantt-view--chart-row.is--round>.vxe-gantt-view--chart-custom-bar:hover::after{border-radius:var(--vxe-ui-gantt-view-task-bar-border-radius)}.vxe-gantt-view--chart-row.is--drag>.vxe-gantt-view--chart-bar,.vxe-gantt-view--chart-row.is--drag>.vxe-gantt-view--chart-custom-bar{-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-gantt-view--chart-bar,.vxe-gantt-view--chart-custom-bar{display:flex;flex-direction:row;position:absolute;top:50%;left:0;transform:translateY(-50%);color:#fff;background-color:var(--vxe-ui-gantt-view-task-bar-background-color);overflow:hidden;pointer-events:all}.vxe-gantt-view--chart-bar{align-items:center;height:var(--vxe-ui-gantt-view-chart-bar-height)}.vxe-gantt-view--chart-bar:hover::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.1);pointer-events:none}.vxe-gantt-view--chart-progress{flex-shrink:0;width:0;height:100%;text-align:left;background-color:var(--vxe-ui-gantt-view-task-bar-completed-background-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-gantt-view--chart-content{position:absolute;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9em;padding:0 .6em}.vxe-gantt-view--chart-row.row--drag-move{transition:transform .5s ease}.vxe-gantt-view--chart-row.row--drag-origin{opacity:.3}.vxe-gantt{position:relative;display:flex;flex-direction:column}.vxe-gantt.is--loading:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:99;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:var(--vxe-ui-loading-background-color)}.vxe-gantt.is--loading>.vxe-gantt-view .vxe-loading{background-color:transparent}.vxe-gantt.is--maximize{position:fixed;top:0;left:0;width:100%;height:100%;padding:.5em 1em;background-color:var(--vxe-ui-layout-background-color)}.vxe-gantt.is--split-drag{cursor:col-resize}.vxe-gantt.is--split-drag .vxe-gantt--table-wrapper::after,.vxe-gantt.is--split-drag .vxe-gantt--view-wrapper::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;background:0 0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-gantt .vxe-gantt--bottom-wrapper,.vxe-gantt .vxe-gantt--form-wrapper,.vxe-gantt .vxe-gantt--top-wrapper{position:relative}.vxe-gantt .vxe-gantt--gantt-container{position:relative;display:flex;flex-direction:row}.vxe-gantt .vxe-gantt--left-wrapper,.vxe-gantt .vxe-gantt--right-wrapper{flex-shrink:0;overflow:auto;outline:0}.vxe-gantt .vxe-gantt--table-wrapper,.vxe-gantt .vxe-gantt--view-wrapper{display:none;position:relative;flex-grow:1;overflow:hidden}.vxe-gantt .vxe-gantt--view-split-bar{flex-shrink:0;width:var(--vxe-ui-gantt-view-split-bar-width)}.vxe-gantt .vxe-gantt--view-split-bar.is--resize{cursor:col-resize}.vxe-gantt .vxe-gantt--view-split-bar-handle{background-color:var(--vxe-ui-gantt-view-split-bar-background-color)}.vxe-gantt .vxe-gantt--view-split-bar-handle:active,.vxe-gantt .vxe-gantt--view-split-bar-handle:hover{background-color:var(--vxe-ui-gantt-view-split-bar-hover-background-color)}.vxe-gantt.show--left .vxe-gantt--table-wrapper{display:block}.vxe-gantt.show--left.show--right .vxe-gantt--table-wrapper{flex-grow:unset;flex-shrink:0;width:var(--vxe-ui-gantt-view-table-default-width)}.vxe-gantt.show--right .vxe-gantt--view-wrapper{display:block}.vxe-gantt--layout-body-wrapper{display:flex;flex-direction:row;overflow:auto;flex-grow:1}.vxe-gantt--layout-body-content-wrapper{flex-grow:1;overflow:hidden}.vxe-gantt--layout-aside-left-wrapper,.vxe-gantt--layout-footer-wrapper,.vxe-gantt--layout-header-wrapper{flex-shrink:0;overflow:auto}.vxe-gantt--border-line{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none;border:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--full .vxe-gantt-view--body-column,.vxe-gantt.border--full .vxe-gantt-view--footer-column,.vxe-gantt.border--full .vxe-gantt-view--header-column{background-image:linear-gradient(var(--vxe-ui-table-border-color),var(--vxe-ui-table-border-color)),linear-gradient(var(--vxe-ui-table-border-color),var(--vxe-ui-table-border-color));background-repeat:no-repeat;background-size:var(--vxe-ui-table-border-width) 100%,100% var(--vxe-ui-table-border-width);background-position:right top,right bottom}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--default .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--inner .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--inner .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--outer .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--outer .vxe-gantt-view--scroll-y-top-corner::before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;border-width:0;border-style:solid;border-color:var(--vxe-ui-table-border-color)}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--inner .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--outer .vxe-gantt-view--scroll-y-top-corner::before{border-bottom-width:var(--vxe-ui-table-border-width)}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt.border--inner .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt.border--outer .vxe-gantt-view--scroll-y-bottom-corner{border-top:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--full .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--inner .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--outer .vxe-gantt-view--scroll-x-handle-appearance{position:absolute;left:0;width:100%;height:100%;z-index:1;pointer-events:none}.vxe-gantt.border--default.sx-pos--top .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--full.sx-pos--top .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--inner.sx-pos--top .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--outer.sx-pos--top .vxe-gantt-view--scroll-x-handle-appearance{top:0;border-bottom:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default.sx-pos--bottom .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--full.sx-pos--bottom .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--inner.sx-pos--bottom .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--outer.sx-pos--bottom .vxe-gantt-view--scroll-x-handle-appearance{bottom:0;height:calc(100% + var(--vxe-ui-table-border-width));border-top:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-top-corner::before{border-left-width:var(--vxe-ui-table-border-width);border-right-width:var(--vxe-ui-table-border-width)}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-bottom-corner::before{border-left-width:var(--vxe-ui-table-border-width);border-right-width:var(--vxe-ui-table-border-width)}.vxe-gantt.border--default.sy-pos--right .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--default.sy-pos--right .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--full.sy-pos--right .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--full.sy-pos--right .vxe-gantt-view--scroll-y-top-corner::before{width:calc(100% + 1px);left:-1px}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-handle-appearance,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-handle-appearance{position:absolute;top:0;width:100%;height:100%;z-index:1;pointer-events:none}.vxe-gantt.border--default.sy-pos--left .vxe-gantt-view--scroll-y-handle-appearance,.vxe-gantt.border--full.sy-pos--left .vxe-gantt-view--scroll-y-handle-appearance{left:0;border-right:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default.sy-pos--right .vxe-gantt-view--scroll-y-handle-appearance,.vxe-gantt.border--full.sy-pos--right .vxe-gantt-view--scroll-y-handle-appearance{right:0;width:calc(100% + var(--vxe-ui-table-border-width));border-left:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default .vxe-gantt-view--body-column,.vxe-gantt.border--default .vxe-gantt-view--footer-column,.vxe-gantt.border--default .vxe-gantt-view--header-column,.vxe-gantt.border--inner .vxe-gantt-view--body-column,.vxe-gantt.border--inner .vxe-gantt-view--footer-column,.vxe-gantt.border--inner .vxe-gantt-view--header-column{background-image:linear-gradient(var(--vxe-ui-table-border-color),var(--vxe-ui-table-border-color));background-repeat:no-repeat;background-size:100% var(--vxe-ui-table-border-width);background-position:right bottom}.vxe-gantt.border--default .vxe-gantt-view--footer-wrapper,.vxe-gantt.border--full .vxe-gantt-view--footer-wrapper,.vxe-gantt.border--inner .vxe-gantt-view--footer-wrapper{border-top:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--inner .vxe-gantt--border-line{border-width:0 0 1px 0}.vxe-gantt.border--none .vxe-gantt--border-line{display:none}.vxe-gantt--view-split-bar{position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-gantt--view-split-bar-handle{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3}.vxe-gantt--view-split-bar-btn-wrapper{display:flex;flex-direction:column;align-items:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:5;pointer-events:none}.vxe-gantt--view-split-bar-btn-wrapper>div{margin-top:1em}.vxe-gantt--view-split-bar-btn-wrapper>div:first-child{margin-top:0}.vxe-gantt--view-split-bar-left-btn,.vxe-gantt--view-split-bar-right-btn{display:flex;flex-direction:row;align-items:center;justify-content:center;height:var(--vxe-ui-gantt-view-split-bar-height);width:var(--vxe-ui-gantt-view-split-bar-width);color:var(--vxe-ui-layout-background-color);border-radius:var(--vxe-ui-base-border-radius);background-color:var(--vxe-ui-gantt-view-handle-background-color);border:1px solid var(--vxe-ui-input-border-color);pointer-events:all;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .1s ease-in-out}.vxe-gantt--view-split-bar-left-btn:hover,.vxe-gantt--view-split-bar-right-btn:hover{color:#fff;background-color:var(--vxe-ui-font-primary-color)}.vxe-gantt--view-split-bar-left-btn:active,.vxe-gantt--view-split-bar-right-btn:active{transform:scale(.9)}.vxe-gantt--view-split-bar-left-btn i,.vxe-gantt--view-split-bar-right-btn i{font-size:.5em}.vxe-gantt--resizable-split-tip{display:none;position:absolute;top:0;left:0;width:1px;height:100%;z-index:7;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:col-resize}.vxe-gantt--resizable-split-tip:before{content:"";display:block;height:100%;background-color:var(--vxe-ui-table-resizable-drag-line-color)}.vxe-gantt--resizable-split-tip-number{position:absolute;top:0;left:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.vxe-gantt--resizable-split-number-left,.vxe-gantt--resizable-split-number-right{position:absolute;padding:.25em .25em;font-size:12px;border-radius:var(--vxe-ui-border-radius);white-space:nowrap;color:#fff;background-color:var(--vxe-ui-table-resizable-drag-line-color)}.vxe-gantt--resizable-split-number-left{right:0}.vxe-gantt--resizable-split-number-right{left:1px}.vxe-gantt.is--loading>.vxe-gantt-view--scroll-x-virtual{visibility:hidden}.vxe-gantt.is--loading>.vxe-gantt-view--layout-wrapper>.vxe-gantt-view--scroll-y-virtual{visibility:hidden}.vxe-gantt .vxe-gantt-view--scroll-x-virtual{height:0}.vxe-gantt .vxe-gantt-view--scroll-y-virtual{width:0}.vxe-gantt .vxe-gantt-view--scroll-x-virtual,.vxe-gantt .vxe-gantt-view--scroll-y-virtual{visibility:hidden;position:relative;flex-shrink:0;z-index:7}.vxe-gantt .vxe-gantt-view--scroll-x-handle,.vxe-gantt .vxe-gantt-view--scroll-x-left-corner,.vxe-gantt .vxe-gantt-view--scroll-x-right-corner,.vxe-gantt .vxe-gantt-view--scroll-x-wrapper,.vxe-gantt .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt .vxe-gantt-view--scroll-y-handle,.vxe-gantt .vxe-gantt-view--scroll-y-top-corner,.vxe-gantt .vxe-gantt-view--scroll-y-wrapper{position:absolute}.vxe-gantt .vxe-gantt-view--scroll-x-handle,.vxe-gantt .vxe-gantt-view--scroll-x-wrapper{width:100%;left:0;bottom:0}.vxe-gantt .vxe-gantt-view--scroll-x-handle{overflow-y:hidden;overflow-x:scroll;height:18px}.vxe-gantt .vxe-gantt-view--scroll-x-wrapper{height:100%}.vxe-gantt .vxe-gantt-view--scroll-y-handle,.vxe-gantt .vxe-gantt-view--scroll-y-wrapper{width:100%;height:100%;right:0;top:0}.vxe-gantt .vxe-gantt-view--scroll-y-handle{overflow-y:scroll;overflow-x:hidden;width:18px;height:100%}.vxe-gantt .vxe-gantt-view--scroll-x-space{height:1px}.vxe-gantt .vxe-gantt-view--scroll-y-space{width:1px}.vxe-gantt .vxe-gantt-view--scroll-x-left-corner,.vxe-gantt .vxe-gantt-view--scroll-x-right-corner,.vxe-gantt .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt .vxe-gantt-view--scroll-y-top-corner{display:none;position:absolute}.vxe-gantt .vxe-gantt-view--scroll-x-left-corner,.vxe-gantt .vxe-gantt-view--scroll-x-right-corner{bottom:0;width:0;height:100%}.vxe-gantt .vxe-gantt-view--scroll-x-left-corner::before,.vxe-gantt .vxe-gantt-view--scroll-x-right-corner::before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;border-width:var(--vxe-ui-table-border-width);border-style:solid;border-color:var(--vxe-ui-table-border-color)}.vxe-gantt .vxe-gantt-view--scroll-x-left-corner{left:0}.vxe-gantt .vxe-gantt-view--scroll-x-right-corner{right:0}.vxe-gantt.sy-pos--right .vxe-gantt-view--scroll-x-right-corner{right:1px}.vxe-gantt.sy-pos--right .vxe-gantt-view--scroll-x-right-corner::before{border-right:0}.vxe-gantt.sx-pos--bottom .vxe-gantt-view--scroll-x-right-corner{bottom:1px}.vxe-gantt.sx-pos--bottom .vxe-gantt-view--scroll-x-right-corner::before{border-bottom:0}.vxe-gantt .vxe-gantt-view--scroll-y-top-corner{background-color:var(--vxe-ui-table-header-background-color)}.vxe-gantt .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt .vxe-gantt-view--scroll-y-top-corner{top:0;right:0;width:100%;height:0}.vxe-gantt .vxe-gantt-view--scroll-y-bottom-corner{margin-top:-1px}.vxe-gantt-view--layout-wrapper{display:flex;flex-direction:row;background-color:var(--vxe-ui-layout-background-color)}.vxe-gantt-view--viewport-wrapper{position:relative;overflow:hidden;flex-grow:1}.vxe-gantt-view--render-vars{width:0;height:0;overflow:hidden}.vxe-gantt-view--column-info{width:var(--vxe-ui-gantt-view-default-cell-width)}.vxe-gantt-view{flex-grow:1;overflow:hidden}.vxe-gantt-view .vxe-body--x-space{width:100%;height:1px;margin-bottom:-1px}.vxe-gantt-view .vxe-body--y-space{width:0;float:left}.vxe-gantt-view--body-table,.vxe-gantt-view--header-table{border:0;border-spacing:0;border-collapse:separate;table-layout:fixed}.vxe-gantt-view--body-table col,.vxe-gantt-view--header-table col{width:var(--vxe-ui-gantt-view-default-cell-width)}.vxe-gantt-view--body-table{-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-gantt-view--header-wrapper{background-color:var(--vxe-ui-table-header-background-color)}.vxe-gantt-view--footer-wrapper{margin-top:calc(var(--vxe-ui-table-border-width) * -1);background-color:var(--vxe-ui-table-footer-background-color)}.vxe-gantt-view--body-wrapper,.vxe-gantt-view--header-wrapper{overflow:hidden}.vxe-gantt-view--header-inner-wrapper{overflow-y:hidden;overflow-x:scroll}.vxe-gantt-view--body-inner-wrapper{overflow-y:scroll;overflow-x:scroll}.vxe-gantt-view--body-inner-wrapper,.vxe-gantt-view--header-inner-wrapper{position:relative;width:100%;height:100%;scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}.vxe-gantt-view--body-inner-wrapper::-webkit-scrollbar,.vxe-gantt-view--header-inner-wrapper::-webkit-scrollbar{display:none}.vxe-gantt-view--header-column{text-align:center;font-size:1em;height:var(--vxe-ui-gantt-view-cell-height,var(--vxe-ui-table-row-line-height))}.vxe-gantt-view--header-column.is--now{color:var(--vxe-ui-font-primary-color)}.vxe-gantt-view--body-column.is--now::before{content:"";position:absolute;top:0;left:0;width:1px;height:100%;background-color:var(--vxe-ui-font-primary-color)}.vxe-gantt-view--body-column,.vxe-gantt-view--footer-column,.vxe-gantt-view--header-column{position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-gantt-view--body-row.row--stripe{background-color:var(--vxe-ui-table-row-striped-background-color)}.vxe-gantt-view--body-row.row--radio{background-color:var(--vxe-ui-table-row-radio-checked-background-color)}.vxe-gantt-view--body-row.row--checked{background-color:var(--vxe-ui-table-row-checkbox-checked-background-color)}.vxe-gantt-view--body-row.row--current{background-color:var(--vxe-ui-table-row-current-background-color)}.vxe-gantt-view--body-row.row--hover{background-color:var(--vxe-ui-table-row-hover-background-color)}.vxe-gantt-view--body-row.row--hover.row--stripe{background-color:var(--vxe-ui-table-row-hover-striped-background-color)}.vxe-gantt-view--body-row.row--hover.row--radio{background-color:var(--vxe-ui-table-row-hover-radio-checked-background-color)}.vxe-gantt-view--body-row.row--hover.row--checked{background-color:var(--vxe-ui-table-row-hover-checkbox-checked-background-color)}.vxe-gantt-view--body-row.row--hover.row--current{background-color:var(--vxe-ui-table-row-hover-current-background-color)}.vxe-gantt-view--body-row.row--drag-move{transition:transform .5s ease}.vxe-gantt-view--body-row.row--drag-origin>.vxe-gantt-view--body-column{opacity:.3}.vxe-gantt-view--body-column .vxe-gantt-view-cell--row-resizable{position:absolute;left:0;bottom:-.4em;height:.8em;width:100%;text-align:center;z-index:1;cursor:row-resize}.vxe-gantt-view--body-row:last-child .vxe-gantt-view--body-column .vxe-gantt-view-cell--row-resizable{height:.4em;bottom:0}.vxe-gantt{font-size:var(--vxe-ui-font-size-default)}.vxe-gantt.size--medium{font-size:var(--vxe-ui-font-size-medium)}.vxe-gantt.size--small{font-size:var(--vxe-ui-font-size-small)}.vxe-gantt.size--mini{font-size:var(--vxe-ui-font-size-mini)}
1
+ @charset "UTF-8";.vxe-gantt-view--chart-task-wrapper{position:absolute;top:0;left:0;pointer-events:none}.vxe-gantt-view--chart-row{position:relative;width:100%;height:0}.vxe-gantt-view--chart-row.is--round>.vxe-gantt-view--chart-bar,.vxe-gantt-view--chart-row.is--round>.vxe-gantt-view--chart-custom-bar{border-radius:var(--vxe-ui-gantt-view-task-bar-border-radius)}.vxe-gantt-view--chart-row.is--round>.vxe-gantt-view--chart-bar:hover::after,.vxe-gantt-view--chart-row.is--round>.vxe-gantt-view--chart-custom-bar:hover::after{border-radius:var(--vxe-ui-gantt-view-task-bar-border-radius)}.vxe-gantt-view--chart-row.is--move>.vxe-gantt-view--chart-bar,.vxe-gantt-view--chart-row.is--move>.vxe-gantt-view--chart-custom-bar{-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-gantt-view--chart-bar,.vxe-gantt-view--chart-custom-bar{display:flex;flex-direction:row;position:absolute;top:50%;left:0;transform:translateY(-50%);color:#fff;background-color:var(--vxe-ui-gantt-view-task-bar-background-color);overflow:hidden;pointer-events:all}.vxe-gantt-view--chart-bar{align-items:center;height:var(--vxe-ui-gantt-view-chart-bar-height)}.vxe-gantt-view--chart-bar:hover::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.1);pointer-events:none}.vxe-gantt-view--chart-progress{flex-shrink:0;width:0;height:100%;text-align:left;background-color:var(--vxe-ui-gantt-view-task-bar-completed-background-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-gantt-view--chart-content{position:absolute;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9em;padding:0 .6em}.vxe-gantt-view--chart-row.row--drag-move{transition:transform .5s ease}.vxe-gantt-view--chart-row.row--drag-origin{opacity:.3}.vxe-gantt{position:relative;display:flex;flex-direction:column}.vxe-gantt.is--loading:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:99;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:var(--vxe-ui-loading-background-color)}.vxe-gantt.is--loading>.vxe-gantt-view .vxe-loading{background-color:transparent}.vxe-gantt.is--maximize{position:fixed;top:0;left:0;width:100%;height:100%;padding:.5em 1em;background-color:var(--vxe-ui-layout-background-color)}.vxe-gantt.is--split-drag{cursor:col-resize}.vxe-gantt.is--split-drag .vxe-gantt--table-wrapper::after,.vxe-gantt.is--split-drag .vxe-gantt--view-wrapper::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;background:0 0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-gantt .vxe-gantt--bottom-wrapper,.vxe-gantt .vxe-gantt--form-wrapper,.vxe-gantt .vxe-gantt--top-wrapper{position:relative}.vxe-gantt .vxe-gantt--gantt-container{position:relative;display:flex;flex-direction:row}.vxe-gantt .vxe-gantt--left-wrapper,.vxe-gantt .vxe-gantt--right-wrapper{flex-shrink:0;overflow:auto;outline:0}.vxe-gantt .vxe-gantt--table-wrapper,.vxe-gantt .vxe-gantt--view-wrapper{display:none;position:relative;flex-grow:1;overflow:hidden}.vxe-gantt .vxe-gantt--view-split-bar{flex-shrink:0;width:var(--vxe-ui-gantt-view-split-bar-width)}.vxe-gantt .vxe-gantt--view-split-bar.is--resize{cursor:col-resize}.vxe-gantt .vxe-gantt--view-split-bar-handle{background-color:var(--vxe-ui-gantt-view-split-bar-background-color)}.vxe-gantt .vxe-gantt--view-split-bar-handle:active,.vxe-gantt .vxe-gantt--view-split-bar-handle:hover{background-color:var(--vxe-ui-gantt-view-split-bar-hover-background-color)}.vxe-gantt.show--left .vxe-gantt--table-wrapper{display:block}.vxe-gantt.show--left.show--right .vxe-gantt--table-wrapper{flex-grow:unset;flex-shrink:0;width:var(--vxe-ui-gantt-view-table-default-width)}.vxe-gantt.show--right .vxe-gantt--view-wrapper{display:block}.vxe-gantt--layout-body-wrapper{display:flex;flex-direction:row;overflow:auto;flex-grow:1}.vxe-gantt--layout-body-content-wrapper{flex-grow:1;overflow:hidden}.vxe-gantt--layout-aside-left-wrapper,.vxe-gantt--layout-footer-wrapper,.vxe-gantt--layout-header-wrapper{flex-shrink:0;overflow:auto}.vxe-gantt--border-line{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none;border:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--full .vxe-gantt-view--body-column,.vxe-gantt.border--full .vxe-gantt-view--footer-column,.vxe-gantt.border--full .vxe-gantt-view--header-column{background-image:linear-gradient(var(--vxe-ui-table-border-color),var(--vxe-ui-table-border-color)),linear-gradient(var(--vxe-ui-table-border-color),var(--vxe-ui-table-border-color));background-repeat:no-repeat;background-size:var(--vxe-ui-table-border-width) 100%,100% var(--vxe-ui-table-border-width);background-position:right top,right bottom}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--default .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--inner .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--inner .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--outer .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--outer .vxe-gantt-view--scroll-y-top-corner::before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;border-width:0;border-style:solid;border-color:var(--vxe-ui-table-border-color)}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--inner .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--outer .vxe-gantt-view--scroll-y-top-corner::before{border-bottom-width:var(--vxe-ui-table-border-width)}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt.border--inner .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt.border--outer .vxe-gantt-view--scroll-y-bottom-corner{border-top:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--full .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--inner .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--outer .vxe-gantt-view--scroll-x-handle-appearance{position:absolute;left:0;width:100%;height:100%;z-index:1;pointer-events:none}.vxe-gantt.border--default.sx-pos--top .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--full.sx-pos--top .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--inner.sx-pos--top .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--outer.sx-pos--top .vxe-gantt-view--scroll-x-handle-appearance{top:0;border-bottom:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default.sx-pos--bottom .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--full.sx-pos--bottom .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--inner.sx-pos--bottom .vxe-gantt-view--scroll-x-handle-appearance,.vxe-gantt.border--outer.sx-pos--bottom .vxe-gantt-view--scroll-x-handle-appearance{bottom:0;height:calc(100% + var(--vxe-ui-table-border-width));border-top:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-top-corner::before{border-left-width:var(--vxe-ui-table-border-width);border-right-width:var(--vxe-ui-table-border-width)}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-bottom-corner::before{border-left-width:var(--vxe-ui-table-border-width);border-right-width:var(--vxe-ui-table-border-width)}.vxe-gantt.border--default.sy-pos--right .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--default.sy-pos--right .vxe-gantt-view--scroll-y-top-corner::before,.vxe-gantt.border--full.sy-pos--right .vxe-gantt-view--scroll-y-bottom-corner::before,.vxe-gantt.border--full.sy-pos--right .vxe-gantt-view--scroll-y-top-corner::before{width:calc(100% + 1px);left:-1px}.vxe-gantt.border--default .vxe-gantt-view--scroll-y-handle-appearance,.vxe-gantt.border--full .vxe-gantt-view--scroll-y-handle-appearance{position:absolute;top:0;width:100%;height:100%;z-index:1;pointer-events:none}.vxe-gantt.border--default.sy-pos--left .vxe-gantt-view--scroll-y-handle-appearance,.vxe-gantt.border--full.sy-pos--left .vxe-gantt-view--scroll-y-handle-appearance{left:0;border-right:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default.sy-pos--right .vxe-gantt-view--scroll-y-handle-appearance,.vxe-gantt.border--full.sy-pos--right .vxe-gantt-view--scroll-y-handle-appearance{right:0;width:calc(100% + var(--vxe-ui-table-border-width));border-left:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--default .vxe-gantt-view--body-column,.vxe-gantt.border--default .vxe-gantt-view--footer-column,.vxe-gantt.border--default .vxe-gantt-view--header-column,.vxe-gantt.border--inner .vxe-gantt-view--body-column,.vxe-gantt.border--inner .vxe-gantt-view--footer-column,.vxe-gantt.border--inner .vxe-gantt-view--header-column{background-image:linear-gradient(var(--vxe-ui-table-border-color),var(--vxe-ui-table-border-color));background-repeat:no-repeat;background-size:100% var(--vxe-ui-table-border-width);background-position:right bottom}.vxe-gantt.border--default .vxe-gantt-view--footer-wrapper,.vxe-gantt.border--full .vxe-gantt-view--footer-wrapper,.vxe-gantt.border--inner .vxe-gantt-view--footer-wrapper{border-top:var(--vxe-ui-table-border-width) solid var(--vxe-ui-table-border-color)}.vxe-gantt.border--inner .vxe-gantt--border-line{border-width:0 0 1px 0}.vxe-gantt.border--none .vxe-gantt--border-line{display:none}.vxe-gantt--view-split-bar{position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-gantt--view-split-bar-handle{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3}.vxe-gantt--view-split-bar-btn-wrapper{display:flex;flex-direction:column;align-items:center;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:5;pointer-events:none}.vxe-gantt--view-split-bar-btn-wrapper>div{margin-top:1em}.vxe-gantt--view-split-bar-btn-wrapper>div:first-child{margin-top:0}.vxe-gantt--view-split-bar-left-btn,.vxe-gantt--view-split-bar-right-btn{display:flex;flex-direction:row;align-items:center;justify-content:center;height:var(--vxe-ui-gantt-view-split-bar-height);width:var(--vxe-ui-gantt-view-split-bar-width);color:var(--vxe-ui-layout-background-color);border-radius:var(--vxe-ui-base-border-radius);background-color:var(--vxe-ui-gantt-view-handle-background-color);border:1px solid var(--vxe-ui-input-border-color);pointer-events:all;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:all .1s ease-in-out}.vxe-gantt--view-split-bar-left-btn:hover,.vxe-gantt--view-split-bar-right-btn:hover{color:#fff;background-color:var(--vxe-ui-font-primary-color)}.vxe-gantt--view-split-bar-left-btn:active,.vxe-gantt--view-split-bar-right-btn:active{transform:scale(.9)}.vxe-gantt--view-split-bar-left-btn i,.vxe-gantt--view-split-bar-right-btn i{font-size:.5em}.vxe-gantt--resizable-split-tip{display:none;position:absolute;top:0;left:0;width:1px;height:100%;z-index:7;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:col-resize}.vxe-gantt--resizable-split-tip:before{content:"";display:block;height:100%;background-color:var(--vxe-ui-table-resizable-drag-line-color)}.vxe-gantt--resizable-split-tip-number{position:absolute;top:0;left:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.vxe-gantt--resizable-split-number-left,.vxe-gantt--resizable-split-number-right{position:absolute;padding:.25em .25em;font-size:12px;border-radius:var(--vxe-ui-border-radius);white-space:nowrap;color:#fff;background-color:var(--vxe-ui-table-resizable-drag-line-color)}.vxe-gantt--resizable-split-number-left{right:0}.vxe-gantt--resizable-split-number-right{left:1px}.vxe-gantt.is--loading>.vxe-gantt-view--scroll-x-virtual{visibility:hidden}.vxe-gantt.is--loading>.vxe-gantt-view--layout-wrapper>.vxe-gantt-view--scroll-y-virtual{visibility:hidden}.vxe-gantt .vxe-gantt-view--scroll-x-virtual{height:0}.vxe-gantt .vxe-gantt-view--scroll-y-virtual{width:0}.vxe-gantt .vxe-gantt-view--scroll-x-virtual,.vxe-gantt .vxe-gantt-view--scroll-y-virtual{visibility:hidden;position:relative;flex-shrink:0;z-index:7}.vxe-gantt .vxe-gantt-view--scroll-x-handle,.vxe-gantt .vxe-gantt-view--scroll-x-left-corner,.vxe-gantt .vxe-gantt-view--scroll-x-right-corner,.vxe-gantt .vxe-gantt-view--scroll-x-wrapper,.vxe-gantt .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt .vxe-gantt-view--scroll-y-handle,.vxe-gantt .vxe-gantt-view--scroll-y-top-corner,.vxe-gantt .vxe-gantt-view--scroll-y-wrapper{position:absolute}.vxe-gantt .vxe-gantt-view--scroll-x-handle,.vxe-gantt .vxe-gantt-view--scroll-x-wrapper{width:100%;left:0;bottom:0}.vxe-gantt .vxe-gantt-view--scroll-x-handle{overflow-y:hidden;overflow-x:scroll;height:18px}.vxe-gantt .vxe-gantt-view--scroll-x-wrapper{height:100%}.vxe-gantt .vxe-gantt-view--scroll-y-handle,.vxe-gantt .vxe-gantt-view--scroll-y-wrapper{width:100%;height:100%;right:0;top:0}.vxe-gantt .vxe-gantt-view--scroll-y-handle{overflow-y:scroll;overflow-x:hidden;width:18px;height:100%}.vxe-gantt .vxe-gantt-view--scroll-x-space{height:1px}.vxe-gantt .vxe-gantt-view--scroll-y-space{width:1px}.vxe-gantt .vxe-gantt-view--scroll-x-left-corner,.vxe-gantt .vxe-gantt-view--scroll-x-right-corner,.vxe-gantt .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt .vxe-gantt-view--scroll-y-top-corner{display:none;position:absolute}.vxe-gantt .vxe-gantt-view--scroll-x-left-corner,.vxe-gantt .vxe-gantt-view--scroll-x-right-corner{bottom:0;width:0;height:100%}.vxe-gantt .vxe-gantt-view--scroll-x-left-corner::before,.vxe-gantt .vxe-gantt-view--scroll-x-right-corner::before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;border-width:var(--vxe-ui-table-border-width);border-style:solid;border-color:var(--vxe-ui-table-border-color)}.vxe-gantt .vxe-gantt-view--scroll-x-left-corner{left:0}.vxe-gantt .vxe-gantt-view--scroll-x-right-corner{right:0}.vxe-gantt.sy-pos--right .vxe-gantt-view--scroll-x-right-corner{right:1px}.vxe-gantt.sy-pos--right .vxe-gantt-view--scroll-x-right-corner::before{border-right:0}.vxe-gantt.sx-pos--bottom .vxe-gantt-view--scroll-x-right-corner{bottom:1px}.vxe-gantt.sx-pos--bottom .vxe-gantt-view--scroll-x-right-corner::before{border-bottom:0}.vxe-gantt .vxe-gantt-view--scroll-y-top-corner{background-color:var(--vxe-ui-table-header-background-color)}.vxe-gantt .vxe-gantt-view--scroll-y-bottom-corner,.vxe-gantt .vxe-gantt-view--scroll-y-top-corner{top:0;right:0;width:100%;height:0}.vxe-gantt .vxe-gantt-view--scroll-y-bottom-corner{margin-top:-1px}.vxe-gantt-view--layout-wrapper{display:flex;flex-direction:row;background-color:var(--vxe-ui-layout-background-color)}.vxe-gantt-view--viewport-wrapper{position:relative;overflow:hidden;flex-grow:1}.vxe-gantt-view--render-vars{width:0;height:0;overflow:hidden}.vxe-gantt-view--column-info{width:var(--vxe-ui-gantt-view-default-cell-width)}.vxe-gantt-view{flex-grow:1;overflow:hidden}.vxe-gantt-view .vxe-body--x-space{width:100%;height:1px;margin-bottom:-1px}.vxe-gantt-view .vxe-body--y-space{width:0;float:left}.vxe-gantt-view--body-table,.vxe-gantt-view--header-table{border:0;border-spacing:0;border-collapse:separate;table-layout:fixed}.vxe-gantt-view--body-table col,.vxe-gantt-view--header-table col{width:var(--vxe-ui-gantt-view-default-cell-width)}.vxe-gantt-view--body-table{-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-gantt-view--header-wrapper{background-color:var(--vxe-ui-table-header-background-color)}.vxe-gantt-view--footer-wrapper{margin-top:calc(var(--vxe-ui-table-border-width) * -1);background-color:var(--vxe-ui-table-footer-background-color)}.vxe-gantt-view--body-wrapper,.vxe-gantt-view--header-wrapper{overflow:hidden}.vxe-gantt-view--header-inner-wrapper{overflow-y:hidden;overflow-x:scroll}.vxe-gantt-view--body-inner-wrapper{overflow-y:scroll;overflow-x:scroll}.vxe-gantt-view--body-inner-wrapper,.vxe-gantt-view--header-inner-wrapper{position:relative;width:100%;height:100%;scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}.vxe-gantt-view--body-inner-wrapper::-webkit-scrollbar,.vxe-gantt-view--header-inner-wrapper::-webkit-scrollbar{display:none}.vxe-gantt-view--header-column{text-align:center;font-size:1em;height:var(--vxe-ui-gantt-view-cell-height,var(--vxe-ui-table-row-line-height))}.vxe-gantt-view--header-column.is--now{color:var(--vxe-ui-font-primary-color)}.vxe-gantt-view--body-column.is--now::before{content:"";position:absolute;top:0;left:0;width:1px;height:100%;background-color:var(--vxe-ui-font-primary-color)}.vxe-gantt-view--body-column,.vxe-gantt-view--footer-column,.vxe-gantt-view--header-column{position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-gantt-view--body-row.row--stripe{background-color:var(--vxe-ui-table-row-striped-background-color)}.vxe-gantt-view--body-row.row--radio{background-color:var(--vxe-ui-table-row-radio-checked-background-color)}.vxe-gantt-view--body-row.row--checked{background-color:var(--vxe-ui-table-row-checkbox-checked-background-color)}.vxe-gantt-view--body-row.row--current{background-color:var(--vxe-ui-table-row-current-background-color)}.vxe-gantt-view--body-row.row--hover{background-color:var(--vxe-ui-table-row-hover-background-color)}.vxe-gantt-view--body-row.row--hover.row--stripe{background-color:var(--vxe-ui-table-row-hover-striped-background-color)}.vxe-gantt-view--body-row.row--hover.row--radio{background-color:var(--vxe-ui-table-row-hover-radio-checked-background-color)}.vxe-gantt-view--body-row.row--hover.row--checked{background-color:var(--vxe-ui-table-row-hover-checkbox-checked-background-color)}.vxe-gantt-view--body-row.row--hover.row--current{background-color:var(--vxe-ui-table-row-hover-current-background-color)}.vxe-gantt-view--body-row.row--drag-move{transition:transform .5s ease}.vxe-gantt-view--body-row.row--drag-origin>.vxe-gantt-view--body-column{opacity:.3}.vxe-gantt-view--body-column .vxe-gantt-view-cell--row-resizable{position:absolute;left:0;bottom:-.4em;height:.8em;width:100%;text-align:center;z-index:1;cursor:row-resize}.vxe-gantt-view--body-row:last-child .vxe-gantt-view--body-column .vxe-gantt-view-cell--row-resizable{height:.4em;bottom:0}.vxe-gantt{font-size:var(--vxe-ui-font-size-default)}.vxe-gantt.size--medium{font-size:var(--vxe-ui-font-size-medium)}.vxe-gantt.size--small{font-size:var(--vxe-ui-font-size-small)}.vxe-gantt.size--mini{font-size:var(--vxe-ui-font-size-mini)}