vue页面实现table动态拆分列功能

效果如下

拆分table列

代码如下


<template>
    <div class="table-container">
      <div class="scroll-container">
        <table class="dynamic-table"> 
            <tbody>
              <tr>
                    <td rowspan="2" style="width: 200px;">时间段</td>
                    <td rowspan="2" style="width: 150px;">时间</td>
                    <td colspan="6">FM-1 <el-button size="mini" type="primary" plain @click="inputColspan('FM-1')">拆分列</el-button></td>
                    <td colspan="6">FM-3 <el-button size="mini" type="primary" plain @click="inputColspan('FM-3')">拆分列</el-button></td>
                    <td colspan="6">FM-2 <el-button size="mini" type="primary" plain @click="inputColspan('FM-2')">拆分列</el-button></td>
                    <td colspan="6">FM-4 <el-button size="mini" type="primary" plain @click="inputColspan('FM-4')">拆分列</el-button></td>
                </tr>
                <tr>
                    <td >1xh</td>
                    <td >2xh</td>
                    <td >3xh</td>
                    <td >4xh</td>
                    <td >5xh</td>
                    <td >6xh</td>
                    <td >1xh</td>
                    <td >2xh</td>
                    <td >3xh</td>
                    <td >4xh</td>
                    <td >5xh</td>
                    <td >6xh</td>
                    <td >1xh</td>
                    <td >2xh</td>
                    <td >3xh</td>
                    <td >4xh</td>
                    <td >5xh</td>
                    <td >6xh</td>
                    <td >1xh</td>
                    <td >2xh</td>
                    <td >3xh</td>
                    <td >4xh</td>
                    <td >5xh</td>
                    <td >6xh</td>
                </tr>
                <tr>
                    <td rowspan="4">8:00-10:00</td>
                    <td rowspan="3">2H</td>
                    <td :colspan="col.colspan" v-for="col in columns" :key="col.id">
                      <el-select style="width: 100%;text-align: center;" v-model="col.selectValue1" placeholder="请选择">
                          <el-option
                            v-for="item in options"
                          :key="item"
                          :label="item"
                          :value="item">
                          </el-option>
                      </el-select>
                    </td>

                 
                </tr>
                <tr>
                  <td :colspan="col.colspan" v-for="col in columns" :key="col.id">
                      <el-select style="width: 100%;text-align: center;" v-model="col.selectValue2" placeholder="请选择">
                          <el-option
                            v-for="item in options"
                          :key="item"
                          :label="item"
                          :value="item">
                          </el-option>
                      </el-select>
                    </td>
                
                </tr>
                <tr>

                  <td :colspan="col.colspan" v-for="col in columns" :key="col.id">
                      <el-select style="width: 100%;text-align: center;" v-model="col.selectValue3" placeholder="请选择">
                          <el-option
                            v-for="item in options"
                          :key="item"
                          :label="item"
                          :value="item">
                          </el-option>
                      </el-select>
                    </td>

                
                </tr>
                <tr>
                    <td >数量</td>

                    <td :colspan="col.colspan" v-for="col in columns" :key="col.id">
                      <el-select style="width: 100%;text-align: center;" v-model="col.selectValue4" placeholder="请选择">
                          <el-option
                            v-for="item in options"
                          :key="item"
                          :label="item"
                          :value="item">
                          </el-option>
                      </el-select>
                    </td>

                </tr>
                

                               
            </tbody>

        </table>
     </div>
    </div>
  </template>
  
  <script>
  export default {
    data() {
      return {
        columns: [
          { id: 1, selectValue1: '',selectValue2: '', selectValue3: '', selectValue4: '',colspan:6 ,heatNum:'FM-1'},
          { id: 2, selectValue1: '',selectValue2:  '', selectValue3: '', selectValue4: '',colspan:3,heatNum:'FM-3'},
          { id: 3, selectValue1: '', selectValue2: '', selectValue3: '', selectValue4: '',colspan:3,heatNum:'FM-3' },
          { id: 4, selectValue1: '',selectValue2:  '' , selectValue3: '', selectValue4: '',colspan:6 ,heatNum:'FM-2'},
          { id: 5, selectValue1: '',selectValue2:  '' , selectValue3: '', selectValue4: '',colspan:6,heatNum:'FM-4'}

        
      ],

      options: ['选项1', '选项2','选项3', '选项4','选项5'],
     

      }
    },
    
    methods: {
      inputColspan(heatNum) {
        this.$prompt('请输入合并列数', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
        
        }).then(({ value }) => {
          this.addColumn(value,heatNum);
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '取消输入'
          });       
        });
    },
    addColumn(colspan,heatNum) {
     
      var index=0;
      var id=this.columns.length;
      var selectColumn=[];
      for(var i=0;i<this.columns.length;i++){
          if(this.columns[i].heatNum==heatNum){
            index=i;
            selectColumn.push(this.columns[i]);
          }
      }
      var cols=colspan.split(',');
      var sumColspan=0;
      for(var i=0;i<cols.length;i++){
        sumColspan+=parseInt(cols[i]);
      }
      if(sumColspan!=6){
        this.$message({
          message: '拆分列格式错误',
          type: 'warning'
        });
      }else{
        var addCount=cols.length-selectColumn.length;
        console.log(cols);
      for(var j=0;j<selectColumn.length;j++){
        selectColumn[j].colspan=cols[j];
      }
      for(var h=0;h<addCount;h++){
        this.columns.splice(index+h+1,0,{ id: id+h, selectValue1: '', selectValue2: '' , selectValue3: '', selectValue4: '',colspan:cols[selectColumn.length+h] ,heatNum:heatNum})
      }
      
      }
      
    }

    
    }
  }
  </script>
  
  <style scoped>

.scroll-container {
  height: calc(100vh - 70px);
  overflow-y: auto;
  margin-top: 10px;
  border: 1px solid #ddd;
}
  .table-container {
    padding: 20px;
    height: 100%;
  }
  
  .dynamic-table {
  border: 1px solid #000;
  border-collapse: collapse;
  display: inline-block;
}
.dynamic-table td {
  border: 1px solid #000;
  padding: 3px;
  width: 100px;
  text-align: center;
}
/deep/ .el-input__inner {
text-align: center;
}
  
  
  </style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值