Element的表格el-table合计显示多行,以及合计行合并单元格

效果展示

一、合计显示多行

此处采用换行的思路,让页面上显示多行,使用到html的换行符<br/>

步骤1:el-table标签加上方法:summary-method="getSummaries"

<el-table
      id="table"
      :data="tableList"
      border
      :summary-method="getSummaries"
      show-summary
    >

步骤2:getSummaries方法下的具体实现

1.换行主要代码:sums[index] =  <p>当前页面总计<br/><br/>总计</p>;

2.合计第一行可显示页面原本相加的合计值,第二行显示后端动态数据返回的值,主要代码:
if (column.property == 'total') {
    sums[index] = <p>
      {countArr[index]}<br/><br/>//第一行数据是当前页面值相加
       {this.apiData.account}<br/><br/>//第二行数据是后端接口返回
       </p>
}

getSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
        if (index === 0) {
          // 通过<br/>实现换行,达到2行的效果
          sums[index] =  <p>当前页面总计<br/><br/>总计</p>;
          return;
        }
        
        let countArr = [];//element原本的总计:当前页面计算的值 集合
        const values = data.map((item) => Number(item[column.property]));
        if (!values.every((value) => isNaN(value))) {
          countArr[index] = values.reduce((prev, curr) => {
            const value = Number(curr);
            if (!isNaN(value)) {
              return prev + curr;
            } else {
              return prev;
            }
          }, 0);
          // 根据列表字段判断 取值
          if (column.property == 'total') {
            sums[index] = <p>
                {countArr[index]}<br/><br/>//第一行数据是当前页面值相加
                {this.apiData.account}<br/><br/>//第二行数据是后端接口返回
              </p>
          }
        } else {
          sums[index] = "-";
        }
      });
      return sums;
    },

注意:直接在vue页面写jsx语法有可能会报错,此时需要安装@vue/babel-preset-jsx插件

npm install @vue/babel-preset-jsx --save

安装好后在.babelrc文件下新增配置,@vue/babel-preset-jsx,然后重新运行代码就可以了

{
  "presets": [
    ["@babel/preset-env", {
      "modules": false,
      "targets": {
        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
      }
    }],
    "@vue/babel-preset-jsx" //支持jsx语法
  ]
}

此时页面效果,已有2行,但未合并单元格

二、合计行合并单元格

通过监听表格数据,获取到表格合计行的dom节点,进行dom操作,setTimeout表示等页面渲染完后在进行操作,表格如果有固定列,使用下面的代码,没有固定列,使用注释的那一行代码

watch: {
    tableList: {// 表格数据
      immediate: true,
      handler() {
        setTimeout(() => {
          // const tds = document.querySelectorAll('#table .el-table__footer-wrapper tr>td');//表格没有固定列时 写法
          const tds = document.querySelectorAll('#table .el-table__fixed-footer-wrapper tr>td');//表格有固定列时 写法
          tds[0].colSpan = 2;
          tds[0].style.textAlign = 'center'
          tds[1].style.display = 'none'
        }, 0)
      }
    }
  },

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element-ui的表格el-table本身并不支持动态合并单元格和列),但可以通过自定义表格的slot-scope和span-method来实现动态合并单元格的功能。首先,我们需要在表格定义时添加span-method属性,并指定一个方法来计算单元格的合并数和列数。例如: ```html <el-table :data="tableData" :span-method="mergeCells"> ... </el-table> ``` 然后,在methods中定义mergeCells方法来计算单元格的合并数和列数。该方法有四个参数分别是({row, column, rowIndex, columnIndex}),我们可以根据需要通过判断索引和列索引来返回合适的数和列数,例如合并第一的两列可以这样实现: ```javascript methods: { mergeCells({row, column, rowIndex, columnIndex}) { if (rowIndex === 0 && columnIndex < 2) { return { rowspan: 1, colspan: 2 }; } } } ``` 这样就实现了动态合并第一的两个单元格。如果想要合并其他或列,可以根据需要进判断和返回。 给表头添加斜线可以通过自定义表头的样式来实现。可以通过CSS的`::before`或`::after`伪元素来添加斜线样式。例如,给第一列的表头添加斜线可以这样实现: ```html <el-table ...> <el-table-column label="姓名"> <template slot="header" slot-scope="scope"> <div class="header-wrapper"> <div class="header-content"> <span>{{scope.column.label}}</span> </div> </div> </template> </el-table-column> ... </el-table> ``` 然后在样式中定义斜线效果: ```css <style> .header-content::before { content: ""; display: block; border-bottom: 1px solid #333; transform: skew(-45deg); width: 80%; margin-left: 10%; } </style> ``` 这样就实现了给第一列的表头添加斜线的效果。可以根据需要调整斜线的样式和位置来达到期望的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值