实现效果如图

数据格式如下:

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. Java_判断文件是否写入完成

    /** * 等待文件(非目录)读写完毕,费时的操作,不要放在主线程 * * @param file 文件 */ private void waitForWirtenCompleted(File fil ...

  2. PHP5.5.38版本Zend Guard loader for 5.5安装(详细)

    第一次在博客园写东西记录自己,不,可以说第一次在网上写东西记录自己,我只是个菜鸟,具体的不太懂, 但是作为一个菜鸟我肯定把我遇到的问题给详细的表述出来,大神勿喷.在安装Zend Guard loade ...

  3. 移动端目标识别(2)——使用TENSORFLOW LITE将TENSORFLOW模型部署到移动端(SSD)之TF Lite Developer Guide

    TF Lite开发人员指南 目录: 1 选择一个模型 使用一个预训练模型 使用自己的数据集重新训练inception-V3,MovileNet 训练自己的模型 2 转换模型格式 转换tf.GraphD ...

  4. 第一周pta作业1总结

    查找整数 本题要求从输入的N个整数中查找给定的X.如果找到,输出X的位置(从0开始数):如果没有找到,输出"Not Found". 输入格式: 输入在第一行中给出两个正整数N(≤2 ...

  5. GitLab管理之 - Gitlab 用户管理

    1. 移除用户 (1) 使用管理员登陆Gitlab服务器 (2) 点击管理区域 (3) 点击Users. (4)点击[Block User] 2. 添加用户(1)用root 管理员登陆.(2)点击[管 ...

  6. AVL树实现记录

    https://github.com/xieqing/avl-tree An AVL Tree Implementation In C There are several choices when i ...

  7. 查询sqlserver数据库表的记录数

    SELECT a.name, b.rows FROM sysobjects AS a INNER JOINsysindexes AS b ON a.id = b.idWHERE (a.type = ' ...

  8. 转载:IIS 之 连接数、并发连接数、最大并发工作线程数、队列长度、最大工作进程数

    一.IIS连接数 一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫“IIS限制连接数”. 客户请求的连接内容包括: [ ...

  9. A Boring Problem UVALive - 7676

    16年北京现场赛的题,全场过的队30+. 初看只知道 O(N^2logK)的暴力,以为是什么变换. 仔细发现活用 二项式定理 就行. #include <bits/stdc++.h> us ...

  10. 算法练习LeetCode初级算法之设计问题

    打乱数组 不断的让第一个与后面随机选择的数交换 class Solution { private int[] nums; private int[] initnums; public Solution ...