vxe-table 4.13.34 → 4.13.36

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 (58) hide show
  1. package/es/grid/src/grid.js +35 -11
  2. package/es/style.css +1 -1
  3. package/es/table/module/edit/hook.js +2 -2
  4. package/es/table/module/validator/hook.js +11 -3
  5. package/es/table/src/body.js +20 -3
  6. package/es/table/src/cell.js +55 -39
  7. package/es/table/src/column.js +2 -0
  8. package/es/table/src/columnInfo.js +2 -0
  9. package/es/table/src/props.js +3 -1
  10. package/es/table/src/table.js +133 -75
  11. package/es/table/src/util.js +7 -4
  12. package/es/ui/index.js +4 -4
  13. package/es/ui/src/log.js +1 -1
  14. package/lib/grid/src/grid.js +39 -15
  15. package/lib/grid/src/grid.min.js +1 -1
  16. package/lib/index.umd.js +173 -96
  17. package/lib/index.umd.min.js +1 -1
  18. package/lib/style.css +1 -1
  19. package/lib/table/module/edit/hook.js +2 -2
  20. package/lib/table/module/edit/hook.min.js +1 -1
  21. package/lib/table/module/validator/hook.js +15 -3
  22. package/lib/table/module/validator/hook.min.js +1 -1
  23. package/lib/table/src/body.js +19 -2
  24. package/lib/table/src/body.min.js +1 -1
  25. package/lib/table/src/cell.js +47 -32
  26. package/lib/table/src/cell.min.js +1 -1
  27. package/lib/table/src/column.js +2 -0
  28. package/lib/table/src/column.min.js +1 -1
  29. package/lib/table/src/columnInfo.js +2 -0
  30. package/lib/table/src/columnInfo.min.js +1 -1
  31. package/lib/table/src/props.js +3 -1
  32. package/lib/table/src/props.min.js +1 -1
  33. package/lib/table/src/table.js +32 -32
  34. package/lib/table/src/table.min.js +1 -1
  35. package/lib/table/src/util.js +10 -7
  36. package/lib/table/src/util.min.js +1 -1
  37. package/lib/ui/index.js +4 -4
  38. package/lib/ui/index.min.js +1 -1
  39. package/lib/ui/src/log.js +1 -1
  40. package/lib/ui/src/log.min.js +1 -1
  41. package/package.json +1 -1
  42. package/packages/grid/src/grid.ts +39 -12
  43. package/packages/table/module/edit/hook.ts +2 -2
  44. package/packages/table/module/validator/hook.ts +10 -3
  45. package/packages/table/src/body.ts +20 -3
  46. package/packages/table/src/cell.ts +55 -39
  47. package/packages/table/src/column.ts +2 -0
  48. package/packages/table/src/columnInfo.ts +3 -0
  49. package/packages/table/src/props.ts +3 -1
  50. package/packages/table/src/table.ts +135 -74
  51. package/packages/table/src/util.ts +7 -3
  52. package/packages/ui/index.ts +3 -3
  53. /package/es/{iconfont.1749092482353.ttf → iconfont.1749440132931.ttf} +0 -0
  54. /package/es/{iconfont.1749092482353.woff → iconfont.1749440132931.woff} +0 -0
  55. /package/es/{iconfont.1749092482353.woff2 → iconfont.1749440132931.woff2} +0 -0
  56. /package/lib/{iconfont.1749092482353.ttf → iconfont.1749440132931.ttf} +0 -0
  57. /package/lib/{iconfont.1749092482353.woff → iconfont.1749440132931.woff} +0 -0
  58. /package/lib/{iconfont.1749092482353.woff2 → iconfont.1749440132931.woff2} +0 -0
@@ -15,6 +15,7 @@ exports.createHandleUpdateRowId = createHandleUpdateRowId;
15
15
  exports.destroyColumn = destroyColumn;
16
16
  exports.encodeRowid = encodeRowid;
17
17
  exports.getCellHeight = getCellHeight;
18
+ exports.getCellRestHeight = getCellRestHeight;
18
19
  exports.getCellValue = getCellValue;
19
20
  exports.getColReMaxWidth = getColReMaxWidth;
20
21
  exports.getColReMinWidth = getColReMinWidth;
@@ -24,7 +25,8 @@ exports.getRootColumn = getRootColumn;
24
25
  exports.getRowUniqueId = getRowUniqueId;
25
26
  exports.getRowid = getRowid;
26
27
  exports.getRowkey = getRowkey;
27
- exports.handleRowidOrRow = exports.handleFieldOrColumn = void 0;
28
+ exports.handleFieldOrColumn = handleFieldOrColumn;
29
+ exports.handleRowidOrRow = handleRowidOrRow;
28
30
  exports.hasDeepKey = hasDeepKey;
29
31
  exports.isColumnInfo = isColumnInfo;
30
32
  exports.restoreScrollLocation = restoreScrollLocation;
@@ -192,21 +194,22 @@ function updateFastRowKey(row, rowKey) {
192
194
  }
193
195
  return rowid;
194
196
  }
