优化自适应列宽算法
This commit is contained in:
@@ -38,12 +38,12 @@ const VxeFormConfigItem = {
|
||||
const itemTitleStyle = compConf ? (compConf.formItemTitleStyle || compConf.itemTitleStyle) : null
|
||||
const span = item.span || $xeform.span
|
||||
const align = item.align || $xeform.align
|
||||
const itemVertical = XEUtils.eqNull(vertical) ? allVertical : vertical
|
||||
const titleAlign = XEUtils.eqNull(item.titleAlign) ? allTitleAlign : item.titleAlign
|
||||
const titleWidth = XEUtils.eqNull(item.titleWidth) ? allTitleWidth : item.titleWidth
|
||||
const titleWidth = itemVertical ? null : (XEUtils.eqNull(item.titleWidth) ? allTitleWidth : item.titleWidth)
|
||||
const titleColon = XEUtils.eqNull(item.titleColon) ? allTitleColon : item.titleColon
|
||||
const titleAsterisk = XEUtils.eqNull(item.titleAsterisk) ? allTitleAsterisk : item.titleAsterisk
|
||||
const itemOverflow = (XEUtils.isUndefined(titleOverflow) || XEUtils.isNull(titleOverflow)) ? allTitleOverflow : titleOverflow
|
||||
const itemVertical = (XEUtils.isUndefined(vertical) || XEUtils.isNull(vertical)) ? allVertical : vertical
|
||||
const itemOverflow = XEUtils.eqNull(titleOverflow) ? allTitleOverflow : titleOverflow
|
||||
const ovEllipsis = itemOverflow === 'ellipsis'
|
||||
const ovTitle = itemOverflow === 'title'
|
||||
const ovTooltip = itemOverflow === true || itemOverflow === 'tooltip'
|
||||
|
||||
@@ -75,12 +75,12 @@ const renderItem = (h, _vm, item, slots) => {
|
||||
const itemTitleStyle = compConf ? (compConf.formItemTitleStyle || compConf.itemTitleStyle) : null
|
||||
const span = item.span || _vm.span
|
||||
const align = item.align || _vm.align
|
||||
const itemVertical = XEUtils.eqNull(vertical) ? allVertical : vertical
|
||||
const titleAlign = XEUtils.eqNull(item.titleAlign) ? allTitleAlign : item.titleAlign
|
||||
const titleWidth = XEUtils.eqNull(item.titleWidth) ? allTitleWidth : item.titleWidth
|
||||
const titleWidth = itemVertical ? null : (XEUtils.eqNull(item.titleWidth) ? allTitleWidth : item.titleWidth)
|
||||
const titleColon = XEUtils.eqNull(item.titleColon) ? allTitleColon : item.titleColon
|
||||
const titleAsterisk = XEUtils.eqNull(item.titleAsterisk) ? allTitleAsterisk : item.titleAsterisk
|
||||
const itemOverflow = (XEUtils.isUndefined(titleOverflow) || XEUtils.isNull(titleOverflow)) ? allTitleOverflow : titleOverflow
|
||||
const itemVertical = (XEUtils.isUndefined(vertical) || XEUtils.isNull(vertical)) ? allVertical : vertical
|
||||
const itemOverflow = XEUtils.eqNull(titleOverflow) ? allTitleOverflow : titleOverflow
|
||||
const ovEllipsis = itemOverflow === 'ellipsis'
|
||||
const ovTitle = itemOverflow === 'title'
|
||||
const ovTooltip = itemOverflow === true || itemOverflow === 'tooltip'
|
||||
|
||||
@@ -380,10 +380,12 @@ export default {
|
||||
return this.$nextTick()
|
||||
}
|
||||
let fields = []
|
||||
if (XEUtils.isArray(fieldOrItem)) {
|
||||
fields = fieldOrItem
|
||||
} else {
|
||||
fields = [fieldOrItem]
|
||||
if (fieldOrItem) {
|
||||
if (XEUtils.isArray(fieldOrItem)) {
|
||||
fields = fieldOrItem
|
||||
} else {
|
||||
fields = [fieldOrItem]
|
||||
}
|
||||
}
|
||||
return this.beginValidate(fields.map(field => handleFieldOrItem(this, field)), '', callback)
|
||||
},
|
||||
|
||||
@@ -2002,6 +2002,7 @@ const Methods = {
|
||||
const resizeList = []
|
||||
const pxList = []
|
||||
const pxMinList = []
|
||||
const autoMinList = []
|
||||
const scaleList = []
|
||||
const scaleMinList = []
|
||||
const autoList = []
|
||||
@@ -2024,6 +2025,8 @@ const Methods = {
|
||||
scaleList.push(column)
|
||||
} else if (DomTools.isPx(column.minWidth)) {
|
||||
pxMinList.push(column)
|
||||
} else if (column.minWidth === 'auto') {
|
||||
autoMinList.push(column)
|
||||
} else if (DomTools.isScale(column.minWidth)) {
|
||||
scaleMinList.push(column)
|
||||
} else {
|
||||
@@ -2031,7 +2034,7 @@ const Methods = {
|
||||
}
|
||||
}
|
||||
})
|
||||
Object.assign(this.columnStore, { resizeList, pxList, pxMinList, scaleList, scaleMinList, autoList, remainList })
|
||||
Object.assign(this.columnStore, { resizeList, pxList, pxMinList, autoMinList, scaleList, scaleMinList, autoList, remainList })
|
||||
},
|
||||
/**
|
||||
* 刷新滚动操作,手动同步滚动相关位置(对于某些特殊的操作,比如滚动条错位、固定列不同步)
|
||||
@@ -2102,11 +2105,11 @@ const Methods = {
|
||||
const cellStyle = getComputedStyle(firstCellEl)
|
||||
paddingSize = Math.floor(XEUtils.toNumber(cellStyle.paddingLeft) + XEUtils.toNumber(cellStyle.paddingRight)) + 2
|
||||
}
|
||||
let colWidth = column.renderAutoWidth - paddingSize + 2
|
||||
let colWidth = column.renderAutoWidth - paddingSize
|
||||
XEUtils.arrayEach(cellElList, (cellEl) => {
|
||||
const labelEl = cellEl.firstChild
|
||||
if (labelEl) {
|
||||
colWidth = Math.max(colWidth, labelEl.offsetWidth)
|
||||
colWidth = Math.max(colWidth, Math.ceil(labelEl.offsetWidth) + 4)
|
||||
}
|
||||
})
|
||||
column.renderAutoWidth = colWidth + paddingSize
|
||||
@@ -2133,13 +2136,19 @@ const Methods = {
|
||||
let remainWidth = bodyWidth
|
||||
let meanWidth = remainWidth / 100
|
||||
const { fit, columnStore } = this
|
||||
const { resizeList, pxMinList, pxList, scaleList, scaleMinList, autoList, remainList } = columnStore
|
||||
const { resizeList, pxMinList, pxList, autoMinList, scaleList, scaleMinList, autoList, remainList } = columnStore
|
||||
// 最小宽
|
||||
pxMinList.forEach(column => {
|
||||
const minWidth = parseInt(column.minWidth)
|
||||
tableWidth += minWidth
|
||||
column.renderWidth = minWidth
|
||||
})
|
||||
// 最小自适应
|
||||
autoMinList.forEach((column) => {
|
||||
const scaleWidth = Math.max(60, XEUtils.toInteger(column.renderAutoWidth))
|
||||
tableWidth += scaleWidth
|
||||
column.renderWidth = scaleWidth
|
||||
})
|
||||
// 最小百分比
|
||||
scaleMinList.forEach(column => {
|
||||
const scaleWidth = Math.floor(parseInt(column.minWidth) * meanWidth)
|
||||
@@ -2171,10 +2180,10 @@ const Methods = {
|
||||
column.renderWidth = width
|
||||
})
|
||||
remainWidth -= tableWidth
|
||||
meanWidth = remainWidth > 0 ? Math.floor(remainWidth / (scaleMinList.length + pxMinList.length + remainList.length)) : 0
|
||||
meanWidth = remainWidth > 0 ? Math.floor(remainWidth / (scaleMinList.length + pxMinList.length + autoMinList.length + remainList.length)) : 0
|
||||
if (fit) {
|
||||
if (remainWidth > 0) {
|
||||
scaleMinList.concat(pxMinList).forEach(column => {
|
||||
scaleMinList.concat(pxMinList).concat(autoMinList).forEach(column => {
|
||||
tableWidth += meanWidth
|
||||
column.renderWidth += meanWidth
|
||||
})
|
||||
@@ -2193,7 +2202,7 @@ const Methods = {
|
||||
* 偏移量算法
|
||||
* 如果所有列足够放的情况下,从最后动态列开始分配
|
||||
*/
|
||||
const dynamicList = scaleList.concat(scaleMinList).concat(pxMinList).concat(remainList)
|
||||
const dynamicList = scaleList.concat(scaleMinList).concat(pxMinList).concat(autoMinList).concat(remainList)
|
||||
let dynamicSize = dynamicList.length - 1
|
||||
if (dynamicSize > 0) {
|
||||
let odiffer = bodyWidth - tableWidth
|
||||
|
||||
@@ -382,6 +382,7 @@ export default {
|
||||
resizeList: [],
|
||||
pxList: [],
|
||||
pxMinList: [],
|
||||
autoMinList: [],
|
||||
scaleList: [],
|
||||
scaleMinList: [],
|
||||
autoList: [],
|
||||
@@ -628,8 +629,8 @@ export default {
|
||||
return Object.assign({}, GlobalConfig.table.customConfig, this.customConfig)
|
||||
},
|
||||
autoWidthColumnList () {
|
||||
const { visibleColumn } = this
|
||||
return visibleColumn.filter(column => column.width === 'auto')
|
||||
const { tableColumn, visibleColumn } = this
|
||||
return tableColumn.length || visibleColumn.length ? visibleColumn.filter(column => column.width === 'auto' || column.minWidth === 'auto') : []
|
||||
},
|
||||
fixedColumnSize () {
|
||||
const { collectColumn } = this
|
||||
|
||||
Reference in New Issue
Block a user