zoukankan      html  css  js  c++  java
  • element合并单元格方法及遇到问题的解决办法

    效果如图:

    代码如下

    <!-- 查看选课 -->
    <template>
        <div>
            <el-table
                    :data="listData"
                    :span-method="objectSpanMethod"
                    border
                    style=" 100%; margin-top: 20px"
            >
                <el-table-column
                        prop="team"
                        label="团队">
                </el-table-column>
                <el-table-column
                        prop="realName"
                        label="姓名">
                </el-table-column>
                <el-table-column
                        prop="courseId"
                        label="课程编号">
                </el-table-column>
                <el-table-column
                        prop="courseName"
                        label="课程名称">
                </el-table-column>
                <el-table-column
                        prop="description"
                        label="课程简介">
                </el-table-column>
                <el-table-column
                        prop="trainingType"
                        label="形式">
                </el-table-column>
                <el-table-column
                        prop="trainingTime"
                        label="开课时间">
                </el-table-column>
                <el-table-column
                        prop="trainingDays"
                        label="时长">
                </el-table-column>
                <el-table-column
                        prop="courseType"
                        label="类型">
                    <template slot-scope="scope">
                        <span v-if="scope.row.courseType === 0">待审批</span>
                        <span v-else-if="scope.row.courseType === 1">已审批</span>
                        <span v-else-if="scope.row.courseType === 2">退回重选</span>
                        <span v-else>取消重选</span>
                    </template>
                </el-table-column>
                <el-table-column
                        prop="approvalStatus"
                        label="审批状态">
                    <template slot-scope="scope">
                        <span v-if="scope.row.approvalStatus === 0">待审批</span>
                        <span v-else-if="scope.row.approvalStatus === 1">已审批</span>
                        <span v-else-if="scope.row.approvalStatus === 2">退回重选</span>
                        <span v-else>取消重选</span>
                    </template>
                </el-table-column>
            </el-table>
            <el-pagination
                    @size-change="sizeChangeHandle"
                    @current-change="currentChangeHandle"
                    :current-page="pageIndex"
                    :page-sizes="[10, 20, 50, 100]"
                    :page-size="pageSize"
                    :total="totalPage"
                    layout="total, sizes, prev, pager, next, jumper">
            </el-pagination>
        </div>
    </template>
    
    <script>
        export default {
            name: "",
            data() {
                return {
                    pageIndex: 1,
                    pageSize: 10,
                    totalPage: 0,
                    dataListLoading: false,
                    dataForm: {},
                    listData: [],
                    rowList: [],
                    spanArr: [],
                    formLabelWidth: '90px',
                    roleType: 'bumen'  // 角色,是团队负责人还是部门负责人
                }
            },
            methods: {
                // 每页数
                sizeChangeHandle (val) {
                    this.pageSize = val
                    this.pageIndex = 1
                    this.getDataList()
                },
                // 当前页
                currentChangeHandle (val) {
                    this.pageIndex = val
                    this.getDataList()
                },
                // 获取数据列表
                getDataList(){//查询操作
                    this.dataListLoading = true
                    this.$http({
                        url: this.$http.adornUrl('/courseselect/emptraining/getLeaderSelectCourses'),
                        method: 'get',
                        params: this.$http.adornParams({
                            'page': this.pageIndex,
                            'limit': this.pageSize,
                        })
                    }).then(({data}) => {
                        if (data && data.code === 0) {
                            this.listData = data.data.list
                            this.totalPage = data.data.totalCount
                            this.roleType = data.leaderType === 1 ? 'bumen' : 'tuandui'
                            this.rowspan()
                        } else {
                            this.listData = []
                            this.totalPage = 0
                        }
                        this.dataListLoading = false
                    })
                },
    
                rowspan() {
                    this.listData.forEach((item,index) => {
                        if( index === 0){
                            this.spanArr.push(1);
                            this.position = 0;
    
                        }else{
                            if(this.listData[index].type === this.listData[index-1].type ){
                                this.spanArr[this.position] += 1;
                                this.spanArr.push(0);
                            }else{
                                this.spanArr.push(1);
                                this.position = index;
                            }
                        }
                    })
                },
                objectSpanMethod({ row, column, rowIndex, columnIndex }) {  //表格合并行
                    console.log(this.roleType)
                    if (this.roleType === 'bumen'){
                        if (columnIndex === 0) {
                            const _row = this.spanArr[rowIndex];
                            const _col = _row>0 ? 1 : 0;
                            return {
                                rowspan: _row,
                                colspan: _col
                            }
                        }
                        if(columnIndex === 1){ //合并第三列 内容相同的
                            const _row = this.spanArr[rowIndex];
                            const _col = _row>0 ? 1 : 0;
                            return {
                                rowspan: _row,
                                colspan: _col
                            }
                        }
                    }else {
                        if( columnIndex === 0){ //合并第三列 内容相同的
                            const _row = this.spanArr[rowIndex];
                            const _col = _row>0 ? 1 : 0;
                            return {
                                rowspan: _row,
                                colspan: _col
                            }
                        }
                    }
    
                },
            },
            mounted() {
                this.getDataList();
            }
        }
    </script>
    
    <style scoped>
    
    </style>

    曾遇到的问题:element表格单元格合并时,合并列数据不显示,数据错位。

    原因是,表格的数据还没渲染完,合并的方法就执行了。解决办法:this.rowspan() 一定要放到接口调用成功,表格数据赋值完毕之后在执行。

  • 相关阅读:
    PAT 甲级 1041 Be Unique (20 分)(简单,一遍过)
    [精]Odoo 8.0深入浅出开发教程-模块开发基础
    iOS开发- UILabel 自己主动换行 及 高度自适应
    Android
    权限管理表结构设计
    创建SQL语句_面试
    Hasen的linux设备驱动开发学习之旅--时钟
    关于源程序到可运行程序的过程
    微信服务号 微信支付开发
    MongoDB基础入门视频教程
  • 原文地址:https://www.cnblogs.com/wenrain/p/10456940.html
Copyright © 2011-2022 走看看