vxe-gantt 4.0.5 → 4.0.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 (46) hide show
  1. package/es/gantt/src/emits.js +3 -1
  2. package/es/gantt/src/gantt-chart.js +18 -4
  3. package/es/gantt/src/gantt-header.js +17 -9
  4. package/es/gantt/src/gantt-view.js +259 -106
  5. package/es/gantt/src/gantt.js +9 -9
  6. package/es/gantt/style.css +7 -1
  7. package/es/gantt/style.min.css +1 -1
  8. package/es/style.css +1 -1
  9. package/es/style.min.css +1 -1
  10. package/es/ui/index.js +1 -1
  11. package/es/ui/src/log.js +1 -1
  12. package/es/vxe-gantt/style.css +7 -1
  13. package/es/vxe-gantt/style.min.css +1 -1
  14. package/lib/gantt/src/emits.js +1 -1
  15. package/lib/gantt/src/emits.min.js +1 -1
  16. package/lib/gantt/src/gantt-chart.js +24 -4
  17. package/lib/gantt/src/gantt-chart.min.js +1 -1
  18. package/lib/gantt/src/gantt-header.js +26 -14
  19. package/lib/gantt/src/gantt-header.min.js +1 -1
  20. package/lib/gantt/src/gantt-view.js +317 -116
  21. package/lib/gantt/src/gantt-view.min.js +1 -1
  22. package/lib/gantt/src/gantt.js +7 -7
  23. package/lib/gantt/src/gantt.min.js +1 -1
  24. package/lib/gantt/style/style.css +7 -1
  25. package/lib/gantt/style/style.min.css +1 -1
  26. package/lib/index.umd.js +377 -144
  27. package/lib/index.umd.min.js +1 -1
  28. package/lib/style.css +1 -1
  29. package/lib/style.min.css +1 -1
  30. package/lib/ui/index.js +1 -1
  31. package/lib/ui/index.min.js +1 -1
  32. package/lib/ui/src/log.js +1 -1
  33. package/lib/ui/src/log.min.js +1 -1
  34. package/lib/vxe-gantt/style/style.css +7 -1
  35. package/lib/vxe-gantt/style/style.min.css +1 -1
  36. package/package.json +3 -3
  37. package/packages/gantt/src/emits.ts +3 -1
  38. package/packages/gantt/src/gantt-chart.ts +20 -4
  39. package/packages/gantt/src/gantt-header.ts +18 -10
  40. package/packages/gantt/src/gantt-view.ts +273 -110
  41. package/packages/gantt/src/gantt.ts +7 -7
  42. package/styles/components/gantt-module/gantt-chart.scss +2 -0
  43. package/styles/components/gantt.scss +6 -1
  44. package/styles/theme/base.scss +1 -1
  45. package/styles/theme/dark.scss +1 -0
  46. package/styles/theme/light.scss +1 -0
package/lib/index.umd.js CHANGED
@@ -2780,7 +2780,7 @@ var core_ = __webpack_require__(4345);
2780
2780
  const {
2781
2781
  log
2782
2782
  } = core_.VxeUI;
2783
- const version = `gantt v${"4.0.5"}`;
2783
+ const version = `gantt v${"4.0.7"}`;
2784
2784
  const warnLog = log.create('warn', version);
2785
2785
  const errLog = log.create('error', version);
2786
2786
  ;// ./packages/ui/index.ts
@@ -2791,7 +2791,7 @@ const {
2791
2791
  setIcon,
2792
2792
  checkVersion
2793
2793
  } = core_.VxeUI;
