• element-UI根据后台数据动态生成el-checkbox-group,点击保存获取绑定的checked项(二维数组)


    我的效果图如下:

      1 <template>
      2   <div class="mcontainer">
      3     <el-form :model="formApp" ref="formApp" :rules="rules">
      4       <el-form-item label="APP选择" :label-width="formLabelWidth" prop="appCode">
      5         <el-select style="100%;"
      6           v-model="formApp.appCode"
      7           multiple
      8           :disabled="type == 'add'?false : true"
      9           placeholder="请选择"
     10           @change="changeType">
     11           <el-option
     12             v-for="item in selList"
     13             :key="item.code"
     14             :label="item.name"
     15             :value="item.code">
     16           </el-option>
     17         </el-select>
     18       </el-form-item>
     19       <el-form-item label="所属分类" :label-width="formLabelWidth">
     20         <div v-show="typeList.length > 0" class="check-box" v-for="(item, index) in typeList">
     21           <span class="app-name">
     22             <el-tag>{{ item.appName }}</el-tag>
     23           </span>
     24           <el-checkbox-group v-model="checkedEquipments[index]">
     25             <el-checkbox
     26               @change="handleChange(type,index,item)"
     27               v-for="(type, i) in item.types"
     28               :disabled="i == 0? true : false"
     29               :key="type.id"
     30               :label="type.id">{{type.name}}</el-checkbox>
     31           </el-checkbox-group>
     32         </div>
     33         <div v-show="typeList.length == 0" class="no-typelist">请先选择APP</div>
     34       </el-form-item>
     35     </el-form>
     36   </div>
     37 </template>
     38 
     39 <script>
     47 export default {
     48   name: 'CollectOrder',
     49   components: { CollectRecord },
     50   data() {
     51     return {
     52       formLabelWidth: '80px',
     53       /*随意修改后的checked项,
     54       * 因为是二维数组,我的第一个类「全部」默认的ID是0,如果没有全部,不需要0,直接这样子就可以[[],[],[],[],[]]
     55       * 我默认显示了5个,具体几个会根据app的选择值来重新计算,如果一个APP,就一级,2个APP,就2组,
     56       * ******************************** */
     57       checkedEquipments: [[0],[0],[0],[0],[0]], 
     58       checkEquipArr: [],   // 传给后台的二维数组,根据自己要返回给后台的格式重组过的
     59       formApp: {
     60         appCode: [],
     61         appTypeIds: [],//马甲及分类列表
     62       },
     63       type: 'add',
     64       allType: [], //获取的所有类别
     65       typeList: [],
     66     }
     67       //我得到的类别数据是一个二维数据,如下
     68       // [
     69       //   {
     70       //     appCode: "MoneyHome", 
     71       //     appName: "MoneyHome", 
     72       //     types: [
     73       //       {id: 21, name: "第二个app--分类一"}
     74       //     ]
     75       //   },
     76       //   {
     77       //     appCode: "RupeeHome",
     78       //     appName: "RupeeHome",
     79       //     types: [
     80       //       {id: 20, name: "aaa"}, 
     81       //       {id: 22, name: "q"}
     82       //     ]
     83       //   }
     84       // ]
     85   },
     86   methods: {
     87     //APPP选择的时候,类别也做相应的改变
     88     changeType(val) {
     89       //类别的数组占位,app选择几个,就会有几组类别
     90       this.checkedEquipments = [];//因为默认的有5组,所以要重新清掉了,根据选择几组来确定
     91       val.forEach((item,index) => {
     92         if(index <= val.length) {
     93           this.checkedEquipments.push([0]);
     94         }
     95       });
     96       console.log('this.checkedEquipments---', this.checkedEquipments);
     97       this.typeList = [];
     98       //this.allType是我能过接口返回的所有的类,存在这里了,换成自己相应的变量就好
     99       let list = Object.assign([],this.allType);
    100       //这一步是为了给每一类组数加一个"全部",如果没有这个需求,就不需这步了
    101       let obj = {
    102         id: 0,
    103         name: '全部',
    104       };
    105       list.forEach(item => {
    106         //每个类别要加上全部
    107         if(item.types.length > 0){
    108           if(item.types[0].name != '全部'){
    109             item.types.unshift(obj);
    110           }
    111         }else {
    112           item.types.unshift(obj);
    113         }
    114         val.forEach(name => {
    115           if(item.appCode == name){
    116             this.typeList.push(item);
    117           }
    118         });
    119       });
    120     },
    121     //创建保存时的二维数组
    122     handleChange (data, index, item) {
    123       this.checkEquipArr = [];
    124       let arr = this.checkedEquipments;
    125       for (let i = 0; i < arr.length; i ++) {
    126         let equipment = arr[i];
    127         if (equipment.length > 0) {
    128           let obj = {
    129             appCode: this.typeList[i].appCode,
    130             typeIds: []
    131           }
    132           for (let j = 0; j < equipment.length; j++) {
    133             obj.typeIds.push(equipment[j])
    134           }
    135           this.checkEquipArr.push(obj);
    136         }
    137       }
    138       console.log("QERQWER00000====",this.checkEquipArr);
    139       //重组后我传给后台的二维数组,可以适当根据自己的需求调整格式和字段
    140       // [
    141       //   {
    142       //     appCode: "MoneyHome",
    143       //     typeIds: [0, 21],
    144       //   },
    145       //   {
    146       //     appCode: "RupeeHome",
    147       //     typeIds: [0, 20, 22]
    148       //   }
    149       // ]
    150     },
    151   },
    152 };
    153 </script>

    参考了这篇文章:https://www.cnblogs.com/wjunwei/p/9531322.html

    然后根据自己的实际需求作了一些改动。

  • 相关阅读:
    对var和let作用域用闭包的特性做最好的解释
    Js函数作用域
    问题记录
    Git学习
    React-router BrowserRouter导致axios请求时会重复url中的某些字段
    leetcode python 032 识别最长合法括号
    leetcode python 030 Substring with Concatenation of All Words
    n阶楼梯,一次走1,2,3步,求多少种不同走法
    leetcode python 012 hard 合并k个有序链表
    leetcode python 011
  • 原文地址:https://www.cnblogs.com/tanweiwei/p/13186565.html
Copyright © 2020-2023  润新知