国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【element-ui】使用el-checkbox完成el-table表格數(shù)據(jù)的全選操作

這篇具有很好參考價值的文章主要介紹了【element-ui】使用el-checkbox完成el-table表格數(shù)據(jù)的全選操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

需求:表格有一列為勾選框列,表格下面有單獨的按鈕本頁勾選和全部勾選,跨頁狀態(tài)可以保存回顯,如下圖所示:

【element-ui】使用el-checkbox完成el-table表格數(shù)據(jù)的全選操作

思路:使用一個數(shù)組[]存儲每一頁是否全選的狀態(tài),再使用{}來存儲數(shù)據(jù)的所有選中狀態(tài),其中key為對應(yīng)的頁碼,value為每一頁的選中數(shù)據(jù)【核心?】

1、el-table表格每一行綁定狀態(tài),這里沒有使用el-table自帶的type為selection的多選框

<el-table-column
         label="選擇"
         width="60"
         align="center"
   >
       <template slot-scope="scope">
       <el-checkbox v-model="scope.row.isSelect" :label="scope.row"  @change="(val) => handleSelect(val, scope.row)"><br></el-checkbox>
       </template>
 </el-table-column>

 <div style="float: left; line-height: 28px" class="ml15">
        <el-checkbox v-model="currentCheck" @change="chooseCurrent">本頁全選</el-checkbox>
       <el-checkbox v-model="allCheck" @change="chooseAll" >全部選擇</el-checkbox>(已選 <span class="txt_primary">{{sum}}</span> 條)
</div>

2、初始化準備好各種數(shù)據(jù)

data() {
        return {
        tableData: [], // 表格
        allCheckedList:{}, // 所有選中數(shù)據(jù)
        currentChecked:[], // 每頁狀態(tài)
        tablePage:[10, 1, 500],
        currentCheck:false,
        allCheck:false,
        pageSum:0,
       sum:0,
      };
   },

methods:{
           // 加載表格并初始化各項數(shù)據(jù)
            loadTable() {
                axios({
                    method: "post",
                    url: "",
                    data: {
                        ajax: true,
                        act: "", 
                    },
                }).then((response) => {
                    let resp = response.data;
                    if (resp.success) {
                        this.tableData = resp.list;
                        this.tablePage =  resp.pagging;
                        this.tableData.forEach(item=>{
                            this.$set(item, 'isSelect', false)
                        });
                        this.currentChecked = [];
                        if(this.tablePage[2]%this.tablePage[0] !=0 ){
                            this.pageSum = parseInt(this.tablePage[2]/this.tablePage[0]) + 1 ;
                        } else {
                            this.pageSum = parseInt(this.tablePage[2]/this.tablePage[0]);
                        }
                        for(let i=0; i<this.pageSum;i++){
                            this.currentChecked.push('false');
                        }
                        for(let i=1; i<=this.pageSum; i++){
                            this.allCheckedList[i] = [];
                        }
                    } else {}
                }).catch(error=> {});
            },}