2794
- core_.VxeUI.ganttVersion = "4.0.5";
2794
+ core_.VxeUI.ganttVersion = "4.0.7";
2795
2795
  setConfig({
2796
2796
  gantt: {
2797
2797
  // size: null,
@@ -3289,7 +3289,7 @@ const tableEmits = ['update:data', 'keydown-start', 'keydown', 'keydown-end', 'p
3289
3289
  const gridEmits = [...tableEmits, 'page-change', 'form-submit', 'form-submit-invalid', 'form-reset', 'form-collapse', 'form-toggle-collapse', 'proxy-query', 'proxy-delete', 'proxy-save', 'toolbar-button-click', 'toolbar-tool-click', 'zoom'];
3290
3290
  ;// ./packages/gantt/src/emits.ts
3291
3291
 
3292
- const ganttEmits = [...gridEmits, 'task-cell-click', 'task-cell-dblclick', 'task-bar-click', 'task-bar-dblclick'];
3292
+ const ganttEmits = [...gridEmits, 'task-cell-click', 'task-cell-dblclick', 'task-bar-click', 'task-bar-dblclick', 'task-view-cell-click', 'task-view-cell-dblclick'];
3293
3293
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.find.js
3294
3294
  var es_iterator_find = __webpack_require__(116);
3295
3295
  ;// ./packages/gantt/src/util.ts
@@ -3323,6 +3323,7 @@ const {
3323
3323
  /* harmony default export */ var gantt_header = (defineVxeComponent({
3324
3324
  name: 'VxeGanttViewHeader',
3325
3325
  setup() {
3326
+ const $xeGantt = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.inject)('$xeGantt', {});
3326
3327
  const $xeGanttView = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.inject)('$xeGanttView', {});
3327
3328
  const {
3328
3329
  reactData,
@@ -3334,10 +3335,12 @@ const {
3334
3335
  const refHeaderXSpace = (0,external_commonjs_vue_commonjs2_vue_root_Vue_.ref)();
3335
3336
  const renderVN = () => {
3336
3337
  const {
3337
- tableColumn,
3338
3338
  headerGroups,
3339
3339
  viewCellWidth
3340
3340
  } = reactData;
3341
+ const {
3342
+ visibleColumn
3343
+ } = internalData;
3341
3344
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
3342
3345
  ref: refElem,
3343
3346
  class: 'vxe-gantt-view--header-wrapper'
@@ -3351,7 +3354,7 @@ const {
3351
3354
  }), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('table', {
3352
3355
  ref: refHeaderTable,
3353
3356
  class: 'vxe-gantt-view--header-table'
3354
- }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('colgroup', {}, tableColumn.map((column, cIndex) => {
3357
+ }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('colgroup', {}, visibleColumn.map((column, cIndex) => {
3355
3358
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('col', {
3356
3359
  key: cIndex,
3357
3360
  style: {
@@ -3364,12 +3367,17 @@ const {
3364
3367
  }, $rowIndex) => {
3365
3368
  const {
3366
3369
  type,
3367
- titleMethod
3370
+ titleMethod,
3371
+ slots
3368
3372
  } = scaleItem;
3373
+ const titleSlot = slots ? slots.title : null;
3369
3374
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('tr', {
3370
3375
  key: $rowIndex
3371
3376
  }, columns.map((column, cIndex) => {
3372
- const dateObj = column.params;
3377
+ const {
3378
+ childCount,
3379
+ dateObj
3380
+ } = column;
3373
3381
  let label = `${column.title}`;
3374
3382
  if ($rowIndex < headerGroups.length - 1) {
3375
3383
  if (scaleItem.type === 'day') {
@@ -3378,20 +3386,24 @@ const {
3378
3386
  label = getI18n(`vxe.gantt.${!$rowIndex && headerGroups.length > 1 ? 'tFullFormat' : 'tSimpleFormat'}.${type}`, dateObj);
3379
3387
  }
3380
3388
  }
3381
- if (titleMethod) {
3382
- label = `${titleMethod({
3383
- scaleObj: scaleItem,
3384
- title: label,
3385
- dateObj: dateObj,
3386
- $rowIndex
3387
- })}`;
3389
+ let cellVNs = label;
3390
+ const ctParams = {
3391
+ scaleObj: scaleItem,
3392
+ title: label,
3393
+ dateObj: dateObj,
3394
+ $rowIndex
3395
+ };
3396
+ if (titleSlot) {
3397
+ cellVNs = $xeGantt.callSlot(titleSlot, ctParams);
3398
+ } else if (titleMethod) {
3399
+ cellVNs = `${titleMethod(ctParams)}`;
3388
3400
  }
3389
3401
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('th', {
3390
3402
  key: cIndex,
3391
3403
  class: 'vxe-gantt-view--header-column',
3392
- colspan: column.childCount || null,
3393
- title: label
3394
- }, label);
3404
+ colspan: childCount || null,
3405
+ title: titleSlot ? null : label
3406
+ }, cellVNs);
3395
3407
  }));
3396
3408
  }))])])]);
3397
3409
  };
@@ -3478,15 +3490,36 @@ const {
3478
3490
  contentMethod,
3479
3491
  barStyle
3480
3492
  } = taskBarOpts;
3493
+ const isBarRowStyle = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(barStyle);
3494
+ const barStyObj = (barStyle ? isBarRowStyle ? barStyle({
3495
+ row,
3496
+ $gantt: $xeGantt
3497
+ }) : barStyle : {}) || {};
3481
3498
  const {
3482
3499
  round
3483
- } = barStyle || {};
3500
+ } = barStyObj;
3484
3501
  const rowRest = fullAllDataRowIdData[rowid] || {};
3485
3502
  const resizeHeight = resizeHeightFlag ? rowRest.resizeHeight : 0;
3486
3503
  const isRsHeight = resizeHeight > 0;
3487
3504
  const cellHeight = getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight);
3488
3505
  let title = getStringValue(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(row, titleField));
3489
3506
  const progressValue = showProgress ? Math.min(100, Math.max(0, external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toNumber(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().get(row, progressField)))) : 0;
3507
+ const vbStyle = {};
3508
+ const vpStyle = {
3509
+ width: `${progressValue || 0}%`
3510
+ };
3511
+ if (isBarRowStyle) {
3512
+ const {
3513
+ bgColor,
3514
+ completedBgColor
3515
+ } = barStyObj;
3516
+ if (bgColor) {
3517
+ vbStyle.backgroundColor = bgColor;
3518
+ }
3519
+ if (completedBgColor) {
3520
+ vpStyle.backgroundColor = completedBgColor;
3521
+ }
3522
+ }
3490
3523
  if (contentMethod) {
3491
3524
  title = getStringValue(contentMethod({
3492
3525
  row,
@@ -3505,6 +3538,7 @@ const {
3505
3538
  }
3506
3539
  }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
3507
3540
  class: taskBarSlot ? 'vxe-gantt-view--chart-custom-bar' : 'vxe-gantt-view--chart-bar',
3541
+ style: vbStyle,
3508
3542
  rowid,
3509
3543
  onClick(evnt) {
3510
3544
  $xeGantt.handleTaskBarClickEvent(evnt, {
@@ -3520,9 +3554,7 @@ const {
3520
3554
  row
3521
3555
  }) : [showProgress ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
3522
3556
  class: 'vxe-gantt-view--chart-progress',
3523
- style: {
3524
- width: `${progressValue || 0}%`
3525
- }
3557
+ style: vpStyle
3526
3558
  }) : renderEmptyElement($xeGantt), showContent ? (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
3527
3559
  class: 'vxe-gantt-view--chart-content'
3528
3560
  }, title) : renderEmptyElement($xeGantt)])]);
@@ -3914,6 +3946,7 @@ const {
3914
3946
  function createInternalData() {
3915
3947
  return {
3916
3948
  xeTable: null,
3949
+ visibleColumn: [],
3917
3950
  startMaps: {},
3918
3951
  endMaps: {},
3919
3952
  chartMaps: {},
@@ -3928,16 +3961,9 @@ function createInternalData() {
3928
3961
  startIndex: 0,
3929
3962
  endIndex: 0
3930
3963
  },
3931
- // 存放纵向 Y 虚拟滚动相关信息
3932
- scrollYStore: {
3933
- preloadSize: 0,
3934
- offsetSize: 0,
3935
- visibleSize: 0,
3936
- visibleStartIndex: 0,
3937
- visibleEndIndex: 0,
3938
- startIndex: 0,
3939
- endIndex: 0
3940
- }
3964
+ // 最后滚动位置
3965
+ lastScrollTop: 0,
3966
+ lastScrollLeft: 0
3941
3967
  };
3942
3968
  }
3943
3969
  const maxYHeight = 5e6;
@@ -3982,6 +4008,8 @@ const maxYHeight = 5e6;
3982
4008
  scrollbarWidth: 0,
3983
4009
  // 横向滚动条的高度
3984
4010
  scrollbarHeight: 0,
4011
+ // 最后滚动时间戳
4012
+ lastScrollTime: 0,
3985
4013
  lazScrollLoading: false,
3986
4014
  scrollVMLoading: false,
3987
4015
  scrollYHeight: 0,
@@ -4031,9 +4059,14 @@ const maxYHeight = 5e6;
4031
4059
  minViewDate,
4032
4060
  maxViewDate
4033
4061
  } = reactData;
4062
+ const {
4063
+ scrollXStore
4064
+ } = internalData;
4034
4065
  const minScale = external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().last(taskScaleList);
4035
4066
  const fullCols = [];
4036
4067
  const groupCols = [];
4068
+ scrollXStore.startIndex = 0;
4069
+ scrollXStore.endIndex = 1;
4037
4070
  if (minScale && minViewDate && maxViewDate) {
4038
4071
  const minSType = minScale.type;
4039
4072
  const weekScale = taskScaleList.find(item => item.type === 'week');
@@ -4056,37 +4089,37 @@ const maxYHeight = 5e6;
4056
4089
  const currTime = minViewDate.getTime();
4057
4090
  const diffDayNum = maxViewDate.getTime() - minViewDate.getTime();
4058
4091
  const countSize = Math.max(5, Math.floor(diffDayNum / gapTime) + 1);
4059
- switch (minScale.type) {
4060
- case 'day':
4061
- case 'date':
4062
- if (diffDayNum > 1000 * 60 * 60 * 24 * 366 * 3) {
4063
- reactData.tableColumn = [];
4064
- reactData.headerGroups = [];
4065
- return;
4066
- }
4067
- break;
4068
- case 'hour':
4069
- if (diffDayNum > 1000 * 60 * 60 * 24 * 31 * 3) {
4070
- reactData.tableColumn = [];
4071
- reactData.headerGroups = [];
4072
- return;
4073
- }
4074
- break;
4075
- case 'minute':
4076
- if (diffDayNum > 1000 * 60 * 60 * 24 * 3) {
4077
- reactData.tableColumn = [];
4078
- reactData.headerGroups = [];
4079
- return;
4080
- }
4081
- break;
4082
- case 'second':
4083
- if (diffDayNum > 1000 * 60 * 60 * 3) {
4084
- reactData.tableColumn = [];
4085
- reactData.headerGroups = [];
4086
- return;
4087
- }
4088
- break;
4089
- }
4092
+ // switch (minScale.type) {
4093
+ // case 'day':
4094
+ // case 'date':
4095
+ // if (diffDayNum > (1000 * 60 * 60 * 24 * 366 * 3)) {
4096
+ // reactData.tableColumn = []
4097
+ // reactData.headerGroups = []
4098
+ // return
4099
+ // }
4100
+ // break
4101
+ // case 'hour':
4102
+ // if (diffDayNum > (1000 * 60 * 60 * 24 * 31 * 3)) {
4103
+ // reactData.tableColumn = []
4104
+ // reactData.headerGroups = []
4105
+ // return
4106
+ // }
4107
+ // break
4108
+ // case 'minute':
4109
+ // if (diffDayNum > (1000 * 60 * 60 * 24 * 3)) {
4110
+ // reactData.tableColumn = []
4111
+ // reactData.headerGroups = []
4112
+ // return
4113
+ // }
4114
+ // break
4115
+ // case 'second':
4116
+ // if (diffDayNum > (1000 * 60 * 60 * 3)) {
4117
+ // reactData.tableColumn = []
4118
+ // reactData.headerGroups = []
4119
+ // return
4120
+ // }
4121
+ // break
4122
+ // }
4090
4123
  const renderListMaps = {
4091
4124
  year: [],
4092
4125
  quarter: [],
@@ -4151,47 +4184,47 @@ const maxYHeight = 5e6;
4151
4184
  year: {
4152
4185
  field: yyyy,
4153
4186
  title: yyyy,
4154
- params: dateObj
4187
+ dateObj
4155
4188
  },
4156
4189
  quarter: {
4157
4190
  field: `${yyyy}_q${q}`,
4158
- title: q,
4159
- params: dateObj
4191
+ title: `${q}`,
4192
+ dateObj
4160
4193
  },
4161
4194
  month: {
4162
4195
  field: `${yyyy}_${MM}`,
4163
4196
  title: MM,
4164
- params: dateObj
4197
+ dateObj
4165
4198
  },
4166
4199
  week: {
4167
4200
  field: `${yyyy}_W${W}`,
4168
- title: W,
4169
- params: dateObj
4201
+ title: `${W}`,
4202
+ dateObj
4170
4203
  },
4171
4204
  day: {
4172
4205
  field: `${yyyy}_${MM}_${dd}_E${E}`,
4173
- title: E,
4174
- params: dateObj
4206
+ title: `${E}`,
4207
+ dateObj
4175
4208
  },
4176
4209
  date: {
4177
4210
  field: `${yyyy}_${MM}_${dd}`,
4178
4211
  title: dd,
4179
- params: dateObj
4212
+ dateObj
4180
4213
  },
4181
4214
  hour: {
4182
4215
  field: `${yyyy}_${MM}_${dd}_${HH}`,
4183
4216
  title: HH,
4184
- params: dateObj
4217
+ dateObj
4185
4218
  },
4186
4219
  minute: {
4187
4220
  field: `${yyyy}_${MM}_${dd}_${HH}_${mm}`,
4188
4221
  title: mm,
4189
- params: dateObj
4222
+ dateObj
4190
4223
  },
4191
4224
  second: {
4192
4225
  field: `${yyyy}_${MM}_${dd}_${HH}_${mm}_${ss}`,
4193
4226
  title: ss,
4194
- params: dateObj
4227
+ dateObj
4195
4228
  }
4196
4229
  };
4197
4230
  const minCol = colMaps[minSType];
@@ -4286,8 +4319,10 @@ const maxYHeight = 5e6;
4286
4319
  internalData.chartMaps = ctMaps;
4287
4320
  }
4288
4321
  }
4289
- reactData.tableColumn = fullCols;
4322
+ internalData.visibleColumn = fullCols;
4290
4323
  reactData.headerGroups = groupCols;
4324
+ updateScrollXStatus();
4325
+ handleTableColumn();
4291
4326
  };
4292
4327
  const handleUpdateData = () => {
4293
4328
  const ganttProps = $xeGantt.props;
@@ -4399,11 +4434,12 @@ const maxYHeight = 5e6;
4399
4434
  const {
4400
4435
  scrollbarWidth,
4401
4436
  scrollbarHeight,
4402
- tableColumn,
4403
- headerGroups
4437
+ headerGroups,
4438
+ tableColumn
4404
4439
  } = reactData;
4405
4440
  const {
4406
- elemStore
4441
+ elemStore,
4442
+ visibleColumn
4407
4443
  } = internalData;
4408
4444
  const $xeTable = internalData.xeTable;
4409
4445
  const el = refElem.value;
@@ -4485,37 +4521,230 @@ const maxYHeight = 5e6;
4485
4521
  yBottomCornerEl.style.display = tFooterHeight ? 'block' : '';
4486
4522
  }
4487
4523
  const colInfoElem = refColInfoElem.value;
4524
+ let viewCellWidth = 40;
4488
4525
  if (colInfoElem) {
4489
- reactData.viewCellWidth = colInfoElem.clientWidth || 40;
4526
+ viewCellWidth = colInfoElem.clientWidth || 40;
4490
4527
  }
4491
- let viewTableWidth = reactData.viewCellWidth * tableColumn.length;
4528
+ let viewTableWidth = viewCellWidth * visibleColumn.length;
4492
4529
  if (bodyScrollElem) {
4493
4530
  const viewWidth = bodyScrollElem.clientWidth;
4494
4531
  const remainWidth = viewWidth - viewTableWidth;
4495
4532
  if (remainWidth > 0) {
4496
- reactData.viewCellWidth += Math.floor(remainWidth / tableColumn.length);
4533
+ viewCellWidth += Math.floor(remainWidth / visibleColumn.length);
4497
4534
  viewTableWidth = viewWidth;
4498
4535
  }
4499
4536
  }
4537
+ reactData.viewCellWidth = viewCellWidth;
4500
4538
  const headerTableElem = getRefElem(elemStore['main-header-table']);
4501
4539
  const bodyTableElem = getRefElem(elemStore['main-body-table']);
4540
+ const vmTableWidth = viewCellWidth * tableColumn.length;
4502
4541
  if (headerTableElem) {
4503
4542
  headerTableElem.style.width = `${viewTableWidth}px`;
4504
4543
  }
4505
4544
  if (bodyTableElem) {
4506
- bodyTableElem.style.width = `${viewTableWidth}px`;
4545
+ bodyTableElem.style.width = `${vmTableWidth}px`;
4507
4546
  }
4508
4547
  reactData.scrollXWidth = viewTableWidth;
4509
4548
  return updateChart();
4510
4549
  };
4511
- const handleLazyRecalculate = () => {
4550
+ const handleRecalculateStyle = () => {
4551
+ const el = refElem.value;
4552
+ internalData.rceRunTime = Date.now();
4553
+ if (!el || !el.clientWidth) {
4554
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
4555
+ }
4512
4556
  calcScrollbar();
4513
4557
  updateStyle();
4514
4558
  updateChart();
4559
+ return computeScrollLoad();
4560
+ };
4561
+ const handleLazyRecalculate = () => {
4562
+ return new Promise(resolve => {
4563
+ const {
4564
+ rceTimeout,
4565
+ rceRunTime
4566
+ } = internalData;
4567
+ const $xeTable = internalData.xeTable;
4568
+ let refreshDelay = 50;
4569
+ if ($xeTable) {
4570
+ const {
4571
+ computeResizeOpts
4572
+ } = $xeTable.getComputeMaps();
4573
+ const resizeOpts = computeResizeOpts.value;
4574
+ refreshDelay = resizeOpts.refreshDelay || 50;
4575
+ }
4576
+ if (rceTimeout) {
4577
+ clearTimeout(rceTimeout);
4578
+ if (rceRunTime && rceRunTime + (refreshDelay - 5) < Date.now()) {
4579
+ resolve(handleRecalculateStyle());
4580
+ } else {
4581
+ (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)(() => {
4582
+ resolve();
4583
+ });
4584
+ }
4585
+ } else {
4586
+ resolve(handleRecalculateStyle());
4587
+ }
4588
+ internalData.rceTimeout = setTimeout(() => {
4589
+ internalData.rceTimeout = undefined;
4590
+ handleRecalculateStyle();
4591
+ }, refreshDelay);
4592
+ });
4593
+ };
4594
+ const computeScrollLoad = () => {
4595
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)().then(() => {
4596
+ const {
4597
+ scrollXLoad
4598
+ } = reactData;
4599
+ const {
4600
+ scrollXStore
4601
+ } = internalData;
4602
+ // 计算 X 逻辑
4603
+ if (scrollXLoad) {
4604
+ const {
4605
+ toVisibleIndex: toXVisibleIndex,
4606
+ visibleSize: visibleXSize
4607
+ } = handleVirtualXVisible();
4608
+ const offsetXSize = 2;
4609
+ scrollXStore.preloadSize = 1;
4610
+ scrollXStore.offsetSize = offsetXSize;
4611
+ scrollXStore.visibleSize = visibleXSize;
4612
+ scrollXStore.endIndex = Math.max(scrollXStore.startIndex + scrollXStore.visibleSize + offsetXSize, scrollXStore.endIndex);
4613
+ scrollXStore.visibleStartIndex = Math.max(scrollXStore.startIndex, toXVisibleIndex);
4614
+ scrollXStore.visibleEndIndex = Math.min(scrollXStore.endIndex, toXVisibleIndex + visibleXSize);
4615
+ updateScrollXData().then(() => {
4616
+ loadScrollXData();
4617
+ });
4618
+ } else {
4619
+ updateScrollXSpace();
4620
+ }
4621
+ });
4622
+ };
4623
+ const handleVirtualXVisible = () => {
4624
+ const {
4625
+ viewCellWidth
4626
+ } = reactData;
4627
+ const {
4628
+ elemStore
4629
+ } = internalData;
4630
+ const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
4631
+ if (bodyScrollElem) {
4632
+ const clientWidth = bodyScrollElem.clientWidth;
4633
+ const scrollLeft = bodyScrollElem.scrollLeft;
4634
+ const toVisibleIndex = Math.floor(scrollLeft / viewCellWidth) - 1;
4635
+ const visibleSize = Math.ceil(clientWidth / viewCellWidth) + 1;
4636
+ return {
4637
+ toVisibleIndex: Math.max(0, toVisibleIndex),
4638
+ visibleSize: Math.max(1, visibleSize)
4639
+ };
4640
+ }
4641
+ return {
4642
+ toVisibleIndex: 0,
4643
+ visibleSize: 6
4644
+ };
4645
+ };
4646
+ const loadScrollXData = () => {
4647
+ const {
4648
+ isScrollXBig
4649
+ } = reactData;
4650
+ const {
4651
+ scrollXStore
4652
+ } = internalData;
4653
+ const {
4654
+ preloadSize,
4655
+ startIndex,
4656
+ endIndex,
4657
+ offsetSize
4658
+ } = scrollXStore;
4659
+ const {
4660
+ toVisibleIndex,
4661
+ visibleSize
4662
+ } = handleVirtualXVisible();
4663
+ const offsetItem = {
4664
+ startIndex: Math.max(0, isScrollXBig ? toVisibleIndex - 1 : toVisibleIndex - 1 - offsetSize - preloadSize),
4665
+ endIndex: isScrollXBig ? toVisibleIndex + visibleSize : toVisibleIndex + visibleSize + offsetSize + preloadSize
4666
+ };
4667
+ scrollXStore.visibleStartIndex = toVisibleIndex - 1;
4668
+ scrollXStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
4669
+ const {
4670
+ startIndex: offsetStartIndex,
4671
+ endIndex: offsetEndIndex
4672
+ } = offsetItem;
4673
+ if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
4674
+ if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
4675
+ scrollXStore.startIndex = offsetStartIndex;
4676
+ scrollXStore.endIndex = offsetEndIndex;
4677
+ updateScrollXData();
4678
+ }
4679
+ }
4680
+ };
4681
+ const updateScrollXData = () => {
4682
+ handleTableColumn();
4683
+ updateScrollXSpace();
4684
+ return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
4685
+ };
4686
+ const updateScrollXStatus = () => {
4687
+ const scrollXLoad = true;
4688
+ reactData.scrollXLoad = scrollXLoad;
4689
+ return scrollXLoad;
4690
+ };
4691
+ const handleTableColumn = () => {
4692
+ const {
4693
+ scrollXLoad
4694
+ } = reactData;
4695
+ const {
4696
+ visibleColumn,
4697
+ scrollXStore
4698
+ } = internalData;
4699
+ const tableColumn = scrollXLoad ? visibleColumn.slice(scrollXStore.startIndex, scrollXStore.endIndex) : visibleColumn.slice(0);
4700
+ reactData.tableColumn = tableColumn;
4701
+ };
4702
+ const updateScrollXSpace = () => {
4703
+ const {
4704
+ scrollXLoad,
4705
+ scrollXWidth,
4706
+ viewCellWidth
4707
+ } = reactData;
4708
+ const {
4709
+ elemStore,
4710
+ scrollXStore
4711
+ } = internalData;
4712
+ const bodyTableElem = getRefElem(elemStore['main-body-table']);
4713
+ // const headerTableElem = getRefElem(elemStore['main-header-table'])
4714
+ // const footerTableElem = getRefElem(elemStore['main-footer-table'])
4715
+ const {
4716
+ startIndex
4717
+ } = scrollXStore;
4718
+ let xSpaceLeft = 0;
4719
+ if (scrollXLoad) {
4720
+ xSpaceLeft = Math.max(0, startIndex * viewCellWidth);
4721
+ }
4722
+ // if (headerTableElem) {
4723
+ // headerTableElem.style.transform = `translate(${xSpaceLeft}px, 0px)`
4724
+ // }
4725
+ if (bodyTableElem) {
4726
+ bodyTableElem.style.transform = `translate(${xSpaceLeft}px, ${reactData.scrollYTop || 0}px)`;
4727
+ }
4728
+ // if (footerTableElem) {
4729
+ // footerTableElem.style.transform = `translate(${xSpaceLeft}px, 0px)`
4730
+ // }
4731
+ const layoutList = ['header', 'body', 'footer'];
4732
+ layoutList.forEach(layout => {
4733
+ const xSpaceElem = getRefElem(elemStore[`main-${layout}-xSpace`]);
4734
+ if (xSpaceElem) {
4735
+ xSpaceElem.style.width = scrollXLoad ? `${scrollXWidth}px` : '';
4736
+ }
4737
+ });
4738
+ const scrollXSpaceEl = refScrollXSpaceElem.value;
4739
+ if (scrollXSpaceEl) {
4740
+ scrollXSpaceEl.style.width = `${scrollXWidth}px`;
4741
+ }
4742
+ calcScrollbar();
4515
4743
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
4516
4744
  };
