实现效果如图

数据格式如下:

pps: [{"code":"6","createTime":"2018-09-07 00:00:00","des":"可选择居住情况","id":"6","key":"liveType","multi":false,"name":"居住情况","no":1,"status":1,"updateTime":"2018-09-07 00:00:00","usages":["condition"],"values":[{"code":"6.1","createTime":"2018-09-07 00:00:00","id":"601","name":"纯老人家庭","no":1,"propertyId":"6","status":1,"updateTime":"2018-09-27 16:53:57"},{"code":"6.3","createTime":"2018-09-07 00:00:00","id":"603","name":"独居老人","no":3,"propertyId":"6","status":1,"updateTime":"2018-09-27 16:54:06"}]},{"code":"f","createTime":"2018-09-07 00:00:00","des":"老人经济状况","id":"15","multi":true,"name":"经济状况","no":2,"status":1,"updateTime":"2018-09-07 00:00:00","usages":["condition"],"values":[{"code":"f.1","createTime":"2018-09-29 14:18:30","id":"1501","name":"低保","no":1,"propertyId":"15","status":1,"updateTime":"2018-09-29 14:18:30"},{"code":"f.2","createTime":"2018-09-29 14:18:36","id":"1502","name":"低收入","no":2,"propertyId":"15","status":1,"updateTime":"2018-09-29 14:18:36"}]}]

核心代码如下:

数据请求并初始化

  API.property.listByUsage(this.usage).then(res => {
console.log('got properties', res.data)
// const data = res.data.data
var pps = res.data.data
if (this.multi) {
for (var i = 0; i < pps.length; i++) {
var propCode = pps[i].code
if (!this.result[propCode]) {
this.$set(this.result, propCode, [])
this.$set(this.checkAll, propCode, false)
// this.result[propCode] = []
}
}
}
this.pps = pps
console.log('pps:', JSON.stringify(this.pps))
})

数据加工方法如下:

cheakLength(code) {
for (var i = 0; i < this.pps.length; i++) {
if (this.pps[i].code === code) {
if (this.result[code].length === this.pps[i].values.length) {
this.checkAll[code] = true
} else {
this.checkAll[code] = false
}
}
}
},
handleCheckAllChangeProps(code) {
var ppsValues = []
for (var i = 0; i < this.pps.length; i++) {
if (this.pps[i].code === code) {
this.pps[i].values
for (var j = 0; j < this.pps[i].values.length; j++) {
ppsValues.push(this.pps[i].values[j].code)
}
this.result[code] = this.checkAll[code] ? ppsValues : []
}
}
}, handleCheckAllChange(val) {
const streetValue = []
for (var i = 0; i < this.streetsList.length; i++) {
streetValue.push(this.streetsList[i].value)
}
this.streets = val ? streetValue : []
this.streetIsIndeterminate = false
},

数据渲染pug格式参考el-checkbox 全选:

 .col-12.py-2.df-row-as-jsta
.d-inline-block.label.mr-3.text-right 所属街道:
el-checkbox(:indeterminate="streetIsIndeterminate", v-model="streetCheckAll", @change="handleCheckAllChange") 全选
el-checkbox-group.ml-4(v-model="streets")
el-checkbox(v-for="item in streetsList", :key="item.value", :label="item.value", :value="item.value") {{ item.name}} .col-12.py-2.df-row-as-jsta(v-for='prop in pps' :key="prop.code")
.d-inline-block.label.mr-3.text-right {{ prop.name }}:
el-checkbox.mr-3(v-model="checkAll[prop.code]" @change="handleCheckAllChangeProps(prop.code)") 全部
el-checkbox-group.d-inline-block.d-flex.flex-row.flex-wrap(v-model="result[prop.code]", @change="cheakLength(prop.code)")
el-checkbox(v-for="item in prop.values" :key="item.code" :label="item.code") {{ item.name}}

粗体为核心代码

