fix: error rowIndex when there were expanded rows.

optimize: load
This commit is contained in:
Chen Lily 2024-02-20 16:53:38 +08:00
parent d17abdf4b2
commit 5797c2a9cf

@ -379,6 +379,7 @@ class GridColumnDefinition {
/**
* 大于 0 则设置为该宽度否则根据列内容自动调整列宽
* @type {number}
* @default 50
* @ignore
*/
width;
@ -750,6 +751,7 @@ const GridColumnDirection = {
* @property {string} [langs.requirePrompt=All sort criteria must have...]
* @property {string} [langs.duplicatePrompt={column} is being sorted more than once...]
* @property {number} [virtualCount=100] - 行数大于等于该值则启用虚模式
* @property {boolean} [autoResize=true] - 未设置宽度的列自动调整列宽
* @property {number} [rowHeight=36] - 表格行高
* @property {number} [lineHeight=24] - 文本行高多行文本列计算高度时使用
* @property {string} [filterIcon=filter] - 列头过滤图标旧版本样式横着三个点需修改为 `"ellipsis-h"`
@ -1151,6 +1153,13 @@ export class Grid {
* @ignore
*/
virtualCount = 100;
/**
* 未设置宽度的列自动调整列宽
* @type {boolean}
* @default true
* @ignore
*/
autoResize = true;
/**
* 表格行高
* @type {number}
@ -1431,9 +1440,6 @@ export class Grid {
*/
get source() { return this._var.currentSource?.map(s => s.values) }
set source(list) {
if (this._var.el == null) {
throw new Error('grid has not been initialized.')
}
if (!Array.isArray(list)) {
throw new Error('source is not an Array.')
}
@ -1664,7 +1670,7 @@ export class Grid {
this._var.scrollLeft = 0;
this._var.rowCount = -1;
this.resize(true, null, () => {
this.resize(true, false, () => {
if (this.sortIndex >= 0) {
this.sortColumn(true);
} else if (this.sortArray?.length > 0) {
@ -1865,7 +1871,7 @@ export class Grid {
if (parent == null) {
return;
}
const rowIndex = parent.classList.contains('ui-grid-total-row') ? -1 : indexOfParent(parent);
const rowIndex = parent.classList.contains('ui-grid-total-row') ? -1 : this._tableRows.indexOf(parent);
let colIndex = indexOfParent(target) - (this.expandable ? 1 : 0);
if (colIndex >= this.columns.length) {
colIndex = -1;
@ -1921,7 +1927,7 @@ export class Grid {
} else if (this.sortArray?.length > 0) {
this.sort(true);
} else {
this.reload();
this.resize(true, true);
}
}
}
@ -1955,7 +1961,7 @@ export class Grid {
return;
}
const body = this._var.refs.body;
const top = this.headerVisible === false ? 0 : this._var.refs.header.offsetHeight;
const top = this.headerVisible === false ? 0 : this.rowHeight; // this._var.refs.header.offsetHeight;
let height = this.height;
if (height === 0) {
@ -2061,10 +2067,10 @@ export class Grid {
}
});
} else {
const children = this._var.refs.table.children;
this._var.headerHeight = children[0].offsetHeight;
if (children.length > 2) {
this._var.footerHeight = children[2].offsetHeight;
// const children = this._var.refs.table.children;
this._var.headerHeight = this.rowHeight; // children[0].offsetHeight;
if (this.total != null) {
this._var.footerHeight = this._var.refs.table.children[2].offsetHeight;
}
}
}
@ -2469,8 +2475,11 @@ export class Grid {
type ??= GridColumn;
this._var.colTypes[col.key] = type;
}
if (col.width > 0 || col.shrink || typeof type.createCaption === 'function') {
if (col.width > 0 || col.shrink || !this.autoResize || typeof type.createCaption === 'function') {
// col.autoResize = false;
if (isNaN(col.width) || col.width <= 0) {
col.width = 50;
}
} else {
this._set(col.key, 'autoResize', true);
this._var.needResize = true;
@ -3060,7 +3069,7 @@ export class Grid {
}
}
// footer
const children = this._var.refs.table.children;
// const children = this._var.refs.table.children;
const hasTotal = this.total != null;
if (hasTotal) {
const footerCells = this._footerCells;
@ -3080,9 +3089,9 @@ export class Grid {
}
}
}
this._var.headerHeight = children[0].offsetHeight;
this._var.headerHeight = this.rowHeight; // children[0].offsetHeight;
if (hasTotal) {
this._var.footerHeight = children[2].offsetHeight;
this._var.footerHeight = this._var.refs.table.children[2].offsetHeight;
const footerOffset = this._var.refs.table.offsetHeight - this._var.el.clientHeight;
if (this._var.footerOffset !== footerOffset) {
this._var.footerOffset = footerOffset;