element-ui 表格(table)合并表头下面合并列且可以收缩展开

百度了一大堆,发现了首行不能合并,想到了用dom做,找到了下面这个链接

要点记录:

1、表头合并 —— 给table添加属性:header-cell-style="headerStyle",里面给首行设置跨行

element-ui表头合并 - ^Mao^ - 博客园

2、表内合并 —— 给table添加属性:span-method="arraySpanMethod",里面设置合并

Element - The world's most popular Vue UI framework

3、表收缩 —— 给table添加属性:tree-props="childrenObj", 表示表格可展开,不要用原本的树形结构,因为我们有合并,直接用elementui自带的第一行合并带子级数据,展开后子级插在合并的中间,所以我们采用合并的那一列标记有没有子级,合并的最后一列增加子级数据,自己做收缩展开功能

基于element-ui的table实现树级表格操作及单元格合并_trottoir的博客-CSDN博客

全部代码如下:

<el-table
      v-if="!listLoading"
      ref="table"
      :data="listAttr"
      fit
      stripe
      :height="height"
      :tree-props="childrenObj"
      :header-cell-style="headerStyle"
      class="width-per-100 margin-top-10"
      :span-method="arraySpanMethod"
      :row-key="getRowKey"
    >
      <el-table-column align="center" width="250" label="地区及急救分中心">
        <el-table-column min-width="170" align="left">
          <template slot-scope="scope">
            <span v-if="scope.row.hasChildren" class="arrow-icon" @click="toggleRowExpansion(scope.row)">
              <i :class="scope.row.isExpand ? 'el-icon-caret-bottom' : 'el-icon-caret-right'" />
            </span>
            <span>{{ scope.row.name | noDataFilterLine }}</span>
          </template>
        </el-table-column>
        <el-table-column min-width="70" align="center">
          <template slot-scope="scope">{{ scope.row.type === 1 ? '呼入量' : '出车量' }}</template>
        </el-table-column>
      </el-table-column>
      <el-table-column
        v-for="(item, index) in tableLabelList"
        :key="index"
        align="center"
        :label="item"
        min-width="80"
      >
        <template slot-scope="scope">{{ scope.row.list[index] }}</template>
      </el-table-column>
    </el-table>


 // 表头跨列   
headerStyle({ row, column, rowIndex, columnIndex }) {
      // 1.1 让第0行的第0列跨2行
      if (rowIndex === 0 && columnIndex === 0) {
        this.$nextTick(() => {
          document.getElementsByClassName(column.id)[0].setAttribute('rowSpan', 2)
          return {}
        })
      }
      // 1.2 被覆盖的进行隐藏
      if (rowIndex === 1 && (columnIndex === 0 || columnIndex === 1)) {
        return {
          display: 'none'
        }
      }
      return {}
    },
// 合并表格
    arraySpanMethod({ row, columnIndex, rowIndex }) {
    // 合并第一列的两行
      if (columnIndex === 0) {
        if (rowIndex % 2 === 0) {
          return {
            rowspan: 2,
            colspan: 1
          }
        } else {
          return {
            rowspan: 0,
            colspan: 0
          }
        }
      }
    },
// 收缩展开方法
    toggleRowExpansion(row) {
      row.isExpand = !row.isExpand
      const item = this.listAttr.find(i => {
        return i.centerId === row.centerId && i.cityCode === row.cityCode && i.index === row.index && i.type === 2
      })
      if (this.$refs.table) {
        this.$refs.table.toggleRowExpansion(item, row.isExpand)
      }
    },
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值