4517
- // const updateScrollXSpace = () => {
4518
- // }
4745
+ const triggerScrollXEvent = () => {
4746
+ loadScrollXData();
4747
+ };
4519
4748
  const updateScrollYSpace = () => {
4520
4749
  const {
4521
4750
  elemStore
@@ -4593,6 +4822,13 @@ const maxYHeight = 5e6;
4593
4822
  };
4594
4823
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
4595
4824
  const handleScrollEvent = (evnt, isRollY, isRollX, scrollTop, scrollLeft) => {
4825
+ if (isRollX) {
4826
+ internalData.lastScrollLeft = scrollLeft;
4827
+ }
4828
+ if (isRollY) {
4829
+ internalData.lastScrollTop = scrollTop;
4830
+ }
4831
+ reactData.lastScrollTime = Date.now();
4596
4832
  checkLastSyncScroll(isRollX, isRollY);
4597
4833
  };
4598
4834
  const ganttViewMethods = {
@@ -4698,11 +4934,16 @@ const maxYHeight = 5e6;
4698
4934
  }
4699
4935
  },
4700
4936
  triggerBodyScrollEvent(evnt) {
4937
+ const {
4938
+ scrollXLoad
4939
+ } = reactData;
4701
4940
  const {
4702
4941
  elemStore,
4703
4942
  inVirtualScroll,
4704
4943
  inHeaderScroll,
4705
- inFooterScroll
4944
+ inFooterScroll,
4945
+ lastScrollLeft,
4946
+ lastScrollTop
4706
4947
  } = internalData;
4707
4948
  if (inVirtualScroll) {
4708
4949
  return;
@@ -4714,40 +4955,46 @@ const maxYHeight = 5e6;
4714
4955
  const headerScrollElem = getRefElem(elemStore['main-header-scroll']);
4715
4956
  const xHandleEl = refScrollXHandleElem.value;
4716
4957
  const yHandleEl = refScrollYHandleElem.value;
4717
- if (headerScrollElem && wrapperEl) {
4718
- const isRollX = true;
4719
- const isRollY = true;
4720
- const currLeftNum = wrapperEl.scrollLeft;
4721
- const currTopNum = wrapperEl.scrollTop;
4722
- internalData.inBodyScroll = true;
4723
- setScrollLeft(xHandleEl, currLeftNum);
4724
- setScrollLeft(headerScrollElem, currLeftNum);
4725
- setScrollTop(yHandleEl, currTopNum);
4726
- syncTableScrollTop(currTopNum);
4727
- handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, currLeftNum);
4728
- }
4729
- },
4730
- triggerFooterScrollEvent(evnt) {
4731
- const {
4732
- inVirtualScroll,
4733
- inHeaderScroll,
4734
- inBodyScroll
4735
- } = internalData;
4736
- if (inVirtualScroll) {
4737
- return;
4738
- }
4739
- if (inHeaderScroll || inBodyScroll) {
4740
- return;
4958
+ const scrollLeft = wrapperEl.scrollLeft;
4959
+ const scrollTop = wrapperEl.scrollTop;
4960
+ const isRollX = scrollLeft !== lastScrollLeft;
4961
+ const isRollY = scrollTop !== lastScrollTop;
4962
+ internalData.inBodyScroll = true;
4963
+ internalData.scrollRenderType = '';
4964
+ if (isRollY) {
4965
+ setScrollTop(yHandleEl, scrollTop);
4966
+ syncTableScrollTop(scrollTop);
4741
4967
  }
4742
- const wrapperEl = evnt.currentTarget;
4743
- if (wrapperEl) {
4744
- const isRollX = true;
4745
- const isRollY = false;
4746
- const currLeftNum = wrapperEl.scrollLeft;
4747
- handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, currLeftNum);
4968
+ if (isRollX) {
4969
+ internalData.inBodyScroll = true;
4970
+ setScrollLeft(xHandleEl, scrollLeft);
4971
+ setScrollLeft(headerScrollElem, scrollLeft);
4972
+ if (scrollXLoad) {
4973
+ triggerScrollXEvent();
4974
+ }
4748
4975
  }
4976
+ handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, scrollLeft);
4749
4977
  },