3、主要的全選、單選、取消勾選等聯(lián)動邏輯

   methods:{            
            // 本頁全選
            chooseCurrent(){
                if(this.currentCheck){
                    this.currentChecked[(this.tablePage[1]-1)] = 'true';
                    this.tableData.forEach(item=>{
                        this.$set(item, 'isSelect', true);
                    });
                    for(let key in this.allCheckedList){
                        if(key == this.tablePage[1]){
                            this.allCheckedList[this.tablePage[1]] = deepclone(this.tableData);
                        }
                    }
                } else {
                    this.currentChecked[(this.tablePage[1]-1)] = 'false';
                    this.tableData.forEach(item=>{
                        this.$set(item, 'isSelect', false);
                    });
                    for(let key in this.allCheckedList){
                        if(key == this.tablePage[1]){
                            this.allCheckedList[this.tablePage[1]]= [];
                        }
                    }
                }
            },
            // 全部全選
            chooseAll(){
                if(this.allCheck){
                    this.currentChecked = [];
                    for(let key in this.allCheckedList){
                        this.allCheckedList[key] = [];
                    }
                    if(this.tablePage[2]%this.tablePage[0] !=0 ){
                        this.pageSum = parseInt(this.tablePage[2]/this.tablePage[0]) + 1 ;
                    } else {
                        this.pageSum = parseInt(this.tablePage[2]/this.tablePage[0]);
                    }
                    for(let i=0; i<this.pageSum;i++){
                        this.currentChecked.push('true');
                    }
                    for(let key in this.allCheckedList){
                        if(key == this.tablePage[1]){
                            this.allCheckedList[this.tablePage[1]] = deepclone(this.tableData);
                        }
                    }
                } else {
                    this.currentChecked = [];
                    for(let key in this.allCheckedList){
                        this.allCheckedList[key] = [];
                    }
                    for(let i=0; i<this.pageSum;i++){
                        this.currentChecked.push('false');
                    }
                }
            },
            // 單行選擇
            handleSelect(val,row){
                if(val){
                    for (let key in this.allCheckedList){
                        if(key == this.tablePage[1]){
                            let hasObj = false;
                            this.allCheckedList[this.tablePage[1]].forEach(item =>{
                                if (item.durrec_id == row.durrec_id) {
                                    hasObj = true;
                                }
                            })
                            if (!hasObj) {
                                this.allCheckedList[this.tablePage[1]].push(row);
                            }
                        }
                    }
                } else {
                    for ( let key in this.allCheckedList){
                        if(key == this.tablePage[1]){
                            for(let i = 0; i < this.allCheckedList[this.tablePage[1]].length;i++){
                                if(row.durrec_id == this.allCheckedList[this.tablePage[1]][i].durrec_id){
                                    this.allCheckedList[this.tablePage[1]].splice(i,1)
                                }
                            }
                        }
                    }
                }
                for(let key in this.allCheckedList){
                    if(key == this.tablePage[1]){
                        if(this.allCheckedList[this.tablePage[1]].length == this.tableData.length){
                            this.currentChecked[(this.tablePage[1]-1)] = 'true';
                        } else {
                            this.currentChecked[(this.tablePage[1]-1)] = 'false';
                        }
                    }
                }
            },

           // 計算已選數(shù)據(jù)
            checkSum(){
                this.sum = 0;
                let currentSum = [];
                for(let i = 0; i<this.currentChecked.length;i++){
                    if(this.currentChecked[i] == 'true' && (i + 1) != this.pageSum){
                        currentSum.push(this.tablePage[0]);
                    } else if(this.currentChecked[i] == 'true' && (i + 1) == this.pageSum){
                        currentSum.push(this.tablePage[2] - this.tablePage[0] * (this.pageSum -1));
                    } else {
                        currentSum.push(this.allCheckedList[i+1].length);
                    }
                }
                for(let i = 0; i< currentSum.length;i++){
                    this.sum += currentSum[i];
                }
            },
    },

