效果如图:

HTML代码:

<div class="form-group quanxian-wrap">
<label>项目</label>
<form class="form-horizontal" style="border-top-left-radius: 4px;border-top-right-radius: 4px;">
<div data-v-55b43bfa="" class="toolbar">
<div data-v-55b43bfa="" class="form-group">
//模糊查询
<div data-v-55b43bfa="" class="form-group-bd dropdown" style="width: 400px">
<input type="search" class="weui-search-bar__input weui-flex__item form-control" id="searchInput" placeholder="请输入项目名称" style="border: 1px solid #ccc;" v-model="search " required="">
</div>
//点击显示隐藏下拉框
<div class="form-group-ft">
<button data-v-55b43bfa="" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" class="btn btn-default dropdown-toggle" v-on:click="checkSelectedButton">已选项目:{{bizShowList.length}}<span data-v-55b43bfa="" class="caret"></span></button>
</div>
<div data-v-fc6e5168="" class="dropdown-menu" style="display: block;"v-if="showSelectedProjects">
<div data-v-fc6e5168="" class="form-group">
<div data-v-fc6e5168="" class="col-sm-12">
<div data-v-fc6e5168="" class="item-select" v-for="(item,index) in bizShowList">
<span data-v-fc6e5168="">{{item.name}}</span>
<a data-v-fc6e5168="" href="javascript:;" v-on:click="deleteSelectedItem" v-bind:title="index">
<i data-v-fc6e5168="" class="icon-del"></i>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
//按片区分类,单选全选项目
<form class="form-horizontal">
<div class="form-group">
<div class="col-sm-12">
<div class="biz-list" v-for="(project,index) in getBizList" :style="{hidden: project.hidden}">
<div class="biz-list-hd cf"> //片区选择
<div class="checkbox" style="float: none;display: block;clear: both;" :style="{display: search ?'none':'block'}">
<label>
<input type="checkbox" v-model="project.checked" v-on:click="updateSelectedAreaList(index)">
<span >{{project.area}}</span>
</label>
</div>
</div>
<div class="biz-list-bd cf"> //项目选择
<div class="checkbox" v-for="(item,index) in project.data" :style="{display:item.name.indexOf(search) > -1?'block':'none'}">
<label>
<input type="checkbox" v-model="item.checked" v-on:click="updateSelectedProjectList"><span>{{item.name}}</span>
</label>
</div>
</div>
</div>
</div>
</div>
</form>
</div>

JS:

export default {
data() {
return {
showSelectedProjects: false,
search: '' };
},
computed: {
// 关联项目列表
getBizList() {
this.bizList = cloneObject(this.$store.state.user.bizList);
this.bizList.splice(0, 1);
let data = this.bizList;
console.log(333,data);
for(let i=0;i<data.length;i++) {
if (data[i].area ==='' || data[i].area === null) {
data[i].area = '暂无片区';
}
}
return this.regroup(this.bizList);
}
},
methods: {
// 转换数据显示格式
regroup(arr) {
var map = {},
dest = [];
// 对象数组 根据项目编号(id)字段 分组
for (var i = 0; i < arr.length; i++) {
var ai = arr[i];
if (!map[ai.area]) {
dest.push({
area: ai.area,
data: [ai]
});
map[ai.area] = ai;
} else {
for (var j = 0; j < dest.length; j++) {
var dj = dest[j];
if (dj.area === ai.area) {
dj.data.push(ai);
break;
}
}
}
}
return dest;
},
//删除已选项目
deleteSelectedItem(event) {
let index = event.target.parentNode.title;
let selectedItem = this.bizShowList[index];
if (!selectedItem) return;
this.bizShowList.forEach(item => {
if (item.appId == selectedItem.appId) {
item.checked = false;
}
});
this.updateSelectedProjectList();
},// 单个项目选中
updateSelectedProjectList() {
this.showSelectedProjects = false;
let list = [];
let bizData = this.getBizList;
for (let i = 0; i < bizData.length; i++) {
bizData[i].data.forEach(item => {
if (item.checked) {
list.push(item);
}
})
}
//判断如果该片区下所有项目被选中,则选中该片区,否则取消选中
for (let i = 0; i < bizData.length; i++) {
for (let j = 0; j < bizData[i].data.length; j++) { if (!bizData[i].data[j].checked) {
bizData[i].checked = false;
break
}
if (j === bizData[i].data.length - 1) {
bizData[i].checked = true;
}
} }
this.bizShowList = list;
},
// 片区选择
updateSelectedAreaList(index) {
this.showSelectedProjects = false; let list = [];
let bizData = this.getBizList;
   //选择片区,则将该片区下所有项目选中,取消则不选中
for (let j = 0; j < bizData[index].data.length; j++) {
bizData[index].data[j].checked = bizData[index].checked;
}
          //将最后选中的项目push到list数组中
for (let i = 0; i < bizData.length; i++) {
bizData[i].data.forEach(item => {
if (item.checked) {
list.push(item);
}
})
} this.bizShowList = list;
},
    }
}

