element ui ---table 多级表头嵌套以及合并单元格(一)

最近做的项目中有个合并表头和内容的表格,觉得新鲜,记录一下知识点。

要实现的效果如下:

 

 第一行和第二行分别是表头,第三行和第四行第一列实现多行合并。具体代码实现如下(代码是直接摘取项目):

        <el-row style="margin-top:20px" v-for="(item,index) in detailData" :key="index">
                        <el-table  
                            :span-method="arraySpanMethod"
                            :data="item.typeList">
                            <el-table-column 
                                prop=""
                                :label="item.labelName | sliceNumbers">
                                <el-table-column prop="infoTypeName" label=" " align="center"></el-table-column>
                                <el-table-column prop="organizationCode" label="门店编码" align="center"></el-table-column>
                                <el-table-column prop="unitDesc" width="120" label="基本计量单位描述" align="center"></el-table-column>
                                <el-table-column prop="controlTypeDesc" label="管控描述" align="center"></el-table-column>
                                <el-table-column prop="brand" label="品牌" align="center"></el-table-column>
                                <el-table-column prop="specs" label="规格" align="center"></el-table-column>
                                <el-table-column prop="goodsModel" label="型号" align="center"></el-table-column>
                                <el-table-column prop="isHighValue" label="高低值" align="center"></el-table-column>
                                <el-table-column prop="batchSwitch" label="批次管理" align="center"></el-table-column>
                                <el-table-column prop="isBargain" label="是否划扣" align="center"></el-table-column>
                                <el-table-column prop="effectiveDate" width="100" label="有效期" align="center"></el-table-column>
                                <el-table-column prop="locationTypeDesc" label="库存来源" align="center"></el-table-column>
                                <el-table-column prop="stockAddressDesc" label="仓库编码" align="center"></el-table-column>
                                <el-table-column prop="amount" label="申请/发放数量" align="center"></el-table-column>
                            </el-table-column>
                            <el-table-column :label="item.statusDesc" align="center">
                                <el-table-column align="center" label="操作">
                                    <template slot-scope="scope">
                                        <el-button
                                            v-show="scope.row.buttonType == 1"
                                            :disabled="scope.row.buttonStatus == 0"
                                            @click="handleClick('provide',{index:scope.$index,data:scope.row})"
                                            type="text"
                                            v-preventReClick
                                            size="small">
                                            发放
                                        </el-button>
                                        <el-button
                                            v-show="scope.row.buttonType == 2"
                                            :disabled="scope.row.buttonStatus == 0"
                                            @click="handleClick('amend',{index:scope.$index,data:scope.row})"
                                            type="text"
                                            v-preventReClick
                                            size="small">
                                            修改
                                        </el-button>
                                        <el-button
                                            v-show="scope.row.buttonType == 3"
                                            :disabled="scope.row.buttonStatus == 0"
                                            v-preventReClick
                                            @click="handleClick('delete',{index:scope.$index,data:scope.row})"
                                            type="text"
                                            size="small">
                                            删除
                                        </el-button>
                                    </template>
                                </el-table-column>
                            </el-table-column>
                        </el-table>
                    </el-row>

js部分:

 this.$get(window.jxLocal,params).then(res=>{
                this.detailData = res.data;
                if(this.detailData.length>0){
                    this.detailData.forEach(item =>{
                        this.$set(item,'labelName',(item.materialCode+item.materialDesc))
                        if(item.typeList && item.typeList.length>0){ 
                            item.typeList = this.handleTableArr(item.typeList)
                        }
                    });
                }
            })

初始化后台返回的数据

   // 初始化详情表格数据格式
        handleTableArr(data){
            let arr = [];
            data.forEach(element => {
                let count = 0;
                element.infoList.forEach((item,index)=>{
                    count++;
                    this.stockapplyId =  element.infoList[0].id;
                    let deductChildInfo = {
                        span_name: index==0? element.infoList.length:0,
                        id:item.id,
                        organizationCode: item.organizationCode,
                        unitDesc:item.unitDesc,
                        controlTypeDesc: item.controlTypeDesc,
                        brand: item.brand,
                        specs: item.specs,
                        goodsModel: item.goodsModel,
                        isHighValue: item.isHighValue,
                        batchSwitch: item.batchSwitch,
                        isBargain: item.isBargain,
                        effectiveDate: item.effectiveDate,
                        locationTypeDesc: item.locationTypeDesc,
                        stockAddressDesc: item.stockAddressDesc,
                        stockReceiveApplyId:item.stockReceiveApplyId,
                        amount: item.amount,
                        status:item.status,
                        statusDesc: item.statusDesc,
                        buttonType:item.buttonType, //按钮类型 1发放 2修改 3删除
                        buttonStatus:item.buttonStatus, //按钮可用状态 0不可用 1可用
                        infoTypeName: element.infoTypeName,
                        infoType:element.infoType
                    }
                    arr.push(deductChildInfo);
                })
                arr[arr.length - count]["count"] = count;
            });
            return arr;
        },

表格合并方法:

 // 表格合并的方法
        arraySpanMethod({row, column, rowIndex, columnIndex}) {
            // 第一列
            if (columnIndex === 0){
                if (row.count){
                    return [row.count, 1]
                }else{
                    return [0, 0]
                }
            }
        },

 

posted @ 2021-02-01 17:29  巫小婆  阅读(4218)  评论(0编辑  收藏  举报