vxe-table 3.20.0-beta.12 → 3.20.0-beta.13

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.
@@ -80,7 +80,7 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
80
80
  const $xeGantt = $xeTable.$xeGantt;
81
81
  const { columnKey, resizable: allResizable, showOverflow: allShowOverflow, border, height, treeConfig, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps;
82
82
  const { tableData, tableColumn, dragRow, overflowX, overflowY, currentColumn, scrollXLoad, scrollYLoad, mergeBodyFlag, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, editStore, isAllOverflow, validErrorMaps } = tableReactData;
83
- const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore } = tableInternalData;
83
+ const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore, keepUpdateFieldMaps } = tableInternalData;
84
84
  const cellOpts = $xeTable.computeCellOpts;
85
85
  const validOpts = $xeTable.computeValidOpts;
86
86
  const checkboxOpts = $xeTable.computeCheckboxOpts;
@@ -99,7 +99,7 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
99
99
  const areaOpts = $xeTable.computeAreaOpts;
100
100
  const cellOffsetWidth = $xeTable.computeCellOffsetWidth;
101
101
  const { selectCellToRow } = areaOpts;
102
- const { type, cellRender, editRender, align, showOverflow, className, treeNode, rowResize, padding, verticalAlign, slots } = column;
102
+ const { field, type, cellRender, editRender, align, showOverflow, className, treeNode, rowResize, padding, verticalAlign, slots } = column;
103
103
  const { verticalAlign: allVerticalAlign } = cellOpts;
104
104
  const { actived } = editStore;
105
105
  const rowRest = fullAllDataRowIdData[rowid] || {};
@@ -254,8 +254,8 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
254
254
  }
255
255
  }
256
256
  // 如果编辑列开启显示状态
257
- if (!fixedHiddenColumn && editConfig && (editRender || cellRender) && (editOpts.showStatus || editOpts.showUpdateStatus)) {
258
- isDirty = $xeTable.isUpdateByRow(row, column.field);
257
+ if (!fixedHiddenColumn && editConfig && (editOpts.showStatus || editOpts.showUpdateStatus) && keepUpdateFieldMaps[field]) {
258
+ isDirty = $xeTable.isUpdateByRow(row, field);
259
259
  }
260
260
  const isVNAutoHeight = !hasEllipsis && (scrollYLoad || scrollXLoad);
261
261
  let cellHeight = getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight);
@@ -203,6 +203,7 @@ function handleCustomRestore($xeTable, storeData) {
203
203
  const newCollectCols = XEUtils.toArrayTree(XEUtils.orderBy(allCols, 'renderSortNumber'), { key: 'id', parentKey: 'parentId', children: 'children' });
204
204
  internalData.collectColumn = newCollectCols;
205
205
  internalData.tableFullColumn = getColumnList(newCollectCols);
206
+ reactData.updateColFlag++;
206
207
  }
207
208
  reactData.isCustomStatus = true;
208
209
  }
@@ -3490,11 +3491,13 @@ function handleTableColumn($xeTable) {
3490
3491
  reactData.tableColumn = tableColumn;
3491
3492
  }
3492
3493
  function handleUpdateColumn($xeTable) {
3494
+ const reactData = $xeTable;
3493
3495
  const internalData = $xeTable;
3494
3496
  const columnList = XEUtils.orderBy(internalData.collectColumn, 'renderSortNumber');
3495
3497
  internalData.collectColumn = columnList;
3496
- const tableFullColumn = getColumnList(columnList);
3497
- internalData.tableFullColumn = tableFullColumn;
3498
+ const tFullColumn = getColumnList(columnList);
3499
+ internalData.tableFullColumn = tFullColumn;
3500
+ reactData.updateColFlag++;
3498
3501
  cacheColumnMap($xeTable);
3499
3502
  }
