当前位置: 首页 > news >正文

Element:Cheack多选勾选效果逻辑判断

效果展示

取消子级勾选,父级的勾选效果

代码合集

(1)组件代码  fromlist.cheackType  类型,permissio表示是权限. fromlist:[{id:1,children:[{...}]},...]传递的数据大致结构

<!-- 操作权限 --><template v-if="fromlist.cheackType == 'permission'"><div v-if="item.cheackall && item.title" class="CheackAllBox"><el-checkbox v-model="item.selected" :indeterminate="item.isIndeterminate" :label="item.title" @change="(value) => { handelCheackAll(value, key, item);} ">{{ item.name }}</el-checkbox></div><el-checkbox-group v-model="TableList[key]"><!-- 最父级 --><div v-for="(val, i) in item.children" class="tow_box"><el-checkbox :indeterminate="val.isIndeterminate" @change="(value) => { cheackChange(value, key, val, val.id, item);}" :label="val.id">{{ val.name }}</el-checkbox><div class="three_box_nochildren"><template v-for="(c_val, i) in val.children"><div v-if="!c_val.children"> <el-checkbox :label="c_val.id">{{ c_val.name}}</el-checkbox></div></template></div><!-- 子级 --><div class="three_box"><template v-for="(c_val, i) in val.children"><div v-if="c_val.children"><el-checkbox :label="c_val.id" :indeterminate="c_val.isIndeterminate" @change=" (value) => {cheackChange(value, key, c_val, c_val.id, val);}" >{{ c_val.name }}</el-checkbox><div class="four_box"><template v-for="(s_val, i) in c_val.children"><el-checkbox :indeterminate="s_val.isIndeterminate" @change=" (value) => { cheackChange( value,key, s_val,s_val.id, c_val ); }" :label="s_val.id">{{ s_val.name }}</el-checkbox><div :class=" s_val.children.length > 0 ? 'fir_box' : 'four_box'" v-if="s_val.children.length > 0 "><template v-for="(ss_val, i) in s_val.children"><el-checkbox :indeterminate="ss_val.isIndeterminate" @change=" (value) => { cheackChange( value, key, ss_val, ss_val.id, s_val);}" :label="ss_val.id"> {{ ss_val.name }} </el-checkbox><div :class="ss_val.children.length > 0? 'fir_box': 'four_box'" v-if="ss_val.children.length > 0"><template v-for="(sss_val, i) in ss_val.children"><el-checkbox :indeterminate="sss_val.isIndeterminate" @change=" (value) => { cheackChange(value, key,sss_val, sss_val.id,ss_val); }" :label="sss_val.id"> {{ sss_val.name }}</el-checkbox></template></div></template></div></template></div></div></template></div></div></el-checkbox-group></template>

(2) 处理方法