vue-element 动态单选多选全选的更多相关文章

  1. vue Element动态设置el-menu导航当前选中项

    1,npm install vuex --save 2,在src下新建vuex文件夹,新建store.js文件: store.js import Vue from 'vue' import Vuex ...

  2. Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色

    上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ...

  3. vue 入门 ------简单购物车功能实现(全选,数量加减,价格加减)

    简易购物车功能(无任何布局 主要是功能) 数量的加减 商品的总价钱 全选与全不选 删除(全选.价格 受影响) <script src="https://cdn.jsdelivr.net ...

  4. 基于JQ的多选/全选/反选及获取选中的值

    <!-- author:青芒 --> <!DOCTYPE html> <html lang="en"> <head> <met ...

  5. vue - 列表显示(列互相影响,全选控制,更新数据)

    要实现的效果为:全选,且列A列B互相影响,列B勾选则列A一定勾选,列A取消勾选,则相应列B取消勾选 数组 vue中列表渲染有些不是相应式的 var list=[ { a:'aaaa', b:'ddd' ...

  6. vue.js实现单选框、复选框和下拉框

    Vue.js可以很方便的实现数据双向绑定,所以在处理表单,人机交互方面具有很大的优势.下边以单选框.复选框和下拉框为例介绍他们在HTML和Vue.js中的具体实现方式. 一.单选框   在传统的HTM ...

  7. js分类多选全选

    效果如图: HTML代码: <div class="form-group quanxian-wrap"> <label>项目</label> & ...

  8. UITableView多选全选

    自定义cell和取到相应的cell就行了 TableViewCell.h #import <UIKit/UIKit.h> @interface TableViewCell : UITabl ...

  9. Jquery 多选全选/取消 选项卡切换 获取选中的值

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

随机推荐

  1. week05 codelab01 Babel ES6 webpack Nodejsserver等

    Babel 他出现的原因就是很多浏览器还未完全兼容ES6 需要将你写的ES6的内容转换成ES5让浏览器兼容运行 ES5和ES6相比出现很多新内容 比如拼接字符串 ES6可以` ` 里面如果引用变量就用 ...

  2. Tex和LaTeX认识

    TeX (文本排版系统) 利用TeX可以很容易地生成高质量的dvi文件,打印输出.特别是在处理复杂的数学公式时.利用诸如是LaTeX等终端软件,TeX就能够排版出精美的文本. LaTeX LaTeX( ...

  3. PHP拦截器之__set()与__get()的理解与使用方法

    “一般来说,总是把类的属性定义为private,这更符合现实的逻辑.   但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值 ...

  4. 利用gitbush从git上下载代码到本地

    1. 在本地新建一个存放代码的文件夹: 2.进入文件夹,右击Git bush here3 3. 出现以下面板: 4. 输入: git init 5.输入:git clone 文件地址链接 成功,在文件 ...

  5. office2016产品密钥

    office2016专业增强版产品密钥: VL批量授权版:QCKNG-29MKJ-74G4B-X7DT8-JFHBB(亲测有效) office2016专业增强版密钥(Retail零售版),可电话激活 ...

  6. pandas列操作集锦

    列操作 pandas的列操作 数据准备: 增 将两张表合并到一起 pd.concat([page_001,page_002]).reset_index(drop=True) 默认从上到下合,如果想从左 ...

  7. C# 木马功能的简单实现

    1.首先解决开机启动木马.通过建立开机启动服务达到目的:2.伪装问题.通过c#反射性能,将正常的.net的exe文件添加监控盗传播取等其他功能,执行正常程序同时,后台悄悄释放windows服务,通过服 ...

  8. TT-付款方式

    付款方式 一般T/T是可以的,上述客户我们采用的付款方式就是定金加TT,如果是信用证方式,那么需要资信良好的开证行: 中国工商银行 汇丰银行 渣打银行 花旗银行 MUSLIM COMMERCIAL B ...

  9. 关于AVL树的思考

    AVL树即平衡二叉树,每个结点有一个平衡因子,即左子树高度减去右子树高.每插入一个结点时,从根部开始按二叉排序树的方法,与节点不断比较,按大小向左右子树插入.在与最后的节点比较后插入时,若有兄弟节点, ...

  10. Ubuntu 批量添加用户

    #!/bin/bash cat user.txt | while read linedo    user=$(echo $line | cut -d ' ' -f1)    passwd=$(echo ...