3500
3503
  function loadScrollXData($xeTable) {
@@ -3686,8 +3689,9 @@ function handleInitColumn($xeTable, collectColumn) {
3686
3689
  const internalData = $xeTable;
3687
3690
  const expandOpts = $xeTable.computeExpandOpts;
3688
3691
  internalData.collectColumn = collectColumn;
3689
- const tableFullColumn = getColumnList(collectColumn);
3690
- internalData.tableFullColumn = tableFullColumn;
3692
+ const tFullColumn = getColumnList(collectColumn);
3693
+ internalData.tableFullColumn = tFullColumn;
3694
+ reactData.updateColFlag++;
3691
3695
  reactData.isColLoading = true;
3692
3696
  initColumnHierarchy($xeTable);
3693
3697
  return Promise.resolve(restoreCustomStorage($xeTable)).then(() => {
@@ -5201,9 +5205,10 @@ const tableMethods = {
5201
5205
  const $xeTable = this;
5202
5206
  const props = $xeTable;
5203
5207
  const internalData = $xeTable;
5204
- const { keepSource } = props;
5205
- const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData;
5206
- if (keepSource) {
5208
+ const { keepSource, editConfig } = props;
5209
+ const { fullDataRowIdData, sourceDataRowIdData } = internalData;
5210
+ const keepFields = $xeTable.computeKeepFields;
5211
+ if (keepSource && editConfig) {
5207
5212
  const rowid = XEUtils.isString(rowOrId) || XEUtils.isNumber(rowOrId) ? rowOrId : getRowid($xeTable, rowOrId);
5208
5213
  const rowRest = fullDataRowIdData[rowid];
5209
5214
  // 新增的数据不需要检测
@@ -5216,9 +5221,8 @@ const tableMethods = {
5216
5221
  if (arguments.length > 1) {
5217
5222
  return !eqCellValue(oRow, row, field);
5218
5223
  }
5219
- for (let index = 0, len = tableFullColumn.length; index < len; index++) {
5220
- const property = tableFullColumn[index].field;
5221
- if (property && !eqCellValue(oRow, row, property)) {
5224
+ for (let i = 0; i < keepFields.length; i++) {
5225
+ if (!eqCellValue(oRow, row, keepFields[i])) {
5222
5226
  return true;
5223
5227
  }
5224
5228
  }
@@ -264,6 +264,8 @@ export const tableProps = {
264
264
  fnrConfig: Object,
265
265
  // 编辑配置项
266
266
  editConfig: [Boolean, Object],
267
+ // 数据状态监听配置项
268
+ editDirtyConfig: Object,
267
269
  // 校验配置项
268
270
  validConfig: Object,
269
271
  // 校验规则配置项
@@ -514,7 +514,7 @@ export default {
514
514
  const reactData = createReactData();
515
515
  return Object.assign(Object.assign({ xID }, reactData), {
516
516
  // 私有属性
517
- reScrollFlag: 0, reLayoutFlag: 0, footFlag: 0, mergeFooteCellFlag: 0, crossTableDragRowInfo: crossTableDragRowGlobal });
517
+ reScrollFlag: 0, reLayoutFlag: 0, footFlag: 0, kfFlag: 0, mergeFooteCellFlag: 0, crossTableDragRowInfo: crossTableDragRowGlobal });
518
518
  },
519
519
  computed: Object.assign(Object.assign({}, {}), { tableId() {
520
520
  return this.computeTableId;
@@ -823,7 +823,14 @@ export default {
823
823
  return this.computeEditOpts;
824
824
  },
825
825
  computeEditOpts() {
826
- return Object.assign({}, getConfig().table.editConfig, this.editConfig);
826
+ const $xeTable = this;
827
+ const props = $xeTable;
828
+ return Object.assign({}, getConfig().table.editConfig, props.editConfig);
829
+ },
830
+ computeEditDirtyOpts() {
831
+ const $xeTable = this;
832
+ const props = $xeTable;
833
+ return Object.assign({}, getConfig().table.editDirtyConfig, props.editDirtyConfig);
827
834
  },
828
835
  sortOpts() {
829
836
  return this.computeSortOpts;
@@ -1171,6 +1178,35 @@ export default {
1171
1178
  }
1172
1179
  return false;
1173
1180
  },
1181
+ computeKeepFields() {
1182
+ const $xeTable = this;
1183
+ const reactData = $xeTable;
1184
+ const internalData = $xeTable;
1185
+ const { tableFullColumn } = internalData;
1186
+ const { updateColFlag } = reactData;
1187
+ const editDirtyOpts = $xeTable.computeEditDirtyOpts;
1188
+ const { includeFields, excludeFields } = editDirtyOpts;
1189
+ const kpFields = [];
1190
+ if (updateColFlag) {
1191
+ if (includeFields && includeFields.length) {
1192
+ return includeFields;
1193
+ }
1194
+ const exfMaps = {};
1195
+ if (excludeFields && excludeFields.length) {
1196
+ excludeFields.forEach(field => {
1197
+ exfMaps[field] = 1;
1198
+ });
1199
+ }
1200
+ for (let i = 0; i < tableFullColumn.length; i++) {
1201
+ const column = tableFullColumn[i];
1202
+ const { field, type, editRender, cellRender } = column;
1203
+ if (field && !type && (editRender || cellRender) && !exfMaps[field]) {
1204
+ kpFields.push(field);
1205
+ }
1206
+ }
1207
+ }
1208
+ return kpFields;
1209
+ },
1174
1210
  computeTableBorder() {
1175
1211
  const $xeTable = this;
1176
1212
  const props = $xeTable;
@@ -1355,6 +1391,22 @@ export default {
1355
1391
  internalData.footerFullDataRowData = {};
1356
1392
  $xeTable.updateFooter();
1357
1393
  },
1394
+ updateColFlag() {
1395
+ this.kfFlag++;
1396
+ },
1397
+ computeKeepFields() {
1398
+ this.kfFlag++;
1399
+ },
1400
+ kfFlag() {
1401
+ const $xeTable = this;
1402
+ const internalData = $xeTable;
1403
+ const keepFields = $xeTable.computeKeepFields;
1404
+ const kpfMaps = {};
1405
+ keepFields.forEach(field => {
1406
+ kpfMaps[field] = 1;
1407
+ });
1408
+ internalData.keepUpdateFieldMaps = kpfMaps;
1409
+ },
1358
1410
  syncResize(value) {
1359
1411
  const $xeTable = this;
1360
1412
  if (value) {
@@ -76,6 +76,7 @@ export function createInternalData() {
76
76
  fullDataRowIdData: {},
77
77
  // 数据集(仅可视)
78
78
  visibleDataRowIdData: {},
79
+ keepUpdateFieldMaps: {},
79
80
  footerFullDataRowData: {},
80
81
  // 渲染中缓存数据
81
82
  sourceDataRowIdData: {},
@@ -131,6 +132,7 @@ export function createInternalData() {
131
132
  }
132
133
  export function createReactData() {
133
134
  return {
135
+ updateColFlag: 0,
134
136
  // 低性能的静态列
135
137
  staticColumns: [],
136
138
  // 渲染的列分组
package/lib/index.umd.js CHANGED
@@ -3049,6 +3049,7 @@ function createInternalData() {
3049
3049
  fullDataRowIdData: {},
3050
3050
  // 数据集(仅可视)
3051
3051
  visibleDataRowIdData: {},
3052
+ keepUpdateFieldMaps: {},
3052
3053
  footerFullDataRowData: {},
3053
3054
  // 渲染中缓存数据
3054
3055
  sourceDataRowIdData: {},
@@ -3104,6 +3105,7 @@ function createInternalData() {
3104
3105
  }
3105
3106
  function createReactData() {
3106
3107
  return {
3108
+ updateColFlag: 0,
3107
3109
  // 低性能的静态列
3108
3110
  staticColumns: [],
3109
3111
  // 渲染的列分组
@@ -6106,6 +6108,8 @@ const tableProps = {
6106
6108
  fnrConfig: Object,
6107
6109
  // 编辑配置项
6108
6110
  editConfig: [Boolean, Object],
6111
+ // 数据状态监听配置项
6112
+ editDirtyConfig: Object,
6109
6113
  // 校验配置项
6110
6114
  validConfig: Object,
6111
6115
  // 校验规则配置项
@@ -6208,7 +6212,7 @@ const{getConfig: methods_getConfig,getI18n: methods_getI18n,renderer: methods_re
6208
6212
  if(isCustomResizable&&resizableData||isCustomSort&&sortData||isCustomVisible&&visibleData||isCustomFixed&&fixedData||isCustomAggGroup&&aggGroupData||isCustomAggFunc&&aggFuncData){const sortColMaps={};if(isCustomSort&&sortData){// 转换兼容老版本数据,即将废弃兼容
6209
6213
  if(!external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isArray(sortData)){const sortRests=[];external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().each(sortData,(index,colKey)=>{sortRests.push({key:colKey,index});});sortData=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().orderBy(sortRests,{field:'index',order:'asc'}).map(item=>({k:item.key}));}let colNum=1;external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(sortData,(sObj,index,sOjs,path,pSObj)=>{sortColMaps[sObj.k]={key:sObj.k,sNum:colNum++,pKey:pSObj?pSObj.k:null};},{children:'c'});}const colKeyMaps={};const allCols=[];const aggGroupConfs=[];external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(collectColumn,(column,index,items,path,parentColumn)=>{const colKey=column.getKey();// 支持一级
6210
6214
  if(!parentColumn){if(isCustomFixed&&fixedData&&fixedData[colKey]!==undefined){column.fixed=fixedData[colKey];}}if(isCustomResizable&&resizableData&&external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(resizableData[colKey])){column.resizeWidth=resizableData[colKey];}if(isCustomVisible&&visibleData&&external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isBoolean(visibleData[colKey])){column.visible=visibleData[colKey];}if(isCustomAggFunc&&aggFuncData&&(aggregateConfig||rowGroupConfig)&&aggFuncData[colKey]){column.aggFunc=aggFuncData[colKey];}if(isCustomAggGroup&&aggGroupData&&aggGroupData[colKey]){aggGroupConfs.push({field:column.field});}colKeyMaps[colKey]=column;allCols.push(column);});if((aggregateConfig||rowGroupConfig)&&aggGroupConfs.length){const groupRest=handleGroupData($xeTable,internalData.tableFullData,aggGroupConfs);internalData.tableFullTreeData=[];internalData.tableFullGroupData=groupRest.treeData;reactData.isRowGroupStatus=true;reactData.rowGroupList=aggGroupConfs;$xeTable.cacheRowMap(false);}// 如果自定义了顺序
6211
- if(isCustomSort&&sortData){allCols.forEach(column=>{const colKey=column.getKey();const scItem=sortColMaps[colKey];if(scItem){const parentColumn=scItem.pKey?colKeyMaps[scItem.pKey]:null;column.parentId=parentColumn?parentColumn.id:null;column.renderSortNumber=scItem.sNum;}});const newCollectCols=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toArrayTree(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().orderBy(allCols,'renderSortNumber'),{key:'id',parentKey:'parentId',children:'children'});internalData.collectColumn=newCollectCols;internalData.tableFullColumn=getColumnList(newCollectCols);}reactData.isCustomStatus=true;}else{reactData.isCustomStatus=false;}}/**
6215
+ if(isCustomSort&&sortData){allCols.forEach(column=>{const colKey=column.getKey();const scItem=sortColMaps[colKey];if(scItem){const parentColumn=scItem.pKey?colKeyMaps[scItem.pKey]:null;column.parentId=parentColumn?parentColumn.id:null;column.renderSortNumber=scItem.sNum;}});const newCollectCols=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().toArrayTree(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().orderBy(allCols,'renderSortNumber'),{key:'id',parentKey:'parentId',children:'children'});internalData.collectColumn=newCollectCols;internalData.tableFullColumn=getColumnList(newCollectCols);reactData.updateColFlag++;}reactData.isCustomStatus=true;}else{reactData.isCustomStatus=false;}}/**
6212
6216
  * 还原自定义列操作状态
6213
6217
  */function restoreCustomStorage($xeTable){const props=$xeTable;const{customConfig}=props;const tableId=$xeTable.computeTableId;const customOpts=$xeTable.computeCustomOpts;const{storage,restoreStore,storeOptions}=customOpts;const isAllCustom=storage===true;const storageOpts=Object.assign({},isAllCustom?{}:storage||{},storeOptions);const isCustomResizable=hangleStorageDefaultValue(storageOpts.resizable,isAllCustom);const isCustomVisible=hangleStorageDefaultValue(storageOpts.visible,isAllCustom);const isCustomFixed=hangleStorageDefaultValue(storageOpts.fixed,isAllCustom);const isCustomSort=hangleStorageDefaultValue(storageOpts.sort,isAllCustom);const isCustomAggFunc=hangleStorageDefaultValue(storageOpts.aggFunc,isAllCustom);if(storage&&(customConfig?isEnableConf(customOpts):customOpts.enabled)&&(isCustomResizable||isCustomVisible||isCustomFixed||isCustomSort||isCustomAggFunc)){if(!tableId){errLog('vxe.error.reqProp',['id']);return;}const storeData=getCustomStorageMap(tableId);if(restoreStore){return Promise.resolve(restoreStore({$table:$xeTable,id:tableId,type:'restore',storeData})).then(storeData=>{if(!storeData){return;}return handleCustomRestore($xeTable,storeData);}).catch(e=>e);}else{return handleCustomRestore($xeTable,storeData);}}}/**
6214
6218
  * 更新数据列的 Map
@@ -6404,7 +6408,7 @@ if(oldScrollYLoad===sYLoad){restoreScrollLocation($xeTable,targetScrollLeft,targ
6404
6408
  */function handleLoadDefaults($xeTable){handleDefaultSelectionChecked($xeTable);handleDefaultRadioChecked($xeTable);handleDefaultRowExpand($xeTable);handleDefaultTreeExpand($xeTable);handleDefaultRowGroupExpand($xeTable);handleDefaultMergeCells($xeTable);handleDefaultMergeHeaderItems($xeTable);handleDefaultMergeFooterItems($xeTable);$xeTable.$nextTick(()=>{const internalData=$xeTable;$xeTable.dispatchEvent('init-rendered',{visibleColumn:internalData.visibleColumn,visibleData:internalData.afterFullData},null);setTimeout(()=>$xeTable.recalculate());});}/**
6405
6409
  * 处理初始化的默认行为
6406
6410
  * 只会执行一次
6407
- */function handleInitDefaults($xeTable){handleDefaultSort($xeTable);}function handleTableColumn($xeTable){const reactData=$xeTable;const internalData=$xeTable;const{scrollXLoad}=reactData;const{visibleColumn,scrollXStore,fullColumnIdData}=internalData;const tableColumn=scrollXLoad?visibleColumn.slice(scrollXStore.startIndex,scrollXStore.endIndex):visibleColumn.slice(0);tableColumn.forEach((column,$index)=>{const colid=column.id;const colRest=fullColumnIdData[colid];if(colRest){colRest.$index=$index;}});reactData.tableColumn=tableColumn;}function handleUpdateColumn($xeTable){const internalData=$xeTable;const columnList=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().orderBy(internalData.collectColumn,'renderSortNumber');internalData.collectColumn=columnList;const tableFullColumn=getColumnList(columnList);internalData.tableFullColumn=tableFullColumn;cacheColumnMap($xeTable);}function loadScrollXData($xeTable){const reactData=$xeTable;const internalData=$xeTable;const{isScrollXBig}=reactData;const{mergeBodyList,mergeFooterList,scrollXStore}=internalData;const{preloadSize,startIndex,endIndex,offsetSize}=scrollXStore;const{toVisibleIndex,visibleSize}=handleVirtualXVisible($xeTable);const offsetItem={startIndex:Math.max(0,isScrollXBig?toVisibleIndex-1:toVisibleIndex-1-offsetSize-preloadSize),endIndex:isScrollXBig?toVisibleIndex+visibleSize:toVisibleIndex+visibleSize+offsetSize+preloadSize};scrollXStore.visibleStartIndex=toVisibleIndex-1;scrollXStore.visibleEndIndex=toVisibleIndex+visibleSize+1;calculateMergerOffsetIndex(mergeBodyList.concat(mergeFooterList),offsetItem,'col');const{startIndex:offsetStartIndex,endIndex:offsetEndIndex}=offsetItem;if(toVisibleIndex<=startIndex||toVisibleIndex>=endIndex-visibleSize-1){if(startIndex!==offsetStartIndex||endIndex!==offsetEndIndex){scrollXStore.startIndex=offsetStartIndex;scrollXStore.endIndex=offsetEndIndex;$xeTable.updateScrollXData();}}$xeTable.closeTooltip();}function parseColumns($xeTable,isReset){const props=$xeTable;const reactData=$xeTable;const internalData=$xeTable;// const { showOverflow } = props
6411
+ */function handleInitDefaults($xeTable){handleDefaultSort($xeTable);}function handleTableColumn($xeTable){const reactData=$xeTable;const internalData=$xeTable;const{scrollXLoad}=reactData;const{visibleColumn,scrollXStore,fullColumnIdData}=internalData;const tableColumn=scrollXLoad?visibleColumn.slice(scrollXStore.startIndex,scrollXStore.endIndex):visibleColumn.slice(0);tableColumn.forEach((column,$index)=>{const colid=column.id;const colRest=fullColumnIdData[colid];if(colRest){colRest.$index=$index;}});reactData.tableColumn=tableColumn;}function handleUpdateColumn($xeTable){const reactData=$xeTable;const internalData=$xeTable;const columnList=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().orderBy(internalData.collectColumn,'renderSortNumber');internalData.collectColumn=columnList;const tFullColumn=getColumnList(columnList);internalData.tableFullColumn=tFullColumn;reactData.updateColFlag++;cacheColumnMap($xeTable);}function loadScrollXData($xeTable){const reactData=$xeTable;const internalData=$xeTable;const{isScrollXBig}=reactData;const{mergeBodyList,mergeFooterList,scrollXStore}=internalData;const{preloadSize,startIndex,endIndex,offsetSize}=scrollXStore;const{toVisibleIndex,visibleSize}=handleVirtualXVisible($xeTable);const offsetItem={startIndex:Math.max(0,isScrollXBig?toVisibleIndex-1:toVisibleIndex-1-offsetSize-preloadSize),endIndex:isScrollXBig?toVisibleIndex+visibleSize:toVisibleIndex+visibleSize+offsetSize+preloadSize};scrollXStore.visibleStartIndex=toVisibleIndex-1;scrollXStore.visibleEndIndex=toVisibleIndex+visibleSize+1;calculateMergerOffsetIndex(mergeBodyList.concat(mergeFooterList),offsetItem,'col');const{startIndex:offsetStartIndex,endIndex:offsetEndIndex}=offsetItem;if(toVisibleIndex<=startIndex||toVisibleIndex>=endIndex-visibleSize-1){if(startIndex!==offsetStartIndex||endIndex!==offsetEndIndex){scrollXStore.startIndex=offsetStartIndex;scrollXStore.endIndex=offsetEndIndex;$xeTable.updateScrollXData();}}$xeTable.closeTooltip();}function parseColumns($xeTable,isReset){const props=$xeTable;const reactData=$xeTable;const internalData=$xeTable;// const { showOverflow } = props
6408
6412
  // const rowOpts = $xeTable.computeRowOpts
6409
6413
  const leftList=[];const centerList=[];const rightList=[];const{isGroup,columnStore}=reactData;const{collectColumn,tableFullColumn,scrollXStore,fullColumnIdData}=internalData;// 如果是分组表头,如果子列全部被隐藏,则根列也隐藏
6410
6414
  if(isGroup){const leftGroupList=[];const centerGroupList=[];const rightGroupList=[];external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(collectColumn,(column,index,items,path,parentColumn)=>{const isColGroup=hasChildrenList(column);// 如果是分组,必须按组设置固定列,不允许给子列设置固定
@@ -6425,7 +6429,7 @@ tableFullColumn.forEach(column=>{if(column.visible){if(column.fixed==='left'){le
6425
6429
  // }
6426
6430
  if(props.spanMethod){warnLog('vxe.error.scrollErrProp',['span-method']);}if(props.footerSpanMethod){warnLog('vxe.error.scrollErrProp',['footer-span-method']);}if(isReset){const{visibleSize}=handleVirtualXVisible($xeTable);scrollXStore.startIndex=0;scrollXStore.endIndex=visibleSize;scrollXStore.visibleSize=visibleSize;scrollXStore.visibleStartIndex=0;scrollXStore.visibleEndIndex=visibleSize;}}// 如果列被显示/隐藏,则清除合并状态
6427
6431
  // 如果列被设置为固定,则清除合并状态
6428
- if(visibleColumn.length!==internalData.visibleColumn.length||!internalData.visibleColumn.every((column,index)=>column===visibleColumn[index])){$xeTable.clearMergeCells();$xeTable.clearMergeFooterItems();}visibleColumn.forEach((column,index)=>{const colid=column.id;const colRest=fullColumnIdData[colid];if(colRest){colRest._index=index;}});handleTableColumn($xeTable);handleUpdateAggValues($xeTable);if(isReset){return $xeTable.updateFooter().then(()=>{return $xeTable.recalculate();}).then(()=>{$xeTable.updateCellAreas();return $xeTable.recalculate();});}return $xeTable.updateFooter();}function initColumnHierarchy($xeTable){const internalData=$xeTable;const{collectColumn}=internalData;const fullColIdData={};const fullColFieldData={};let sortIndex=1;external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(collectColumn,(column,index,items,path,parentColumn)=>{const{id:colid,field}=column;const parentId=parentColumn?parentColumn.id:null;const rest={$index:-1,_index:-1,column,colid,index,items,parent:parentColumn||null,width:0,oLeft:0};column.parentId=parentId;column.defaultParentId=parentId;column.sortNumber=sortIndex;column.renderSortNumber=sortIndex;sortIndex++;if(field){if(fullColFieldData[field]){errLog('vxe.error.colRepet',['field',field]);}fullColFieldData[field]=rest;}fullColIdData[colid]=rest;});internalData.fullColumnIdData=fullColIdData;internalData.fullColumnFieldData=fullColFieldData;}function handleInitColumn($xeTable,collectColumn){const props=$xeTable;const $xeToolbar=$xeTable.$refs.$xeToolbar;const reactData=$xeTable;const internalData=$xeTable;const expandOpts=$xeTable.computeExpandOpts;internalData.collectColumn=collectColumn;const tableFullColumn=getColumnList(collectColumn);internalData.tableFullColumn=tableFullColumn;reactData.isColLoading=true;initColumnHierarchy($xeTable);return Promise.resolve(restoreCustomStorage($xeTable)).then(()=>{const{scrollXLoad,scrollYLoad,expandColumn}=reactData;cacheColumnMap($xeTable);parseColumns($xeTable,true).then(()=>{if(reactData.scrollXLoad){loadScrollXData($xeTable);}});$xeTable.clearMergeCells();$xeTable.clearMergeFooterItems();$xeTable.handleTableData(true);$xeTable.handleAggregateSummaryData();if((scrollXLoad||scrollYLoad)&&expandColumn&&expandOpts.mode!=='fixed'){warnLog('vxe.error.scrollErrProp',['column.type=expand']);}return $xeTable.$nextTick().then(()=>{if($xeToolbar){$xeToolbar.syncUpdate({collectColumn:internalData.collectColumn,$table:$xeTable});}if($xeTable.handleUpdateCustomColumn){$xeTable.handleUpdateCustomColumn();}const columnOpts=$xeTable.computeColumnOpts;if(props.showCustomHeader&&reactData.isGroup&&(columnOpts.resizable||props.resizable)){warnLog('vxe.error.notConflictProp',['show-custom-header & colgroup','column-config.resizable=false']);}reactData.isColLoading=false;return handleLazyRecalculate($xeTable,false,true,true);});});}/**
6432
+ if(visibleColumn.length!==internalData.visibleColumn.length||!internalData.visibleColumn.every((column,index)=>column===visibleColumn[index])){$xeTable.clearMergeCells();$xeTable.clearMergeFooterItems();}visibleColumn.forEach((column,index)=>{const colid=column.id;const colRest=fullColumnIdData[colid];if(colRest){colRest._index=index;}});handleTableColumn($xeTable);handleUpdateAggValues($xeTable);if(isReset){return $xeTable.updateFooter().then(()=>{return $xeTable.recalculate();}).then(()=>{$xeTable.updateCellAreas();return $xeTable.recalculate();});}return $xeTable.updateFooter();}function initColumnHierarchy($xeTable){const internalData=$xeTable;const{collectColumn}=internalData;const fullColIdData={};const fullColFieldData={};let sortIndex=1;external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().eachTree(collectColumn,(column,index,items,path,parentColumn)=>{const{id:colid,field}=column;const parentId=parentColumn?parentColumn.id:null;const rest={$index:-1,_index:-1,column,colid,index,items,parent:parentColumn||null,width:0,oLeft:0};column.parentId=parentId;column.defaultParentId=parentId;column.sortNumber=sortIndex;column.renderSortNumber=sortIndex;sortIndex++;if(field){if(fullColFieldData[field]){errLog('vxe.error.colRepet',['field',field]);}fullColFieldData[field]=rest;}fullColIdData[colid]=rest;});internalData.fullColumnIdData=fullColIdData;internalData.fullColumnFieldData=fullColFieldData;}function handleInitColumn($xeTable,collectColumn){const props=$xeTable;const $xeToolbar=$xeTable.$refs.$xeToolbar;const reactData=$xeTable;const internalData=$xeTable;const expandOpts=$xeTable.computeExpandOpts;internalData.collectColumn=collectColumn;const tFullColumn=getColumnList(collectColumn);internalData.tableFullColumn=tFullColumn;reactData.updateColFlag++;reactData.isColLoading=true;initColumnHierarchy($xeTable);return Promise.resolve(restoreCustomStorage($xeTable)).then(()=>{const{scrollXLoad,scrollYLoad,expandColumn}=reactData;cacheColumnMap($xeTable);parseColumns($xeTable,true).then(()=>{if(reactData.scrollXLoad){loadScrollXData($xeTable);}});$xeTable.clearMergeCells();$xeTable.clearMergeFooterItems();$xeTable.handleTableData(true);$xeTable.handleAggregateSummaryData();if((scrollXLoad||scrollYLoad)&&expandColumn&&expandOpts.mode!=='fixed'){warnLog('vxe.error.scrollErrProp',['column.type=expand']);}return $xeTable.$nextTick().then(()=>{if($xeToolbar){$xeToolbar.syncUpdate({collectColumn:internalData.collectColumn,$table:$xeTable});}if($xeTable.handleUpdateCustomColumn){$xeTable.handleUpdateCustomColumn();}const columnOpts=$xeTable.computeColumnOpts;if(props.showCustomHeader&&reactData.isGroup&&(columnOpts.resizable||props.resizable)){warnLog('vxe.error.notConflictProp',['show-custom-header & colgroup','column-config.resizable=false']);}reactData.isColLoading=false;return handleLazyRecalculate($xeTable,false,true,true);});});}/**
6429
6433
  * 纵向 Y 可视渲染处理
6430
6434
  */function loadScrollYData($xeTable){const reactData=$xeTable;const internalData=$xeTable;const{isAllOverflow,isScrollYBig}=reactData;const{mergeBodyList,scrollYStore}=internalData;const{preloadSize,startIndex,endIndex,offsetSize}=scrollYStore;const autoOffsetYSize=isAllOverflow?offsetSize:offsetSize+1;const{toVisibleIndex,visibleSize}=handleVirtualYVisible($xeTable);const offsetItem={startIndex:Math.max(0,isScrollYBig?toVisibleIndex-1:toVisibleIndex-1-offsetSize-preloadSize),endIndex:isScrollYBig?toVisibleIndex+visibleSize:toVisibleIndex+visibleSize+autoOffsetYSize+preloadSize};scrollYStore.visibleStartIndex=toVisibleIndex-1;scrollYStore.visibleEndIndex=toVisibleIndex+visibleSize+1;calculateMergerOffsetIndex(mergeBodyList,offsetItem,'row');const{startIndex:offsetStartIndex,endIndex:offsetEndIndex}=offsetItem;if(toVisibleIndex<=startIndex||toVisibleIndex>=endIndex-visibleSize-1){if(startIndex!==offsetStartIndex||endIndex!==offsetEndIndex){scrollYStore.startIndex=offsetStartIndex;scrollYStore.endIndex=offsetEndIndex;$xeTable.updateScrollYData();}}}const createGetRowCacheProp=prop=>{return function(row){const $xeTable=this;const internalData=$xeTable;const{fullAllDataRowIdData}=internalData;if(row){const rowid=getRowid($xeTable,row);const rowRest=fullAllDataRowIdData[rowid];if(rowRest){return rowRest[prop];}}return-1;};};const createGetColumnCacheProp=prop=>{return function(column){const $xeTable=this;const internalData=$xeTable;const{fullColumnIdData}=internalData;if(column){const colRest=fullColumnIdData[column.id];if(colRest){return colRest[prop];}}return-1;};};function lazyScrollXData($xeTable){const internalData=$xeTable;const{lxTimeout,lxRunTime,scrollXStore}=internalData;const{visibleSize}=scrollXStore;const fpsTime=visibleSize>26?26:visibleSize>16?14:6;if(lxTimeout){clearTimeout(lxTimeout);}if(!lxRunTime||lxRunTime+fpsTime<Date.now()){internalData.lxRunTime=Date.now();loadScrollXData($xeTable);}internalData.lxTimeout=setTimeout(()=>{internalData.lxTimeout=undefined;internalData.lxRunTime=undefined;loadScrollXData($xeTable);},fpsTime);}function lazyScrollYData($xeTable){const internalData=$xeTable;const{lyTimeout,lyRunTime,scrollYStore}=internalData;const{visibleSize}=scrollYStore;const fpsTime=visibleSize>30?32:visibleSize>20?18:8;if(lyTimeout){clearTimeout(lyTimeout);}if(!lyRunTime||lyRunTime+fpsTime<Date.now()){internalData.lyRunTime=Date.now();loadScrollYData($xeTable);}internalData.lyTimeout=setTimeout(()=>{internalData.lyTimeout=undefined;internalData.lyRunTime=undefined;loadScrollYData($xeTable);},fpsTime);}function handleSyncScroll($xeTable,isRollX,isRollY){const reactData=$xeTable;const internalData=$xeTable;const{scrollXLoad,scrollYLoad,isAllOverflow}=reactData;internalData.lcsRunTime=Date.now();internalData.lcsTimeout=undefined;internalData.intoRunScroll=false;internalData.inVirtualScroll=false;internalData.inWheelScroll=false;internalData.inHeaderScroll=false;internalData.inBodyScroll=false;internalData.inFooterScroll=false;reactData.lazScrollLoading=false;internalData.scrollRenderType='';let xRest=null;let yRest=null;if(!isAllOverflow){calcCellHeight($xeTable);updateRowOffsetTop($xeTable);}if(isRollX&&scrollXLoad){xRest=$xeTable.updateScrollXData();}if(isRollY&&scrollYLoad){yRest=$xeTable.updateScrollYData().then(()=>{if(!isAllOverflow){calcCellHeight($xeTable);updateRowOffsetTop($xeTable);}return $xeTable.updateScrollYSpace();});}updateRowExpandStyle($xeTable);return Promise.all([xRest,yRest,$xeTable.updateCellAreas()]);}function checkLastSyncScroll($xeTable,isRollX,isRollY){const reactData=$xeTable;const internalData=$xeTable;const{lcsTimeout}=internalData;reactData.lazScrollLoading=true;if(lcsTimeout){clearTimeout(lcsTimeout);}internalData.lcsTimeout=setTimeout(()=>{handleSyncScroll($xeTable,isRollX,isRollY).then(()=>{if(reactData.scrollXLoad||reactData.scrollYLoad){$xeTable.$nextTick(()=>{updateRowExpandStyle($xeTable);if(!internalData.lcsTimeout){handleSyncScroll($xeTable,isRollX,isRollY);}});}});},200);}const getWheelSpeed=lastScrollTime=>{let multiple=1;const currTime=Date.now();if(lastScrollTime+25>currTime){multiple=1.18;}else if(lastScrollTime+30>currTime){multiple=1.15;}else if(lastScrollTime+40>currTime){multiple=1.12;}else if(lastScrollTime+55>currTime){multiple=1.09;}else if(lastScrollTime+75>currTime){multiple=1.06;}else if(lastScrollTime+100>currTime){multiple=1.03;}return multiple;};const wheelScrollLeftTo=(scrollLeft,cb)=>{requestAnimationFrame(()=>{cb(scrollLeft);});};const syncGanttScrollTop=($xeTable,scrollTop)=>{const internalData=$xeTable;const $xeGanttView=internalData.xeGanttView;if($xeGanttView){const ganttInternalData=$xeGanttView.internalData;const{elemStore:ganttElemStore}=ganttInternalData;const ganttBodyScrollElem=getRefElem(ganttElemStore['main-body-scroll']);if(ganttBodyScrollElem){ganttBodyScrollElem.scrollTop=scrollTop;}}};function updateHeight($xeTable){const reactData=$xeTable;const internalData=$xeTable;internalData.customHeight=calcTableHeight($xeTable,'height');internalData.customMinHeight=calcTableHeight($xeTable,'minHeight');internalData.customMaxHeight=calcTableHeight($xeTable,'maxHeight');// 如果启用虚拟滚动,纠正高度
6431
6435
  if(reactData.scrollYLoad&&!(internalData.customHeight||internalData.customMinHeight||internalData.customMaxHeight)){internalData.customHeight=300;}}/**
@@ -6562,8 +6566,8 @@ if(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_defau
6562
6566
  * 删除所有新增的临时数据
6563
6567
  */removeInsertRow(){const $xeTable=this;const internalData=$xeTable;const{insertRowMaps}=internalData;return $xeTable.remove(external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().values(insertRowMaps));},/**
6564
6568
  * 检查行或列数据是否发生改变
6565
- */isUpdateByRow(rowOrId,field){const $xeTable=this;const props=$xeTable;const internalData=$xeTable;const{keepSource}=props;const{tableFullColumn,fullDataRowIdData,sourceDataRowIdData}=internalData;if(keepSource){const rowid=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isString(rowOrId)||external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(rowOrId)?rowOrId:getRowid($xeTable,rowOrId);const rowRest=fullDataRowIdData[rowid];// 新增的数据不需要检测
6566
- if(!rowRest){return false;}const row=rowRest.row;const oRow=sourceDataRowIdData[rowid];if(oRow){if(arguments.length>1){return!eqCellValue(oRow,row,field);}for(let index=0,len=tableFullColumn.length;index<len;index++){const property=tableFullColumn[index].field;if(property&&!eqCellValue(oRow,row,property)){return true;}}}}return false;},/**
6569
+ */isUpdateByRow(rowOrId,field){const $xeTable=this;const props=$xeTable;const internalData=$xeTable;const{keepSource,editConfig}=props;const{fullDataRowIdData,sourceDataRowIdData}=internalData;const keepFields=$xeTable.computeKeepFields;if(keepSource&&editConfig){const rowid=external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isString(rowOrId)||external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isNumber(rowOrId)?rowOrId:getRowid($xeTable,rowOrId);const rowRest=fullDataRowIdData[rowid];// 新增的数据不需要检测
6570
+ if(!rowRest){return false;}const row=rowRest.row;const oRow=sourceDataRowIdData[rowid];if(oRow){if(arguments.length>1){return!eqCellValue(oRow,row,field);}for(let i=0;i<keepFields.length;i++){if(!eqCellValue(oRow,row,keepFields[i])){return true;}}}}return false;},/**
6567
6571
  * 获取表格的可视列,也可以指定索引获取列
6568
6572
  * @param {Number} columnIndex 索引
6569
6573
  */getColumns(columnIndex){const $xeTable=this;const internalData=$xeTable;const{visibleColumn}=internalData;return external_root_XEUtils_commonjs_xe_utils_commonjs2_xe_utils_amd_xe_utils_default().isUndefined(columnIndex)?visibleColumn.slice(0):visibleColumn[columnIndex];},/**
@@ -7198,7 +7202,8 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
7198
7202
  afterFullData,
7199
7203
  mergeBodyList,
7200
7204
  scrollXStore,
7201
- scrollYStore
7205
+ scrollYStore,
7206
+ keepUpdateFieldMaps
7202
7207
  } = tableInternalData;
7203
7208
  const cellOpts = $xeTable.computeCellOpts;
7204
7209
  const validOpts = $xeTable.computeValidOpts;
@@ -7228,6 +7233,7 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
7228
7233
  selectCellToRow
7229
7234
  } = areaOpts;
7230
7235
  const {
7236
+ field,
7231
7237
  type,
7232
7238
  cellRender,
7233
7239
  editRender,
@@ -7408,8 +7414,8 @@ function renderTdColumn(h, $xeTable, seq, rowid, fixedType, isOptimizeMode, rowL
7408
7414
  }
7409
7415
  }
7410
7416
  // 如果编辑列开启显示状态
7411
- if (!fixedHiddenColumn && editConfig && (editRender || cellRender) && (editOpts.showStatus || editOpts.showUpdateStatus)) {
7412
- isDirty = $xeTable.isUpdateByRow(row, column.field);
7417
+ if (!fixedHiddenColumn && editConfig && (editOpts.showStatus || editOpts.showUpdateStatus) && keepUpdateFieldMaps[field]) {
7418
+ isDirty = $xeTable.isUpdateByRow(row, field);
7413
7419
  }
7414
7420
  const isVNAutoHeight = !hasEllipsis && (scrollYLoad || scrollXLoad);
7415
7421
  let cellHeight = getCellRestHeight(rowRest, cellOpts, rowOpts, defaultRowHeight);
@@ -18292,6 +18298,7 @@ function renderBody(h, $xeTable) {
18292
18298
  reScrollFlag: 0,
18293
18299
  reLayoutFlag: 0,
18294
18300
  footFlag: 0,
18301
+ kfFlag: 0,
18295
18302
  mergeFooteCellFlag: 0,
18296
18303
  crossTableDragRowInfo: crossTableDragRowGlobal
18297
18304
  };
@@ -18627,7 +18634,14 @@ function renderBody(h, $xeTable) {
18627
18634
  return this.computeEditOpts;
18628
18635
  },
18629
18636
  computeEditOpts() {
18630
- return Object.assign({}, table_getConfig().table.editConfig, this.editConfig);
18637
+ const $xeTable = this;
18638
+ const props = $xeTable;
18639
+ return Object.assign({}, table_getConfig().table.editConfig, props.editConfig);
18640
+ },
18641
+ computeEditDirtyOpts() {
18642
+ const $xeTable = this;
18643
+ const props = $xeTable;
18644
+ return Object.assign({}, table_getConfig().table.editDirtyConfig, props.editDirtyConfig);
18631
18645
  },
18632
18646
  sortOpts() {
18633
18647
  return this.computeSortOpts;
@@ -19043,6 +19057,47 @@ function renderBody(h, $xeTable) {
19043
19057
  }
19044
19058
  return false;
19045
19059
  },
19060
+ computeKeepFields() {
19061
+ const $xeTable = this;
19062
+ const reactData = $xeTable;
19063
+ const internalData = $xeTable;
19064
+ const {
19065
+ tableFullColumn
19066
+ } = internalData;
19067
+ const {
19068
+ updateColFlag
19069
+ } = reactData;
19070
+ const editDirtyOpts = $xeTable.computeEditDirtyOpts;
19071
+ const {
19072
+ includeFields,
19073
+ excludeFields
19074
+ } = editDirtyOpts;
19075
+ const kpFields = [];
19076
+ if (updateColFlag) {
19077
+ if (includeFields && includeFields.length) {
19078
+ return includeFields;
19079
+ }
19080
+ const exfMaps = {};
19081
+ if (excludeFields && excludeFields.length) {
19082
+ excludeFields.forEach(field => {
19083
+ exfMaps[field] = 1;
19084
+ });
19085
+ }
19086
+ for (let i = 0; i < tableFullColumn.length; i++) {
19087
+ const column = tableFullColumn[i];
19088
+ const {
19089
+ field,
19090
+ type,
19091
+ editRender,
19092
+ cellRender
19093
+ } = column;
19094
+ if (field && !type && (editRender || cellRender) && !exfMaps[field]) {
19095
+ kpFields.push(field);
19096
+ }
19097
+ }
19098
+ }
19099
+ return kpFields;
19100
+ },
19046
19101
  computeTableBorder() {
19047
19102
  const $xeTable = this;
19048
19103
  const props = $xeTable;
@@ -19260,6 +19315,22 @@ function renderBody(h, $xeTable) {
19260
19315
  internalData.footerFullDataRowData = {};
19261
19316
  $xeTable.updateFooter();
19262
19317
  },
19318
+ updateColFlag() {
19319
+ this.kfFlag++;
19320
+ },
19321
+ computeKeepFields() {
19322
+ this.kfFlag++;
19323
+ },
19324
+ kfFlag() {
19325
+ const $xeTable = this;
19326
+ const internalData = $xeTable;
19327
+ const keepFields = $xeTable.computeKeepFields;
19328
+ const kpfMaps = {};
19329
+ keepFields.forEach(field => {
19330
+ kpfMaps[field] = 1;
19331
+ });
19332
+ internalData.keepUpdateFieldMaps = kpfMaps;
19333
+ },
19263
19334
  syncResize(value) {
19264
19335
  const $xeTable = this;
19265
19336
  if (value) {