4978
+ // triggerFooterScrollEvent (evnt) {
4979
+ // const { inVirtualScroll, inHeaderScroll, inBodyScroll } = internalData
4980
+ // if (inVirtualScroll) {
4981
+ // return
4982
+ // }
4983
+ // if (inHeaderScroll || inBodyScroll) {
4984
+ // return
4985
+ // }
4986
+ // const wrapperEl = evnt.currentTarget as HTMLDivElement
4987
+ // if (wrapperEl) {
4988
+ // const isRollX = true
4989
+ // const isRollY = false
4990
+ // const currLeftNum = wrapperEl.scrollLeft
4991
+ // handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, currLeftNum)
4992
+ // }
4993
+ // },
4750
4994
  triggerVirtualScrollXEvent(evnt) {
4995
+ const {
4996
+ scrollXLoad
4997
+ } = reactData;
4751
4998
  const {
4752
4999
  elemStore,
4753
5000
  inHeaderScroll,
@@ -4766,6 +5013,9 @@ const maxYHeight = 5e6;
4766
5013
  internalData.inVirtualScroll = true;
4767
5014
  setScrollLeft(headerScrollElem, currLeftNum);
4768
5015
  setScrollLeft(bodyScrollElem, currLeftNum);
5016
+ if (scrollXLoad) {
5017
+ triggerScrollXEvent();
5018
+ }
4769
5019
  handleScrollEvent(evnt, isRollY, isRollX, wrapperEl.scrollTop, currLeftNum);
4770
5020
  }
4771
5021
  },
