elementui 表格左侧与顶部表头

后端返回的数据: 

 前端需要实现的效果图:

 现在的需求是 将每条数据的 departmentName字段 与合计作为顶部标题

根据步骤解析

data(){
    return {
         listData:[]
// 设置左侧标题
        origintitle: ['人力','成本','用人费用','检测&维修支出费用','设备费用','事务费用','业务费用','其他费用','合计(不包括人力)'],
        transTitle:[''], //转换后的标题,多一列
        transData: [],
    }
}

筛选出要处理的字段:

    let obj = []
    res.data.map(item => {
          this.transTitle.push(item.departmentName)
          obj.push({  
                humanCost : (item.humanCost),
                baseCost : (item.baseCost),
                manpowerCost : (item.manpowerCost),
                repairCost : (item.repairCost),
                equipmentCost : (item.equipmentCost),
                affairCost : (item.affairCost),
                businessCost : (item.businessCost),
                otherCost : (item.otherCost),
                totalCost : (item.totalCost),
              })
    })
      this.listData = obj

 表头左侧标题处理:

    // 对象转成数组
 let matrixData = this.listData.map((row) => {
          let arr = []
          for (let key in row) {
            arr.push(row[key])
          }
          return arr
        })
                            
 // 加入标题拼接最终的数据
 // 顺序一致
        this.transData = matrixData[0].map((col, i) => {
          return [this.origintitle[i], ...matrixData.map((row) => {
            return row[i]
          })]
        })

上方的需求图中,底部的合计是后端返回的,右侧的合计需要前端来计算:

    //删除左侧标题
 var newArr = this.transData.map(item => {
          // console.log(item)
          return item.slice(1)
        })
// 求和
 let sums = newArr.map((item,index) => {
            // item[index] = this.stringToNumber(item[index])
            return eval(item.join("+"))
        })

  // 把合计加上
        // 删除最后一个合计的计算
        sums.splice(sums.length-1,1,'/');
        this.transData.map((item,index) => {
          item.push(sums[index])
        })

最后页面遍历出来:

 <el-table
              v-loading="loading"
              :data="transData"
              stripe
              border
              ref="selectTable"
              header-align="left"
            >
<el-table-column
                  v-for="(item,index) in transTitle"
                  :key="index"
                  :label="item"
                  align="center"
                  :show-header="false"
              >
               <span>{{scope.row[index]}}</span>
              </el-table-column>
</el-table>

最后的效果图 

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
elementui表格纵向合并动态表头可以通过设置`span-method`属性和编写`objectSpanMethod`方法来实现。具体步骤如下: 1.在表格组件中设置`span-method`属性为`objectSpanMethod`方法名。 2.编写`objectSpanMethod`方法,该方法接收两个参数:当前单元格的行数据和列数据。在该方法中,可以根据需要合并单元格并返回合并后的单元格信息。 下面是一个示例代码,演示如何在elementui表格中纵向合并动态表头: ```html <template> <el-table :data="tableData" :span-method="objectSpanMethod"> <el-table-column v-for="column in columns" :key="column.prop" :label="column.label"> </el-table-column> </el-table> </template> <script> export default { data() { return { columns: [ { label: '姓名', prop: 'name' }, { label: '年龄', prop: 'age' }, { label: '性别', prop: 'gender' }, { label: '国籍', prop: 'country' }, { label: '城市', prop: 'city' } ], tableData: [ { name: '张三', age: 18, gender: '男', country: '中国', city: '北京' }, { name: '李四', age: 20, gender: '女', country: '中国', city: '上海' }, { name: 'John', age: 22, gender: '男', country: '美国', city: '纽约' }, { name: 'Lucy', age: 25, gender: '女', country: '美国', city: '洛杉矶' } ] } }, methods: { objectSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { if (rowIndex % 2 === 0) { return { rowspan: 2, colspan: 1 } } else { return { rowspan: 0, colspan: 0 } } } } } } </script> ``` 在上面的示例代码中,我们设置了一个包含5个列的表格,并且在`objectSpanMethod`方法中,我们根据需要合并了第一列的单元格。具体来说,我们让第一列的奇数行单元格不显示,偶数行单元格合并为两行。这样就实现了纵向合并动态表头的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值