当前位置: 移动技术网 > IT编程>开发语言>JavaScript > element合并单元格方法及遇到问题的解决办法

element合并单元格方法及遇到问题的解决办法

2019年03月02日  | 移动技术网IT编程  | 我要评论
效果如图: 代码如下 曾遇到的问题:element表格单元格合并时,合并列数据不显示,数据错位。 原因是,表格的数据还没渲染完,合并的方法就执行了。解决办法:this.rowspan() 一定要放到接口调用成功,表格数据赋值完毕之后在执行。 ...

效果如图:

代码如下

<!-- 查看选课 -->
<template>
    <div>
        <el-table
                :data="listdata"
                :span-method="objectspanmethod"
                border
                style="width: 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() 一定要放到接口调用成功,表格数据赋值完毕之后在执行。

 

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网