mirror of https://github.com/ElemeFE/element
Table: height accepts more units (#16013)
* Table: height accepts more units * fix and update docs * updatepull/16201/head
parent
2cb627062c
commit
c570a59e23
|
@ -1810,7 +1810,7 @@ You can customize row index in `type=index` columns.
|
||||||
|----------------|----------------------|-----------|-----------------------|----------|
|
|----------------|----------------------|-----------|-----------------------|----------|
|
||||||
| data | Table data | array | — | — |
|
| data | Table data | array | — | — |
|
||||||
| height | Table's height. By default it has an `auto` height. If its value is a number, the height is measured in pixels; if its value is a string, the value will be assigned to element's style.height, the height is affected by external styles | string/number | — | — |
|
| height | Table's height. By default it has an `auto` height. If its value is a number, the height is measured in pixels; if its value is a string, the value will be assigned to element's style.height, the height is affected by external styles | string/number | — | — |
|
||||||
| max-height | Table's max-height. The height of the table starts from `auto` until it reaches the maxHeight limit. The `maxHeight` is measured in pixels, same as `height` | string/number | — | — |
|
| max-height | Table's max-height. The legal value is a number or the height in px. | string/number | — | — |
|
||||||
| stripe | whether Table is striped | boolean | — | false |
|
| stripe | whether Table is striped | boolean | — | false |
|
||||||
| border | whether Table has vertical border | boolean | — | false |
|
| border | whether Table has vertical border | boolean | — | false |
|
||||||
| size | size of Table | string | medium / small / mini | — |
|
| size | size of Table | string | medium / small / mini | — |
|
||||||
|
|
|
@ -1815,7 +1815,7 @@ Puede personalizar el índice de la fila con la propiedad `type=index` de las co
|
||||||
| ---------------------- | ---------------------------------------- | ---------------------------------------- | ------------------------------ | ---------------------------------------- |
|
| ---------------------- | ---------------------------------------- | ---------------------------------------- | ------------------------------ | ---------------------------------------- |
|
||||||
| data | Datos de la tabla | array | — | — |
|
| data | Datos de la tabla | array | — | — |
|
||||||
| height | Altura de la tabla. Por defecto esta tiene un tamaño `auto`. Si este valor es un número, la altura es medido en pixeles; si este valor es una cadena, la altura es afectada por estilos externos. | string/number | — | — |
|
| height | Altura de la tabla. Por defecto esta tiene un tamaño `auto`. Si este valor es un número, la altura es medido en pixeles; si este valor es una cadena, la altura es afectada por estilos externos. | string/number | — | — |
|
||||||
| max-height | Altura máxima de la tabla. La altura de la tabla comienza desde `auto` hasta que alcanza la altura máxima. El `max-height` es medido en pixeles, lo mismo que `height` | string/number | — | — |
|
| max-height | Table's max-height. The legal value is a number or the height in px. | string/number | — | — |
|
||||||
| stripe | especifica si la tabla será en franjas | boolean | — | false |
|
| stripe | especifica si la tabla será en franjas | boolean | — | false |
|
||||||
| border | especifica si la tabla tiene bordes verticales | boolean | — | false |
|
| border | especifica si la tabla tiene bordes verticales | boolean | — | false |
|
||||||
| size | tamaño de la tabla | string | medium / small / mini | — |
|
| size | tamaño de la tabla | string | medium / small / mini | — |
|
||||||
|
|
|
@ -1817,7 +1817,7 @@ Vous pouvez personnaliser les indices des colonnes de type `index`.
|
||||||
|----------------|----------------------|-----------|-----------------------|----------|
|
|----------------|----------------------|-----------|-----------------------|----------|
|
||||||
| data | Les données de la table. | array | — | — |
|
| data | Les données de la table. | array | — | — |
|
||||||
| height | La hauteur de la table. Par défaut la hauteur est `auto`. Si sa valeur est un nombre, la hauteur est en px; si c'est un string, la valeur est assigné au style.height de l'élement. La hauteur est affectée par les styles externes. | string/number | — | — |
|
| height | La hauteur de la table. Par défaut la hauteur est `auto`. Si sa valeur est un nombre, la hauteur est en px; si c'est un string, la valeur est assigné au style.height de l'élement. La hauteur est affectée par les styles externes. | string/number | — | — |
|
||||||
| max-height | La hauteur maximale de la table. La hauteur commence à `auto` jusqu'à atteindre la limite. La `maxHeight` est en px. | string/number | — | — |
|
| max-height | Table's max-height. The legal value is a number or the height in px. | string/number | — | — |
|
||||||
| stripe | Si la table est rayée. | boolean | — | false |
|
| stripe | Si la table est rayée. | boolean | — | false |
|
||||||
| border | Si la table à une bordure verticale. | boolean | — | false |
|
| border | Si la table à une bordure verticale. | boolean | — | false |
|
||||||
| size | Taille de la table. | string | medium / small / mini | — |
|
| size | Taille de la table. | string | medium / small / mini | — |
|
||||||
|
|
|
@ -1853,7 +1853,7 @@
|
||||||
|---------- |-------------- |---------- |-------------------------------- |-------- |
|
|---------- |-------------- |---------- |-------------------------------- |-------- |
|
||||||
| data | 显示的数据 | array | — | — |
|
| data | 显示的数据 | array | — | — |
|
||||||
| height | Table 的高度,默认为自动高度。如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。 | string/number | — | — |
|
| height | Table 的高度,默认为自动高度。如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。 | string/number | — | — |
|
||||||
| max-height | Table 的最大高度 | string/number | — | — |
|
| max-height | Table 的最大高度。合法的值为数字或者单位为 px 的高度。 | string/number | — | — |
|
||||||
| stripe | 是否为斑马纹 table | boolean | — | false |
|
| stripe | 是否为斑马纹 table | boolean | — | false |
|
||||||
| border | 是否带有纵向边框 | boolean | — | false |
|
| border | 是否带有纵向边框 | boolean | — | false |
|
||||||
| size | Table 的尺寸 | string | medium / small / mini | — |
|
| size | Table 的尺寸 | string | medium / small / mini | — |
|
||||||
|
|
|
@ -70,15 +70,12 @@ Watcher.prototype.mutations = {
|
||||||
sort(states, options) {
|
sort(states, options) {
|
||||||
const { prop, order } = options;
|
const { prop, order } = options;
|
||||||
if (prop) {
|
if (prop) {
|
||||||
// TODO:nextTick 是否有必要?
|
|
||||||
Vue.nextTick(() => {
|
|
||||||
const column = arrayFind(states.columns, column => column.property === prop);
|
const column = arrayFind(states.columns, column => column.property === prop);
|
||||||
if (column) {
|
if (column) {
|
||||||
column.order = order;
|
column.order = order;
|
||||||
this.updateSort(column, prop, order);
|
this.updateSort(column, prop, order);
|
||||||
this.commit('changeSortCondition');
|
this.commit('changeSortCondition');
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -192,9 +192,12 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
|
// nextTick 是有必要的 https://github.com/ElemeFE/element/pull/11311
|
||||||
|
this.$nextTick(() => {
|
||||||
const { prop, order } = this.defaultSort;
|
const { prop, order } = this.defaultSort;
|
||||||
const init = true;
|
const init = true;
|
||||||
this.store.commit('sort', { prop, order, init });
|
this.store.commit('sort', { prop, order, init });
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
|
|
|
@ -42,12 +42,16 @@ class TableLayout {
|
||||||
|
|
||||||
updateScrollY() {
|
updateScrollY() {
|
||||||
const height = this.height;
|
const height = this.height;
|
||||||
if (height === null) return;
|
if (height === null) return false;
|
||||||
const bodyWrapper = this.table.bodyWrapper;
|
const bodyWrapper = this.table.bodyWrapper;
|
||||||
if (this.table.$el && bodyWrapper) {
|
if (this.table.$el && bodyWrapper) {
|
||||||
const body = bodyWrapper.querySelector('.el-table__body');
|
const body = bodyWrapper.querySelector('.el-table__body');
|
||||||
this.scrollY = body.offsetHeight > this.bodyHeight;
|
const prevScrollY = this.scrollY;
|
||||||
|
const scrollY = body.offsetHeight > this.bodyHeight;
|
||||||
|
this.scrollY = scrollY;
|
||||||
|
return prevScrollY !== scrollY;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
setHeight(value, prop = 'height') {
|
setHeight(value, prop = 'height') {
|
||||||
|
@ -58,8 +62,11 @@ class TableLayout {
|
||||||
|
|
||||||
if (!el && (value || value === 0)) return Vue.nextTick(() => this.setHeight(value, prop));
|
if (!el && (value || value === 0)) return Vue.nextTick(() => this.setHeight(value, prop));
|
||||||
|
|
||||||
if (value) {
|
if (typeof value === 'number') {
|
||||||
el.style[prop] = `${value}px`;
|
el.style[prop] = value + 'px';
|
||||||
|
this.updateElsHeight();
|
||||||
|
} else if (typeof value === 'string') {
|
||||||
|
el.style[prop] = value;
|
||||||
this.updateElsHeight();
|
this.updateElsHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -381,8 +381,10 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
updateScrollY() {
|
updateScrollY() {
|
||||||
this.layout.updateScrollY();
|
const changed = this.layout.updateScrollY();
|
||||||
|
if (changed) {
|
||||||
this.layout.updateColumnsWidth();
|
this.layout.updateColumnsWidth();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
handleFixedMousewheel(event, data) {
|
handleFixedMousewheel(event, data) {
|
||||||
|
@ -408,7 +410,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// TODO 性能优化
|
// TODO 使用 CSS transform
|
||||||
syncPostion: throttle(20, function() {
|
syncPostion: throttle(20, function() {
|
||||||
const { scrollLeft, scrollTop, offsetWidth, scrollWidth } = this.bodyWrapper;
|
const { scrollLeft, scrollTop, offsetWidth, scrollWidth } = this.bodyWrapper;
|
||||||
const { headerWrapper, footerWrapper, fixedBodyWrapper, rightFixedBodyWrapper } = this.$refs;
|
const { headerWrapper, footerWrapper, fixedBodyWrapper, rightFixedBodyWrapper } = this.$refs;
|
||||||
|
@ -464,10 +466,10 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
doLayout() {
|
doLayout() {
|
||||||
this.layout.updateColumnsWidth();
|
|
||||||
if (this.shouldUpdateHeight) {
|
if (this.shouldUpdateHeight) {
|
||||||
this.layout.updateElsHeight();
|
this.layout.updateElsHeight();
|
||||||
}
|
}
|
||||||
|
this.layout.updateColumnsWidth();
|
||||||
},
|
},
|
||||||
|
|
||||||
sort(prop, order) {
|
sort(prop, order) {
|
||||||
|
@ -509,7 +511,7 @@
|
||||||
};
|
};
|
||||||
} else if (this.maxHeight) {
|
} else if (this.maxHeight) {
|
||||||
const maxHeight = parseHeight(this.maxHeight);
|
const maxHeight = parseHeight(this.maxHeight);
|
||||||
if (maxHeight) {
|
if (typeof maxHeight === 'number') {
|
||||||
return {
|
return {
|
||||||
'max-height': (maxHeight - footerHeight - (this.showHeader ? headerHeight : 0)) + 'px'
|
'max-height': (maxHeight - footerHeight - (this.showHeader ? headerHeight : 0)) + 'px'
|
||||||
};
|
};
|
||||||
|
@ -525,7 +527,7 @@
|
||||||
};
|
};
|
||||||
} else if (this.maxHeight) {
|
} else if (this.maxHeight) {
|
||||||
let maxHeight = parseHeight(this.maxHeight);
|
let maxHeight = parseHeight(this.maxHeight);
|
||||||
if (maxHeight) {
|
if (typeof maxHeight === 'number') {
|
||||||
maxHeight = this.layout.scrollX ? maxHeight - this.layout.gutterWidth : maxHeight;
|
maxHeight = this.layout.scrollX ? maxHeight - this.layout.gutterWidth : maxHeight;
|
||||||
if (this.showHeader) {
|
if (this.showHeader) {
|
||||||
maxHeight -= this.layout.headerHeight;
|
maxHeight -= this.layout.headerHeight;
|
||||||
|
@ -597,11 +599,6 @@
|
||||||
immediate: true,
|
immediate: true,
|
||||||
handler(value) {
|
handler(value) {
|
||||||
this.store.commit('setData', value);
|
this.store.commit('setData', value);
|
||||||
if (this.$ready) {
|
|
||||||
this.$nextTick(() => {
|
|
||||||
this.doLayout();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -175,10 +175,11 @@ export function parseHeight(height) {
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
if (typeof height === 'string') {
|
if (typeof height === 'string') {
|
||||||
if (/^\d+(?:px)?/.test(height)) {
|
if (/^\d+(?:px)?$/.test(height)) {
|
||||||
return parseInt(height, 10);
|
return parseInt(height, 10);
|
||||||
|
} else {
|
||||||
|
return height;
|
||||||
}
|
}
|
||||||
console.warn('[Element Warn][ElTable]invalid height and it will be ignored.');
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue