diff --git a/src/components/table/table-head.vue b/src/components/table/table-head.vue index 3339ce6..8fbd964 100644 --- a/src/components/table/table-head.vue +++ b/src/components/table/table-head.vue @@ -34,6 +34,7 @@ +
@@ -133,8 +134,8 @@ }, scrollBarCellClass(){ let hasRightFixed = false; - for(var i in this.headRows){ - for(var j in this.headRows[i]){ + for(let i in this.headRows){ + for(let j in this.headRows[i]){ if(this.headRows[i][j].fixed === 'right') { hasRightFixed=true; break; @@ -205,7 +206,13 @@ // 因为表头嵌套不是深拷贝,所以没有 _ 开头的方法,在 isGroup 下用此列 getColumn (rowIndex, index) { const isGroup = this.columnRows.length > 1; - return isGroup ? this.columns[rowIndex] : this.headRows[rowIndex][index]; + + if (isGroup) { + const id = this.headRows[rowIndex][index].__id; + return this.columns.filter(item => item.__id === id)[0]; + } else { + return this.headRows[rowIndex][index]; + } } } }; diff --git a/src/components/table/table.vue b/src/components/table/table.vue index ef1a4dc..f350f6e 100644 --- a/src/components/table/table.vue +++ b/src/components/table/table.vue @@ -103,7 +103,7 @@ import ExportCsv from './export-csv'; import Locale from '../../mixins/locale'; import elementResizeDetectorMaker from 'element-resize-detector'; - import { getAllColumns, convertToRows, convertColumnOrder } from './util'; + import { getAllColumns, convertToRows, convertColumnOrder, getRandomStr } from './util'; const prefixCls = 'ivu-table'; @@ -178,6 +178,7 @@ } }, data () { + const colsWithId = this.makeColumnsId(this.columns); return { ready: false, tableWidth: 0, @@ -186,13 +187,13 @@ compiledUids: [], objData: this.makeObjData(), // checkbox or highlight-row rebuildData: [], // for sort or filter - cloneColumns: this.makeColumns(), + cloneColumns: this.makeColumns(colsWithId), minWidthColumns:[], maxWidthColumns:[], - columnRows: this.makeColumnRows(false), - leftFixedColumnRows: this.makeColumnRows('left'), - rightFixedColumnRows: this.makeColumnRows('right'), - allColumns: getAllColumns(this.columns), // for multiple table-head, get columns that have no children + columnRows: this.makeColumnRows(false, colsWithId), + leftFixedColumnRows: this.makeColumnRows('left', colsWithId), + rightFixedColumnRows: this.makeColumnRows('right', colsWithId), + allColumns: getAllColumns(colsWithId), // for multiple table-head, get columns that have no children showSlotHeader: true, showSlotFooter: true, bodyHeight: 0, @@ -828,9 +829,17 @@ }); return data; }, - makeColumns () { + // 修改列,设置一个隐藏的 id,便于后面的多级表头寻找对应的列,否则找不到 + makeColumnsId (columns) { + return columns.map(item => { + if ('children' in item) item.children = this.makeColumnsId(item.children); + item.__id = getRandomStr(6); + return item; + }); + }, + makeColumns (cols) { // 在 data 时,this.allColumns 暂时为 undefined - let columns = deepCopy(getAllColumns(this.columns)); + let columns = deepCopy(getAllColumns(cols)); let left = []; let right = []; let center = []; @@ -869,8 +878,8 @@ return left.concat(center).concat(right); }, // create a multiple table-head - makeColumnRows (fixedType) { - return convertToRows(this.columns, fixedType); + makeColumnRows (fixedType, cols) { + return convertToRows(cols, fixedType); }, setMinMaxColumnRows (){ let minWidthColumns=[]; @@ -964,13 +973,14 @@ columns: { handler () { // todo 这里有性能问题,可能是左右固定计算属性影响的 - this.allColumns = getAllColumns(this.columns); + const colsWithId = this.makeColumnsId(this.columns); + this.allColumns = getAllColumns(colsWithId); this.cloneColumns = this.makeColumns(); this.setMinMaxColumnRows(); - this.columnRows = this.makeColumnRows(false); - this.leftFixedColumnRows = this.makeColumnRows('left'); - this.rightFixedColumnRows = this.makeColumnRows('right'); + this.columnRows = this.makeColumnRows(false, colsWithId); + this.leftFixedColumnRows = this.makeColumnRows('left', colsWithId); + this.rightFixedColumnRows = this.makeColumnRows('right', colsWithId); this.rebuildData = this.makeDataWithSortAndFilter(); this.handleResize(); }, diff --git a/src/components/table/util.js b/src/components/table/util.js index c5746df..21c3eb8 100644 --- a/src/components/table/util.js +++ b/src/components/table/util.js @@ -78,4 +78,16 @@ const convertToRows = (columns, fixedType = false) => { return rows; }; -export {convertToRows}; \ No newline at end of file +export {convertToRows}; + +const getRandomStr = function (len = 32) { + const $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; + const maxPos = $chars.length; + let str = ''; + for (let i = 0; i < len; i++) { + str += $chars.charAt(Math.floor(Math.random() * maxPos)); + } + return str; +}; + +export {getRandomStr}; \ No newline at end of file -- libgit2 0.21.4