4、因為只能拿到當前分頁的數(shù)據(jù),無法拿到所有數(shù)據(jù),使用watch監(jiān)聽了一下

    watch:{
            tableData:{
                handler (value) {
                    // 表格分頁后的數(shù)據(jù)狀態(tài)
                    if(this.currentChecked[(this.tablePage[1]-1)] == 'true'){
                        value.forEach(item=>{
                            this.$set(item, 'isSelect', true);
                        });
                        for(let key in this.allCheckedList){
                            if(key == this.tablePage[1]){
                                this.allCheckedList[this.tablePage[1]] = deepclone(value);
                            }
                        }
                        this.currentCheck = true;
                    } else {
                        for(let key in this.allCheckedList){
                            if(key == this.tablePage[1]){
                                if(this.allCheckedList[this.tablePage[1]].length !==0){
                                    this.allCheckedList[this.tablePage[1]].forEach(item =>{
                                        value.forEach(i=>{
                                           if(item.durrec_id == i.durrec_id){
                                               this.$set(i, 'isSelect', true);
                                           }
                                        })
                                    })
                                } else {
                                    value.forEach(item=>{
                                        this.$set(item, 'isSelect', false);
                                    })
                                }
                            }
                        }
                        this.currentCheck = false;
                    }
                    // 判斷全選按鈕
                    let allCheck = true;
                    this.currentChecked.forEach(checkFlag=>{
                        allCheck = allCheck && checkFlag == 'true'
                    })
                    this.allCheck = allCheck;
                    // 計算已選數(shù)量
                    this.checkSum();
                },
                deep:true
            },
            currentChecked:{
                handler(value){
                    if(value[(this.tablePage[1])-1] == 'true'){
                        this.tableData.forEach(item=>{
                            this.$set(item, 'isSelect', true);
                        })
                    } else {
                        this.tableData.forEach(item=>{
                            this.$set(item, 'isSelect', false);
                        })
                    }
                   this.checkSum();
                },
                deep:true
            },
        },

5、回傳所有的已選數(shù)據(jù),利用分頁的請求又拿了一遍數(shù)據(jù)

          // 批量提醒
            allWarning(){
                if(this.allCheck){
                    axios({
                        method: "post",
                        url: "",
                        data: {
                            ajax: true,
                            act: "",
                            check:'T',
                        },
                    }).then((response) => {
                        let resp = response.data;
                        if (resp.success) {
                           // ...
                        } else {
                            this.$message.error(resp.message);
                        }
                    }).catch(error=> {
                    });
                } else {
                    let choosedIdT = [];
                    let choosedIdF = [];
                    for(let i=0; i<this.currentChecked.length; i++){
                        if(this.currentChecked[i] == 'true'){
                            axios({
                                method: 'post', url: '',
                                data: {
                                    ajax: true, act: '', page: i+1,
                                }
                            }).then( response => {
                                let resp = response.data;
                                if(resp.success){
                                    const pageList = deepclone(resp.list);
                                    pageList.forEach(item =>{
                                        choosedIdT.push(item.durrec_id);
                                    })
                                }else{
                                    Valert({msg:resp.message})
                                }
                            }).catch(error=> { });
                        } else {
                            this.allCheckedList[i+1].forEach(i=>{
                                choosedIdF.push(i.durrec_id);
                            })
                        }
                    }
                    setTimeout(()=>{
                        const ids = choosedIdT.concat(choosedIdF);
                        axios({
                            method: "post",
                            url: "/",
                            data: {
                                ajax: true,
                                act: "",
                                check:'F',
                                id:ids.join(","),
                            },
                            loading:{ target:".table"}
                        }).then((response) => {
                            let resp = response.data;
                            if (resp.success) {
                                // ...
                            } else {
                                this.$message.error(resp.message);
                            }
                        }).catch(error=> { });
                    },300)
                }
            },

記錄一些繁瑣精巧的笨方法??文章來源地址http://www.zghlxwxcb.cn/news/detail-504743.html

