解决layui树形组件默认父节点设置checked,导致子节点全部选中的问题。

layui提供了两种初始化节点选中状态的方式

一 tree.setChecked(‘demoId’, [2,13,18,19]); //批量勾选 id 为2,13,18,19 的节点

其中19是用户真实勾选的节点ID,但是组件提交的勾选节点包含全路径.

如果顶级权限被勾选了,那么layui设置节点勾选的时候就会勾选其全部的权限也就是默认就勾选了所有权限。

layui树形组件此时无法重现用户的节点勾选情况了,怎么办?

这个时候就不能从前台的角度来解决问题了,因为layui树形组件的规则就是这样的。

二 通过数据源设置初始选中状态

那这代表我们可以把,2,13,18,19这四个节点的checked属性设置为true吗?不行,如果顶级权限的checked为true,这表示所有权限都处于初始选中状态。

现在我们重新回顾一下树形组件的使用过程:

我们要给某个角色加上角色列表的操作权限,组件于是选中了角色列表和及祖先节点.

当然我们勾选后台角色,那么其子节点角色列表也会被勾选.

如果目标子节点无兄弟节点,这两种选中方式组件勾选的数据相同.

通过勾选父节点选中后代节点的方式可以提高勾选效率,仅此而已。

整个属性组件的使用过程中,我们需要关心的永远只有叶子节点,这是节点初始化选中状态的核心逻辑,也就是说我们把用户真实勾选的,叶子节点,19设置成勾选状态就可以了。

方式一,设置数据源中勾选的叶子节点checked属性为true,

foreach ($res as $key => $value){
//是否有子节点

c o u n t = A d m i n P r i v i l e g e s : : w h e r e ( [ [ ′ p i d ′ , ′ = ′ , count = AdminPrivileges::where([['pid','=', count=AdminPrivileges::where([[pid,=,value[‘id’]],[‘status’,’=’,‘1001’]])->count();

if(in_array( v a l u e [ ′ i d ′ ] , value['id'], value[id],privileges)&&$count==0){
r e s [ res[ res[key][‘checked’] = true;

}else{
r e s [ res[ res[key][‘checked’] = false;

}

unset( r e s [ res[ res[key][‘level’]);

if($count!=0){
$temp = t h i s − > g e t l o w e r i ( this->get_lower_i( this>getloweri(where, v a l u e [ ′ i d ′ ] , value['id'], value[id],privileges);

r e s [ res[ res[key][‘children’] = $temp;

}

}

方式二,通过tree.setChecked,第二个参数为勾选的叶子节点。

tree.setChecked(‘demoId’, [19]);

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值