近期 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;
},

vue 项目 多选 问题的更多相关文章

  1. vue实现全选效果

    vue实现全选效果 接触vue快半年了,记得刚用vue做项目的时候遇到一个全选功能,当时到处百度也没有找到怎么实现,最后还是用了jquery进行dom操作实现的. 今天没事就顺手写了一个,感觉很简单, ...

  2. webpack+vue项目实战(四,前端与后端的数据交互和前端展示数据)

    地址:https://segmentfault.com/a/1190000010063757 1.前言 今天要做的,就是在上一篇文章的基础上,进行功能页面的开发.简单点说呢,就是与后端的数据交互和怎么 ...

  3. vue项目实现记住密码到cookie功能(附源码)

    实现功能: 1.记住密码勾选,点登陆时,将账号和密码保存到cookie,下次登陆自动显示到表单内 2.不勾选,点登陆时候则清空之前保存到cookie的值,下次登陆需要手动输入 大体思路就是通过存/取/ ...

  4. vue项目实战总结

    马上过年了,最近工作不太忙,再加上本人最近比较懒,毫无斗志,不愿学习新东西,或许是要过年的缘故(感觉像是在找接口). 就把前一段时间做过的vue项目,进行一次完整的总结. 这次算是详细总结,会从项目的 ...

  5. 搭建vue项目环境

    前言 在开发本项目之前,我对vue,react,angular等框架了解,仅限于知道它们是什么框架,他们的核心是什么,但是并没有实际使用过(angular 1.0版本用过,因为太难用,所以对这类框架都 ...

  6. 使用Cordova打包Vue项目

    因为公司项目要求, 原本的vue移动端项目, 现在要求能使用定位, 调用摄像头等功能, 并且开发成混合APP. 一个小白的孤军奋战史, 记录一下, 以备后用.... 第一步: 安装cordova 在命 ...

  7. Vue项目搭建与部署

    Vue项目搭建与部署 一,介绍与需求 1.1,介绍 Vue  是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue两大核心思想:组件化和数据驱动.组 ...

  8. vue项目中icon图标的完美引入

    第一步: 进入阿里矢量图标库并登录 地址:https://www.iconfont.cn 第二步: 选择项目需要的图标添加到库 第三步: 选完之后点击右上角的购物车,打开后点击添加到项目,没有就自己建 ...

  9. Vue项目用于Ios和Android端开发

    起因 前公司商城App项目使用的是H5开发,有微信公众号.Ios和Android三个版本,H5版本是自己写的一套框架,已经用了有些年头了,承载不下不断涌现出的新需求.而Ios和Android端通过we ...

随机推荐

  1. Tmux 中开启鼠标选择与复制

    在 tmux.conf 中加入下列设置(tmux 2.1 之前的版本): set -g mode-mouse on set -g mouse-resize-pane on set -g mouse-s ...

  2. qq for linux tar.gz安装

    借用官网的一段话 QQ for Linux 怎么命令行安装和卸载 RPM版本 安装 ①打开控制台,使用管理员身份登录 :②在终端中输入命令“rpm –U package_name.rpm“ , pac ...

  3. Hadoop(一)阿里云hadoop集群配置

    集群配置 三台ECS云服务器 配置步骤 1.准备工作 1.1 创建/bigdata目录 mkdir /bigdatacd /bigdatamkdir /app 1.2修改主机名为node01.node ...

  4. PHP获取用户是否关注公众号。获取微信openid和用户信息

    <?php /* * 首先填写授权地址为当前网址 * 将$appid和$secret参数替换成自己公众号对应参数,需要外网可以访问服务器环境测试 */ header("Content- ...

  5. css text文本

    CSS 文本格式 文本格式 This text is styled with some of the text formatting properties. The heading uses the ...

  6. AcWing 214. Devu和鲜花 (容斥)打卡

    Devu有N个盒子,第i个盒子中有AiAi枝花. 同一个盒子内的花颜色相同,不同盒子内的花颜色不同. Devu要从这些盒子中选出M枝花组成一束,求共有多少种方案. 若两束花每种颜色的花的数量都相同,则 ...

  7. H5页面前后端通信 (3种方式简单介绍)

    1.ajax:短连接 2.websocket :长连接,双向的.   node搭建的websocket服务器,推送信息给客户端浏览器 :https://www.cnblogs.com/fps2tao/ ...

  8. haproxy笔记

    haproxy安装.启动.日志配置 方法1:#安装 yum install haproxy -y #日志配置 sed -i 's/^#$ModLoad imudp/$ModLoad imudp/g' ...

  9. 团队冲刺DAY5

    团队冲刺DAY5 今天的内容是组件和事件处理这一部分,也就是需要扣一个消息系统的图形界面. 提到这部分,就不得不说Java Swing. 常用组件及部件 JTextField:文本框 JTextAre ...

  10. ListView 分页显示(转载+修改)上

    实习工作中,分配到了一个给已经上线的android成品增加需求的任务,其中一项是给每个信息显示增加分页显示的功能(ListView的显示),于是上网查资料,看到了: 原地址:http://www.cn ...