vue+elementui 实现合并多个单元格

要注意的是 合并单元格时 后端返回的数据必须与表格绑定的顺序一致

vue-dom层

 	<el-table ref="report-table" :data="dataList" border v-loading="dataListLoading"
        @selection-change="handleSelectionChange" style="width: 100%;border: 1px solid #c5c5c5"
        :cell-style="{borderColor:'#c5c5c5'}" :span-method="objectSpanMethod"
        :header-cell-style="{background: '-webkit-linear-gradient(top,hsl(0deg 2% 26% / 15%),#E3EBF1,hsl(0deg 0% 100%),#D3DDE5) no-repeat',borderColor:'#B5B4B3',color:'#606266'}">
        <el-table-column type="selection" width="55"> </el-table-column>
        <el-table-column prop="rcCode" show-overflow-tooltip header-align="center" align="center" label="编号">
        </el-table-column>
        <el-table-column prop="manufactor" header-align="center" align="center" show-overflow-tooltip label="厂家">
        </el-table-column>
    </el-table>
// data
data() {
    return {
      dataList: [], //请求数据绑定element-ui的表格
      spanArr: [], // 第一列的数据
      spanArr1: [], // 第二列数据
      pos: 0, // 第一列数据
      pos1: 0, //第二列数据
    };

方法

  objectSpanMethod({ row, column, rowIndex, columnIndex }) {
  // 判断每一列 合并数据
      if (columnIndex == 0) {
        let _row = this.spanArr[rowIndex];
        let _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col,
        };
      }
      if (columnIndex == 1) {
        let _row = this.spanArr1[rowIndex];
        let _col = _row > 0 ? 1 : 0;
        return {
          rowspan: _row,
          colspan: _col,
        };
      }
    },
    getSpanArr(data) {
      // 第一列处理
      console.log(data);
      this.spanArr = [];
      if (data === null) {
        return;
      }
      for (let i = 0; i < data.length; i++) {
        if (i === 0) {
          this.spanArr.push(1);
          this.pos = 0;
          
        } else {
          
          //第一次走else的时候:i已经是1了
          // 判断当前元素与上一个元素是否相同
          if (data[i].rcCode === data[i - 1].rcCode) {
            this.spanArr[this.pos] += 1;
            this.spanArr.push(0);
          } else {
            this.spanArr.push(1);
            this.pos = i;
          }
        }
      }

      // 第二列处理
      this.spanArr1 = [];
      if (data === null) {
        return;
      }
      for (let i = 0; i < data.length; i++) {
        if (i === 0) {
          this.spanArr1.push(1);
          this.pos1 = 0;
          
        } else {
         
          //第一次走else的时候:i已经是1了
          // 判断当前元素与上一个元素是否相同
          if (data[i].rcCode === data[i - 1].rcCode && data[i].manufactor === data[i - 1].manufactor) {

            this.spanArr1[this.pos1] += 1;
            this.spanArr1.push(0);
          } else {
            this.spanArr1.push(1);
            this.pos1 = i;
          }
        }
      }
      console.log(this.spanArr1,'this.spanArr');
    },

// 第三列以此类推
在请求完dataList数据之后执行方法

this.getSpanArr(this.dataList);

最后效果图

用每一列数据的每一行做对比 相同的合并 具体看需求 后端返回数据为平铺数组 找相同的元素合并
-编号
除了编号 其他都是在相同编号下进行合并

可能很拙略很冗长 记录一下

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
VueElement UI都是现代化的前端框架,各自拥有强大的API和功能。在Vue中,我们可以简单地使用v-for指令和props从服务器加载表格数据,并在页面上呈现出来。然后,我们可以使用v-on指令(或简化的@符号)来监听单元格的点击事件。当单元格被点击时,我们可以使用Element UI的Dialog组件来呈现一个弹框。 具体实现过程如下: 1. 首先,我们需要安装VueElement UI。你可以单独下载这两个框架,然后将它们引入你的项目中,或者你可以使用npm来安装它们: npm install vue npm install element-ui 2. 然后,我们需要从服务器加载表格数据。假设数据已经存储在组件的data属性中,并且我们使用了一个简单的表格模板: <table> <thead> <tr> <th>名称</th> <th>价格</th> <th>描述</th> </tr> </thead> <tbody> <tr v-for="(item, index) in items" :key="index"> <td>{{ item.name }}</td> <td>{{ item.price }}</td> <td>{{ item.description }}</td> </tr> </tbody> </table> 3. 接下来,我们需要监听单元格的点击事件。我们可以为每个单元格添加一个事件处理程序,并从事件对象中获取所点击的单元格的数据。为了简化代码并提高可维护性,我们可以将单元格的点击事件封装在一个自定义组件中: <template> <td @click="showDialog">{{ value }}</td> </template> <script> export default { props: ['value'], methods: { showDialog() { // 显示弹框 } } } </script> 4. 最后,我们需要使用Element UI的Dialog组件来创建一个弹框,用来显示所选中单元格的详细信息。我们可以在自定义组件的showDialog方法中使用Dialog组件来实现: <template> <td @click="showDialog">{{ value }}</td> </template> <script> export default { props: ['value'], methods: { showDialog() { this.$alert(this.value, '详细信息', { confirmButtonText: '确定' }) } } } </script> 在上面这个例子中,我们使用了Element UI的$alert方法来创建一个弹框,其中的文本内容就是我们所点击单元格的数据。Dialog组件的具体使用方法可以在官方文档中查看。 总结: 以上就是使用VueElement UI实现点击表格中单元格后弹出弹框的简单实现方法。通过这个例子,我们可以看到VueElement UI的强大功能和易用性。如果你还不熟悉这两个框架,那么现在就是时候开始学习它们了!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值