这个动静表头是比较复杂的,因为他的不固定的列的表头还是多级表头,这样的话,数据的层级就会比拟多,解决起来比较复杂。过后求教了在公司呆了12年的前端大佬才把这个动静表头解决好,上面还是看一下这个动静表头难在哪里吧
<el-table :data="tableListData" style="width: 100%" border height class="table-fixed"> <el-table-column prop="SectionName" label="标段名称" fixed :key=Math.random() width="120" :render-header="labelHead"> </el-table-column> <el-table-column prop="SectionScore" label="标段综合得分" fixed :key=Math.random() width="120" :render-header="labelHead"> </el-table-column> <el-table-column v-for="column in lstAssessColumns" :key="Math.random()" :label="column.columnName" :render-header="labelHead"> <el-table-column v-for="child in column.children" :key="Math.random()" :label="child.columnName" :render-header="labelHead" :prop="child.columnId" :render-header="labelHead" width="120"> </el-table-column> </el-table-column> <el-table-column v-for="column in lstAssessQualityColumns" :key="Math.random()" :render-header="labelHead" :label="column.columnName"> <el-table-column v-for="child in column.children" :key="Math.random()" :label="child.columnName" :prop="child.columnId" :render-header="labelHead" width="160"> </el-table-column> </el-table-column> <el-table-column v-for="column in lstMesureColumns" :key="Math.random()" :label="column.columnName" :render-header="labelHead"> <el-table-column v-for="child in column.children" :key="Math.random()" :label="child.columnName" :prop="child.columnId" :render-header="labelHead" width="160"> <template scope="scope"> <div v-if="Object.prototype.toString.call(scope.row[child.columnId]) === '[object Array]'"> <div v-for="d in scope.row[child.columnId]">{{d}}</div> </div> <div v-else> {{scope.row[child.columnId]}} </div> </template> </el-table-column> </el-table-column></el-table>
var rows=[ { "TaskId": "bb889c39-ede9-40f2-a52c-2763de810f6b", "TaskName": "12月份精装修品质巡逻三标唐彩", "SectionId": "ee571575-db53-4b09-b96b-81abfd871fba", "SectionName": "精装修标段-唐彩装璜", "SectionScore": 92.21, "UploadTime": "2020-12-23T08:26:30.06", "strUploadTime": "2020-12-23", "Rank": 1, "Ranking": 1, "ContractorSupplierLeader": "韩仕才", "SupervisorSupplierLeader": "王昆", "BuildingName": "8#,15#", "BuildingArea": 59180.53, "lstAssessTable": [ { "TableId": "8323f449-3903-438b-a1ab-3f2eff15dafa", "TableName": "全装修工程材料查看评估", "RowNo": null, "TableScore": 94.74, "Weight": 20, "WeightScore": 18.95, "MajorType": null, "Attribute": null }, { "TableId": "c63c9e47-4a13-4391-bd15-3978efc19344", "TableName": "全装修工程平安文化施工查看评分表", "RowNo": null, "TableScore": 86.11, "Weight": 20, "WeightScore": 17.22, "MajorType": null, "Attribute": null }, { "TableId": "5d369cb0-a028-4174-9945-d17c59df2e28", "TableName": "全装修工程质量检查评分表", "RowNo": null, "TableScore": 91.32, "Weight": 30, "WeightScore": 27.4, "MajorType": null, "Attribute": null } ], "lstAssessTableQuality": [], "lstMesureTable": [ { "TableId": "0a2b1535-1e17-4090-bc95-557101c56e3a", "TableName": "全装修工程实测数据记录表(简装)", "RowNo": null, "MesureTableScore": 95.48, "Weight": 30, "WeightScore": 28.64, "LstMesureRange": [ { "BuildingName": "15#", "YIndex": 36, "HouseNo": "3601", "SumPassCount": 87, "SumMesureCount": 88, "MesureRangeScore": 98.86 }, { "BuildingName": "8#", "YIndex": 37, "HouseNo": "3701", "SumPassCount": 154, "SumMesureCount": 163, "MesureRangeScore": 94.48 }, { "BuildingName": "15#", "YIndex": 37, "HouseNo": "3702", "SumPassCount": 86, "SumMesureCount": 88, "MesureRangeScore": 97.73 }, { "BuildingName": "8#", "YIndex": 36, "HouseNo": "3601", "SumPassCount": 81, "SumMesureCount": 88, "MesureRangeScore": 92.05 } ] } ], "QualityScore": 0, "QualitySumWeight": 0, "QualityWeightScore": 0 }, { "TaskId": "dc907d74-c91d-417b-9995-c3e1108b4237", "TaskName": "精装修品质巡逻四标和胜", "SectionId": "74efe0bd-1944-4976-9f7f-411665aafef5", "SectionName": "精装修标段-和胜装璜", "SectionScore": 91.26, "UploadTime": "2020-12-23T08:29:32.52", "strUploadTime": "2020-12-23", "Rank": 2, "Ranking": 2, "ContractorSupplierLeader": "郭治国", "SupervisorSupplierLeader": "王昆", "BuildingName": "19#,18#", "BuildingArea": 67122.61, "lstAssessTable": [ { "TableId": "5d369cb0-a028-4174-9945-d17c59df2e28", "TableName": "全装修工程质量检查评分表", "RowNo": null, "TableScore": 89.06, "Weight": 30, "WeightScore": 26.72, "MajorType": null, "Attribute": null }, { "TableId": "8323f449-3903-438b-a1ab-3f2eff15dafa", "TableName": "全装修工程材料查看评估", "RowNo": null, "TableScore": 92.86, "Weight": 20, "WeightScore": 18.57, "MajorType": null, "Attribute": null }, { "TableId": "c63c9e47-4a13-4391-bd15-3978efc19344", "TableName": "全装修工程平安文化施工查看评分表", "RowNo": null, "TableScore": 84.78, "Weight": 20, "WeightScore": 16.96, "MajorType": null, "Attribute": null } ], "lstAssessTableQuality": [], "lstMesureTable": [ { "TableId": "0a2b1535-1e17-4090-bc95-557101c56e3a", "TableName": "全装修工程实测数据记录表(简装)", "RowNo": null, "MesureTableScore": 96.71, "Weight": 30, "WeightScore": 29.01, "LstMesureRange": [ { "BuildingName": "18#", "YIndex": 12, "HouseNo": "1201", "SumPassCount": 75, "SumMesureCount": 77, "MesureRangeScore": 97.4 }, { "BuildingName": "19#", "YIndex": 13, "HouseNo": "1302", "SumPassCount": 54, "SumMesureCount": 56, "MesureRangeScore": 96.43 }, { "BuildingName": "18#", "YIndex": 10, "HouseNo": "1002", "SumPassCount": 67, "SumMesureCount": 70, "MesureRangeScore": 95.71 }, { "BuildingName": "19#", "YIndex": 10, "HouseNo": "1002", "SumPassCount": 62, "SumMesureCount": 64, "MesureRangeScore": 96.88 }, { "BuildingName": "18#", "YIndex": 8, "HouseNo": "801", "SumPassCount": 68, "SumMesureCount": 70, "MesureRangeScore": 97.14 } ] } ], "QualityScore": 0, "QualitySumWeight": 0, "QualityWeightScore": 0 }, { "TaskId": "13f62f14-dbf0-4330-9fe4-bfded7eaa16a", "TaskName": "2020年12月简装评估查看", "SectionId": "de10a60b-6ce8-46dc-836c-20e7dbafadce", "SectionName": "印二标段", "SectionScore": 90.89, "UploadTime": "2020-12-25T07:55:25.443", "strUploadTime": "2020-12-25", "Rank": 3, "Ranking": 3, "ContractorSupplierLeader": "", "SupervisorSupplierLeader": "王昆", "BuildingName": "5#", "BuildingArea": 25481.15, "lstAssessTable": [ { "TableId": "8323f449-3903-438b-a1ab-3f2eff15dafa", "TableName": "全装修工程材料查看评估", "RowNo": null, "TableScore": 92.86, "Weight": 20, "WeightScore": 18.57, "MajorType": null, "Attribute": null }, { "TableId": "5d369cb0-a028-4174-9945-d17c59df2e28", "TableName": "全装修工程质量检查评分表", "RowNo": null, "TableScore": 87.33, "Weight": 30, "WeightScore": 26.2, "MajorType": null, "Attribute": null }, { "TableId": "c63c9e47-4a13-4391-bd15-3978efc19344", "TableName": "全装修工程平安文化施工查看评分表", "RowNo": null, "TableScore": 82.93, "Weight": 20, "WeightScore": 16.59, "MajorType": null, "Attribute": null } ], "lstAssessTableQuality": [], "lstMesureTable": [ { "TableId": "0a2b1535-1e17-4090-bc95-557101c56e3a", "TableName": "全装修工程实测数据记录表(简装)", "RowNo": null, "MesureTableScore": 98.42, "Weight": 30, "WeightScore": 29.53, "LstMesureRange": [ { "BuildingName": "5#", "YIndex": 8, "HouseNo": "801", "SumPassCount": 37, "SumMesureCount": 38, "MesureRangeScore": 97.37 }, { "BuildingName": "5#", "YIndex": 10, "HouseNo": "1002", "SumPassCount": 38, "SumMesureCount": 38, "MesureRangeScore": 100 }, { "BuildingName": "5#", "YIndex": 14, "HouseNo": "1401", "SumPassCount": 38, "SumMesureCount": 38, "MesureRangeScore": 100 }, { "BuildingName": "5#", "YIndex": 11, "HouseNo": "1102", "SumPassCount": 37, "SumMesureCount": 38, "MesureRangeScore": 97.37 }, { "BuildingName": "5#", "YIndex": 7, "HouseNo": "701", "SumPassCount": 37, "SumMesureCount": 38, "MesureRangeScore": 97.37 } ] } ], "QualityScore": 0, "QualitySumWeight": 0, "QualityWeightScore": 0 }]
if (rows && rows.length > 0) { var lstAssessColumnsDD = {} _this.lstAssessColumns = [] var lstAssessQualityDD = {} _this.lstAssessQualityColumns = [{ columnName: '标段品质危险加权分', columnId: 'lstAssessTableQuality', children: [] }] var lstMesureColumnsDD = {} _this.lstMesureColumns = [] rows.forEach(function (row) { var lstAssessTable = row.lstAssessTable if (lstAssessTable) { lstAssessTable.forEach(function (item) { //去重解决 if (!lstAssessColumnsDD[item.TableId]) { lstAssessColumnsDD[item.TableId] = true //解决多级表头,并把行转成列 _this.lstAssessColumns.push({ columnName: item.TableName + `(${item.Weight}%)`, columnId: item.TableId, children: [ { columnId: item.TableId + '_TableScore', columnName: '标段平安文化分' }, { columnId: item.TableId + '_WeightScore', columnName: '加权得分' } ] }) } _this.$set(row, item.TableId + '_TableScore', item.TableScore) _this.$set(row, item.TableId + '_WeightScore', item.WeightScore) }) } var lstAssessQuality = row.lstAssessTableQuality if (lstAssessQuality) { lstAssessQuality.forEach(function (item) { if (!lstAssessQualityDD[item.TableId]) { lstAssessQualityDD[item.TableId] = true _this.lstAssessQualityColumns[0].children.push({ columnId: item.TableId + '_TableScore', columnName: item.TableName + `(${item.Weight}%)` }) } _this.$set(row, item.TableId + '_TableScore', item.TableScore) }) } var lstMesureTable = row.lstMesureTable if (lstMesureTable) { lstMesureTable.forEach(function (item) { if (!lstMesureColumnsDD[item.TableId]) { lstMesureColumnsDD[item.TableId] = true _this.lstMesureColumns.push({ columnName: item.TableName + `(${item.Weight}%)`, columnId: item.TableId, children: [{ columnId: item.TableId + '_HouseNo', columnName: '实测测区' }, { columnId: item.TableId + '_MesureRangeScore', columnName: '测区得分' }, { columnId: item.TableId + '_MesureTableScore', columnName: '实测实量均匀得分' }, { columnId: item.TableId + '_WeightScore', columnName: '加权得分' } ] }) } _this.$set(row, item.TableId + '_HouseNo', item.LstMesureRange && item.LstMesureRange.map(function (d) { return d.HouseNo }) || []) _this.$set(row, item.TableId + '_MesureRangeScore', item.LstMesureRange && item.LstMesureRange.map(function (d) { return d.MesureRangeScore }) || []) _this.$set(row, item.TableId + '_MesureTableScore', item.MesureTableScore) _this.$set(row, item.TableId + '_WeightScore', item.WeightScore) }) } }) _this.lstAssessQualityColumns[0].children.push({ columnId: 'QualityScore', columnName: '标段品质危险得分' }) _this.lstAssessQualityColumns[0].children.push({ columnId: 'QualityWeightScore', columnName: '加权得分' })}