vxe-table 4.8.8 → 4.8.10

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_dom=require("../../ui/src/dom");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const renderer=_ui.VxeUI["renderer"],renderType="footer";function mergeFooterMethod(l,o,t){for(let e=0;e<l.length;e++){var{row:r,col:n,rowspan:a,colspan:u}=l[e];if(-1<n&&-1<r&&a&&u){if(r===o&&n===t)return{rowspan:a,colspan:u};if(r<=o&&o<r+a&&n<=t&&t<n+u)return{rowspan:0,colspan:0}}}}var _default=exports.default=(0,_vue.defineComponent)({name:"VxeTableFooter",props:{footerTableData:{type:Array,default:()=>[]},tableColumn:{type:Array,default:()=>[]},fixedColumn:{type:Array,default:()=>[]},fixedType:{type:String,default:null}},setup(a){const q=(0,_vue.inject)("$xeTable",{}),{xID:n,props:u,reactData:s,internalData:i}=q,{refTableHeader:c,refTableBody:d,refScrollXHandleElem:p}=q.getRefMaps(),{computeTooltipOpts:f,computeColumnOpts:v}=q.getComputeMaps(),x=(0,_vue.ref)(),m=(0,_vue.ref)(),_=(0,_vue.ref)(),g=(0,_vue.ref)(),y=(0,_vue.ref)(),R=e=>{var l=a["fixedType"],o=c.value,t=d.value,o=o?o.$el:null,r=x.value,t=t.$el,r=r.scrollLeft,n=p.value;n?n.scrollLeft=r:(n=t.scrollTop,i.lastScrollLeft=r,s.lastScrollTime=Date.now(),(0,_dom.setScrollLeft)(o,r),(0,_dom.setScrollLeft)(t,r),q.handleScrollEvent(e,!1,!0,{type:renderType,fixed:l,scrollTop:n,scrollLeft:r}))};(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{var e=a["fixedType"],l=i["elemStore"],e=`${e||"main"}-footer-`;l[e+"wrapper"]=x,l[e+"table"]=m,l[e+"colgroup"]=_,l[e+"list"]=g,l[e+"xSpace"]=y})}),(0,_vue.onUnmounted)(()=>{var e=a["fixedType"],l=i["elemStore"],e=`${e||"main"}-footer-`;l[e+"wrapper"]=null,l[e+"table"]=null,l[e+"colgroup"]=null,l[e+"list"]=null,l[e+"xSpace"]=null});return()=>{let{fixedType:b,fixedColumn:e,tableColumn:h,footerTableData:w}=a;const{footerRowClassName:l,footerCellClassName:T,footerRowStyle:o,footerCellStyle:C,footerAlign:S,footerSpanMethod:I,align:F,columnKey:$,showFooterOverflow:O}=u;var t=i["visibleColumn"];const{scrollXLoad:M,overflowX:D,scrollbarWidth:r,currentColumn:L,mergeFooterList:j}=s,A=f.value,k=v.value;return b&&(h=s.expandColumn||!M&&!O||j.length&&I?t:e),(0,_vue.h)("div",{ref:x,class:["vxe-table--footer-wrapper",b?`fixed-${b}--wrapper`:"body--wrapper"],xid:n,onScroll:R},[b?(0,_vue.createCommentVNode)():(0,_vue.h)("div",{ref:y,class:"vxe-body--x-space"}),(0,_vue.h)("table",{ref:m,class:"vxe-table--footer",xid:n,cellspacing:0,cellpadding:0,border:0},[(0,_vue.h)("colgroup",{ref:_},h.map((e,l)=>(0,_vue.h)("col",{name:e.id,key:l})).concat(r?[(0,_vue.h)("col",{name:"col_gutter"})]:[])),(0,_vue.h)("tfoot",{ref:g},w.map((_,g)=>{const y=g;var e={$table:q,row:_,_rowIndex:g,$rowIndex:y,fixed:b,type:renderType};return(0,_vue.h)("tr",{class:["vxe-footer--row",l?_xeUtils.default.isFunction(l)?l(e):l:""],style:o?_xeUtils.default.isFunction(o)?o(e):o:null},h.map((l,e)=>{var{type:o,showFooterOverflow:t,footerAlign:r,align:n,footerClassName:a,editRender:u,cellRender:s}=l,u=u||s,s=u?renderer.get(u.name):null;const i=A.showAll;u=l.children&&l.children.length,u=b?l.fixed!==b&&!u:l.fixed&&D,t=_xeUtils.default.eqNull(t)?O:t,r=r||(s?s.tableFooterCellAlign:"")||S||n||(s?s.tableCellAlign:"")||F;let c="ellipsis"===t;const d="title"===t,p=!0===t||"tooltip"===t;let f=d||p||c;var n={colid:l.id},s={},t=q.getColumnIndex(l),v=q.getVTColumnIndex(l),x=v;const m={$table:q,$grid:q.xegrid,row:_,rowIndex:g,_rowIndex:g,$rowIndex:y,column:l,columnIndex:t,$columnIndex:e,_columnIndex:v,itemIndex:x,items:_,fixed:b,type:renderType,data:w};if(M&&!f&&(c=f=!0),(d||p||i)&&(s.onMouseenter=e=>{d?(0,_dom.updateCellTitle)(e.currentTarget,l):(p||i)&&q.triggerFooterTooltipEvent(e,m)}),(p||i)&&(s.onMouseleave=e=>{(p||i)&&q.handleTargetLeaveEvent(e)}),s.onClick=e=>{q.dispatchEvent("footer-cell-click",Object.assign({cell:e.currentTarget},m),e)},s.onDblclick=e=>{q.dispatchEvent("footer-cell-dblclick",Object.assign({cell:e.currentTarget},m),e)},j.length){t=mergeFooterMethod(j,g,v);if(t){var{rowspan:x,colspan:v}=t;if(!x||!v)return null;1<x&&(n.rowspan=x),1<v&&(n.colspan=v)}}else if(I){var{rowspan:t=1,colspan:x=1}=I(m)||{};if(!t||!x)return null;1<t&&(n.rowspan=t),1<x&&(n.colspan=x)}return(0,_vue.h)("td",Object.assign(Object.assign(Object.assign(Object.assign({class:["vxe-footer--column",l.id,{["col--"+r]:r,["col--"+o]:o,"col--last":e===h.length-1,"fixed--hidden":u,"col--ellipsis":f,"col--current":L===l},(0,_dom.getPropClass)(a,m),(0,_dom.getPropClass)(T,m)]},n),{style:C?_xeUtils.default.isFunction(C)?C(m):C:null}),s),{key:$||k.useKey?l.id:e}),[(0,_vue.h)("div",{class:["vxe-cell",{"c--title":d,"c--tooltip":p,"c--ellipsis":c}]},l.renderFooter(m))])}).concat(r?[(0,_vue.h)("td",{class:"vxe-footer--gutter col--gutter"})]:[]))}))])])}}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_dom=require("../../ui/src/dom");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const renderer=_ui.VxeUI["renderer"],renderType="footer";function mergeFooterMethod(l,o,t){for(let e=0;e<l.length;e++){var{row:r,col:n,rowspan:a,colspan:u}=l[e];if(-1<n&&-1<r&&a&&u){if(r===o&&n===t)return{rowspan:a,colspan:u};if(r<=o&&o<r+a&&n<=t&&t<n+u)return{rowspan:0,colspan:0}}}}var _default=exports.default=(0,_vue.defineComponent)({name:"VxeTableFooter",props:{footerTableData:{type:Array,default:()=>[]},tableColumn:{type:Array,default:()=>[]},fixedColumn:{type:Array,default:()=>[]},fixedType:{type:String,default:null}},setup(a){const L=(0,_vue.inject)("$xeTable",{}),{xID:n,props:u,reactData:i,internalData:s}=L,{refTableHeader:c,refTableBody:d,refScrollXHandleElem:p}=L.getRefMaps(),{computeTooltipOpts:f,computeColumnOpts:v}=L.getComputeMaps(),x=(0,_vue.ref)(),m=(0,_vue.ref)(),_=(0,_vue.ref)(),g=(0,_vue.ref)(),y=(0,_vue.ref)(),R=e=>{var l=a["fixedType"],o=c.value,t=d.value,o=o?o.$el:null,r=x.value,t=t.$el,r=r.scrollLeft,n=p.value;n?n.scrollLeft=r:(n=t.scrollTop,(!!0,_dom.setScrollLeft)(o,r),(0,_dom.setScrollLeft)(t,r),L.handleScrollEvent(e,!1,!0,n,r,{type:renderType,fixed:l}))};(0,_vue.onMounted)(()=>{(0,_vue.nextTick)(()=>{var e=a["fixedType"],l=s["elemStore"],e=`${e||"main"}-footer-`;l[e+"wrapper"]=x,l[e+"table"]=m,l[e+"colgroup"]=_,l[e+"list"]=g,l[e+"xSpace"]=y})}),(0,_vue.onUnmounted)(()=>{var e=a["fixedType"],l=s["elemStore"],e=`${e||"main"}-footer-`;l[e+"wrapper"]=null,l[e+"table"]=null,l[e+"colgroup"]=null,l[e+"list"]=null,l[e+"xSpace"]=null});return()=>{let{fixedType:b,fixedColumn:e,tableColumn:h,footerTableData:w}=a;const{footerRowClassName:l,footerCellClassName:T,footerRowStyle:o,footerCellStyle:C,footerAlign:I,footerSpanMethod:S,align:F,columnKey:$,showFooterOverflow:O}=u;var t=s["visibleColumn"];const{scrollXLoad:M,overflowX:j,scrollbarWidth:r,currentColumn:A,mergeFooterList:D}=i,k=f.value,q=v.value;return b&&(h=i.expandColumn||!M&&!O||D.length&&S?t:e),(0,_vue.h)("div",{ref:x,class:["vxe-table--footer-wrapper",b?`fixed-${b}--wrapper`:"body--wrapper"],xid:n,onScroll:R},[b?(0,_vue.createCommentVNode)():(0,_vue.h)("div",{ref:y,class:"vxe-body--x-space"}),(0,_vue.h)("table",{ref:m,class:"vxe-table--footer",xid:n,cellspacing:0,cellpadding:0,border:0},[(0,_vue.h)("colgroup",{ref:_},h.map((e,l)=>(0,_vue.h)("col",{name:e.id,key:l})).concat(r?[(0,_vue.h)("col",{name:"col_gutter"})]:[])),(0,_vue.h)("tfoot",{ref:g},w.map((_,g)=>{const y=g;var e={$table:L,row:_,_rowIndex:g,$rowIndex:y,fixed:b,type:renderType};return(0,_vue.h)("tr",{class:["vxe-footer--row",l?_xeUtils.default.isFunction(l)?l(e):l:""],style:o?_xeUtils.default.isFunction(o)?o(e):o:null},h.map((l,e)=>{var{type:o,showFooterOverflow:t,footerAlign:r,align:n,footerClassName:a,editRender:u,cellRender:i}=l,u=u||i,i=u?renderer.get(u.name):null;const s=k.showAll;u=l.children&&l.children.length,u=b?l.fixed!==b&&!u:l.fixed&&j,t=_xeUtils.default.eqNull(t)?O:t,r=r||(i?i.tableFooterCellAlign:"")||I||n||(i?i.tableCellAlign:"")||F;let c="ellipsis"===t;const d="title"===t,p=!0===t||"tooltip"===t;let f=d||p||c;var n={colid:l.id},i={},t=L.getColumnIndex(l),v=L.getVTColumnIndex(l),x=v;const m={$table:L,$grid:L.xegrid,row:_,rowIndex:g,_rowIndex:g,$rowIndex:y,column:l,columnIndex:t,$columnIndex:e,_columnIndex:v,itemIndex:x,items:_,fixed:b,type:renderType,data:w};if(M&&!f&&(c=f=!0),(d||p||s)&&(i.onMouseenter=e=>{d?(0,_dom.updateCellTitle)(e.currentTarget,l):(p||s)&&L.triggerFooterTooltipEvent(e,m)}),(p||s)&&(i.onMouseleave=e=>{(p||s)&&L.handleTargetLeaveEvent(e)}),i.onClick=e=>{L.dispatchEvent("footer-cell-click",Object.assign({cell:e.currentTarget},m),e)},i.onDblclick=e=>{L.dispatchEvent("footer-cell-dblclick",Object.assign({cell:e.currentTarget},m),e)},D.length){t=mergeFooterMethod(D,g,v);if(t){var{rowspan:x,colspan:v}=t;if(!x||!v)return null;1<x&&(n.rowspan=x),1<v&&(n.colspan=v)}}else if(S){var{rowspan:t=1,colspan:x=1}=S(m)||{};if(!t||!x)return null;1<t&&(n.rowspan=t),1<x&&(n.colspan=x)}return(0,_vue.h)("td",Object.assign(Object.assign(Object.assign(Object.assign({class:["vxe-footer--column",l.id,{["col--"+r]:r,["col--"+o]:o,"col--last":e===h.length-1,"fixed--hidden":u,"col--ellipsis":f,"col--current":A===l},(0,_dom.getPropClass)(a,m),(0,_dom.getPropClass)(T,m)]},n),{style:C?_xeUtils.default.isFunction(C)?C(m):C:null}),i),{key:$||q.useKey?l.id:e}),[(0,_vue.h)("div",{class:["vxe-cell",{"c--title":d,"c--tooltip":p,"c--ellipsis":c}]},l.renderFooter(m))])}).concat(r?[(0,_vue.h)("td",{class:"vxe-footer--gutter col--gutter"})]:[]))}))])])}}});
@@ -408,9 +408,29 @@ var _default = exports.default = (0, _vue.defineComponent)({
408
408
  const computeSXOpts = (0, _vue.computed)(() => {
409
409
  return Object.assign({}, getConfig().table.scrollX, props.scrollX);
410
410
  });
411
+ const computeScrollXThreshold = (0, _vue.computed)(() => {
412
+ const sXOpts = computeSXOpts.value;
413
+ const {
414
+ threshold
415
+ } = sXOpts;
416
+ if (threshold) {
417
+ return _xeUtils.default.toNumber(threshold);
418
+ }
419
+ return 0;
420
+ });
411
421
  const computeSYOpts = (0, _vue.computed)(() => {
412
422
  return Object.assign({}, getConfig().table.scrollY, props.scrollY);
413
423
  });
424
+ const computeScrollYThreshold = (0, _vue.computed)(() => {
425
+ const sYOpts = computeSYOpts.value;
426
+ const {
427
+ threshold
428
+ } = sYOpts;
429
+ if (threshold) {
430
+ return _xeUtils.default.toNumber(threshold);
431
+ }
432
+ return 0;
433
+ });
414
434
  const computeRowHeightMaps = (0, _vue.computed)(() => {
415
435
  return {
416
436
  default: 48,
@@ -3344,9 +3364,6 @@ var _default = exports.default = (0, _vue.defineComponent)({
3344
3364
  (0, _dom.setScrollLeft)(bodyElem, scrollLeft);
3345
3365
  (0, _dom.setScrollLeft)(headerElem, scrollLeft);
3346
3366
  (0, _dom.setScrollLeft)(footerElem, scrollLeft);
3347
- (0, _dom.setScrollLeft)(bodyElem, scrollLeft);
3348
- (0, _dom.setScrollLeft)(headerElem, scrollLeft);
3349
- (0, _dom.setScrollLeft)(footerElem, scrollLeft);
3350
3367
  };
3351
3368
  const scrollXEvent = evnt => {
3352
3369
  const wrapperEl = evnt.currentTarget;
@@ -3356,15 +3373,11 @@ var _default = exports.default = (0, _vue.defineComponent)({
3356
3373
  } = wrapperEl;
3357
3374
  const isRollX = true;
3358
3375
  const isRollY = false;
3359
- internalData.lastScrollLeft = scrollLeft;
3360
- reactData.lastScrollTime = Date.now();
3361
3376
  handleSyncScrollX(scrollLeft);
3362
3377
  $xeTable.triggerScrollXEvent(evnt);
3363
- $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
3378
+ $xeTable.handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, {
3364
3379
  type: 'table',
3365
- fixed: '',
3366
- scrollTop,
3367
- scrollLeft
3380
+ fixed: ''
3368
3381
  });
3369
3382
  };
3370
3383
  const debounceScrollYCalculate = _xeUtils.default.debounce(function () {
@@ -3392,15 +3405,11 @@ var _default = exports.default = (0, _vue.defineComponent)({
3392
3405
  } = wrapperEl;
3393
3406
  const isRollX = false;
3394
3407
  const isRollY = true;
3395
- internalData.lastScrollTop = scrollTop;
3396
- reactData.lastScrollTime = Date.now();
3397
3408
  handleSyncScrollY(scrollTop);
3398
3409
  $xeTable.triggerScrollYEvent(evnt);
3399
- $xeTable.handleScrollEvent(evnt, isRollY, isRollX, {
3410
+ $xeTable.handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, {
3400
3411
  type: 'table',
3401
- fixed: '',
3402
- scrollTop,
3403
- scrollLeft
3412
+ fixed: ''
3404
3413
  });
3405
3414
  };
3406
3415
  let keyCtxTimeout;
@@ -4151,25 +4160,35 @@ var _default = exports.default = (0, _vue.defineComponent)({
4151
4160
  * 设置为固定列
4152
4161
  */
4153
4162
  setColumnFixed(fieldOrColumn, fixed) {
4154
- const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
4155
- const targetColumn = (0, _util.getRootColumn)($xeTable, column);
4156
- const isMaxFixedColumn = computeIsMaxFixedColumn.value;
4163
+ let status = false;
4164
+ const cols = _xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
4157
4165
  const columnOpts = computeColumnOpts.value;
4158
- if (targetColumn && targetColumn.fixed !== fixed) {
4159
- // 是否超过最大固定列数量
4160
- if (!targetColumn.fixed && isMaxFixedColumn) {
4161
- if (_ui.VxeUI.modal) {
4162
- _ui.VxeUI.modal.message({
4163
- status: 'error',
4164
- content: getI18n('vxe.table.maxFixedCol', [columnOpts.maxFixedSize])
4165
- });
4166
+ const isMaxFixedColumn = computeIsMaxFixedColumn.value;
4167
+ for (let i = 0; i < cols.length; i++) {
4168
+ const item = cols[i];
4169
+ const column = (0, _util.handleFieldOrColumn)($xeTable, item);
4170
+ const targetColumn = (0, _util.getRootColumn)($xeTable, column);
4171
+ if (targetColumn && targetColumn.fixed !== fixed) {
4172
+ // 是否超过最大固定列数量
4173
+ if (!targetColumn.fixed && isMaxFixedColumn) {
4174
+ if (_ui.VxeUI.modal) {
4175
+ _ui.VxeUI.modal.message({
4176
+ status: 'error',
4177
+ content: getI18n('vxe.table.maxFixedCol', [columnOpts.maxFixedSize])
4178
+ });
4179
+ }
4180
+ return (0, _vue.nextTick)();
4181
+ }
4182
+ _xeUtils.default.eachTree([targetColumn], column => {
4183
+ column.fixed = fixed;
4184
+ });
4185
+ tablePrivateMethods.saveCustomStore('update:fixed');
4186
+ if (!status) {
4187
+ status = true;
4166
4188
  }
4167
- return (0, _vue.nextTick)();
4168
4189
  }
4169
- _xeUtils.default.eachTree([targetColumn], column => {
4170
- column.fixed = fixed;
4171
- });
4172
- tablePrivateMethods.saveCustomStore('update:fixed');
4190
+ }
4191
+ if (status) {
4173
4192
  return tableMethods.refreshColumn();
4174
4193
  }
4175
4194
  return (0, _vue.nextTick)();
@@ -4178,13 +4197,22 @@ var _default = exports.default = (0, _vue.defineComponent)({
4178
4197
  * 取消指定固定列
4179
4198
  */
4180
4199
  clearColumnFixed(fieldOrColumn) {
4181
- const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
4182
- const targetColumn = (0, _util.getRootColumn)($xeTable, column);
4183
- if (targetColumn && targetColumn.fixed) {
4184
- _xeUtils.default.eachTree([targetColumn], column => {
4185
- column.fixed = null;
4186
- });
4187
- tablePrivateMethods.saveCustomStore('update:fixed');
4200
+ let status = false;
4201
+ const cols = _xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
4202
+ cols.forEach(item => {
4203
+ const column = (0, _util.handleFieldOrColumn)($xeTable, item);
4204
+ const targetColumn = (0, _util.getRootColumn)($xeTable, column);
4205
+ if (targetColumn && targetColumn.fixed) {
4206
+ _xeUtils.default.eachTree([targetColumn], column => {
4207
+ column.fixed = null;
4208
+ });
4209
+ tablePrivateMethods.saveCustomStore('update:fixed');
4210
+ if (!status) {
4211
+ status = true;
4212
+ }
4213
+ }
4214
+ });
4215
+ if (status) {
4188
4216
  return tableMethods.refreshColumn();
4189
4217
  }
4190
4218
  return (0, _vue.nextTick)();
@@ -4193,9 +4221,18 @@ var _default = exports.default = (0, _vue.defineComponent)({
4193
4221
  * 隐藏指定列
4194
4222
  */
4195
4223
  hideColumn(fieldOrColumn) {
4196
- const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
4197
- if (column && column.visible) {
4198
- column.visible = false;
4224
+ let status = false;
4225
+ const cols = _xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
4226
+ cols.forEach(item => {
4227
+ const column = (0, _util.handleFieldOrColumn)($xeTable, item);
4228
+ if (column && column.visible) {
4229
+ column.visible = false;
4230
+ if (!status) {
4231
+ status = true;
4232
+ }
4233
+ }
4234
+ });
4235
+ if (status) {
4199
4236
  return tablePrivateMethods.handleCustom();
4200
4237
  }
4201
4238
  return (0, _vue.nextTick)();
@@ -4204,25 +4241,43 @@ var _default = exports.default = (0, _vue.defineComponent)({
4204
4241
  * 显示指定列
4205
4242
  */
4206
4243
  showColumn(fieldOrColumn) {
4207
- const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
4208
- if (column && !column.visible) {
4209
- column.visible = true;
4244
+ let status = false;
4245
+ const cols = _xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
4246
+ cols.forEach(item => {
4247
+ const column = (0, _util.handleFieldOrColumn)($xeTable, item);
4248
+ if (column && !column.visible) {
4249
+ column.visible = true;
4250
+ if (!status) {
4251
+ status = true;
4252
+ }
4253
+ }
4254
+ });
4255
+ if (status) {
4210
4256
  return tablePrivateMethods.handleCustom();
4211
4257
  }
4212
4258
  return (0, _vue.nextTick)();
4213
4259
  },
4214
4260
  setColumnWidth(fieldOrColumn, width) {
4215
- const column = (0, _util.handleFieldOrColumn)($xeTable, fieldOrColumn);
4216
- if (column) {
4217
- const colWidth = _xeUtils.default.toInteger(width);
4218
- let rdWidth = colWidth;
4219
- if ((0, _dom.isScale)(width)) {
4220
- const tableBody = refTableBody.value;
4221
- const bodyElem = tableBody ? tableBody.$el : null;
4222
- const bodyWidth = bodyElem ? bodyElem.clientWidth - 1 : 0;
4223
- rdWidth = Math.floor(colWidth * bodyWidth);
4224
- }
4225
- column.resizeWidth = rdWidth;
4261
+ let status = false;
4262
+ const cols = _xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : [fieldOrColumn];
4263
+ cols.forEach(item => {
4264
+ const column = (0, _util.handleFieldOrColumn)($xeTable, item);
4265
+ if (column) {
4266
+ const colWidth = _xeUtils.default.toInteger(width);
4267
+ let rdWidth = colWidth;
4268
+ if ((0, _dom.isScale)(width)) {
4269
+ const tableBody = refTableBody.value;
4270
+ const bodyElem = tableBody ? tableBody.$el : null;
4271
+ const bodyWidth = bodyElem ? bodyElem.clientWidth - 1 : 0;
4272
+ rdWidth = Math.floor(colWidth * bodyWidth);
4273
+ }
4274
+ column.resizeWidth = rdWidth;
4275
+ if (!status) {
4276
+ status = true;
4277
+ }
4278
+ }
4279
+ });
4280
+ if (status) {
4226
4281
  return tableMethods.refreshColumn();
4227
4282
  }
4228
4283
  return (0, _vue.nextTick)();
@@ -5344,16 +5399,34 @@ var _default = exports.default = (0, _vue.defineComponent)({
5344
5399
  */
5345
5400
  scrollTo(scrollLeft, scrollTop) {
5346
5401
  const tableBody = refTableBody.value;
5402
+ const tableHeader = refTableHeader.value;
5347
5403
  const tableFooter = refTableFooter.value;
5404
+ const leftBody = refTableLeftBody.value;
5348
5405
  const rightBody = refTableRightBody.value;
5349
5406
  const tableBodyElem = tableBody ? tableBody.$el : null;
5407
+ const leftBodyElem = leftBody ? leftBody.$el : null;
5350
5408
  const rightBodyElem = rightBody ? rightBody.$el : null;
5409
+ const tableHeaderElem = tableHeader ? tableHeader.$el : null;
5351
5410
  const tableFooterElem = tableFooter ? tableFooter.$el : null;
5352
5411
  if (_xeUtils.default.isNumber(scrollLeft)) {
5353
- (0, _dom.setScrollLeft)(tableFooterElem || tableBodyElem, scrollLeft);
5412
+ const xHandleEl = refScrollXHandleElem.value;
5413
+ if (xHandleEl) {
5414
+ (0, _dom.setScrollLeft)(xHandleEl, scrollLeft);
5415
+ } else {
5416
+ (0, _dom.setScrollLeft)(tableBodyElem, scrollLeft);
5417
+ (0, _dom.setScrollLeft)(tableHeaderElem, scrollLeft);
5418
+ (0, _dom.setScrollLeft)(tableFooterElem, scrollLeft);
5419
+ }
5354
5420
  }
5355
5421
  if (_xeUtils.default.isNumber(scrollTop)) {
5356
- (0, _dom.setScrollTop)(rightBodyElem || tableBodyElem, scrollTop);
5422
+ const yHandleEl = refScrollYHandleElem.value;
5423
+ if (yHandleEl) {
5424
+ (0, _dom.setScrollTop)(yHandleEl, scrollTop);
5425
+ } else {
5426
+ (0, _dom.setScrollTop)(tableBodyElem, scrollTop);
5427
+ (0, _dom.setScrollTop)(leftBodyElem, scrollTop);
5428
+ (0, _dom.setScrollTop)(rightBodyElem, scrollTop);
5429
+ }
5357
5430
  }
5358
5431
  if (reactData.scrollXLoad || reactData.scrollYLoad) {
5359
5432
  return new Promise(resolve => {
@@ -7864,39 +7937,99 @@ var _default = exports.default = (0, _vue.defineComponent)({
7864
7937
  triggerScrollXEvent() {
7865
7938
  loadScrollXData();
7866
7939
  },
7867
- handleScrollEvent(evnt, isRollY, isRollX, params) {
7940
+ handleScrollEvent(evnt, isRollY, isRollX, scrollTop, scrollLeft, params) {
7868
7941
  const {
7869
7942
  highlightHoverRow
7870
7943
  } = props;
7944
+ const {
7945
+ lastScrollLeft,
7946
+ lastScrollTop
7947
+ } = internalData;
7871
7948
  const tableBody = refTableBody.value;
7872
7949
  const bodyElem = tableBody ? tableBody.$el : null;
7873
7950
  const rowOpts = computeRowOpts.value;
7874
7951
  const validTip = refValidTooltip.value;
7875
7952
  const tooltip = refTooltip.value;
7876
- if (rowOpts.isHover || highlightHoverRow) {
7877
- $xeTable.clearHoverRow();
7878
- }
7879
- if (validTip && validTip.reactData.visible) {
7880
- validTip.close();
7881
- }
7882
- if (tooltip && tooltip.reactData.visible) {
7883
- tooltip.close();
7884
- }
7885
- if (isRollX) {
7886
- tablePrivateMethods.checkScrolling();
7887
- }
7888
7953
  const bodyHeight = bodyElem ? bodyElem.clientHeight : 0;
7889
7954
  const bodyWidth = bodyElem ? bodyElem.clientWidth : 0;
7890
7955
  const scrollHeight = bodyElem ? bodyElem.scrollHeight : 0;
7891
7956
  const scrollWidth = bodyElem ? bodyElem.scrollWidth : 0;
7957
+ let isTop = false;
7958
+ let isBottom = false;
7959
+ let isLeft = false;
7960
+ let isRight = false;
7961
+ let direction = '';
7962
+ let isTopBoundary = false;
7963
+ let isBottomBoundary = false;
7964
+ let isLeftBoundary = false;
7965
+ let isRightBoundary = false;
7966
+ if (isRollX) {
7967
+ const xThreshold = computeScrollXThreshold.value;
7968
+ isLeft = scrollLeft <= 0;
7969
+ if (!isLeft) {
7970
+ isRight = scrollLeft + bodyWidth >= scrollWidth;
7971
+ }
7972
+ if (scrollLeft > lastScrollLeft) {
7973
+ direction = 'right';
7974
+ if (scrollLeft + bodyWidth >= scrollWidth - xThreshold) {
7975
+ isRightBoundary = true;
7976
+ }
7977
+ } else {
7978
+ direction = 'left';
7979
+ if (scrollLeft <= xThreshold) {
7980
+ isLeftBoundary = true;
7981
+ }
7982
+ }
7983
+ tablePrivateMethods.checkScrolling();
7984
+ internalData.lastScrollLeft = scrollLeft;
7985
+ reactData.lastScrollTime = Date.now();
7986
+ } else {
7987
+ const yThreshold = computeScrollYThreshold.value;
7988
+ isTop = scrollTop <= 0;
7989
+ if (!isTop) {
7990
+ isBottom = scrollTop + bodyHeight >= scrollHeight;
7991
+ }
7992
+ if (scrollTop > lastScrollTop) {
7993
+ direction = 'bottom';
7994
+ if (scrollTop + bodyHeight >= scrollHeight - yThreshold) {
7995
+ isBottomBoundary = true;
7996
+ }
7997
+ } else {
7998
+ direction = 'top';
7999
+ if (scrollTop <= yThreshold) {
8000
+ isTopBoundary = true;
8001
+ }
8002
+ }
8003
+ internalData.lastScrollTop = scrollTop;
8004
+ reactData.lastScrollTime = Date.now();
8005
+ }
7892
8006
  const evntParams = Object.assign({
8007
+ scrollTop,
8008
+ scrollLeft,
7893
8009
  bodyHeight,
7894
8010
  bodyWidth,
7895
8011
  scrollHeight,
7896
8012
  scrollWidth,
7897
8013
  isX: isRollX,
7898
- isY: isRollY
8014
+ isY: isRollY,
8015
+ isTop,
8016
+ isBottom,
8017
+ isLeft,
8018
+ isRight,
8019
+ direction
7899
8020
  }, params);
8021
+ if (rowOpts.isHover || highlightHoverRow) {
8022
+ $xeTable.clearHoverRow();
8023
+ }
8024
+ if (validTip && validTip.reactData.visible) {
8025
+ validTip.close();
8026
+ }
8027
+ if (tooltip && tooltip.reactData.visible) {
8028
+ tooltip.close();
8029
+ }
8030
+ if (isBottomBoundary || isTopBoundary || isRightBoundary || isLeftBoundary) {
8031
+ dispatchEvent('scroll-boundary', evntParams, evnt);
8032
+ }
7900
8033
  dispatchEvent('scroll', evntParams, evnt);
7901
8034
  },
7902
8035
  /**