@@ -4791,28 +5041,11 @@ const maxYHeight = 5e6;
4791
5041
  }
4792
5042
  },
4793
5043
  handleUpdateSXSpace() {
4794
- const {
4795
- scrollXLoad,
4796
- scrollXWidth
4797
- } = reactData;
4798
- const {
4799
- elemStore
4800
- } = internalData;
4801
- const layoutList = ['header', 'body', 'footer'];
4802
- layoutList.forEach(layout => {
4803
- const xSpaceElem = getRefElem(elemStore[`main-${layout}-xSpace`]);
4804
- if (xSpaceElem) {
4805
- xSpaceElem.style.width = scrollXLoad ? `${scrollXWidth}px` : '';
4806
- }
4807
- });
4808
- const scrollXSpaceEl = refScrollXSpaceElem.value;
4809
- if (scrollXSpaceEl) {
4810
- scrollXSpaceEl.style.width = `${scrollXWidth}px`;
4811
- }
4812
- calcScrollbar();
4813
- return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.nextTick)();
5044
+ return updateScrollXSpace();
5045
+ },
5046
+ handleUpdateSYSpace() {
5047
+ return updateScrollYSpace();
4814
5048
  },
4815
- handleUpdateSYSpace: updateScrollYSpace,
4816
5049
  handleUpdateSYStatus(sYLoad) {
4817
5050
  reactData.scrollYLoad = sYLoad;
4818
5051
  }