js分类多选全选的更多相关文章

  1. JS中表格的全选和删除要注意的问题

    在项目开发中,由于刚刚开始做项目,我对js还不是很精通,所以在用js对表格的全选和删除中遇到了不少问题,后来通过查找资料解决了,之后总结了一下关于js表格的全选和删除出现的一些问题,希望能帮助到大家. ...

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

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

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

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

  4. Vue.js实现checkbox的全选和反选

    小颖之前写的代码存在一个bug,就是当你选择全选的时候去掉后面的一个选项,再点全选结果就是反的了.很感谢博客园的朋友帮我改了这个问题嘻嘻,下面一起来看看具体是怎么实现的吧. 1.html <te ...

  5. vue.js 批量删除跟全选,反选效果

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  6. js实现checkbox的全选和全不选功能

    html代码: <form name="form1" method="post" action="manage.php?act=sub" ...

  7. <一>初探js特效魅力之全选不选反选04

    初探js特效魅力04 我们在进入到公司里面工作的时候,做一个同一个项目,经常是大家分工合作,当我们写css时,一般不写在行间,因为这样会被误操作,也就是被乱删了都不知道,这样的后果是很难检查的 ,因为 ...

  8. asp.net中Repeater结合js实现checkbox的全选/全不选

    前台界面代码: <input name="CheckAll" type="checkbox" id="CheckAll" value= ...

  9. js和jq实现全选反选

    在前端中用到全选反选的案例并不少,在这里呢我就实现这个功能给大家参考参考. 这里呢就先贴上我的html和css代码 <div class="wrap"> <tab ...

随机推荐

  1. 深入理解linux源码安装三板斧

    概述: 根据源码包中 Makefile.in 文件的指示,configure 脚本检查当前的系统环境和配置选项,在当前目录中生成 Makefile 文件(还有其它本文无需关心的文件),然后 make ...

  2. angularjs filter详解

    过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果. 主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等. ng内置了一些过滤器, ...

  3. jQuery插件编写步骤详解

    如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...

  4. no.1 github

    正是Github,让社会化编程成为现实. github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.它是由Chris Wanstrath ...

  5. 初学MillerRabin素数测试

    前言 \(MillerRabin\)素数测试是一种很实用的素数判定方法. 它只针对单个数字进行判定,因而可以对较大的乃至于\(long\ long\)范围内的数进行判定,而且速度也很快,是个十分优秀的 ...

  6. HDU 3625 第一类斯特林数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: n个房间,房间里面放着钥匙,允许破门而入k个,拿到房间里面的钥匙后可以打开对应的门,但是 ...

  7. mui(手机)

    官网:http://dev.dcloud.net.cn/mui/

  8. Java基础随笔2

    各类运算符: 算数运算符::+,-,*,/,%,++,-- ++:自增 --:自减 单独使用的时候,++或者--无论是放在变量的前面还是后面,结果是一样的. 参与操作的时候: 如果++或者--在变量的 ...

  9. Vue nodejs商城项目-商品列表页面组件

    data(){        return {            goodsList:[], // 商品列表            priceFilter:[ // 价格区间数组          ...

  10. 前端html,css基础总结

    0.1.css引入界面的方式: 内联式:通过标签的style属性,在标签上直接写样式. <div style="width:100px; height:100px; backgroun ...