到了這里,關(guān)于【element-ui】使用el-checkbox完成el-table表格數(shù)據(jù)的全選操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 開發(fā)需求15-使用el-checkbox組件實現(xiàn)el-tree組件的父子關(guān)聯(lián)關(guān)系(非全選/全不選)

    需求描述: 大家都知道el-tree可以很明顯的通過選中來體現(xiàn)上下節(jié)點的父子選中狀態(tài),那么如果要求把后端把el-tree的數(shù)據(jù)結(jié)構(gòu),通過一個展開的list返回給你,使用el-checkbox組件渲染每一個節(jié)點,同時要求選中某一個節(jié)點,同時可以選中其父節(jié)點和子節(jié)點;取消也是一樣。 思路

    2024年04月17日
    瀏覽(26)
  • element-ui checkbox 組件源碼分享

    element-ui checkbox 組件源碼分享

    簡單分享 checkbox 組件,主要從以下三個方面來分享: 1、組件的頁面結(jié)構(gòu) 2、組件的屬性 3、組件的方法 一、組件的頁面結(jié)構(gòu) 二、組件的屬性 2.1?value / v-model 屬性,綁定的值,類型 string / number / boolean,無默認值。 首先討論單個 checkbox,通過 props 接收 父組件傳遞過來的 va

    2024年03月24日
    瀏覽(22)
  • 解決el-checkbox點擊文字也會選中

    解決el-checkbox點擊文字也會選中

    最近要做一個 多選框嵌套下拉框的一個功能,在點擊下拉框時,多選框一直會被選中或者取消,這里做一下解決記錄 首先展示一下要做的功能 出現(xiàn)原因: el 的checkbox的組件整個是由lable包裹的,所以重寫el-checkbox就可以了 原編碼: 解決: 這里用div或者span都是可以的,div會

    2024年02月05日
    瀏覽(23)
  • vue 實現(xiàn)element-ui checkbox全選操作

    簡單寫法

    2024年02月15日
    瀏覽(21)
  • el-checkbox 多選搜索查詢,搜索后選中狀態(tài)仍保留
  • vue使用element-ui,el-table不顯示

    例如:新增了一個表格,按官網(wǎng)代碼貼過來的,結(jié)果一直不顯示 代碼如下一模一樣,其他數(shù)據(jù)正常顯示,就表格不顯示 其實版本庫不一致導(dǎo)致的,賊坑,又不提示 先卸載element-ui安裝一個低版本的element-ui就可以解決``

    2024年02月11日
    瀏覽(30)
  • 使用element-ui el-select 做下拉 全選+搜索 功能

    使用element-ui el-select 做下拉 全選+搜索 功能

    使用element-ui el-select 做下拉 全選+搜索 功能 有時候,需要用到下拉列表 全選和搜索,并且鼠標放入的時候有下拉列表展示。以前的做法是 check + el-input搜索結(jié)合做個組件,現(xiàn)在這個方法直接使用el-select 就能做到這個需求功能:有搜索+有全選+有取消+有確認請求+有鼠標移入自

    2024年02月11日
    瀏覽(25)
  • Vue, Element-UI 滾動條: el-scrollbar 基本使用

    Vue, Element-UI 滾動條: el-scrollbar 基本使用

    參與修改前端項目(Vue, Element-UI),添加用戶體驗性需求,只涉及頁面UI,未涉及數(shù)據(jù)交互 為一個窗口添加滑動欄 使用el-scrollbar 框架 注意 1,默認xy都有滑動欄,添加以下代碼可以隱藏x軸的滑動欄 2,style中 1). 必須去掉scoped,否則overflow-x: hidden失效 2.)外包一個div 來減少

    2024年02月15日
    瀏覽(36)
  • element-ui中el-progress的復(fù)雜型使用場景

    element-ui中el-progress的復(fù)雜型使用場景

    根據(jù)目前的element-ui, 無法直接使用format屬性去循環(huán)動態(tài)添加多個環(huán)形進度條的指定文字內(nèi)容, 因為format中限定了函數(shù)參數(shù) ,如下: 因此采取了一些迂回的寫法 如下圖:

    2024年02月16日
    瀏覽(26)
  • vue、element-ui使用el-tooltip判斷文本是否溢出

    1.需求:需要實現(xiàn)文本單行顯示,超出時,使用省略號,劃過該文本時使用tooltip顯示全部文本。需要考慮數(shù)據(jù)是由接口動態(tài)獲取,只有溢出文本鼠標滑過時顯示全部文本,沒有溢出的則不需要。 2.實現(xiàn): 第一步:首先要判斷文本是否溢出 這里網(wǎng)上可以找到很多方法,我是用

    2024年01月21日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包