@@ -5174,7 +5407,7 @@ function getViewTypeLevel(type) {
5174
5407
  stys.maxHeight = maxHeight === 'auto' || maxHeight === '100%' ? '100%' : toCssUnit(maxHeight);
5175
5408
  }
5176
5409
  }
5177
- if (barStyle) {
5410
+ if (barStyle && !external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isFunction(barStyle)) {
5178
5411
  const {
5179
5412
  bgColor,
5180
5413
  completedBgColor
@@ -5762,20 +5995,20 @@ function getViewTypeLevel(type) {
5762
5995
  let tipHeight = 0;
5763
5996
  if (rsNumLeftEl) {
5764
5997
  if (offsetLeft < 0) {
5998
+ rsNumLeftEl.style.display = 'none';
5999
+ } else {
5765
6000
  rsNumLeftEl.textContent = `${targetTableWidth}px`;
5766
6001
  rsNumLeftEl.style.display = 'block';
5767
6002
  tipHeight = rsNumLeftEl.offsetHeight;
5768
- } else {
5769
- rsNumLeftEl.style.display = 'none';
5770
6003
  }
5771
6004
  }
5772
6005
  if (rsNumRightEl) {
5773
6006
  if (offsetLeft < 0) {
5774
- rsNumRightEl.style.display = 'none';
5775
- } else {
5776
6007
  rsNumRightEl.textContent = `${Math.floor(containerRect.width - targetTableWidth)}px`;
5777
6008
  rsNumRightEl.style.display = 'block';
5778
6009
  tipHeight = rsNumRightEl.offsetHeight;
6010
+ } else {
6011
+ rsNumRightEl.style.display = 'none';
5779
6012
  }
5780
6013
  }
5781
6014
  const tipTop = evnt.clientY - containerRect.top - tipHeight / 2;
@@ -7039,9 +7272,9 @@ function getViewTypeLevel(type) {
7039
7272
  class: 'vxe-gantt--resizable-split-tip-number'
7040
7273
  }, [(0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
7041
7274
  class: 'vxe-gantt--resizable-split-number-left'
7042
- }, '10px'), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
7275
+ }), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
7043
7276
  class: 'vxe-gantt--resizable-split-number-right'
7044
- }, '20px')])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
7277
+ })])]), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.h)('div', {
7045
7278
  class: 'vxe-gantt--border-line'
7046
7279
  })]));
7047
7280
  break;