195
- const handleFieldOrColumn = ($xeTable, fieldOrColumn) => {
197
+ function handleFieldOrColumn($xeTable, fieldOrColumn) {
196
198
  if (fieldOrColumn) {
197
199
  return _xeUtils.default.isString(fieldOrColumn) || _xeUtils.default.isNumber(fieldOrColumn) ? $xeTable.getColumnByField(`${fieldOrColumn}`) : fieldOrColumn;
198
200
  }
199
201
  return null;
200
- };
201
- exports.handleFieldOrColumn = handleFieldOrColumn;
202
- const handleRowidOrRow = ($xeTable, rowidOrRow) => {
202
+ }
203
+ function handleRowidOrRow($xeTable, rowidOrRow) {
203
204
  if (rowidOrRow) {
204
205
  const rowid = _xeUtils.default.isString(rowidOrRow) || _xeUtils.default.isNumber(rowidOrRow) ? rowidOrRow : getRowid($xeTable, rowidOrRow);
205
206
  return $xeTable.getRowById(rowid);
206
207
  }
207
208
  return null;
208
- };
209
- exports.handleRowidOrRow = handleRowidOrRow;
209
+ }
210
+ function getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight) {
211
+ return rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
212
+ }
210
213
  function getPaddingLeftRightSize(elem) {
211
214
  if (elem) {
212
215
  const computedStyle = getComputedStyle(elem);
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.assembleColumn=assembleColumn,exports.calcTreeLine=calcTreeLine,exports.clearTableAllStatus=clearTableAllStatus,exports.clearTableDefaultStatus=clearTableDefaultStatus,exports.colToVisible=colToVisible,exports.convertHeaderColumnToRows=void 0,exports.createColumn=createColumn,exports.createHandleGetRowId=createHandleGetRowId,exports.createHandleUpdateRowId=createHandleUpdateRowId,exports.destroyColumn=destroyColumn,exports.encodeRowid=encodeRowid,exports.getCellHeight=getCellHeight,exports.getCellValue=getCellValue,exports.getColReMaxWidth=getColReMaxWidth,exports.getColReMinWidth=getColReMinWidth,exports.getOffsetSize=void 0,exports.getRefElem=getRefElem,exports.getRootColumn=getRootColumn,exports.getRowUniqueId=getRowUniqueId,exports.getRowid=getRowid,exports.getRowkey=getRowkey,exports.handleRowidOrRow=exports.handleFieldOrColumn=void 0,exports.hasDeepKey=hasDeepKey,exports.isColumnInfo=isColumnInfo,exports.restoreScrollLocation=restoreScrollLocation,exports.rowToVisible=rowToVisible,exports.setCellValue=setCellValue,exports.toFilters=toFilters,exports.toTreePathSeq=toTreePathSeq,exports.updateDeepRowKey=updateDeepRowKey,exports.updateFastRowKey=updateFastRowKey,exports.watchColumn=watchColumn;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_columnInfo=require("./columnInfo"),_dom=require("../../ui/src/dom"),_utils=require("../../ui/src/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let getAllConvertColumns=(e,t)=>{let l=[];return e.forEach(e=>{e.parentId=t?t.id:null,e.visible&&(e.children&&e.children.length&&e.children.some(e=>e.visible)?(l.push(e),l.push(...getAllConvertColumns(e.children,e))):l.push(e))}),l},convertHeaderColumnToRows=e=>{let t=1,r=(l,e)=>{if(e&&(l.level=e.level+1,t<l.level)&&(t=l.level),l.children&&l.children.length&&l.children.some(e=>e.visible)){let t=0;l.children.forEach(e=>{e.visible&&(r(e,l),t+=e.colSpan)}),l.colSpan=t}else l.colSpan=1},l=(e.forEach(e=>{e.level=1,r(e)}),[]);for(let e=0;e<t;e++)l.push([]);return getAllConvertColumns(e).forEach(e=>{e.children&&e.children.length&&e.children.some(e=>e.visible)?e.rowSpan=1:e.rowSpan=t-e.level+1,l[e.level-1].push(e)}),l};function restoreScrollLocation(e,t,l){var r=e.internalData;return t||l?(r.intoRunScroll=!1,r.inVirtualScroll=!1,r.inWheelScroll=!1,r.inHeaderScroll=!1,r.inBodyScroll=!1,r.inFooterScroll=!1,r.scrollRenderType="",e.scrollTo(t,l)):e.clearScroll()}function getRowUniqueId(){return _xeUtils.default.uniqueId("row_")}function hasDeepKey(e){return-1<e.indexOf(".")}function getRowkey(e){e=e.internalData.currKeyField;return e}function getRowid(e,t){var{isCurrDeepKey:e,currKeyField:l}=e.internalData;return t?encodeRowid((e?getDeepRowIdByKey:getFastRowIdByKey)(t,l)):""}function createHandleUpdateRowId(e){let{isCurrDeepKey:t,currKeyField:l}=e.internalData,r=t?updateDeepRowKey:updateFastRowKey;return{rowKey:l,handleUpdateRowId(e){return e?r(e,l):""}}}function createHandleGetRowId(e){let{isCurrDeepKey:t,currKeyField:l}=e.internalData,r=t?getDeepRowIdByKey:getFastRowIdByKey;return{rowKey:l,handleGetRowId(e){return e?encodeRowid(r(e,l)):""}}}function encodeRowid(e){return _xeUtils.default.eqNull(e)?"":encodeURIComponent(e)}function getDeepRowIdByKey(e,t){return _xeUtils.default.get(e,t)}function updateDeepRowKey(e,t){let l=encodeRowid(getDeepRowIdByKey(e,t));return(0,_utils.eqEmptyValue)(l)&&(l=getRowUniqueId(),_xeUtils.default.set(e,t,l)),l}function getFastRowIdByKey(e,t){return e[t]}function updateFastRowKey(e,t){let l=encodeRowid(getFastRowIdByKey(e,t));return(0,_utils.eqEmptyValue)(l)&&(l=getRowUniqueId(),e[t]=l),l}exports.convertHeaderColumnToRows=convertHeaderColumnToRows;let handleFieldOrColumn=(e,t)=>t?_xeUtils.default.isString(t)||_xeUtils.default.isNumber(t)?e.getColumnByField(""+t):t:null,handleRowidOrRow=(exports.handleFieldOrColumn=handleFieldOrColumn,(e,t)=>t?(t=_xeUtils.default.isString(t)||_xeUtils.default.isNumber(t)?t:getRowid(e,t),e.getRowById(t)):null);function getPaddingLeftRightSize(e){return e?(e=getComputedStyle(e),_xeUtils.default.toNumber(e.paddingLeft)+_xeUtils.default.toNumber(e.paddingRight)):0}function getElementMarginAndWidth(e){var t,l;return e?(l=getComputedStyle(e),t=_xeUtils.default.toNumber(l.marginLeft),l=_xeUtils.default.toNumber(l.marginRight),e.offsetWidth+t+l):0}function toFilters(e){return e&&_xeUtils.default.isArray(e)?e.map(({label:e,value:t,data:l,resetValue:r,checked:o})=>({label:e,value:t,data:l,resetValue:r,checked:!!o,_checked:!!o})):e}function toTreePathSeq(e){return e.map((e,t)=>t%2==0?Number(e)+1:".").join("")}function getCellValue(e,t){return _xeUtils.default.get(e,t.field)}function setCellValue(e,t,l){return _xeUtils.default.set(e,t.field,l)}function getRefElem(e){if(e){e=e.value;if(e)return e.$el||e}return null}function getCellHeight(e){return"unset"!==e&&e||0}function getColReMaxWidth(e){var t=e.$table,t=t.getComputeMaps().computeResizableOpts,t=t.value.maxWidth;if(t){e=_xeUtils.default.isFunction(t)?t(e):t;if("auto"!==e)return Math.max(1,_xeUtils.default.toNumber(e))}return-1}function getColReMinWidth(e){var{$table:t,column:l,cell:r}=e,o=t.props,i=t.internalData,t=t.getComputeMaps().computeResizableOpts,t=t.value.minWidth;if(t){e=_xeUtils.default.isFunction(t)?t(e):t;if("auto"!==e)return Math.max(1,_xeUtils.default.toNumber(e))}var n,a,u,d,t=i.elemStore,e=o.showHeaderOverflow,{showHeaderOverflow:i,minWidth:o}=l,l=_xeUtils.default.isUndefined(i)||_xeUtils.default.isNull(i)?e:i,e="title"===l||(!0===l||"tooltip"===l)||"ellipsis"===l;let s=_xeUtils.default.floor(1.8*(_xeUtils.default.toNumber(getComputedStyle(r).fontSize)||14))+(getPaddingLeftRightSize(r)+getPaddingLeftRightSize((0,_dom.queryElement)(r,".vxe-cell")));if(e&&(i=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--drag-handle")),l=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--checkbox")),e=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--required-icon")),n=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--edit-icon")),a=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell-title-prefix-icon")),u=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell-title-suffix-icon")),d=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--sort")),r=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--filter")),s+=i+l+e+n+a+u+r+d),o){i=getRefElem(t["main-body-scroll"]);if(i){if((0,_dom.isScale)(o))return l=(i.clientWidth-1)/100,Math.max(s,Math.floor(_xeUtils.default.toInteger(o)*l));if((0,_dom.isPx)(o))return Math.max(s,_xeUtils.default.toInteger(o))}}return s}function isColumnInfo(e){return e&&(e.constructor===_columnInfo.ColumnInfo||e instanceof _columnInfo.ColumnInfo)}function createColumn(e,t,l){return isColumnInfo(t)?t:(0,_vue.reactive)(new _columnInfo.ColumnInfo(e,t,l))}function watchColumn(l,e,r){Object.keys(e).forEach(t=>{(0,_vue.watch)(()=>e[t],e=>{r.update(t,e),l&&("filters"===t?(l.setFilter(r,e),l.handleUpdateDataQueue()):["visible","fixed","width","minWidth","maxWidth"].includes(t)&&l.handleRefreshColumnQueue())})})}function assembleColumn(e,t,l,r){var e=e.reactData,o=e.staticColumns,i=t.parentNode,r=r?r.columnConfig:null,r=r?r.children:o;i&&r&&(r.splice(_xeUtils.default.arrayIndexOf(i.children,t),0,l),e.staticColumns=o.slice(0))}function destroyColumn(e,t){var e=e.reactData,l=e.staticColumns,r=_xeUtils.default.findTree(l,e=>e.id===t.id,{children:"children"});r&&r.items.splice(r.index,1),e.staticColumns=l.slice(0)}function getRootColumn(e,t){var e=e.internalData,l=e.fullColumnIdData;if(!t)return null;let r=t.parentId;for(;l[r];){let e=l[r].column;if(!(r=e.parentId))return e}return t}exports.handleRowidOrRow=handleRowidOrRow;let lineOffsetSizes={mini:3,small:2,medium:1,large:0},countTreeExpand=(e,t)=>{let l=1;if(e){var r=t.$table,o=r.getComputeMaps().computeTreeOpts,o=o.value,{transform:i,mapChildrenField:n}=o,o=o.children||o.childrenField,a=e[i?n:o];if(a&&r.isTreeExpandByRow(e))for(let e=0;e<a.length;e++)l+=countTreeExpand(a[e],t)}return l},getOffsetSize=e=>{e=e.getComputeMaps().computeSize,e=e.value;return e&&lineOffsetSizes[e]||0};function calcTreeLine(e,t){var{$table:l,row:r}=e,o=l.props.showOverflow,i=l.reactData.scrollYLoad,n=l.internalData.fullAllDataRowIdData,{computeRowOpts:a,computeCellOpts:u,computeDefaultRowHeight:d}=l.getComputeMaps(),a=a.value,u=u.value,d=d.value,n=n[getRowid(l,r)],r=n.resizeHeight||u.height||a.height||n.height||d;let s=1,c=(t&&(s=countTreeExpand(t,e)),r);return(c=i&&!o?n.height||r:c)*s-(t?1:12-getOffsetSize(l))}function clearTableDefaultStatus(e){var{props:t,internalData:l}=e;return l.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&&(t.keyboardConfig||t.mouseConfig)&&e.clearSelected(),e.clearCellAreas&&t.mouseConfig&&(e.clearCellAreas(),e.clearCopyCellArea()),e.clearScroll()}function clearTableAllStatus(e){return e.clearFilter&&e.clearFilter(),clearTableDefaultStatus(e)}function rowToVisible(l,r){var e=l.props,t=l.reactData,o=l.internalData,{computeLeftFixedWidth:i,computeRightFixedWidth:n,computeRowOpts:a,computeCellOpts:u,computeDefaultRowHeight:d}=l.getComputeMaps(),e=e.showOverflow,{scrollYLoad:t,scrollYTop:s}=t,{elemStore:o,afterFullData:c,fullAllDataRowIdData:f,isResizeCellHeight:m}=o,p=a.value,h=u.value,g=d.value,a=i.value,u=n.value,d=getRefElem(o["main-body-scroll"]),R=getRowid(l,r);if(d){i=d.clientHeight,n=d.scrollTop,o=d.querySelector(`[rowid="${R}"]`);if(o){d=o.offsetTop+(t?s:0),s=o.clientHeight;if(d<n||n+i<d)return l.scrollTo(null,d);if(i+n<=d+s)return l.scrollTo(null,n+s)}else if(t){if(!(m||h.height||p.height)&&e)return l.scrollTo(null,(l.findRowIndexOf(c,r)-1)*g);let t=0;o=f[R]||{},d=o.resizeHeight||h.height||p.height||o.height||g;for(let e=0;e<c.length;e++){var x=c[e],w=getRowid(l,x);if(x===r||w===R)break;x=f[w]||{};t+=x.resizeHeight||h.height||p.height||x.height||g}return t<n?l.scrollTo(null,t-a-1):l.scrollTo(null,t+d-(i-u-1))}}return Promise.resolve()}function colToVisible(l,r,t){var o=l.reactData,i=l.internalData,{computeLeftFixedWidth:n,computeRightFixedWidth:a}=l.getComputeMaps(),{scrollXLoad:o,scrollXLeft:u}=o,{elemStore:i,visibleColumn:d}=i,n=n.value,a=a.value,i=getRefElem(i["main-body-scroll"]);if(!r.fixed&&i){var s=i.clientWidth,c=i.scrollLeft;let e=null;if(t&&(t=getRowid(l,t),e=i.querySelector(`[rowid="${t}"] .`+r.id)),e=e||i.querySelector("."+r.id)){t=e.offsetLeft+(o?u:0),i=e.clientWidth;if(t<c+n)return l.scrollTo(t-n-1);if(s-a<t+i-c)return l.scrollTo(t+i-(s-a-1))}else if(o){let t=0;u=r.renderWidth;for(let e=0;e<d.length;e++){var f=d[e];if(f===r||f.id===r.id)break;t+=f.renderWidth}return t<c?l.scrollTo(t-n-1):l.scrollTo(t+u-(s-a-1))}}return Promise.resolve()}exports.getOffsetSize=getOffsetSize;
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.assembleColumn=assembleColumn,exports.calcTreeLine=calcTreeLine,exports.clearTableAllStatus=clearTableAllStatus,exports.clearTableDefaultStatus=clearTableDefaultStatus,exports.colToVisible=colToVisible,exports.convertHeaderColumnToRows=void 0,exports.createColumn=createColumn,exports.createHandleGetRowId=createHandleGetRowId,exports.createHandleUpdateRowId=createHandleUpdateRowId,exports.destroyColumn=destroyColumn,exports.encodeRowid=encodeRowid,exports.getCellHeight=getCellHeight,exports.getCellRestHeight=getCellRestHeight,exports.getCellValue=getCellValue,exports.getColReMaxWidth=getColReMaxWidth,exports.getColReMinWidth=getColReMinWidth,exports.getOffsetSize=void 0,exports.getRefElem=getRefElem,exports.getRootColumn=getRootColumn,exports.getRowUniqueId=getRowUniqueId,exports.getRowid=getRowid,exports.getRowkey=getRowkey,exports.handleFieldOrColumn=handleFieldOrColumn,exports.handleRowidOrRow=handleRowidOrRow,exports.hasDeepKey=hasDeepKey,exports.isColumnInfo=isColumnInfo,exports.restoreScrollLocation=restoreScrollLocation,exports.rowToVisible=rowToVisible,exports.setCellValue=setCellValue,exports.toFilters=toFilters,exports.toTreePathSeq=toTreePathSeq,exports.updateDeepRowKey=updateDeepRowKey,exports.updateFastRowKey=updateFastRowKey,exports.watchColumn=watchColumn;var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_columnInfo=require("./columnInfo"),_dom=require("../../ui/src/dom"),_utils=require("../../ui/src/utils");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let getAllConvertColumns=(e,t)=>{let l=[];return e.forEach(e=>{e.parentId=t?t.id:null,e.visible&&(e.children&&e.children.length&&e.children.some(e=>e.visible)?(l.push(e),l.push(...getAllConvertColumns(e.children,e))):l.push(e))}),l},convertHeaderColumnToRows=e=>{let t=1,r=(l,e)=>{if(e&&(l.level=e.level+1,t<l.level)&&(t=l.level),l.children&&l.children.length&&l.children.some(e=>e.visible)){let t=0;l.children.forEach(e=>{e.visible&&(r(e,l),t+=e.colSpan)}),l.colSpan=t}else l.colSpan=1},l=(e.forEach(e=>{e.level=1,r(e)}),[]);for(let e=0;e<t;e++)l.push([]);return getAllConvertColumns(e).forEach(e=>{e.children&&e.children.length&&e.children.some(e=>e.visible)?e.rowSpan=1:e.rowSpan=t-e.level+1,l[e.level-1].push(e)}),l};function restoreScrollLocation(e,t,l){var r=e.internalData;return t||l?(r.intoRunScroll=!1,r.inVirtualScroll=!1,r.inWheelScroll=!1,r.inHeaderScroll=!1,r.inBodyScroll=!1,r.inFooterScroll=!1,r.scrollRenderType="",e.scrollTo(t,l)):e.clearScroll()}function getRowUniqueId(){return _xeUtils.default.uniqueId("row_")}function hasDeepKey(e){return-1<e.indexOf(".")}function getRowkey(e){e=e.internalData.currKeyField;return e}function getRowid(e,t){var{isCurrDeepKey:e,currKeyField:l}=e.internalData;return t?encodeRowid((e?getDeepRowIdByKey:getFastRowIdByKey)(t,l)):""}function createHandleUpdateRowId(e){let{isCurrDeepKey:t,currKeyField:l}=e.internalData,r=t?updateDeepRowKey:updateFastRowKey;return{rowKey:l,handleUpdateRowId(e){return e?r(e,l):""}}}function createHandleGetRowId(e){let{isCurrDeepKey:t,currKeyField:l}=e.internalData,r=t?getDeepRowIdByKey:getFastRowIdByKey;return{rowKey:l,handleGetRowId(e){return e?encodeRowid(r(e,l)):""}}}function encodeRowid(e){return _xeUtils.default.eqNull(e)?"":encodeURIComponent(e)}function getDeepRowIdByKey(e,t){return _xeUtils.default.get(e,t)}function updateDeepRowKey(e,t){let l=encodeRowid(getDeepRowIdByKey(e,t));return(0,_utils.eqEmptyValue)(l)&&(l=getRowUniqueId(),_xeUtils.default.set(e,t,l)),l}function getFastRowIdByKey(e,t){return e[t]}function updateFastRowKey(e,t){let l=encodeRowid(getFastRowIdByKey(e,t));return(0,_utils.eqEmptyValue)(l)&&(l=getRowUniqueId(),e[t]=l),l}function handleFieldOrColumn(e,t){return t?_xeUtils.default.isString(t)||_xeUtils.default.isNumber(t)?e.getColumnByField(""+t):t:null}function handleRowidOrRow(e,t){return t?(t=_xeUtils.default.isString(t)||_xeUtils.default.isNumber(t)?t:getRowid(e,t),e.getRowById(t)):null}function getCellRestHeight(e,t,l,r){return e.resizeHeight||t.height||l.height||e.height||r}function getPaddingLeftRightSize(e){return e?(e=getComputedStyle(e),_xeUtils.default.toNumber(e.paddingLeft)+_xeUtils.default.toNumber(e.paddingRight)):0}function getElementMarginAndWidth(e){var t,l;return e?(l=getComputedStyle(e),t=_xeUtils.default.toNumber(l.marginLeft),l=_xeUtils.default.toNumber(l.marginRight),e.offsetWidth+t+l):0}function toFilters(e){return e&&_xeUtils.default.isArray(e)?e.map(({label:e,value:t,data:l,resetValue:r,checked:o})=>({label:e,value:t,data:l,resetValue:r,checked:!!o,_checked:!!o})):e}function toTreePathSeq(e){return e.map((e,t)=>t%2==0?Number(e)+1:".").join("")}function getCellValue(e,t){return _xeUtils.default.get(e,t.field)}function setCellValue(e,t,l){return _xeUtils.default.set(e,t.field,l)}function getRefElem(e){if(e){e=e.value;if(e)return e.$el||e}return null}function getCellHeight(e){return"unset"!==e&&e||0}function getColReMaxWidth(e){var t=e.$table,t=t.getComputeMaps().computeResizableOpts,t=t.value.maxWidth;if(t){e=_xeUtils.default.isFunction(t)?t(e):t;if("auto"!==e)return Math.max(1,_xeUtils.default.toNumber(e))}return-1}function getColReMinWidth(e){var{$table:t,column:l,cell:r}=e,o=t.props,i=t.internalData,t=t.getComputeMaps().computeResizableOpts,t=t.value.minWidth;if(t){e=_xeUtils.default.isFunction(t)?t(e):t;if("auto"!==e)return Math.max(1,_xeUtils.default.toNumber(e))}var n,a,u,d,t=i.elemStore,e=o.showHeaderOverflow,{showHeaderOverflow:i,minWidth:o}=l,l=_xeUtils.default.isUndefined(i)||_xeUtils.default.isNull(i)?e:i,e="title"===l||(!0===l||"tooltip"===l)||"ellipsis"===l;let s=_xeUtils.default.floor(1.8*(_xeUtils.default.toNumber(getComputedStyle(r).fontSize)||14))+(getPaddingLeftRightSize(r)+getPaddingLeftRightSize((0,_dom.queryElement)(r,".vxe-cell")));if(e&&(i=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--drag-handle")),l=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--checkbox")),e=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--required-icon")),n=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--edit-icon")),a=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell-title-prefix-icon")),u=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell-title-suffix-icon")),d=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--sort")),r=getElementMarginAndWidth((0,_dom.queryElement)(r,".vxe-cell--filter")),s+=i+l+e+n+a+u+r+d),o){i=getRefElem(t["main-body-scroll"]);if(i){if((0,_dom.isScale)(o))return l=(i.clientWidth-1)/100,Math.max(s,Math.floor(_xeUtils.default.toInteger(o)*l));if((0,_dom.isPx)(o))return Math.max(s,_xeUtils.default.toInteger(o))}}return s}function isColumnInfo(e){return e&&(e.constructor===_columnInfo.ColumnInfo||e instanceof _columnInfo.ColumnInfo)}function createColumn(e,t,l){return isColumnInfo(t)?t:(0,_vue.reactive)(new _columnInfo.ColumnInfo(e,t,l))}function watchColumn(l,e,r){Object.keys(e).forEach(t=>{(0,_vue.watch)(()=>e[t],e=>{r.update(t,e),l&&("filters"===t?(l.setFilter(r,e),l.handleUpdateDataQueue()):["visible","fixed","width","minWidth","maxWidth"].includes(t)&&l.handleRefreshColumnQueue())})})}function assembleColumn(e,t,l,r){var e=e.reactData,o=e.staticColumns,i=t.parentNode,r=r?r.columnConfig:null,r=r?r.children:o;i&&r&&(r.splice(_xeUtils.default.arrayIndexOf(i.children,t),0,l),e.staticColumns=o.slice(0))}function destroyColumn(e,t){var e=e.reactData,l=e.staticColumns,r=_xeUtils.default.findTree(l,e=>e.id===t.id,{children:"children"});r&&r.items.splice(r.index,1),e.staticColumns=l.slice(0)}function getRootColumn(e,t){var e=e.internalData,l=e.fullColumnIdData;if(!t)return null;let r=t.parentId;for(;l[r];){let e=l[r].column;if(!(r=e.parentId))return e}return t}exports.convertHeaderColumnToRows=convertHeaderColumnToRows;let lineOffsetSizes={mini:3,small:2,medium:1,large:0},countTreeExpand=(e,t)=>{let l=1;if(e){var r=t.$table,o=r.getComputeMaps().computeTreeOpts,o=o.value,{transform:i,mapChildrenField:n}=o,o=o.children||o.childrenField,a=e[i?n:o];if(a&&r.isTreeExpandByRow(e))for(let e=0;e<a.length;e++)l+=countTreeExpand(a[e],t)}return l},getOffsetSize=e=>{e=e.getComputeMaps().computeSize,e=e.value;return e&&lineOffsetSizes[e]||0};function calcTreeLine(e,t){var{$table:l,row:r}=e,o=l.props.showOverflow,i=l.reactData.scrollYLoad,n=l.internalData.fullAllDataRowIdData,{computeRowOpts:a,computeCellOpts:u,computeDefaultRowHeight:d}=l.getComputeMaps(),a=a.value,u=u.value,d=d.value,n=n[getRowid(l,r)],r=n.resizeHeight||u.height||a.height||n.height||d;let s=1,c=(t&&(s=countTreeExpand(t,e)),r);return(c=i&&!o?n.height||r:c)*s-(t?1:12-getOffsetSize(l))}function clearTableDefaultStatus(e){var{props:t,internalData:l}=e;return l.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&&(t.keyboardConfig||t.mouseConfig)&&e.clearSelected(),e.clearCellAreas&&t.mouseConfig&&(e.clearCellAreas(),e.clearCopyCellArea()),e.clearScroll()}function clearTableAllStatus(e){return e.clearFilter&&e.clearFilter(),clearTableDefaultStatus(e)}function rowToVisible(l,r){var e=l.props,t=l.reactData,o=l.internalData,{computeLeftFixedWidth:i,computeRightFixedWidth:n,computeRowOpts:a,computeCellOpts:u,computeDefaultRowHeight:d}=l.getComputeMaps(),e=e.showOverflow,{scrollYLoad:t,scrollYTop:s}=t,{elemStore:o,afterFullData:c,fullAllDataRowIdData:f,isResizeCellHeight:m}=o,h=a.value,p=u.value,g=d.value,a=i.value,u=n.value,d=getRefElem(o["main-body-scroll"]),R=getRowid(l,r);if(d){i=d.clientHeight,n=d.scrollTop,o=d.querySelector(`[rowid="${R}"]`);if(o){d=o.offsetTop+(t?s:0),s=o.clientHeight;if(d<n||n+i<d)return l.scrollTo(null,d);if(i+n<=d+s)return l.scrollTo(null,n+s)}else if(t){if(!(m||p.height||h.height)&&e)return l.scrollTo(null,(l.findRowIndexOf(c,r)-1)*g);let t=0;o=f[R]||{},d=o.resizeHeight||p.height||h.height||o.height||g;for(let e=0;e<c.length;e++){var x=c[e],w=getRowid(l,x);if(x===r||w===R)break;x=f[w]||{};t+=x.resizeHeight||p.height||h.height||x.height||g}return t<n?l.scrollTo(null,t-a-1):l.scrollTo(null,t+d-(i-u-1))}}return Promise.resolve()}function colToVisible(l,r,t){var o=l.reactData,i=l.internalData,{computeLeftFixedWidth:n,computeRightFixedWidth:a}=l.getComputeMaps(),{scrollXLoad:o,scrollXLeft:u}=o,{elemStore:i,visibleColumn:d}=i,n=n.value,a=a.value,i=getRefElem(i["main-body-scroll"]);if(!r.fixed&&i){var s=i.clientWidth,c=i.scrollLeft;let e=null;if(t&&(t=getRowid(l,t),e=i.querySelector(`[rowid="${t}"] .`+r.id)),e=e||i.querySelector("."+r.id)){t=e.offsetLeft+(o?u:0),i=e.clientWidth;if(t<c+n)return l.scrollTo(t-n-1);if(s-a<t+i-c)return l.scrollTo(t+i-(s-a-1))}else if(o){let t=0;u=r.renderWidth;for(let e=0;e<d.length;e++){var f=d[e];if(f===r||f.id===r.id)break;t+=f.renderWidth}return t<c?l.scrollTo(t-n-1):l.scrollTo(t+u-(s-a-1))}}return Promise.resolve()}exports.getOffsetSize=getOffsetSize;
package/lib/ui/index.js CHANGED
@@ -13,7 +13,7 @@ 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.13.34";
16
+ const version = exports.version = "4.13.36";
17
17
  _core.VxeUI.version = version;
