当前位置: 首页 > news >正文

el-table 合并单元格

vue2使用el-table合并单元格,包括合并行、合并列

<el-table
              :header-cell-style="handerMethod"
              :span-method="arraySpanMethod"
              @cell-click="handleCellClick"
              :data="tableData"
              style="width: 100%">
              <el-table-column label="工序编码">
                <el-table-column label="工序">
                  <el-table-column
                    prop="type"
                    label="类型"
                    width="80">
                  </el-table-column>
                  <el-table-column
                    prop="pipelineCode"
                    label="流水码"
                    width="100">
                  </el-table-column>
                  <el-table-column
                    prop="profession"
                    label="名称"
                    width="80">
                  </el-table-column>
                  <el-table-column
                    prop="accessory"
                    label=""
                    width="100">
                  </el-table-column>
                  <el-table-column
                    prop="specification"
                    label="规格(基础信息)"
                    width="120">
                  </el-table-column>
                  <el-table-column
                    prop="unit"
                    label="单位"
                    width="60">
                  </el-table-column>
                </el-table-column>
              </el-table-column>
              <el-table-column
                v-for="(item,index) in  titleList"
                :key="index"
                :label="item.processCode">
                <el-table-column
                  :key="index"
                  :label="item.process">
                  <el-table-column
                    :key="index"
                    label="消耗量">
                    <template slot-scope="scope">
                      {{ item.consume[scope.$index] }}
                    </template>
                  </el-table-column>
                </el-table-column>
              </el-table-column>
            </el-table>
<script>

export default {
  name: 'viewBOM',
  data() {
    return {
      tableData: [
        {
          type: '材料',
          pipelineCode: '111',
          profession: '主料',
          accessory: '辅料',
          specification: '10mm',
          unit: '平方'
        }, {
          type: '材料',
          pipelineCode: '444',
          profession: '专辅',
          accessory: '辅料',
          specification: 'M50',
          unit: '个'
        }, {
          type: '材料',
          pipelineCode: '555',
          profession: '辅料',
          accessory: '辅料',
          specification: 'M30',
          unit: '个'
        }, {
          type: '材料',
          pipelineCode: '666',
          profession: '主料',
          accessory: '辅料',
          specification: '8mm',
          unit: '平方'
        }, {
          type: '人工',
          pipelineCode: '777',
          profession: '装配工',
          accessory: '',
          specification: '',
          unit: '工日'
        }, {
          type: '人工',
          pipelineCode: '888',
          profession: '装配工',
          accessory: '',
          specification: '',
          unit: '工日'
        }, {
          type: '人工',
          pipelineCode: '999',
          profession: '装配工',
          accessory: '',
          specification: '',
          unit: '工日'
        }],
      titleList: [
        {
          processCode: '111',
          process: '装配工1',
          consume: ['0.92(配比)', '1(1.2)', '2(1.2)', '3(1.2)', '-', '-', '6(1.2)']
        },
        {
          processCode: '222',
          process: '主料1',
          consume: [11, 21, 31, 41, 51, 61, 71]
        }
      ]
    }
  },
  methods: {
    goBack() {
      this.$router.go(-1)
    },
    handleNodeClicked(data) {
      console.log('从子组件接收到的数据:', data)
    },
    //合并单位表头
    handerMethod({ row, column, rowIndex, columnIndex }) {
      // 合并第三列和第四列
      if (row[0].level == 3) {
        row[2].colSpan = 2 // 第三列合并两列
        row[3].colSpan = 0 // 第四列不显示
        if (columnIndex === 3) {
          return { display: 'none' } // 隐藏第四列
        }
        // 合并第七列及后面的列的表头
        let startColIndex = 6 // 假设第七列的索引是6
        let colSpan = this.titleList.length
        for (let i = startColIndex; i < startColIndex + colSpan; i++) {
          if (i === startColIndex) {
            row[i].colSpan = colSpan // 第七列合并多列
          } else {
            row[i].colSpan = 0 // 其他列不显示
            if (columnIndex === i) {
              return { display: 'none' } // 隐藏这些列
            }
          }
        }
      }
      return {}
    },
    // 合并单元格
    arraySpanMethod({ row, column, rowIndex, columnIndex }) {
      // 合并第一列(type)
      if (columnIndex === 0) {
        // 检查当前行是否是该类型的第一行
        if (rowIndex === 0 || this.tableData[rowIndex - 1].type !== row.type) {
          let rowspan = 1
          // 计算当前类型的连续行数
          for (let i = rowIndex + 1; i < this.tableData.length; i++) {
            if (this.tableData[i].type === row.type) {
              rowspan++
            } else {
              break
            }
          }
          return {
            rowspan: rowspan,
            colspan: 1
          }
        } else {
          // 如果不是第一行,则隐藏该单元格
          return {
            rowspan: 0,
            colspan: 0
          }
        }
      }
     // 合并 type 为 '人工' 的行的第三列和第四列
      if (row.type === '人工') {
        if (columnIndex === 2) {
          return {
            rowspan: 1,
            colspan: 2
          }
        } else if (columnIndex === 3) {
          return {
            rowspan: 0,
            colspan: 0
          }
        }
      }
      // 默认返回值
      return {
        rowspan: 1,
        colspan: 1
      }
    },

    handleCellClick(row, column, cell, event) {
      console.log('点击的行数据:', row)
      console.log('点击的列数据:', column)
      console.log('点击的单元格元素:', cell)
      console.log('事件对象:', event)
      // 在这里添加你需要的逻辑
    }
  }
}
</script>
<style scoped lang="scss">

/deep/ .el-table__header th {
  text-align: center;
}
</style>

相关文章:

  • keil编译报错,error:xx.h:NO such file or directory 解决办法
  • StarRocks BE宕机排查
  • 【鸿蒙开发】Hi3861学习笔记- TCP客户端
  • 卷积神经网络 - AlexNet
  • Java学习总结-Map集合的实现类
  • 模数转换电路(A/D转换器)
  • 第一天学爬虫
  • <Transition>和<KeepAlive>组件一起用有什么用
  • 椭圆曲线密码学(ECC)深度解析:下一代非对称加密的核心
  • 【react】在react中async/await一般用来实现什么功能
  • 动态规划二维费用的背包系列一>一和零
  • 【CXX-Qt】5.1 CXX-Qt 构建系统
  • Go 代理爬虫
  • 《基于SpringBoot的图书网购平台的设计与实现》开题报告
  • leetcode11.盛水最多的容器
  • 「Unity3D」使用C#获取Android虚拟键盘的高度
  • hackmyvm-immortal
  • PCL 1.12.0 释放std::free(ptr)问题解决
  • 3.25-2request库
  • Sublime全局搜索快捷键Ctrl+Shift+F不能使用解决
  • 网页美工设计中职期末试卷/seo整站排名
  • 江西核工业建设有限公司网站/万网域名购买
  • 网站快速排名优化报价/网络营销事件
  • 做网站会用到什么语言/代运营公司排行榜
  • 有什么网站做任务换q币吗/百度广告优化师
  • 广东 政府网站 建设发展规划/网络整合营销