首页 > 其他 > 详细

element表格分页多选、全选

时间:2020-03-20 17:03:45      阅读:134      评论:0      收藏:0      [点我收藏+]
<el-table stripe :data="list" border style="width: 100%" tooltip-effect="dark" v-loading="loading"
            element-loading-text="数据正在加载中" ref="multipleTable"
            @select="onTableSelect" @select-all="onTableSelectAll">
                <el-table-column type="selection" width="55" align="center"></el-table-column>
                
            </el-table>
            <!-- 分页 -->
            <div class="el_page-box" style="text-align: right; margin-top: 10px;">
                <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
                :current-page="currentPage" :page-sizes="pagesizeList" :page-size="pagesize"
                :layout="pageLayout" :total="total" :background=‘pageBackground‘>
                </el-pagination>
            </div>

<script>
import { pagingSearchCom } from ‘@/components/mixins/pagingSearch‘;
import { tableSelectCom } from ‘@/components/mixins/tableSelect‘;

export default {
    mixins: [pagingSearchCom, tableSelectCom],
    props: {
        checkList: {
            type: Array,
            default(){
                return []
            }
        },
    },
    created(){
        this.checkRowList = JSON.parse(JSON.stringify(this.checkList));
    },
    methods:{
        // 列表接口
        _requestPageList(pageData) {
            let data = {
                pageData,
                name: "",
            }
            let _this = this;
            this.loading = true;
            getUserPageListByDept(data).then(res => {
                if (res.data.returnResult == 200) {
                    this.loading = false;
                    this.list = res.data.returnData.data || []; //赋值列表数据
                    this.total = res.data.returnData.recordCount; //设置数据总数目!!!
                    this._toggleRowSelectionMixin();//mixins表格回显


                    return

                    // 以下是需要重置表格数据时写法(新增一个属性checkIn) -- 很少用到
                    let vcCheckInTypeList = [{id: 1},{id: 2}];
                    this.list = (res.data.returnData.data || []).map(e => {
                        let eIndex = _this.checkRowList.findIndex(ele => {return ele.id === e.id});
                        if(eIndex > -1){
                            e.checkIn = _this.checkRowList[eIndex].checkIn || vcCheckInTypeList[0];
                        } else {
                            e.checkIn = vcCheckInTypeList[0];
                        }
                        return e;
                    }); //赋值列表数据
                    this.total = res.data.returnData.recordCount; //设置数据总数目!!!
                    this._toggleRowSelectionMixin(true);//mixins表格回显
                }
            })
        }
    }
}
</script>

需要引入下面封装的分页控件和多选、全选控件

import { pagingSearchCom } from ‘@/components/mixins/pagingSearch‘;

// import { pagingSearchCom } from ‘@/components/mixins/pagingSearch‘
// mixins: [pagingSearchCom],

// 分页、查询 -- 封装在mixins里
import { mapState } from ‘vuex‘
export const pagingSearchCom = {
    data(){
        return {
            loading: false,
            list: [], //列表数据
            currentPage: 1, //当前页数
            pagesize: 10, //每页显示多少条
            pagesizeList: [10, 20, 30, 40, 50],
            pageLayout: "total, sizes, prev, pager, next, jumper",
            pageBackground: true,
            total: 0, //默认数据总数
            isCreated: false
        }
    },
    methods: {
        // 页码
        _getMixinsList(currentPage = this.currentPage, pagesize = this.pagesize) {
            this.currentPage = currentPage;
            this.pagesize = pagesize;
            this._requestPageList({
                pageNo: currentPage,
                pageSize: pagesize,
            })
        },
        // 列表接口
        _requestPageList(pageData) {},
        // 分页
        handleSizeChange(size) {
            this.pagesize = size;
            this._getMixinsList(1, size)
            //console.log(`每页 ${val} 条`);
        },
        handleCurrentChange(currentPage) {
            this._getMixinsList(currentPage)
            //console.log(`当前页: ${val}`);
        },
        //查询数据
        searchDataMixin() {
            // console.log(‘查询成功‘)
            this._getMixinsList(1)
        },
    },
    created() {
        if(this.isCreated){
            return
        }
        this._getMixinsList();
    },
    computed: {
        // 通过VUEX动态计算表格的高度
        ...mapState({
            tableHeight: state => state.searchCriteria.contentBoxHeight - 180
        })
    }
}

引入下面封装的分页多选、全选控件

// import { tableSelectCom } from ‘@/components/mixins/tableSelect‘
// mixins: [tableSelectCom],

export const tableSelectCom = {
    data(){
        return {
            checkRowList: [],
            innerVisible: true,
        }
    },
    methods: {
        closeEvt(){
            this.innerVisible = true;
            this.$emit(‘confirmEvt‘);
        },
        submitEvt(){
            this.$emit(‘confirmEvt‘, true, this.checkRowList);
        },
        // 取消默认选中项(单个勾选)
        /**
         *checkRowList 接口返回的默认勾选数组
        *id 列表唯一标识
        */ 
       onTableSelect (rows, row) {
            // console.log(rows,‘rows‘,row,‘row‘)
            if (!rows.includes(row)) {
                const index = this.checkRowList.findIndex(item => {return item.id === row.id});
                this.checkRowList.splice(index, 1)
            } else {
                this.checkRowList.push(row)
            }
        },
        // 全选操作
        onTableSelectAll (arr) {
            // console.log(arr,‘全选or取消全选‘)
            if (!arr.length) { // 直接取消选中全部
                this.list.forEach((v) => {
                    const index = this.checkRowList.findIndex(i => {return i.id === v.id})
                    if (index !== -1) {
                        this.checkRowList.splice(index, 1)
                    }
                })
            } else { // 直接选中全部
                this.list.forEach((v) => {
                    const index = this.checkRowList.findIndex(i => { return i.id === v.id })
                    if (index === -1) {
                        this.checkRowList.push(v)
                    }
                })
            }
        },
        _toggleRowSelectionMixin(isCheck = false){
            let _this = this;
            this.list.forEach(e => {
                let rIndex = _this.checkRowList.findIndex(ele => {return ele.id === e.id});
                if(rIndex > -1){
                    if(isCheck){
                        // 如果列表的值可以改变,需要重新勾选以绑定改变的值
                        _this.checkRowList.splice(rIndex,1, e);
                    }

                    _this.$nextTick(() => {
                        _this.$refs.multipleTable.toggleRowSelection(e, true);//这个就是回显的核心
                    })
                }
            })
        }
    }
}

 

element表格分页多选、全选

原文:https://www.cnblogs.com/lijh03/p/12532233.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!