function cheackChange( value: any,key: string,item: any,id: any,p_item: any,isselect: boolean) {
//点击传递的数据console.log('value',value,'key',key,'item',item,'id',id,'p_item',p_item,'isselect',isselect);if (!props.fromlist.notrigger) {
//判断是否有子数据,则调到处理全选方法 针对点击的多选这个数据的子级,而不是最父级的子级if (item.children.length > 0) {handelCheackAll(value, key, item, id, "");}
//cheack点击传递过来的 数据 trus or falseif (value) {//处理勾选的方法getIdUpdataPrintSelectStatus(p_item,key,isselect,item.id,value,true,id);} else {//将点击的对象赋值为 false 就是取消勾选 item.isIndeterminate = false;//处理勾选的方法getIdUpdataPrintSelectStatus(p_item, key,isselect,item.id,value,false,id);}}}function getIdUpdataPrintSelectStatus(data: any,key: string,isselect: boolean,printid: number,value: boolean,is: boolean,id: number) {forFromlistGetIdUpdataStatus(props.fromlist.listData[key],data.id,key,is,id);
}function forFromlistGetIdUpdataStatus(data:any,printid:number,key:string,is:boolean,id:number){//传递过来的 多选存放的数组 data : 传递给组件渲染的数组  ,printid:多选勾选的元素的父级id  key:是当前分辨是哪个组件的key(如标签页点击切换不同模块下的多选,key就是tab的key值) is:勾选返回的 true(勾选中)/false(取消勾选)  id:当前勾选元素的id 在此方法中没用到//循环传递过来的数组data.children.map(item=>{//判断数组下是否能够匹配到 传递过来当前勾选数据的父id(判断父级勾选效果)if(item.id == printid){//找到勾选的父级//判断结构数组的子级的id是否存在 TableList[key]存放勾选数据中 并且 判断(你勾选的那个cheack)当前勾选的状态是trueif(item.children.every(c_item=> TableList[key].includes(c_item.id)) && is){//判断是否取消 cheack indeterminate属性,循环父级中是否所有的子级被勾选let isinfalse = item.children.every(c_item => {// 判断勾选数据中是否存在所有的子级数据。 并且子级为false if (TableList[key].includes(c_item.id) && !c_item.isIndeterminate ) {// 判断是否包含所有子级数据 这一层已经可以循环到勾选的那层级了return c_item.children.every(cc_item => TableList[key].includes(cc_item.id));}return false;});//判断是否存在勾选数据中,没有的话就添加进去TableList[key].includes(item.id)  ? '' : TableList[key].push(item.id)//是否父级层级下的子级全部勾选,将isIndeterminate设置为false ,设置为false 并且 父级下的子级数据全部都在TableList[key]中,父级勾选状态就会变成勾选。isinfalse  ? item.isIndeterminate = false : ''}else if(item.children.some(c_item=> TableList[key].includes(c_item.id))){// console.log('有子集并且还是勾选状态',item,'TableList[key]',TableList[key]);!TableList[key].includes(item.id)  ? TableList[key].push(item.id)   : ''//设置为减号item.isIndeterminate = true}else{//勾选的数组中如果不存在父级中的子级数据 就将父级取消所有状态 变成空的cheack框item.isIndeterminate = isTableList[key] = TableList[key].filter(num => num != item.id);}//如果此层级找不到就一层一层向上找 直到能匹配上传递过来的勾选父级id:printidforFromlistGetIdUpdataStatus(props.fromlist.listData[key],item.parent_id,key,is,id)}else {//如果此层级找不到就一层一层向下找 直到能匹配上传递过来的勾选父级id:printidforFromlistGetIdUpdataStatus(item,printid,key,is,id)}

相关文章:

  • 头歌java课程实验(文件操作)
  • UE5 Set actor Location和 Set World Location 和 Set Relative Location 的区别
  • SQL实战:03之SQL中的递归查询
  • 改进的山地无人机路径规划灰狼优化算法(I-GWO)
  • cmake:基础
  • WPF之TextBlock控件详解
  • docker拉取国内镜像
  • Spring中bean的生命周期(笔记)
  • UE调试相关
  • 入选ICLR 2025 Oral,清华AIR周浩团队提出蛋白质预训练新范式,解密蛋白质家族进化
  • 力扣面试150题--删除链表的倒数第 N 个结点
  • iOS签名的包支持推送功能吗?
  • 【东枫电子】AI-RAN:人工智能 - 无线接入网络
  • 国内外半导体行业在供应链数字化集成方式上的差异
  • 网络安全攻防演练实训室建设方案
  • GAEA商业前景和生态系统扩展
  • 蓝桥杯 11. 最大距离
  • 蓝桥杯 5. 拼数
  • 远程访问你的家庭NAS服务器:OpenMediaVault内网穿透配置教程
  • Kotlin和JavaScript的对比
  • 解放日报:中国大模型企业的发展机遇已经到来
  • 运动健康|不同能力跑者,跑步前后营养补给差别这么大?
  • 怒江州委常委、泸水市委书记余剑锋调任云南省委省直机关工委副书记
  • 人到中年为何腰围变粗?科学家发现腹部脂肪增加的细胞元凶
  • 自称“最美”通缉犯出狱当主播?央广网:三观怎能跟着“五官”跑
  • 脱发后怎么把头发养回来?脱发自救指南来了