zoukankan      html  css  js  c++  java
  • vue 项目 多选 问题

    近期 vue 项目用到多选功能,引用的elementUI的级联多选 Cascader,但是没有效果。

    后来发现是elementUI版本问题,我们项目用的是2.7.2版本,版本太低。

    后来 卸载了 重新安装的 2.12.0版本的elementUi.

    在后面中 添加  修改 批量修改的 多选框用的同一个组件。只需 判断他进入的是 添加 还是 修改或者批量修改

    可以通过判断 该数据的id  新加的是没有id的  修改 有一个id  批量修改有多个id

    刚开始进入页面 得到所有数据:

     点击弹框按钮

     

     

     根据点击的按钮不同 配置组件

    openCallback(defObj, val) {
          let title = "编辑分组";
          // console.log(val)
          let params = {
            title: title,
            open: true,
            data: {
              remark: val.remark || "",
              riskType: val.riskType || "",
              groupName: val.groupName || "",
              // departmentName: val.departmentName || [],
              id: val.id,
              valid:val.valid || []
            }
            
          };
    
         if (val === "add") {
            params.title = "新增分组";
            delete params.id;
          }
          // 批量修改
          // console.log(val)
          else if (val === "update") {
            // console.log( this.dialog.data)
           
            if (!this.dialog.data.tableSelectArr || this.dialog.data.tableSelectArr.length <= 0) {
              this.warn("请选择要设置的敏感词");
              return;
            } else if (this.dialog.data.tableSelectArr.length > 100 || this.dialog.data.tableSelectArr.length == 1) {
              return this.warning(
                `单次最少允许分配[2]个敏感词,最多允许分配[100]个敏感词, 当前已选[${this.dialog.data.tableSelectArr.length}]个敏感词`
              );
            }
            params.title = "批量修改";
            params.data = {
              remark: val.remark || "",
              riskType: val.riskType || "",
              groupName: val.groupName || "",
              departmentName: val.departmentName || [],
              id: this.dialog.data.tableSelectArr || []
            };
          }
          this.dialog = params;
        },

    最后提交时,新增 修改 批量修改 提交不同的接口

    在确定提交按钮中判断:

    sureCallback(formName) {
          this.$refs[formName].validate(valid => {
            if (valid) {
              // console.log(this.dialog.data.id)
              if (
                this.dialog.data.id &&
                typeof this.dialog.data.id.length == "undefined"
              ) {
                this.editCallback();
              } else if (this.dialog.data.id && this.dialog.data.id.length > 1) {
                this.updateCallback();
              } else {
                this.addCallback();
              }
            } else {
              return false;
            }
          });
        },

    在选择多选中,

    因为新增 修改 批量修改 公用一套组件。这里 v-module 的值是从父组件传过来的,父组件根据不同的功能进行了配置。(见上面配置组件)

    因为是拥有多级 多选,类似下图:

     在向后台提交数据时,只提交最后一级即可。但是在修改时要勾选上原来拥有的数据,要绑定的是一 二 三 级(所有级)的 id (子节点和其所有父节点的id)

    因为有多级批量修改,所以后台 返回的 数据的id 是个二维数组,在展示时,如果有,会默认勾选上该节点。 最里面的一层数组包裹的是子节点和其所有父节点的id,外面一层数组包裹的是要修改的多个用户。

    在确认提交时,要遍历这个二维数组,只需拿到每个用户的最后一级子节点

    getStaffValid(value){
          // console.log(value)
          let  staffsId = []
          value.forEach(function(v,i){ 
            const staffs = value[i]
            const staffId = staffs[staffs.length-1]
            staffsId.push(staffId)
           
          })
          // console.log(staffsId)
          this.dialog.data.valid = staffsId
        
        }

    即可。

    在获取用户的数据展示多选按钮时,后台返回的是 多层 id,name,格式。例如

      [{
          id:1,
          name:'王一博',
          children:[
            {id:2,
            name:'摩托',
            children:[
              {
                id:3,
                name:'滑板'
              }
            ]}
          ]
        }]

    需要嵌套遍历,将id,name分别对应:value 和  label,格式如下:

       [{
              value: 1,
              label: '东南',
              children: [{
                value: 2,
                label: '上海',
                children: [
                  { value: 3, label: '普陀' },
                  { value: 4, label: '黄埔' },
                  { value: 5, label: '徐汇' }
                ]
              },]
        }]

    代码

     getStaff() {
          v2riskManagementApi.getStaffId().then(data => {
            // console.log(data);
            const arr = (data || []).map(v => this.convertData(v.id, v.name, v));
            // console.log(arr);
            this.options = arr;
          });
        },
        //
        convertData(value, label, data) {
          let dataObj = {
            value,
            label,
            data
          };
          if (data.children && data.children.length) {
            dataObj.children = data.children.map(v =>
              this.convertData(v.id, v.name, v)
            );
          }
          return dataObj;
        },
  • 相关阅读:
    ML-线性回归
    ML-决策树
    numpy常用知识点备忘(2)
    numpy常用知识点备忘
    ML-朴素贝叶斯算法
    Git常用命令备忘
    机器学习-决策树算法
    机器学习-线性模型(线性回归与逻辑回归)
    深入JVM内核(四)垃圾回收器与GC参数
    深入JVM内核(三)对象存活判定算法与垃圾收集算法
  • 原文地址:https://www.cnblogs.com/lpp-11-15/p/11732681.html
Copyright © 2011-2022 走看看