18
18
  _core.VxeUI.tableVersion = version;
19
19
  _core.VxeUI.setConfig({
@@ -139,7 +139,7 @@ _core.VxeUI.setConfig({
139
139
  // isEvery: false,
140
140
  showIcon: true
141
141
  },
142
- rowGroupConfig: {
142
+ aggregateConfig: {
143
143
  padding: true,
144
144
  rowField: 'id',
145
145
  parentField: '_X_ROW_PARENT_KEY',
@@ -213,13 +213,13 @@ _core.VxeUI.setConfig({
213
213
  isReplace: true
214
214
  },
215
215
  virtualXConfig: {
216
- enabled: true,
216
+ // enabled: false,
217
217
  gt: 24,
218
218
  preSize: 1,
219
219
  oSize: 0
220
220
  },
221
221
  virtualYConfig: {
222
- enabled: true,
222
+ // enabled: false,
223
223
  gt: 100,
224
224
  preSize: 1,
225
225
  oSize: 0
@@ -1 +1 @@
1
- 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");let version=exports.version="4.13.34",iconPrefix=(_core.VxeUI.version=version,_core.VxeUI.tableVersion=version,_core.VxeUI.setConfig({emptyCell:" ",table:{fit:!0,showHeader:!0,animat:!0,delayHover:250,autoResize:!0,minHeight:144,resizeConfig:{},resizableConfig:{dragMode:"auto",showDragTip:!0,isSyncAutoHeight:!0,isSyncAutoWidth:!0,minHeight:18},radioConfig:{strict:!0},rowDragConfig:{showIcon:!0,animation:!0,showGuidesStatus:!0,showDragTip:!0},columnDragConfig:{showIcon:!0,animation:!0,showGuidesStatus:!0,showDragTip:!0},checkboxConfig:{strict:!0},tooltipConfig:{enterable:!0},validConfig:{showMessage:!0,autoClear:!0,autoPos:!0,message:"inline",msgMode:"single",theme:"beautify"},columnConfig:{maxFixedSize:4},cellConfig:{padding:!0},headerCellConfig:{height:"unset"},footerCellConfig:{height:"unset"},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},drawerOptions:{mask:!0,lockView:!0,escClosable:!0,resize:!0}},sortConfig:{showIcon:!0,allowClear:!0,allowBtn:!0,iconLayout:"vertical"},filterConfig:{showIcon:!0},rowGroupConfig:{padding:!0,rowField:"id",parentField:"_X_ROW_PARENT_KEY",childrenField:"_X_ROW_CHILDREN",mapChildrenField:"_X_ROW_CHILD_LIST",indent:20,showIcon:!0},treeConfig:{padding:!0,rowField:"id",parentField:"parentId",childrenField:"children",hasChildField:"hasChild",mapChildrenField:"_X_ROW_CHILD",indent:20,showIcon:!0},expandConfig:{showIcon:!0,mode:"fixed"},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,selectCellByBody:!0,extendDirection:{top:!0,left:!0,bottom:!0,right:!0}},clipConfig:{isCopy:!0,isCut:!0,isPaste:!0},fnrConfig:{isFind:!0,isReplace:!0},virtualXConfig:{enabled:!0,gt:24,preSize:1,oSize:0},virtualYConfig:{enabled:!0,gt:100,preSize:1,oSize:0},scrollbarConfig:{}},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",TABLE_DRAG_ROW:iconPrefix+"drag-handle",TABLE_DRAG_COLUMN:iconPrefix+"drag-handle",TABLE_DRAG_STATUS_ROW:iconPrefix+"sort",TABLE_DRAG_STATUS_SUB_ROW:iconPrefix+"add-sub",TABLE_DRAG_STATUS_COLUMN:iconPrefix+"swap",TABLE_DRAG_DISABLED:iconPrefix+"no-drop",TABLE_ROW_GROUP_OPEN:iconPrefix+"arrow-right rotate90",TABLE_ROW_GROUP_CLOSE: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
+ 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");let version=exports.version="4.13.36",iconPrefix=(_core.VxeUI.version=version,_core.VxeUI.tableVersion=version,_core.VxeUI.setConfig({emptyCell:" ",table:{fit:!0,showHeader:!0,animat:!0,delayHover:250,autoResize:!0,minHeight:144,resizeConfig:{},resizableConfig:{dragMode:"auto",showDragTip:!0,isSyncAutoHeight:!0,isSyncAutoWidth:!0,minHeight:18},radioConfig:{strict:!0},rowDragConfig:{showIcon:!0,animation:!0,showGuidesStatus:!0,showDragTip:!0},columnDragConfig:{showIcon:!0,animation:!0,showGuidesStatus:!0,showDragTip:!0},checkboxConfig:{strict:!0},tooltipConfig:{enterable:!0},validConfig:{showMessage:!0,autoClear:!0,autoPos:!0,message:"inline",msgMode:"single",theme:"beautify"},columnConfig:{maxFixedSize:4},cellConfig:{padding:!0},headerCellConfig:{height:"unset"},footerCellConfig:{height:"unset"},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},drawerOptions:{mask:!0,lockView:!0,escClosable:!0,resize:!0}},sortConfig:{showIcon:!0,allowClear:!0,allowBtn:!0,iconLayout:"vertical"},filterConfig:{showIcon:!0},aggregateConfig:{padding:!0,rowField:"id",parentField:"_X_ROW_PARENT_KEY",childrenField:"_X_ROW_CHILDREN",mapChildrenField:"_X_ROW_CHILD_LIST",indent:20,showIcon:!0},treeConfig:{padding:!0,rowField:"id",parentField:"parentId",childrenField:"children",hasChildField:"hasChild",mapChildrenField:"_X_ROW_CHILD",indent:20,showIcon:!0},expandConfig:{showIcon:!0,mode:"fixed"},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,selectCellByBody:!0,extendDirection:{top:!0,left:!0,bottom:!0,right:!0}},clipConfig:{isCopy:!0,isCut:!0,isPaste:!0},fnrConfig:{isFind:!0,isReplace:!0},virtualXConfig:{gt:24,preSize:1,oSize:0},virtualYConfig:{gt:100,preSize:1,oSize:0},scrollbarConfig:{}},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",TABLE_DRAG_ROW:iconPrefix+"drag-handle",TABLE_DRAG_COLUMN:iconPrefix+"drag-handle",TABLE_DRAG_STATUS_ROW:iconPrefix+"sort",TABLE_DRAG_STATUS_SUB_ROW:iconPrefix+"add-sub",TABLE_DRAG_STATUS_COLUMN:iconPrefix+"swap",TABLE_DRAG_DISABLED:iconPrefix+"no-drop",TABLE_ROW_GROUP_OPEN:iconPrefix+"arrow-right rotate90",TABLE_ROW_GROUP_CLOSE: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.13.34"}`;
11
+ const version = `table v${"4.13.36"}`;
12
12
  const warnLog = exports.warnLog = log.create('warn', version);
13
13
  const errLog = exports.errLog = log.create('error', version);
@@ -1 +1 @@
1
- Object.defineProperty(exports,"__esModule",{value:!0}),exports.warnLog=exports.errLog=void 0;var _core=require("@vxe-ui/core");let log=_core.VxeUI.log,version="table v4.13.34",warnLog=exports.warnLog=log.create("warn",version),errLog=exports.errLog=log.create("error",version);
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.warnLog=exports.errLog=void 0;var _core=require("@vxe-ui/core");let log=_core.VxeUI.log,version="table v4.13.36",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.13.34",
3
+ "version": "4.13.36",
4
4
  "description": "一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟树、拖拽排序,懒加载、快捷菜单、数据校验、树形结构、打印、导入导出、自定义模板、渲染器、JSON 配置式...",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -17,7 +17,7 @@ const { getConfig, getI18n, commands, hooks, useFns, createEvent, globalEvents,
17
17
 
18
18
  const tableComponentPropKeys = Object.keys(tableComponentProps as any)
19
19
 
20
- const tableComponentMethodKeys: (keyof VxeTableMethods)[] = ['clearAll', 'syncData', 'updateData', 'loadData', 'reloadData', 'reloadRow', 'loadColumn', 'reloadColumn', 'getRowNode', 'getColumnNode', 'getRowIndex', 'getVTRowIndex', 'getVMRowIndex', 'getColumnIndex', 'getVTColumnIndex', 'getVMColumnIndex', 'setRow', 'createData', 'createRow', 'revertData', 'clearData', 'isRemoveByRow', 'isInsertByRow', 'isUpdateByRow', 'getColumns', 'getColumnById', 'getColumnByField', 'getTableColumn', 'getFullColumns', 'getData', 'getCheckboxRecords', 'getParentRow', 'getTreeRowChildren', 'getTreeParentRow', 'getRowSeq', 'getRowById', 'getRowid', 'getTableData', 'getFullData', 'setColumnFixed', 'clearColumnFixed', 'setColumnWidth', 'getColumnWidth', 'setRowHeightConf', 'getRowHeightConf', 'setRowHeight', 'getRowHeight', 'hideColumn', 'showColumn', 'resetColumn', 'refreshColumn', 'refreshScroll', 'recalculate', 'closeTooltip', 'isAllCheckboxChecked', 'isAllCheckboxIndeterminate', 'getCheckboxIndeterminateRecords', 'setCheckboxRow', 'setCheckboxRowKey', 'isCheckedByCheckboxRow', 'isCheckedByCheckboxRowKey', 'isIndeterminateByCheckboxRow', 'isIndeterminateByCheckboxRowKey', 'toggleCheckboxRow', 'setAllCheckboxRow', 'getRadioReserveRecord', 'clearRadioReserve', 'getCheckboxReserveRecords', 'clearCheckboxReserve', 'toggleAllCheckboxRow', 'clearCheckboxRow', 'setCurrentRow', 'isCheckedByRadioRow', 'isCheckedByRadioRowKey', 'setRadioRow', 'setRadioRowKey', 'clearCurrentRow', 'clearRadioRow', 'getCurrentRecord', 'getRadioRecord', 'getCurrentColumn', 'setCurrentColumn', 'clearCurrentColumn', 'setPendingRow', 'togglePendingRow', 'hasPendingByRow', 'isPendingByRow', 'getPendingRecords', 'clearPendingRow', 'sort', 'setSort', 'clearSort', 'clearSortByEvent', 'isSort', 'getSortColumns', 'closeFilter', 'isFilter', 'clearFilterByEvent', 'isActiveFilterByColumn', 'isRowExpandLoaded', 'clearRowExpandLoaded', 'reloadRowExpand', 'reloadRowExpand', 'toggleRowExpand', 'setAllRowExpand', 'setRowExpand', 'isExpandByRow', 'isRowExpandByRow', 'clearRowExpand', 'clearRowExpandReserve', 'getRowExpandRecords', 'getTreeExpandRecords', 'isTreeExpandLoaded', 'clearTreeExpandLoaded', 'reloadTreeExpand', 'reloadTreeChilds', 'toggleTreeExpand', 'setAllTreeExpand', 'setTreeExpand', 'isTreeExpandByRow', 'clearTreeExpand', 'clearTreeExpandReserve', 'getScroll', 'scrollTo', 'scrollToRow', 'scrollToColumn', 'clearScroll', 'updateFooter', 'updateStatus', 'setMergeCells', 'removeInsertRow', 'removeMergeCells', 'getMergeCells', 'clearMergeCells', 'setMergeFooterItems', 'removeMergeFooterItems', 'getMergeFooterItems', 'clearMergeFooterItems', 'getCustomStoreData', 'setRowGroupExpand', 'setAllRowGroupExpand', 'clearRowGroupExpand', 'isRowGroupExpandByRow', 'isRowGroupRecord', 'setRowGroups', 'clearRowGroups', 'openTooltip', 'moveColumnTo', 'moveRowTo', 'getCellLabel', 'getCellElement', 'focus', 'blur', 'connect']
20
+ const tableComponentMethodKeys: (keyof VxeTableMethods)[] = ['clearAll', 'syncData', 'updateData', 'loadData', 'reloadData', 'reloadRow', 'loadColumn', 'reloadColumn', 'getRowNode', 'getColumnNode', 'getRowIndex', 'getVTRowIndex', 'getVMRowIndex', 'getColumnIndex', 'getVTColumnIndex', 'getVMColumnIndex', 'setRow', 'createData', 'createRow', 'revertData', 'clearData', 'isRemoveByRow', 'isInsertByRow', 'isUpdateByRow', 'getColumns', 'getColumnById', 'getColumnByField', 'getTableColumn', 'getFullColumns', 'getData', 'getCheckboxRecords', 'getParentRow', 'getTreeRowChildren', 'getTreeParentRow', 'getRowSeq', 'getRowById', 'getRowid', 'getTableData', 'getFullData', 'setColumnFixed', 'clearColumnFixed', 'setColumnWidth', 'getColumnWidth', 'setRowHeightConf', 'getRowHeightConf', 'setRowHeight', 'getRowHeight', 'hideColumn', 'showColumn', 'resetColumn', 'refreshColumn', 'refreshScroll', 'recalculate', 'closeTooltip', 'isAllCheckboxChecked', 'isAllCheckboxIndeterminate', 'getCheckboxIndeterminateRecords', 'setCheckboxRow', 'setCheckboxRowKey', 'isCheckedByCheckboxRow', 'isCheckedByCheckboxRowKey', 'isIndeterminateByCheckboxRow', 'isIndeterminateByCheckboxRowKey', 'toggleCheckboxRow', 'setAllCheckboxRow', 'getRadioReserveRecord', 'clearRadioReserve', 'getCheckboxReserveRecords', 'clearCheckboxReserve', 'toggleAllCheckboxRow', 'clearCheckboxRow', 'setCurrentRow', 'isCheckedByRadioRow', 'isCheckedByRadioRowKey', 'setRadioRow', 'setRadioRowKey', 'clearCurrentRow', 'clearRadioRow', 'getCurrentRecord', 'getRadioRecord', 'getCurrentColumn', 'setCurrentColumn', 'clearCurrentColumn', 'setPendingRow', 'togglePendingRow', 'hasPendingByRow', 'isPendingByRow', 'getPendingRecords', 'clearPendingRow', 'sort', 'setSort', 'clearSort', 'clearSortByEvent', 'isSort', 'getSortColumns', 'closeFilter', 'isFilter', 'clearFilterByEvent', 'isActiveFilterByColumn', 'isRowExpandLoaded', 'clearRowExpandLoaded', 'reloadRowExpand', 'reloadRowExpand', 'toggleRowExpand', 'setAllRowExpand', 'setRowExpand', 'isExpandByRow', 'isRowExpandByRow', 'clearRowExpand', 'clearRowExpandReserve', 'getRowExpandRecords', 'getTreeExpandRecords', 'isTreeExpandLoaded', 'clearTreeExpandLoaded', 'reloadTreeExpand', 'reloadTreeChilds', 'toggleTreeExpand', 'setAllTreeExpand', 'setTreeExpand', 'isTreeExpandByRow', 'clearTreeExpand', 'clearTreeExpandReserve', 'getScroll', 'scrollTo', 'scrollToRow', 'scrollToColumn', 'clearScroll', 'updateFooter', 'updateStatus', 'setMergeCells', 'removeInsertRow', 'removeMergeCells', 'getMergeCells', 'clearMergeCells', 'setMergeFooterItems', 'removeMergeFooterItems', 'getMergeFooterItems', 'clearMergeFooterItems', 'getCustomStoreData', 'setRowGroupExpand', 'setAllRowGroupExpand', 'clearRowGroupExpand', 'isRowGroupExpandByRow', 'isRowGroupRecord', 'isAggregateRecord', 'isAggregateExpandByRow', 'setRowGroups', 'clearRowGroups', 'openTooltip', 'moveColumnTo', 'moveRowTo', 'getCellLabel', 'getCellElement', 'focus', 'blur', 'connect']
21
21
 
22
22
  const gridComponentEmits: VxeGridEmits = [
23
23
  ...tableComponentEmits,
@@ -226,9 +226,19 @@ export default defineComponent({
226
226
  }
227
227
  })
228
228
 
229
- const computePageConfFlag = computed(() => {
229
+ const computeCustomCurrentPageFlag = computed(() => {
230
230
  const pagerOpts = computePagerOpts.value
231
- return `${pagerOpts.currentPage}${pagerOpts.pageSize}`
231
+ return pagerOpts.currentPage
232
+ })
233
+
234
+ const computeCustomPageSizeFlag = computed(() => {
235
+ const pagerOpts = computePagerOpts.value
236
+ return pagerOpts.pageSize
237
+ })
238
+
239
+ const computeCustomTotalFlag = computed(() => {
240
+ const pagerOpts = computePagerOpts.value
241
+ return pagerOpts.total
232
242
  })
233
243
 
234
244
  const refMaps: GridPrivateRef = {
@@ -277,17 +287,26 @@ export default defineComponent({
277
287
  return proxyConfig && isEnableConf(proxyOpts) && proxyOpts.form ? formData : formOpts.data
278
288
  }
279
289
 
280
- const initPages = () => {
290
+ const initPages = (propKey?: 'currentPage' | 'pageSize' | 'total') => {
281
291
  const { tablePage } = reactData
282
292
  const { pagerConfig } = props
283
293
  const pagerOpts = computePagerOpts.value
284
- const { currentPage, pageSize } = pagerOpts
285
294
  if (pagerConfig && isEnableConf(pagerOpts)) {
286
- if (currentPage) {
287
- tablePage.currentPage = currentPage
288
- }
289
- if (pageSize) {
290
- tablePage.pageSize = pageSize
295
+ if (propKey) {
296
+ if (pagerOpts[propKey]) {
297
+ tablePage[propKey] = XEUtils.toNumber(pagerOpts[propKey])
298
+ }
299
+ } else {
300
+ const { currentPage, pageSize, total } = pagerOpts
301
+ if (currentPage) {
302
+ tablePage.currentPage = currentPage
303
+ }
304
+ if (pageSize) {
305
+ tablePage.pageSize = pageSize
306
+ }
307
+ if (total) {
308
+ tablePage.pageSize = total
309
+ }
291
310
  }
292
311
  }
293
312
  }
@@ -1330,8 +1349,16 @@ export default defineComponent({
1330
1349
  initToolbar()
1331
1350
  })
1332
1351
 
1333
- watch(computePageConfFlag, () => {
1334
- initPages()
1352
+ watch(computeCustomCurrentPageFlag, () => {
1353
+ initPages('currentPage')
1354
+ })
1355
+
1356
+ watch(computeCustomPageSizeFlag, () => {
1357
+ initPages('pageSize')
1358
+ })
1359
+
1360
+ watch(computeCustomTotalFlag, () => {
1361
+ initPages('total')
1335
1362
  })
1336
1363
 
1337
1364
  watch(() => props.proxyConfig, () => {
@@ -334,7 +334,7 @@ hooks.add('tableEditModule', {
334
334
  params.cell = cell
335
335
  if (cell && isEnableConf(editConfig) && isEnableConf(editRender)) {
336
336
  // 激活编辑
337
- if (!$xeTable.isPendingByRow(row)) {
337
+ if (!$xeTable.isPendingByRow(row) && !$xeTable.isAggregateRecord(row)) {
338
338
  if (actived.row !== row || (mode === 'cell' ? actived.column !== column : false)) {
339
339
  // 判断是否禁用编辑
340
340
  let type: 'edit-disabled' | 'edit-activated' = 'edit-disabled'
@@ -428,7 +428,7 @@ hooks.add('tableEditModule', {
428
428
  const handleEditCell = (row: any, fieldOrColumn: string | VxeTableDefines.ColumnInfo, isPos: boolean) => {
429
429
  const { editConfig } = props
430
430
  const column = XEUtils.isString(fieldOrColumn) ? $xeTable.getColumnByField(fieldOrColumn) : fieldOrColumn
431
- if (row && column && isEnableConf(editConfig) && isEnableConf(column.editRender)) {
431
+ if (row && column && isEnableConf(editConfig) && isEnableConf(column.editRender) && !$xeTable.isAggregateRecord(row)) {
432
432
  return Promise.resolve(isPos ? $xeTable.scrollToRow(row, column) : null).then(() => {
433
433
  const cell = $xeTable.getCellElement(row, column)
434
434
  if (cell) {
@@ -149,7 +149,7 @@ hooks.add('tableValidatorModule', {
149
149
  setupTable ($xeTable) {
150
150
  const { props, reactData, internalData } = $xeTable
151
151
  const { refValidTooltip } = $xeTable.getRefMaps()
152
- const { computeValidOpts, computeTreeOpts, computeEditOpts } = $xeTable.getComputeMaps()
152
+ const { computeValidOpts, computeTreeOpts, computeEditOpts, computeAggregateOpts } = $xeTable.getComputeMaps()
153
153
 
154
154
  let validatorMethods = {} as TableValidatorMethods
155
155
  let validatorPrivateMethods = {} as TableValidatorPrivateMethods
@@ -209,9 +209,10 @@ hooks.add('tableValidatorModule', {
209
209
  const beginValidate = (rows: any, cols: VxeTableDefines.ColumnInfo[] | null, cb: any, isFull?: boolean): Promise<any> => {
210
210
  const validRest: any = {}
211
211
  const { editRules, treeConfig } = props
212
+ const { isRowGroupStatus } = reactData
212
213
  const { afterFullData, pendingRowMaps, removeRowMaps } = internalData
213
214
  const treeOpts = computeTreeOpts.value
214
- const childrenField = treeOpts.children || treeOpts.childrenField
215
+ const aggregateOpts = computeAggregateOpts.value
215
216
  const validOpts = computeValidOpts.value
216
217
  let validList
217
218
  if (rows === true) {
@@ -252,6 +253,9 @@ hooks.add('tableValidatorModule', {
252
253
  if (pendingRowMaps[rowid]) {
253
254
  return
254
255
  }
256
+ if ($xeTable.isAggregateRecord(row)) {
257
+ return
258
+ }
255
259
  if (isFull || !validRuleErr) {
256
260
  const colVailds: any[] = []
257
261
  columns.forEach((column) => {
@@ -291,7 +295,10 @@ hooks.add('tableValidatorModule', {
291
295
  rowValidErrs.push(Promise.all(colVailds))
292
296
  }
293
297
  }
294
- if (treeConfig) {
298
+ if (isRowGroupStatus) {
299
+ XEUtils.eachTree(validList, handleVaild, { children: aggregateOpts.mapChildrenField })
300
+ } else if (treeConfig) {
301
+ const childrenField = treeOpts.children || treeOpts.childrenField
295
302
  XEUtils.eachTree(validList, handleVaild, { children: childrenField })
296
303
  } else {
297
304
  validList.forEach(handleVaild)
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, TransitionGroup, h, ref, Ref, PropType, inject, nextTick, onMounted, onUnmounted } from 'vue'
2
2
  import XEUtils from 'xe-utils'
3
3
  import { VxeUI } from '../../ui'
4
- import { getOffsetSize, calcTreeLine, getRowid, createHandleGetRowId } from './util'
4
+ import { getOffsetSize, calcTreeLine, getRowid, createHandleGetRowId, getCellRestHeight } from './util'
5
5
  import { updateCellTitle, getPropClass } from '../../ui/src/dom'
6
6
  import { isEnableConf } from '../../ui/src/utils'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
@@ -234,6 +234,7 @@ export default defineComponent({
234
234
  $xeTable.triggerCellDblclickEvent(evnt, cellParams)
235
235
  }
236
236
  let isMergeCell = false
237
+ let mergeRowspan = 1
237
238
  // 合并行或列
238
239
  if (mergeBodyFlag && mergeBodyList.length) {
239
240
  const spanRest = mergeBodyCellMaps[`${_rowIndex}:${_columnIndex}`]
@@ -244,6 +245,7 @@ export default defineComponent({
244
245
  }
245
246
  if (rowspan > 1) {
246
247
  isMergeCell = true
248
+ mergeRowspan = rowspan
247
249
  tdAttrs.rowspan = rowspan
248
250
  }
249
251
  if (colspan > 1) {
@@ -258,9 +260,12 @@ export default defineComponent({
258
260
  return null
259
261
  }
260
262
  if (rowspan > 1) {
263
+ isMergeCell = true
264
+ mergeRowspan = rowspan
261
265
  tdAttrs.rowspan = rowspan
262
266
  }
263
267
  if (colspan > 1) {
268
+ isMergeCell = true
264
269
  tdAttrs.colspan = colspan
265
270
  }
266
271
  }
@@ -276,7 +281,7 @@ export default defineComponent({
276
281
  }
277
282
 
278
283
  const isVNAutoHeight = scrollYLoad && !hasEllipsis
279
- const cellHeight = rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight
284
+ let cellHeight = getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight)
280
285
 
281
286
  const isLastColumn = $columnIndex === columns.length - 1
282
287
  const isAutoCellWidth = !column.resizeWidth && (column.minWidth === 'auto' || column.width === 'auto')
@@ -292,6 +297,16 @@ export default defineComponent({
292
297
  }
293
298
  }
294
299
 
300
+ if (mergeRowspan > 1) {
301
+ const mEndRow = afterFullData[_rowIndex + mergeRowspan - 1]
302
+ if (mEndRow) {
303
+ const meRowRest = fullAllDataRowIdData[getRowid($xeTable, mEndRow)]
304
+ if (meRowRest) {
305
+ cellHeight += meRowRest.oTop - rowRest.oTop + getCellRestHeight(meRowRest, cellOpts, rowOpts, defaultRowHeight)
306
+ }
307
+ }
308
+ }
309
+
295
310
  const tcStyle: Record<string, string> = {}
296
311
  if (hasEllipsis && resizeWidthFlag) {
297
312
  let tsColspan = tdAttrs.colspan || 0
@@ -326,8 +341,10 @@ export default defineComponent({
326
341
  )
327
342
  } else {
328
343
  // 渲染单元格
344
+ if (treeConfig) {
345
+ tdVNs.push(...renderLine(rowid, cellParams, cellHeight))
346
+ }
329
347
  tdVNs.push(
330
- ...renderLine(rowid, cellParams, cellHeight),
331
348
  h('div', {
332
349
  key: 'tc',
333
350
  class: ['vxe-cell', {
@@ -288,12 +288,12 @@ function renderCellHandle (params: VxeTableDefines.CellRenderBodyParams & {
288
288
  const { isRowGroupStatus } = tableReactData
289
289
  const { editConfig } = tableProps
290
290
  const { type, treeNode, rowGroupNode, editRender } = column
291
- const { computeEditOpts, computeCheckboxOpts, computeRowGroupOpts } = $table.getComputeMaps()
292
- const rowGroupOpts = computeRowGroupOpts.value
293
- const { mode } = rowGroupOpts
291
+ const { computeEditOpts, computeCheckboxOpts, computeAggregateOpts } = $table.getComputeMaps()
292
+ const aggregateOpts = computeAggregateOpts.value
293
+ const { mode } = aggregateOpts
294
294
  const checkboxOpts = computeCheckboxOpts.value
295
295
  const editOpts = computeEditOpts.value
296
- const isDeepCell = treeNode || (isRowGroupStatus && row.isAggregate && (mode === 'column' ? column.field === row.groupField : rowGroupNode))
296
+ const isDeepCell = treeNode || (isRowGroupStatus && (mode === 'column' ? column.field === row.groupField : rowGroupNode))
297
297
  switch (type) {
298
298
  case 'seq':
299
299
  return isDeepCell ? Cell.renderDeepIndexCell(params) : Cell.renderSeqCell(params)
@@ -397,7 +397,7 @@ export const Cell = {
397
397
  const tableReactData = $table.reactData
398
398
  const tableInternalData = $table.internalData
399
399
  const { isRowGroupStatus } = tableReactData
400
- const { field, slots, editRender, cellRender, rowGroupNode } = column
400
+ const { field, slots, editRender, cellRender, rowGroupNode, aggFunc } = column
401
401
  const renderOpts = editRender || cellRender
402
402
  const defaultSlot = slots ? slots.default : null
403
403
  if (defaultSlot) {
@@ -415,39 +415,51 @@ export const Cell = {
415
415
  }
416
416
  }
417
417
  let cellValue: string | number | null = ''
418
- if (isRowGroupStatus && row.isAggregate) {
418
+ if (isRowGroupStatus && field && row.isAggregate) {
419
+ const aggRow: VxeTableDefines.AggregateRowInfo = row
419
420
  const { fullColumnFieldData } = tableInternalData
420
- const { computeRowGroupOpts } = $table.getComputeMaps()
421
- const rowGroupOpts = computeRowGroupOpts.value
422
- const { mode, showTotal, totalMethod, countFields, countMethod, contentMethod, mapChildrenField } = rowGroupOpts
423
- const groupField = row.groupField
424
- const groupContent = row.groupContent
425
- const childList = mapChildrenField ? (row[mapChildrenField] || []) : []
426
- const totalValue = row.childCount
421
+ const { computeAggregateOpts } = $table.getComputeMaps()
422
+ const aggregateOpts = computeAggregateOpts.value
423
+ const { mode, showTotal, totalMethod, countFields, contentMethod, mapChildrenField } = aggregateOpts
424
+ const aggMethod = aggregateOpts.aggregateMethod || aggregateOpts.countMethod
425
+ const groupField = aggRow.groupField
426
+ const groupContent = aggRow.groupContent
427
+ const childList = mapChildrenField ? (aggRow[mapChildrenField] || []) : []
428
+ const childCount = aggRow.childCount
427
429
  const colRest = fullColumnFieldData[groupField] || {}
428
- const params = {
430
+ const ctParams = {
429
431
  $table,
430
432
  groupField,
431
433
  groupColumn: (colRest ? colRest.column : null) as VxeTableDefines.ColumnInfo,
432
434
  column,
433
435
  groupValue: groupContent,
434
436
  children: childList,
435
- totalValue: totalValue
437
+ childCount,
438
+ aggValue: null as any,
439
+
440
+ /**
441
+ * 已废弃
442
+ * @deprecated
443
+ */
444
+ totalValue: childCount
436
445
  }
437
- if (mode === 'column' ? column.field === row.groupField : rowGroupNode) {
446
+ if (mode === 'column' ? field === aggRow.groupField : rowGroupNode) {
438
447
  cellValue = groupContent
439
448
  if (contentMethod) {
440
- cellValue = `${contentMethod(params)}`
449
+ cellValue = `${contentMethod(ctParams)}`
441
450
  }
442
451
  if (showTotal) {
443
- cellValue = getI18n('vxe.table.rowGroupContentTotal', [cellValue, totalMethod ? totalMethod(params) : totalValue, totalValue])
452
+ cellValue = getI18n('vxe.table.rowGroupContentTotal', [cellValue, totalMethod ? totalMethod(ctParams) : childCount, childCount])
444
453
  }
445
- } else if (countFields && countFields.includes(field)) {
446
- if (countMethod) {
447
- cellValue = `${countMethod(params)}`
454
+ } else if ($table.getPivotTableAggregateCellAggValue) {
455
+ cellValue = $table.getPivotTableAggregateCellAggValue(params)
456
+ } else if (aggFunc === true || (countFields && countFields.includes(field))) {
457
+ if (aggMethod) {
458
+ ctParams.aggValue = childCount
459
+ cellValue = `${aggMethod(ctParams)}`
448
460
  }
449
461
  }
450
- } else if (!(isRowGroupStatus && row.isAggregate)) {
462
+ } else {
451
463
  cellValue = $table.getCellLabel(row, column)
452
464
  }
453
465
  const cellPlaceholder = editRender ? editRender.placeholder : ''
@@ -480,11 +492,11 @@ export const Cell = {
480
492
  const tableReactData = $table.reactData
481
493
  const tableInternalData = $table.internalData
482
494
  const { row, level } = params
483
- const { computeRowGroupOpts } = $table.getComputeMaps()
495
+ const { computeAggregateOpts } = $table.getComputeMaps()
484
496
  const { rowGroupExpandedFlag } = tableReactData
485
497
  const { rowGroupExpandedMaps } = tableInternalData
486
- const rowGroupOpts = computeRowGroupOpts.value
487
- const { padding, indent } = rowGroupOpts
498
+ const aggregateOpts = computeAggregateOpts.value
499
+ const { padding, indent } = aggregateOpts
488
500
  const rowid = getRowid($table, row)
489
501
  const isExpand = !!rowGroupExpandedFlag && !!rowGroupExpandedMaps[rowid]
490
502
  return h('div', {
@@ -497,16 +509,18 @@ export const Cell = {
497
509
  }
498
510
  : undefined
499
511
  }, [
500
- h('span', {
501
- class: 'vxe-row-group--node-btn',
502
- onClick (evnt: MouseEvent) {
503
- $table.triggerRowGroupExpandEvent(evnt, params)
504
- }
505
- }, [
506
- h('i', {
507
- class: isExpand ? getIcon().TABLE_ROW_GROUP_OPEN : getIcon().TABLE_ROW_GROUP_CLOSE
508
- })
509
- ]),
512
+ row.isAggregate
513
+ ? h('span', {
514
+ class: 'vxe-row-group--node-btn',
515
+ onClick (evnt: MouseEvent) {
516
+ $table.triggerRowGroupExpandEvent(evnt, params)
517
+ }
518
+ }, [
519
+ h('i', {
520
+ class: isExpand ? getIcon().TABLE_ROW_GROUP_OPEN : getIcon().TABLE_ROW_GROUP_CLOSE
521
+ })
522
+ ])
523
+ : renderEmptyElement($table),
510
524
  h('div', {
511
525
  class: 'vxe-row-group-cell'
512
526
  }, cellVNodes)
@@ -588,10 +602,12 @@ export const Cell = {
588
602
  renderDeepNodeBtn (params: VxeTableDefines.CellRenderBodyParams & { $table: VxeTableConstructor & VxeTablePrivateMethods }, cellVNodes: VxeComponentSlotType[]) {
589
603
  const { $table, row, column } = params
590
604
  const { rowGroupNode } = column
591
- if (row.isAggregate) {
592
- const { computeRowGroupOpts } = $table.getComputeMaps()
593
- const rowGroupOpts = computeRowGroupOpts.value
594
- const { mode } = rowGroupOpts
605
+ const tableReactData = $table.reactData
606
+ const { rowGroupList } = tableReactData
607
+ if (rowGroupList.length) {
608
+ const { computeAggregateOpts } = $table.getComputeMaps()
609
+ const aggregateOpts = computeAggregateOpts.value
610
+ const { mode } = aggregateOpts
595
611
  if (mode === 'column' ? column.field === row.groupField : rowGroupNode) {
596
612
  return [Cell.renderRowGroupBtn(params, cellVNodes)]
597
613
  }
@@ -124,6 +124,8 @@ export const columnProps = {
124
124
  editRender: Object as PropType<VxeColumnPropTypes.EditRender>,
125
125
  // 内容渲染配置项
126
126
  contentRender: Object as PropType<VxeColumnPropTypes.ContentRender>,
127
+ // 聚合函数
128
+ aggFunc: [String, Boolean] as PropType<VxeColumnPropTypes.AggFunc>,
127
129
  // 额外的参数
128
130
  params: Object as PropType<VxeColumnPropTypes.Params>
129
131
  }
@@ -95,6 +95,7 @@ export class ColumnInfo {
95
95
  titleHelp: _vm.titleHelp,
96
96
  titlePrefix: _vm.titlePrefix,
97
97
  titleSuffix: _vm.titleSuffix,
98
+ aggFunc: _vm.aggFunc,
98
99
  // 自定义参数
99
100
  params: _vm.params,
100
101
  // 渲染属性
@@ -124,6 +125,8 @@ export class ColumnInfo {
124
125
  sortNumber: 0, // 用于记录自定义列顺序
125
126
  renderSortNumber: 0, // 用于记录自定义列顺序
126
127
 
128
+ renderAggFn: '',
129
+
127
130
  renderFixed: '',
128
131
  renderVisible: false,
129
132
 
@@ -198,7 +198,9 @@ export default {
198
198
  footerCellConfig: Object as PropType<VxeTablePropTypes.FooterCellConfig>,
199
199
  // 行配置项
200
200
  rowConfig: Object as PropType<VxeTablePropTypes.RowConfig>,
201
- // 行分组配置项
201
+ // 数据聚合配置项
202
+ aggregateConfig: Object as PropType<VxeTablePropTypes.AggregateConfig>,
203
+ // 已废弃,被 aggregateConfig 替换
202
204
  rowGroupConfig: Object as PropType<VxeTablePropTypes.RowGroupConfig>,
203
205
  // 当前行配置项
204
206
  currentRowConfig: Object as PropType<VxeTablePropTypes.CurrentRowConfig>,