效果如图:

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. 随tomcat启动的Servlet程序

    由于需要做一定定时轮询程序,自己写了一个Servlet小程序,在Servlet里面的Init函数中做一个Timer,定时执行程序. 代码如下: public class MailStartup  ex ...

  2. May 17th 2017 Week 20th Wednesday

    Men are nearly always willing to believe what they wish. 人总爱想入非非,把愿望变成现实. It is just the humancondit ...

  3. IOS 播放视频(MPMoviePlayerController、MPMoviePlayerViewController)

    ● iOS提供了叫 做MPMoviePlayerController.MPMoviePlayerViewController的两个 类,可以用来轻松播放视频 ➢ YouTobe就是用MPMoviePl ...

  4. Android进阶笔记13:ListView篇之ListView刷新显示(全局 和 局部)

    一.ListView内容变化后,动态刷新的步骤(全局刷新): (1)更新适配器Adapter数据源:(不要使用匿名内部类) (2)调用适配器Adapter的刷新方法notifyDataSetChang ...

  5. Softmax vs. Softmax-Loss: Numerical Stability

    http://freemind.pluskid.org/machine-learning/softmax-vs-softmax-loss-numerical-stability/ softmax 在 ...

  6. SignalR集成Autofac

    SignalR SignalR集成需要 Autofac.SignalR NuGet 包. SignalR 集成提供SignalR 集线器的依赖集成.由于 SignalR 是内部构件,所以不支持Sign ...

  7. python的格式化输出(format,%)

    皇城PK Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字符串的方法之后,我认为%还是format这根本就不算个问 ...

  8. 几个常用的 Git 高级命令

    Git 是一款开源优秀的版本管理工具,它最初由 Linus Torvalds 等人开发,用于管理 Linux Kernel 的版本研发.相关的书籍和教程网上琳琅满目,它们多数都详细的介绍其基本的使用和 ...

  9. 快速排序_C语言_数组

    快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...

  10. Java的内存--存储(1)

    有次去面试,面试官突然问我这个问题,当时我只知道怎么写最优化,但是具体不知道为什么那样写,身价立马下降哦 1. 以下开发习惯,你怎么看? for(int i=0;i<2;i++){ Person ...