vxe-table 4.7.87 → 4.7.88

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.
@@ -476,31 +476,42 @@ function colToVisible($xeTable, column) {
476
476
  refTableBody
477
477
  } = $xeTable.getRefMaps();
478
478
  const {
479
+ columnStore,
479
480
  scrollXLoad
480
481
  } = reactData;
481
482
  const {
482
483
  visibleColumn
483
484
  } = internalData;
485
+ const {
486
+ leftList,
487
+ rightList
488
+ } = columnStore;
484
489
  const tableBody = refTableBody.value;
485
490
  const bodyElem = tableBody ? tableBody.$el : null;
491
+ let offsetFixedLeft = 0;
492
+ leftList.forEach(item => {
493
+ offsetFixedLeft += item.renderWidth;
494
+ });
495
+ let offsetFixedRight = 0;
496
+ rightList.forEach(item => {
497
+ offsetFixedRight += item.renderWidth;
498
+ });
486
499
  if (bodyElem) {
500
+ const bodyWidth = bodyElem.clientWidth;
501
+ const bodySrcollLeft = bodyElem.scrollLeft;
487
502
  const tdElem = bodyElem.querySelector(`.${column.id}`);
488
503
  if (tdElem) {
489
- const bodyWidth = bodyElem.clientWidth;
490
- const bodySrcollLeft = bodyElem.scrollLeft;
491
504
  const tdOffsetParent = tdElem.offsetParent;
492
505
  const tdOffsetLeft = tdElem.offsetLeft + (tdOffsetParent ? tdOffsetParent.offsetLeft : 0);
493
506
  const tdWidth = tdElem.clientWidth;
494
- // 检测行是否在可视区中
495
- if (tdOffsetLeft < bodySrcollLeft || tdOffsetLeft > bodySrcollLeft + bodyWidth) {
496
- // 向左定位
497
- return $xeTable.scrollTo(tdOffsetLeft);
498
- } else if (tdOffsetLeft + tdWidth >= bodyWidth + bodySrcollLeft) {
499
- // 向右定位
500
- return $xeTable.scrollTo(bodySrcollLeft + tdWidth);
507
+ // 检测是否在可视区中
508
+ if (tdOffsetLeft < bodySrcollLeft + offsetFixedLeft) {
509
+ return $xeTable.scrollTo(tdOffsetLeft - offsetFixedLeft - 1);
510
+ } else if (tdOffsetLeft + tdWidth >= bodyWidth + bodySrcollLeft - offsetFixedRight) {
511
+ return $xeTable.scrollTo(tdOffsetLeft - offsetFixedLeft - offsetFixedRight + 1);
501
512
  }
502
513
  } else {
503
- // 如果是虚拟渲染跨行滚动
514
+ // 检测是否在虚拟渲染可视区中
504
515
  if (scrollXLoad) {
505
516
  let scrollLeft = 0;
506
517
  for (let index = 0; index < visibleColumn.length; index++) {
@@ -510,7 +521,10 @@ function colToVisible($xeTable, column) {
510
521
  }
511
522
  scrollLeft += currCol.renderWidth;
512
523
  }
513
- return $xeTable.scrollTo(scrollLeft);
524
+ if (scrollLeft < bodySrcollLeft) {
525
+ return $xeTable.scrollTo(scrollLeft - offsetFixedLeft - 1);
526
+ }
527
+ return $xeTable.scrollTo(scrollLeft - offsetFixedLeft - offsetFixedRight + 1);
514
528
  }
515
529
  }
516
530
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assembleColumn=assembleColumn,exports.clearTableAllStatus=clearTableAllStatus,exports.clearTableDefaultStatus=clearTableDefaultStatus,exports.colToVisible=colToVisible,exports.convertHeaderColumnToRows=void 0,exports.createColumn=createColumn,exports.destroyColumn=destroyColumn,exports.getCellValue=getCellValue,exports.getColReMaxWidth=getColReMaxWidth,exports.getColReMinWidth=getColReMinWidth,exports.getRootColumn=getRootColumn,exports.getRowUniqueId=getRowUniqueId,exports.getRowid=getRowid,exports.getRowkey=getRowkey,exports.handleFieldOrColumn=void 0,exports.isColumnInfo=isColumnInfo,exports.mergeBodyMethod=mergeBodyMethod,exports.removeScrollListener=removeScrollListener,exports.restoreScrollListener=restoreScrollListener,exports.restoreScrollLocation=restoreScrollLocation,exports.rowToVisible=rowToVisible,exports.setCellValue=setCellValue,exports.toFilters=toFilters,exports.toTreePathSeq=toTreePathSeq,exports.watchColumn=watchColumn;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_columnInfo=require("./columnInfo"),_dom=require("../../ui/src/dom");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const getAllConvertColumns=(e,l)=>{const t=[];return e.forEach(e=>{e.parentId=l?l.id:null,e.visible&&(e.children&&e.children.length&&e.children.some(e=>e.visible)?(t.push(e),t.push(...getAllConvertColumns(e.children,e))):t.push(e))}),t},convertHeaderColumnToRows=e=>{let l=1;const r=(t,e)=>{if(e&&(t.level=e.level+1,l<t.level)&&(l=t.level),t.children&&t.children.length&&t.children.some(e=>e.visible)){let l=0;t.children.forEach(e=>{e.visible&&(r(e,t),l+=e.colSpan)}),t.colSpan=l}else t.colSpan=1},t=(e.forEach(e=>{e.level=1,r(e)}),[]);for(let e=0;e<l;e++)t.push([]);return getAllConvertColumns(e).forEach(e=>{e.children&&e.children.length&&e.children.some(e=>e.visible)?e.rowSpan=1:e.rowSpan=l-e.level+1,t[e.level-1].push(e)}),t};function restoreScrollLocation(e,l,t){const r=e["internalData"];return e.clearScroll().then(()=>{if(l||t)return r.lastScrollLeft=0,r.lastScrollTop=0,e.scrollTo(l,t)})}function removeScrollListener(e){e&&e._onscroll&&(e.onscroll=null)}function restoreScrollListener(e){e&&e._onscroll&&(e.onscroll=e._onscroll)}function getRowUniqueId(){return _xeUtils.default.uniqueId("row_")}function getRowkey(e){var l=e["props"],e=e.getComputeMaps()["computeRowOpts"],l=l["rowId"],e=e.value;return l||e.keyField||"_X_ROW_KEY"}function getRowid(e,l){l=_xeUtils.default.get(l,getRowkey(e));return _xeUtils.default.eqNull(l)?"":encodeURIComponent(l)}exports.convertHeaderColumnToRows=convertHeaderColumnToRows;const handleFieldOrColumn=(e,l)=>l?_xeUtils.default.isString(l)?e.getColumnByField(l):l:null;function getPaddingLeftRightSize(e){return e?(e=getComputedStyle(e),_xeUtils.default.toNumber(e.paddingLeft)+_xeUtils.default.toNumber(e.paddingRight)):0}function getElemenMarginWidth(e){var l,t;return e?(t=getComputedStyle(e),l=_xeUtils.default.toNumber(t.marginLeft),t=_xeUtils.default.toNumber(t.marginRight),e.offsetWidth+l+t):0}function queryCellElement(e,l){return e.querySelector(".vxe-cell"+l)}function toFilters(e){return e&&_xeUtils.default.isArray(e)?e.map(({label:e,value:l,data:t,resetValue:r,checked:o})=>({label:e,value:l,data:t,resetValue:r,checked:!!o,_checked:!!o})):e}function toTreePathSeq(e){return e.map((e,l)=>l%2==0?Number(e)+1:".").join("")}function getCellValue(e,l){return _xeUtils.default.get(e,l.field)}function setCellValue(e,l,t){return _xeUtils.default.set(e,l.field,t)}function getColReMaxWidth(e){var l=e["$table"],l=l.getComputeMaps()["computeResizableOpts"],l=l.value["maxWidth"];if(l){e=_xeUtils.default.isFunction(l)?l(e):l;if("auto"!==e)return Math.max(1,_xeUtils.default.toNumber(e))}return-1}function getColReMinWidth(e){var{$table:l,column:t,cell:r}=e,o=l["props"],n=l.getComputeMaps()["computeResizableOpts"],n=n.value["minWidth"];if(n){e=_xeUtils.default.isFunction(n)?n(e):n;if("auto"!==e)return Math.max(1,_xeUtils.default.toNumber(e))}var i,a,n=o["showHeaderOverflow"],{showHeaderOverflow:e,minWidth:o}=t,t=_xeUtils.default.isUndefined(e)||_xeUtils.default.isNull(e)?n:e,n="title"===t||(!0===t||"tooltip"===t)||"ellipsis"===t;let u=_xeUtils.default.floor(1.6*(_xeUtils.default.toNumber(getComputedStyle(r).fontSize)||14))+(getPaddingLeftRightSize(r)+getPaddingLeftRightSize(queryCellElement(r,"")));if(n&&(e=getPaddingLeftRightSize(queryCellElement(r,"--title>.vxe-cell--checkbox")),t=getElemenMarginWidth(queryCellElement(r,">.vxe-cell--required-icon")),n=getElemenMarginWidth(queryCellElement(r,">.vxe-cell--edit-icon")),s=getElemenMarginWidth(queryCellElement(r,">.vxe-cell-title-prefix-icon")),i=getElemenMarginWidth(queryCellElement(r,">.vxe-cell-title-suffix-icon")),a=getElemenMarginWidth(queryCellElement(r,">.vxe-cell--sort")),r=getElemenMarginWidth(queryCellElement(r,">.vxe-cell--filter")),u+=e+t+n+s+i+r+a),o){var s,e=l.getRefMaps()["refTableBody"],t=e.value,n=t?t.$el:null;if(n){if((0,_dom.isScale)(o))return s=(n.clientWidth-1)/100,Math.max(u,Math.floor(_xeUtils.default.toInteger(o)*s));if((0,_dom.isPx)(o))return Math.max(u,_xeUtils.default.toInteger(o))}}return u}function isColumnInfo(e){return e&&(e.constructor===_columnInfo.ColumnInfo||e instanceof _columnInfo.ColumnInfo)}function createColumn(e,l,t){return isColumnInfo(l)?l:(0,_vue.reactive)(new _columnInfo.ColumnInfo(e,l,t))}function watchColumn(t,e,r){Object.keys(e).forEach(l=>{(0,_vue.watch)(()=>e[l],e=>{r.update(l,e),t&&("filters"===l?(t.setFilter(r,e),t.handleUpdateDataQueue()):["visible","fixed","width","minWidth","maxWidth"].includes(l)&&t.handleRefreshColumnQueue())})})}function assembleColumn(e,l,t,r){var e=e["reactData"],o=e["staticColumns"],n=l.parentNode,r=r?r.columnConfig:null,r=r?r.children:o;n&&r&&(r.splice(_xeUtils.default.arrayIndexOf(n.children,l),0,t),e.staticColumns=o.slice(0))}function destroyColumn(e,l){var e=e["reactData"],t=e["staticColumns"],r=_xeUtils.default.findTree(t,e=>e.id===l.id,{children:"children"});r&&r.items.splice(r.index,1),e.staticColumns=t.slice(0)}function getRootColumn(e,l){var e=e["internalData"],t=e["fullColumnIdData"];if(!l)return null;let r=l.parentId;for(;t[r];){const l=t[r].column;if(!(r=l.parentId))return l}return l}function mergeBodyMethod(l,t,r){for(let e=0;e<l.length;e++){var{row:o,col:n,rowspan:i,colspan:a}=l[e];if(-1<n&&-1<o&&i&&a){if(o===t&&n===r)return{rowspan:i,colspan:a};if(o<=t&&t<o+i&&n<=r&&r<n+a)return{rowspan:0,colspan:0}}}}function clearTableDefaultStatus(e){var{props:l,internalData:t}=e;return t.initStatus=!1,e.clearSort(),e.clearCurrentRow(),e.clearCurrentColumn(),e.clearRadioRow(),e.clearRadioReserve(),e.clearCheckboxRow(),e.clearCheckboxReserve(),e.clearRowExpand(),e.clearTreeExpand(),e.clearTreeExpandReserve(),e.clearPendingRow(),e.clearFilter&&e.clearFilter(),e.clearSelected&&(l.keyboardConfig||l.mouseConfig)&&e.clearSelected(),e.clearCellAreas&&l.mouseConfig&&(e.clearCellAreas(),e.clearCopyCellArea()),e.clearScroll()}function clearTableAllStatus(e){return e.clearFilter&&e.clearFilter(),clearTableDefaultStatus(e)}function rowToVisible(e,l){var{reactData:t,internalData:r}=e,o=e.getRefMaps()["refTableBody"],t=t["scrollYLoad"],{afterFullData:r,scrollYStore:n}=r,o=o.value,o=o?o.$el:null;if(o){var i=o.querySelector(`[rowid="${getRowid(e,l)}"]`);if(i){var a=o.clientHeight,o=o.scrollTop,u=i.offsetParent,u=i.offsetTop+(u?u.offsetTop:0),i=i.clientHeight;if(u<o||o+a<u)return e.scrollTo(null,u);if(a+o<=u+i)return e.scrollTo(null,o+i)}else if(t)return e.scrollTo(null,(e.findRowIndexOf(r,l)-1)*n.rowHeight)}return Promise.resolve()}function colToVisible(e,t){var{reactData:l,internalData:r}=e,o=e.getRefMaps()["refTableBody"],l=l["scrollXLoad"],n=r["visibleColumn"],r=o.value,o=r?r.$el:null;if(o){r=o.querySelector("."+t.id);if(r){var i=o.clientWidth,o=o.scrollLeft,a=r.offsetParent,a=r.offsetLeft+(a?a.offsetLeft:0),r=r.clientWidth;if(a<o||o+i<a)return e.scrollTo(a);if(i+o<=a+r)return e.scrollTo(o+r)}else if(l){let l=0;for(let e=0;e<n.length;e++){var u=n[e];if(u===t||u.id===t.id)break;l+=u.renderWidth}return e.scrollTo(l)}}return Promise.resolve()}exports.handleFieldOrColumn=handleFieldOrColumn;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assembleColumn=assembleColumn,exports.clearTableAllStatus=clearTableAllStatus,exports.clearTableDefaultStatus=clearTableDefaultStatus,exports.colToVisible=colToVisible,exports.convertHeaderColumnToRows=void 0,exports.createColumn=createColumn,exports.destroyColumn=destroyColumn,exports.getCellValue=getCellValue,exports.getColReMaxWidth=getColReMaxWidth,exports.getColReMinWidth=getColReMinWidth,exports.getRootColumn=getRootColumn,exports.getRowUniqueId=getRowUniqueId,exports.getRowid=getRowid,exports.getRowkey=getRowkey,exports.handleFieldOrColumn=void 0,exports.isColumnInfo=isColumnInfo,exports.mergeBodyMethod=mergeBodyMethod,exports.removeScrollListener=removeScrollListener,exports.restoreScrollListener=restoreScrollListener,exports.restoreScrollLocation=restoreScrollLocation,exports.rowToVisible=rowToVisible,exports.setCellValue=setCellValue,exports.toFilters=toFilters,exports.toTreePathSeq=toTreePathSeq,exports.watchColumn=watchColumn;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_columnInfo=require("./columnInfo"),_dom=require("../../ui/src/dom");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const getAllConvertColumns=(e,l)=>{const t=[];return e.forEach(e=>{e.parentId=l?l.id:null,e.visible&&(e.children&&e.children.length&&e.children.some(e=>e.visible)?(t.push(e),t.push(...getAllConvertColumns(e.children,e))):t.push(e))}),t},convertHeaderColumnToRows=e=>{let l=1;const r=(t,e)=>{if(e&&(t.level=e.level+1,l<t.level)&&(l=t.level),t.children&&t.children.length&&t.children.some(e=>e.visible)){let l=0;t.children.forEach(e=>{e.visible&&(r(e,t),l+=e.colSpan)}),t.colSpan=l}else t.colSpan=1},t=(e.forEach(e=>{e.level=1,r(e)}),[]);for(let e=0;e<l;e++)t.push([]);return getAllConvertColumns(e).forEach(e=>{e.children&&e.children.length&&e.children.some(e=>e.visible)?e.rowSpan=1:e.rowSpan=l-e.level+1,t[e.level-1].push(e)}),t};function restoreScrollLocation(e,l,t){const r=e["internalData"];return e.clearScroll().then(()=>{if(l||t)return r.lastScrollLeft=0,r.lastScrollTop=0,e.scrollTo(l,t)})}function removeScrollListener(e){e&&e._onscroll&&(e.onscroll=null)}function restoreScrollListener(e){e&&e._onscroll&&(e.onscroll=e._onscroll)}function getRowUniqueId(){return _xeUtils.default.uniqueId("row_")}function getRowkey(e){var l=e["props"],e=e.getComputeMaps()["computeRowOpts"],l=l["rowId"],e=e.value;return l||e.keyField||"_X_ROW_KEY"}function getRowid(e,l){l=_xeUtils.default.get(l,getRowkey(e));return _xeUtils.default.eqNull(l)?"":encodeURIComponent(l)}exports.convertHeaderColumnToRows=convertHeaderColumnToRows;const handleFieldOrColumn=(e,l)=>l?_xeUtils.default.isString(l)?e.getColumnByField(l):l:null;function getPaddingLeftRightSize(e){return e?(e=getComputedStyle(e),_xeUtils.default.toNumber(e.paddingLeft)+_xeUtils.default.toNumber(e.paddingRight)):0}function getElemenMarginWidth(e){var l,t;return e?(t=getComputedStyle(e),l=_xeUtils.default.toNumber(t.marginLeft),t=_xeUtils.default.toNumber(t.marginRight),e.offsetWidth+l+t):0}function queryCellElement(e,l){return e.querySelector(".vxe-cell"+l)}function toFilters(e){return e&&_xeUtils.default.isArray(e)?e.map(({label:e,value:l,data:t,resetValue:r,checked:o})=>({label:e,value:l,data:t,resetValue:r,checked:!!o,_checked:!!o})):e}function toTreePathSeq(e){return e.map((e,l)=>l%2==0?Number(e)+1:".").join("")}function getCellValue(e,l){return _xeUtils.default.get(e,l.field)}function setCellValue(e,l,t){return _xeUtils.default.set(e,l.field,t)}function getColReMaxWidth(e){var l=e["$table"],l=l.getComputeMaps()["computeResizableOpts"],l=l.value["maxWidth"];if(l){e=_xeUtils.default.isFunction(l)?l(e):l;if("auto"!==e)return Math.max(1,_xeUtils.default.toNumber(e))}return-1}function getColReMinWidth(e){var{$table:l,column:t,cell:r}=e,o=l["props"],n=l.getComputeMaps()["computeResizableOpts"],n=n.value["minWidth"];if(n){e=_xeUtils.default.isFunction(n)?n(e):n;if("auto"!==e)return Math.max(1,_xeUtils.default.toNumber(e))}var i,a,n=o["showHeaderOverflow"],{showHeaderOverflow:e,minWidth:o}=t,t=_xeUtils.default.isUndefined(e)||_xeUtils.default.isNull(e)?n:e,n="title"===t||(!0===t||"tooltip"===t)||"ellipsis"===t;let u=_xeUtils.default.floor(1.6*(_xeUtils.default.toNumber(getComputedStyle(r).fontSize)||14))+(getPaddingLeftRightSize(r)+getPaddingLeftRightSize(queryCellElement(r,"")));if(n&&(e=getPaddingLeftRightSize(queryCellElement(r,"--title>.vxe-cell--checkbox")),t=getElemenMarginWidth(queryCellElement(r,">.vxe-cell--required-icon")),n=getElemenMarginWidth(queryCellElement(r,">.vxe-cell--edit-icon")),s=getElemenMarginWidth(queryCellElement(r,">.vxe-cell-title-prefix-icon")),i=getElemenMarginWidth(queryCellElement(r,">.vxe-cell-title-suffix-icon")),a=getElemenMarginWidth(queryCellElement(r,">.vxe-cell--sort")),r=getElemenMarginWidth(queryCellElement(r,">.vxe-cell--filter")),u+=e+t+n+s+i+r+a),o){var s,e=l.getRefMaps()["refTableBody"],t=e.value,n=t?t.$el:null;if(n){if((0,_dom.isScale)(o))return s=(n.clientWidth-1)/100,Math.max(u,Math.floor(_xeUtils.default.toInteger(o)*s));if((0,_dom.isPx)(o))return Math.max(u,_xeUtils.default.toInteger(o))}}return u}function isColumnInfo(e){return e&&(e.constructor===_columnInfo.ColumnInfo||e instanceof _columnInfo.ColumnInfo)}function createColumn(e,l,t){return isColumnInfo(l)?l:(0,_vue.reactive)(new _columnInfo.ColumnInfo(e,l,t))}function watchColumn(t,e,r){Object.keys(e).forEach(l=>{(0,_vue.watch)(()=>e[l],e=>{r.update(l,e),t&&("filters"===l?(t.setFilter(r,e),t.handleUpdateDataQueue()):["visible","fixed","width","minWidth","maxWidth"].includes(l)&&t.handleRefreshColumnQueue())})})}function assembleColumn(e,l,t,r){var e=e["reactData"],o=e["staticColumns"],n=l.parentNode,r=r?r.columnConfig:null,r=r?r.children:o;n&&r&&(r.splice(_xeUtils.default.arrayIndexOf(n.children,l),0,t),e.staticColumns=o.slice(0))}function destroyColumn(e,l){var e=e["reactData"],t=e["staticColumns"],r=_xeUtils.default.findTree(t,e=>e.id===l.id,{children:"children"});r&&r.items.splice(r.index,1),e.staticColumns=t.slice(0)}function getRootColumn(e,l){var e=e["internalData"],t=e["fullColumnIdData"];if(!l)return null;let r=l.parentId;for(;t[r];){const l=t[r].column;if(!(r=l.parentId))return l}return l}function mergeBodyMethod(l,t,r){for(let e=0;e<l.length;e++){var{row:o,col:n,rowspan:i,colspan:a}=l[e];if(-1<n&&-1<o&&i&&a){if(o===t&&n===r)return{rowspan:i,colspan:a};if(o<=t&&t<o+i&&n<=r&&r<n+a)return{rowspan:0,colspan:0}}}}function clearTableDefaultStatus(e){var{props:l,internalData:t}=e;return t.initStatus=!1,e.clearSort(),e.clearCurrentRow(),e.clearCurrentColumn(),e.clearRadioRow(),e.clearRadioReserve(),e.clearCheckboxRow(),e.clearCheckboxReserve(),e.clearRowExpand(),e.clearTreeExpand(),e.clearTreeExpandReserve(),e.clearPendingRow(),e.clearFilter&&e.clearFilter(),e.clearSelected&&(l.keyboardConfig||l.mouseConfig)&&e.clearSelected(),e.clearCellAreas&&l.mouseConfig&&(e.clearCellAreas(),e.clearCopyCellArea()),e.clearScroll()}function clearTableAllStatus(e){return e.clearFilter&&e.clearFilter(),clearTableDefaultStatus(e)}function rowToVisible(e,l){var{reactData:t,internalData:r}=e,o=e.getRefMaps()["refTableBody"],t=t["scrollYLoad"],{afterFullData:r,scrollYStore:n}=r,o=o.value,o=o?o.$el:null;if(o){var i=o.querySelector(`[rowid="${getRowid(e,l)}"]`);if(i){var a=o.clientHeight,o=o.scrollTop,u=i.offsetParent,u=i.offsetTop+(u?u.offsetTop:0),i=i.clientHeight;if(u<o||o+a<u)return e.scrollTo(null,u);if(a+o<=u+i)return e.scrollTo(null,o+i)}else if(t)return e.scrollTo(null,(e.findRowIndexOf(r,l)-1)*n.rowHeight)}return Promise.resolve()}function colToVisible(e,t){var{reactData:r,internalData:l}=e,o=e.getRefMaps()["refTableBody"],{columnStore:r,scrollXLoad:n}=r,i=l["visibleColumn"],{leftList:l,rightList:r}=r,o=o.value,o=o?o.$el:null;let a=0,u=(l.forEach(e=>{a+=e.renderWidth}),0);if(r.forEach(e=>{u+=e.renderWidth}),o){l=o.clientWidth,r=o.scrollLeft,o=o.querySelector("."+t.id);if(o){var s=o.offsetParent,s=o.offsetLeft+(s?s.offsetLeft:0),o=o.clientWidth;if(s<r+a)return e.scrollTo(s-a-1);if(s+o>=l+r-u)return e.scrollTo(s-a-u+1)}else if(n){let l=0;for(let e=0;e<i.length;e++){var c=i[e];if(c===t||c.id===t.id)break;l+=c.renderWidth}return l<r?e.scrollTo(l-a-1):e.scrollTo(l-a-u+1)}}return Promise.resolve()}exports.handleFieldOrColumn=handleFieldOrColumn;
package/lib/ui/index.js CHANGED
@@ -13,9 +13,9 @@ Object.defineProperty(exports, "VxeUI", {
13
13
  exports.version = exports.validators = exports.use = exports.t = exports.setup = exports.setTheme = exports.setLanguage = exports.setIcon = exports.setI18n = exports.setConfig = exports.saveFile = exports.renderer = exports.readFile = exports.print = exports.modal = exports.menus = exports.log = exports.interceptor = exports.hooks = exports.globalResize = exports.globalEvents = exports.getTheme = exports.getIcon = exports.getI18n = exports.getConfig = exports.formats = exports.default = exports.config = exports.commands = exports.clipboard = exports._t = void 0;
14
14
  var _core = require("@vxe-ui/core");
15
15
  var _utils = require("./src/utils");
16
- const version = exports.version = "4.7.87";
16
+ const version = exports.version = "4.7.88";
17
17
  _core.VxeUI.version = version;
18
- _core.VxeUI.tableVersion = "4.7.87";
18
+ _core.VxeUI.tableVersion = "4.7.88";
19
19
  _core.VxeUI.setConfig({
20
20
  emptyCell: ' ',
21
21
  table: {
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VXETable=void 0,Object.defineProperty(exports,"VxeUI",{enumerable:!0,get:function(){return _core.VxeUI}}),exports.version=exports.validators=exports.use=exports.t=exports.setup=exports.setTheme=exports.setLanguage=exports.setIcon=exports.setI18n=exports.setConfig=exports.saveFile=exports.renderer=exports.readFile=exports.print=exports.modal=exports.menus=exports.log=exports.interceptor=exports.hooks=exports.globalResize=exports.globalEvents=exports.getTheme=exports.getIcon=exports.getI18n=exports.getConfig=exports.formats=exports.default=exports.config=exports.commands=exports.clipboard=exports._t=void 0;var _core=require("@vxe-ui/core"),_utils=require("./src/utils");const version=exports.version="4.7.87",iconPrefix=(_core.VxeUI.version=version,_core.VxeUI.tableVersion="4.7.87",_core.VxeUI.setConfig({emptyCell:" ",table:{fit:!0,showHeader:!0,animat:!0,delayHover:250,autoResize:!0,padding:!0,minHeight:144,resizeConfig:{refreshDelay:250},radioConfig:{strict:!0},checkboxConfig:{strict:!0},tooltipConfig:{enterable:!0},validConfig:{showMessage:!0,autoClear:!0,autoPos:!0,message:"inline",msgMode:"single"},columnConfig:{maxFixedSize:4},customConfig:{allowVisible:!0,allowResizable:!0,allowFixed:!0,allowSort:!0,showFooter:!0,placement:"top-right",modalOptions:{showMaximize:!0,mask:!0,lockView:!0,resize:!0,escClosable:!0}},sortConfig:{showIcon:!0,iconLayout:"vertical"},filterConfig:{showIcon:!0},treeConfig:{rowField:"id",parentField:"parentId",childrenField:"children",hasChildField:"hasChild",mapChildrenField:"_X_ROW_CHILD",indent:20,showIcon:!0},expandConfig:{showIcon:!0},editConfig:{showIcon:!0,showAsterisk:!0,autoFocus:!0},importConfig:{_typeMaps:{csv:1,html:1,xml:1,txt:1}},exportConfig:{_typeMaps:{csv:1,html:1,xml:1,txt:1}},printConfig:{},mouseConfig:{extension:!0},keyboardConfig:{isEsc:!0},areaConfig:{autoClear:!0,selectCellByHeader:!0},clipConfig:{isCopy:!0,isCut:!0,isPaste:!0},fnrConfig:{isFind:!0,isReplace:!0},scrollX:{gt:60},scrollY:{gt:100}},grid:{formConfig:{enabled:!0},pagerConfig:{enabled:!0},toolbarConfig:{enabled:!0},proxyConfig:{enabled:!0,autoLoad:!0,showResponseMsg:!0,showActiveMsg:!0,props:{list:null,result:"result",total:"page.total",message:"message"}}},toolbar:{}}),"vxe-table-icon-"),setTheme=(_core.VxeUI.setIcon({TABLE_SORT_ASC:iconPrefix+"caret-up",TABLE_SORT_DESC:iconPrefix+"caret-down",TABLE_FILTER_NONE:iconPrefix+"funnel",TABLE_FILTER_MATCH:iconPrefix+"funnel",TABLE_EDIT:iconPrefix+"edit",TABLE_TITLE_PREFIX:iconPrefix+"question-circle-fill",TABLE_TITLE_SUFFIX:iconPrefix+"question-circle-fill",TABLE_TREE_LOADED:iconPrefix+"spinner roll",TABLE_TREE_OPEN:iconPrefix+"caret-right rotate90",TABLE_TREE_CLOSE:iconPrefix+"caret-right",TABLE_EXPAND_LOADED:iconPrefix+"spinner roll",TABLE_EXPAND_OPEN:iconPrefix+"arrow-right rotate90",TABLE_EXPAND_CLOSE:iconPrefix+"arrow-right",TABLE_CHECKBOX_CHECKED:iconPrefix+"checkbox-checked-fill",TABLE_CHECKBOX_UNCHECKED:iconPrefix+"checkbox-unchecked",TABLE_CHECKBOX_INDETERMINATE:iconPrefix+"checkbox-indeterminate-fill",TABLE_RADIO_CHECKED:iconPrefix+"radio-checked-fill",TABLE_RADIO_UNCHECKED:iconPrefix+"radio-unchecked",TABLE_CUSTOM_SORT:iconPrefix+"drag-handle",TABLE_MENU_OPTIONS:iconPrefix+"arrow-right",TOOLBAR_TOOLS_REFRESH:iconPrefix+"repeat",TOOLBAR_TOOLS_REFRESH_LOADING:iconPrefix+"repeat roll",TOOLBAR_TOOLS_IMPORT:iconPrefix+"upload",TOOLBAR_TOOLS_EXPORT:iconPrefix+"download",TOOLBAR_TOOLS_PRINT:iconPrefix+"print",TOOLBAR_TOOLS_FULLSCREEN:iconPrefix+"fullscreen",TOOLBAR_TOOLS_MINIMIZE:iconPrefix+"minimize",TOOLBAR_TOOLS_CUSTOM:iconPrefix+"custom-column",TOOLBAR_TOOLS_FIXED_LEFT:iconPrefix+"fixed-left",TOOLBAR_TOOLS_FIXED_LEFT_ACTIVE:iconPrefix+"fixed-left-fill",TOOLBAR_TOOLS_FIXED_RIGHT:iconPrefix+"fixed-right",TOOLBAR_TOOLS_FIXED_RIGHT_ACTIVE:iconPrefix+"fixed-right-fill"}),exports.setTheme=_core.VxeUI.setTheme),getTheme=exports.getTheme=_core.VxeUI.getTheme,setConfig=exports.setConfig=_core.VxeUI.setConfig,getConfig=exports.getConfig=_core.VxeUI.getConfig,setIcon=exports.setIcon=_core.VxeUI.setIcon,getIcon=exports.getIcon=_core.VxeUI.getIcon,setLanguage=exports.setLanguage=_core.VxeUI.setLanguage,setI18n=exports.setI18n=_core.VxeUI.setI18n,getI18n=exports.getI18n=_core.VxeUI.getI18n,globalEvents=exports.globalEvents=_core.VxeUI.globalEvents,globalResize=exports.globalResize=_core.VxeUI.globalResize,renderer=exports.renderer=_core.VxeUI.renderer,validators=exports.validators=_core.VxeUI.validators,menus=exports.menus=_core.VxeUI.menus,formats=exports.formats=_core.VxeUI.formats,commands=exports.commands=_core.VxeUI.commands,interceptor=exports.interceptor=_core.VxeUI.interceptor,clipboard=exports.clipboard=_core.VxeUI.clipboard,log=exports.log=_core.VxeUI.log,hooks=exports.hooks=_core.VxeUI.hooks,use=exports.use=_core.VxeUI.use,setup=e=>_core.VxeUI.setConfig(e),config=(exports.setup=setup,_core.VxeUI.setup=setup,e=>_core.VxeUI.setConfig(e)),t=(exports.config=config,_core.VxeUI.config=config,(e,o)=>_core.VxeUI.getI18n(e,o)),_t=(exports.t=t,_core.VxeUI.t=t,(e,o)=>(0,_utils.getFuncText)(e,o)),VXETable=(exports._t=_t,_core.VxeUI._t=_t,exports.VXETable=_core.VxeUI),saveFile=e=>_core.VxeUI.saveFile(e),readFile=(exports.saveFile=saveFile,e=>_core.VxeUI.readFile(e)),print=(exports.readFile=readFile,e=>_core.VxeUI.print(e)),modal=(exports.print=print,exports.modal={get(e){return _core.VxeUI.modal.get(e)},close(e){return _core.VxeUI.modal.close(e)},open(e){return _core.VxeUI.modal.open(e)},alert(e,o,r){return _core.VxeUI.modal.alert(e,o,r)},confirm(e,o,r){return _core.VxeUI.modal.confirm(e,o,r)},message(e,o){return _core.VxeUI.modal.message(e,o)},notification(e,o,r){return _core.VxeUI.modal.notification(e,o,r)}});var _default=exports.default=_core.VxeUI;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.VXETable=void 0,Object.defineProperty(exports,"VxeUI",{enumerable:!0,get:function(){return _core.VxeUI}}),exports.version=exports.validators=exports.use=exports.t=exports.setup=exports.setTheme=exports.setLanguage=exports.setIcon=exports.setI18n=exports.setConfig=exports.saveFile=exports.renderer=exports.readFile=exports.print=exports.modal=exports.menus=exports.log=exports.interceptor=exports.hooks=exports.globalResize=exports.globalEvents=exports.getTheme=exports.getIcon=exports.getI18n=exports.getConfig=exports.formats=exports.default=exports.config=exports.commands=exports.clipboard=exports._t=void 0;var _core=require("@vxe-ui/core"),_utils=require("./src/utils");const version=exports.version="4.7.88",iconPrefix=(_core.VxeUI.version=version,_core.VxeUI.tableVersion="4.7.88",_core.VxeUI.setConfig({emptyCell:" ",table:{fit:!0,showHeader:!0,animat:!0,delayHover:250,autoResize:!0,padding:!0,minHeight:144,resizeConfig:{refreshDelay:250},radioConfig:{strict:!0},checkboxConfig:{strict:!0},tooltipConfig:{enterable:!0},validConfig:{showMessage:!0,autoClear:!0,autoPos:!0,message:"inline",msgMode:"single"},columnConfig:{maxFixedSize:4},customConfig:{allowVisible:!0,allowResizable:!0,allowFixed:!0,allowSort:!0,showFooter:!0,placement:"top-right",modalOptions:{showMaximize:!0,mask:!0,lockView:!0,resize:!0,escClosable:!0}},sortConfig:{showIcon:!0,iconLayout:"vertical"},filterConfig:{showIcon:!0},treeConfig:{rowField:"id",parentField:"parentId",childrenField:"children",hasChildField:"hasChild",mapChildrenField:"_X_ROW_CHILD",indent:20,showIcon:!0},expandConfig:{showIcon:!0},editConfig:{showIcon:!0,showAsterisk:!0,autoFocus:!0},importConfig:{_typeMaps:{csv:1,html:1,xml:1,txt:1}},exportConfig:{_typeMaps:{csv:1,html:1,xml:1,txt:1}},printConfig:{},mouseConfig:{extension:!0},keyboardConfig:{isEsc:!0},areaConfig:{autoClear:!0,selectCellByHeader:!0},clipConfig:{isCopy:!0,isCut:!0,isPaste:!0},fnrConfig:{isFind:!0,isReplace:!0},scrollX:{gt:60},scrollY:{gt:100}},grid:{formConfig:{enabled:!0},pagerConfig:{enabled:!0},toolbarConfig:{enabled:!0},proxyConfig:{enabled:!0,autoLoad:!0,showResponseMsg:!0,showActiveMsg:!0,props:{list:null,result:"result",total:"page.total",message:"message"}}},toolbar:{}}),"vxe-table-icon-"),setTheme=(_core.VxeUI.setIcon({TABLE_SORT_ASC:iconPrefix+"caret-up",TABLE_SORT_DESC:iconPrefix+"caret-down",TABLE_FILTER_NONE:iconPrefix+"funnel",TABLE_FILTER_MATCH:iconPrefix+"funnel",TABLE_EDIT:iconPrefix+"edit",TABLE_TITLE_PREFIX:iconPrefix+"question-circle-fill",TABLE_TITLE_SUFFIX:iconPrefix+"question-circle-fill",TABLE_TREE_LOADED:iconPrefix+"spinner roll",TABLE_TREE_OPEN:iconPrefix+"caret-right rotate90",TABLE_TREE_CLOSE:iconPrefix+"caret-right",TABLE_EXPAND_LOADED:iconPrefix+"spinner roll",TABLE_EXPAND_OPEN:iconPrefix+"arrow-right rotate90",TABLE_EXPAND_CLOSE:iconPrefix+"arrow-right",TABLE_CHECKBOX_CHECKED:iconPrefix+"checkbox-checked-fill",TABLE_CHECKBOX_UNCHECKED:iconPrefix+"checkbox-unchecked",TABLE_CHECKBOX_INDETERMINATE:iconPrefix+"checkbox-indeterminate-fill",TABLE_RADIO_CHECKED:iconPrefix+"radio-checked-fill",TABLE_RADIO_UNCHECKED:iconPrefix+"radio-unchecked",TABLE_CUSTOM_SORT:iconPrefix+"drag-handle",TABLE_MENU_OPTIONS:iconPrefix+"arrow-right",TOOLBAR_TOOLS_REFRESH:iconPrefix+"repeat",TOOLBAR_TOOLS_REFRESH_LOADING:iconPrefix+"repeat roll",TOOLBAR_TOOLS_IMPORT:iconPrefix+"upload",TOOLBAR_TOOLS_EXPORT:iconPrefix+"download",TOOLBAR_TOOLS_PRINT:iconPrefix+"print",TOOLBAR_TOOLS_FULLSCREEN:iconPrefix+"fullscreen",TOOLBAR_TOOLS_MINIMIZE:iconPrefix+"minimize",TOOLBAR_TOOLS_CUSTOM:iconPrefix+"custom-column",TOOLBAR_TOOLS_FIXED_LEFT:iconPrefix+"fixed-left",TOOLBAR_TOOLS_FIXED_LEFT_ACTIVE:iconPrefix+"fixed-left-fill",TOOLBAR_TOOLS_FIXED_RIGHT:iconPrefix+"fixed-right",TOOLBAR_TOOLS_FIXED_RIGHT_ACTIVE:iconPrefix+"fixed-right-fill"}),exports.setTheme=_core.VxeUI.setTheme),getTheme=exports.getTheme=_core.VxeUI.getTheme,setConfig=exports.setConfig=_core.VxeUI.setConfig,getConfig=exports.getConfig=_core.VxeUI.getConfig,setIcon=exports.setIcon=_core.VxeUI.setIcon,getIcon=exports.getIcon=_core.VxeUI.getIcon,setLanguage=exports.setLanguage=_core.VxeUI.setLanguage,setI18n=exports.setI18n=_core.VxeUI.setI18n,getI18n=exports.getI18n=_core.VxeUI.getI18n,globalEvents=exports.globalEvents=_core.VxeUI.globalEvents,globalResize=exports.globalResize=_core.VxeUI.globalResize,renderer=exports.renderer=_core.VxeUI.renderer,validators=exports.validators=_core.VxeUI.validators,menus=exports.menus=_core.VxeUI.menus,formats=exports.formats=_core.VxeUI.formats,commands=exports.commands=_core.VxeUI.commands,interceptor=exports.interceptor=_core.VxeUI.interceptor,clipboard=exports.clipboard=_core.VxeUI.clipboard,log=exports.log=_core.VxeUI.log,hooks=exports.hooks=_core.VxeUI.hooks,use=exports.use=_core.VxeUI.use,setup=e=>_core.VxeUI.setConfig(e),config=(exports.setup=setup,_core.VxeUI.setup=setup,e=>_core.VxeUI.setConfig(e)),t=(exports.config=config,_core.VxeUI.config=config,(e,o)=>_core.VxeUI.getI18n(e,o)),_t=(exports.t=t,_core.VxeUI.t=t,(e,o)=>(0,_utils.getFuncText)(e,o)),VXETable=(exports._t=_t,_core.VxeUI._t=_t,exports.VXETable=_core.VxeUI),saveFile=e=>_core.VxeUI.saveFile(e),readFile=(exports.saveFile=saveFile,e=>_core.VxeUI.readFile(e)),print=(exports.readFile=readFile,e=>_core.VxeUI.print(e)),modal=(exports.print=print,exports.modal={get(e){return _core.VxeUI.modal.get(e)},close(e){return _core.VxeUI.modal.close(e)},open(e){return _core.VxeUI.modal.open(e)},alert(e,o,r){return _core.VxeUI.modal.alert(e,o,r)},confirm(e,o,r){return _core.VxeUI.modal.confirm(e,o,r)},message(e,o){return _core.VxeUI.modal.message(e,o)},notification(e,o,r){return _core.VxeUI.modal.notification(e,o,r)}});var _default=exports.default=_core.VxeUI;
package/lib/ui/src/log.js CHANGED
@@ -8,6 +8,6 @@ var _core = require("@vxe-ui/core");
8
8
  const {
9
9
  log
10
10
  } = _core.VxeUI;
11
- const version = `table v${"4.7.87"}`;
11
+ const version = `table v${"4.7.88"}`;
12
12
  const warnLog = exports.warnLog = log.create('warn', version);
13
13
  const errLog = exports.errLog = log.create('error', version);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.warnLog=exports.errLog=void 0;var _core=require("@vxe-ui/core");const log=_core.VxeUI["log"],version="table v4.7.87",warnLog=exports.warnLog=log.create("warn",version),errLog=exports.errLog=log.create("error",version);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.warnLog=exports.errLog=void 0;var _core=require("@vxe-ui/core");const log=_core.VxeUI["log"],version="table v4.7.88",warnLog=exports.warnLog=log.create("warn",version),errLog=exports.errLog=log.create("error",version);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-table",
3
- "version": "4.7.87",
3
+ "version": "4.7.88",
4
4
  "description": "一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟树、列拖拽,懒加载、快捷菜单、数据校验、树形结构、打印、导入导出、自定义模板、渲染器、JSON 配置式...",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -28,7 +28,7 @@
28
28
  "style": "lib/style.css",
29
29
  "typings": "types/index.d.ts",
30
30
  "dependencies": {
31
- "vxe-pc-ui": "^4.2.19"
31
+ "vxe-pc-ui": "^4.2.20"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/resize-observer-browser": "^0.1.11",
@@ -801,7 +801,7 @@ export default defineComponent({
801
801
  return { rowHeight: 0, visibleSize: 8 }
802
802
  }
803
803
 
804
- const calculateMergerOffserIndex = (list: any[], offsetItem: any, type: 'row' | 'col') => {
804
+ const calculateMergerOffsetIndex = (list: any[], offsetItem: any, type: 'row' | 'col') => {
805
805
  for (let mcIndex = 0, len = list.length; mcIndex < len; mcIndex++) {
806
806
  const mergeItem = list[mcIndex]
807
807
  const { startIndex, endIndex } = offsetItem
@@ -1142,7 +1142,9 @@ export default defineComponent({
1142
1142
  })
1143
1143
  } else {
1144
1144
  const labelEl = cellEl.firstChild as HTMLElement
1145
- titleWidth = labelEl.offsetWidth
1145
+ if (labelEl) {
1146
+ titleWidth = labelEl.offsetWidth
1147
+ }
1146
1148
  }
1147
1149
  if (titleWidth) {
1148
1150
  colWidth = Math.max(colWidth, Math.ceil(titleWidth) + 4)
@@ -1373,6 +1375,7 @@ export default defineComponent({
1373
1375
  const { treeConfig } = props
1374
1376
  const { treeExpandedMaps } = reactData
1375
1377
  const treeOpts = computeTreeOpts.value
1378
+ const childrenField = treeOpts.children || treeOpts.childrenField
1376
1379
  if (treeConfig && treeOpts.transform) {
1377
1380
  const fullData: any[] = []
1378
1381
  const expandMaps: {
@@ -1385,7 +1388,7 @@ export default defineComponent({
1385
1388
  expandMaps[rowid] = 1
1386
1389
  fullData.push(row)
1387
1390
  }
1388
- }, { children: treeOpts.mapChildrenField })
1391
+ }, { children: childrenField })
1389
1392
  internalData.afterFullData = fullData
1390
1393
  updateScrollYStatus(fullData)
1391
1394
  return fullData
@@ -1403,6 +1406,7 @@ export default defineComponent({
1403
1406
  const filterOpts = computeFilterOpts.value
1404
1407
  const sortOpts = computeSortOpts.value
1405
1408
  const treeOpts = computeTreeOpts.value
1409
+ const childrenField = treeOpts.children || treeOpts.childrenField
1406
1410
  const { transform } = treeOpts
1407
1411
  const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts
1408
1412
  const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts
@@ -1464,7 +1468,12 @@ export default defineComponent({
1464
1468
  }
1465
1469
  if (treeConfig && transform) {
1466
1470
  // 筛选虚拟树
1467
- tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, { ...treeOpts, original: true })
1471
+ tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
1472
+ original: true,
1473
+ isEvery: true,
1474
+ children: treeOpts.mapChildrenField,
1475
+ mapChildren: childrenField
1476
+ })
1468
1477
  tableData = tableTree
1469
1478
  } else {
1470
1479
  tableData = treeConfig ? tableFullTreeData.filter(handleFilter) : tableFullData.filter(handleFilter)
@@ -1473,7 +1482,12 @@ export default defineComponent({
1473
1482
  } else {
1474
1483
  if (treeConfig && transform) {
1475
1484
  // 还原虚拟树
1476
- tableTree = XEUtils.searchTree(tableFullTreeData, () => true, { ...treeOpts, original: true })
1485
+ tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
1486
+ original: true,
1487
+ isEvery: true,
1488
+ children: treeOpts.mapChildrenField,
1489
+ mapChildren: childrenField
1490
+ })
1477
1491
  tableData = tableTree
1478
1492
  } else {
1479
1493
  tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0)
@@ -1506,7 +1520,12 @@ export default defineComponent({
1506
1520
  } else {
1507
1521
  if (treeConfig && transform) {
1508
1522
  // 还原虚拟树
1509
- tableTree = XEUtils.searchTree(tableFullTreeData, () => true, { ...treeOpts, original: true })
1523
+ tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
1524
+ original: true,
1525
+ isEvery: true,
1526
+ children: treeOpts.mapChildrenField,
1527
+ mapChildren: childrenField
1528
+ })
1510
1529
  tableData = tableTree
1511
1530
  } else {
1512
1531
  tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0)
@@ -2441,7 +2460,7 @@ export default defineComponent({
2441
2460
  startIndex: Math.max(0, toVisibleIndex - 1 - offsetSize),
2442
2461
  endIndex: toVisibleIndex + visibleSize + offsetSize
2443
2462
  }
2444
- calculateMergerOffserIndex(mergeList.concat(mergeFooterList), offsetItem, 'col')
2463
+ calculateMergerOffsetIndex(mergeList.concat(mergeFooterList), offsetItem, 'col')
2445
2464
  const { startIndex: offsetStartIndex, endIndex: offsetEndIndex } = offsetItem
2446
2465
  if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
2447
2466
  if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
@@ -2729,7 +2748,7 @@ export default defineComponent({
2729
2748
  startIndex: Math.max(0, toVisibleIndex - 1 - offsetSize),
2730
2749
  endIndex: toVisibleIndex + visibleSize + offsetSize
2731
2750
  }
2732
- calculateMergerOffserIndex(mergeList, offsetItem, 'row')
2751
+ calculateMergerOffsetIndex(mergeList, offsetItem, 'row')
2733
2752
  const { startIndex: offsetStartIndex, endIndex: offsetEndIndex } = offsetItem
2734
2753
  if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
2735
2754
  if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
@@ -413,28 +413,35 @@ export function rowToVisible ($xeTable: VxeTableConstructor & VxeTablePrivateMet
413
413
  export function colToVisible ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, column: VxeTableDefines.ColumnInfo) {
414
414
  const { reactData, internalData } = $xeTable
415
415
  const { refTableBody } = $xeTable.getRefMaps()
416
- const { scrollXLoad } = reactData
416
+ const { columnStore, scrollXLoad } = reactData
417
417
  const { visibleColumn } = internalData
418
+ const { leftList, rightList } = columnStore
418
419
  const tableBody = refTableBody.value
419
420
  const bodyElem = tableBody ? tableBody.$el as HTMLDivElement : null
421
+ let offsetFixedLeft = 0
422
+ leftList.forEach(item => {
423
+ offsetFixedLeft += item.renderWidth
424
+ })
425
+ let offsetFixedRight = 0
426
+ rightList.forEach(item => {
427
+ offsetFixedRight += item.renderWidth
428
+ })
420
429
  if (bodyElem) {
430
+ const bodyWidth = bodyElem.clientWidth
431
+ const bodySrcollLeft = bodyElem.scrollLeft
421
432
  const tdElem: HTMLTableCellElement | null = bodyElem.querySelector(`.${column.id}`)
422
433
  if (tdElem) {
423
- const bodyWidth = bodyElem.clientWidth
424
- const bodySrcollLeft = bodyElem.scrollLeft
425
434
  const tdOffsetParent = tdElem.offsetParent as HTMLElement
426
435
  const tdOffsetLeft = tdElem.offsetLeft + (tdOffsetParent ? tdOffsetParent.offsetLeft : 0)
427
436
  const tdWidth = tdElem.clientWidth
428
- // 检测行是否在可视区中
429
- if (tdOffsetLeft < bodySrcollLeft || tdOffsetLeft > bodySrcollLeft + bodyWidth) {
430
- // 向左定位
431
- return $xeTable.scrollTo(tdOffsetLeft)
432
- } else if (tdOffsetLeft + tdWidth >= bodyWidth + bodySrcollLeft) {
433
- // 向右定位
434
- return $xeTable.scrollTo(bodySrcollLeft + tdWidth)
437
+ // 检测是否在可视区中
438
+ if (tdOffsetLeft < (bodySrcollLeft + offsetFixedLeft)) {
439
+ return $xeTable.scrollTo(tdOffsetLeft - offsetFixedLeft - 1)
440
+ } else if ((tdOffsetLeft + tdWidth) >= (bodyWidth + bodySrcollLeft - offsetFixedRight)) {
441
+ return $xeTable.scrollTo(tdOffsetLeft - offsetFixedLeft - offsetFixedRight + 1)
435
442
  }
436
443
  } else {
437
- // 如果是虚拟渲染跨行滚动
444
+ // 检测是否在虚拟渲染可视区中
438
445
  if (scrollXLoad) {
439
446
  let scrollLeft = 0
440
447
  for (let index = 0; index < visibleColumn.length; index++) {
@@ -444,7 +451,10 @@ export function colToVisible ($xeTable: VxeTableConstructor & VxeTablePrivateMet
444
451
  }
445
452
  scrollLeft += currCol.renderWidth
446
453
  }
447
- return $xeTable.scrollTo(scrollLeft)
454
+ if (scrollLeft < bodySrcollLeft) {
455
+ return $xeTable.scrollTo(scrollLeft - offsetFixedLeft - 1)
456
+ }
457
+ return $xeTable.scrollTo(scrollLeft - offsetFixedLeft - offsetFixedRight + 1)
448
458
  }
449
459
  }
450
460
  }
@@ -68,6 +68,7 @@
68
68
  --vxe-ui-table-cell-extend-area-border-color: var(--vxe-ui-table-cell-area-border-color);
69
69
  --vxe-ui-table-cell-active-area-border-color: var(--vxe-ui-table-cell-area-border-color);
70
70
  --vxe-ui-table-cell-area-background-color: rgba(64,158,255,0.2);
71
+ --vxe-ui-table-header-active-area-background-color: rgba(64,158,255,0.1);
71
72
 
72
73
  --vxe-ui-table-expand-padding-default: 16px;
73
74