layui提供了两种初始化节点选中状态的方式
一 ('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){
//是否有子节点
$count = AdminPrivileges::where([['pid','=',$value['id']],['status','=','1001']])->count();
if(in_array($value['id'],$privileges)&&$count==0){
$res[$key]['checked'] = true;
}else{
$res[$key]['checked'] = false;
}
unset($res[$key]['level']);
if($count!=0){
$temp = $this->get_lower_i($where,$value['id'],$privileges);
$res[$key]['children'] = $temp;
}
}
方式二,通过,第二个参数为勾选的叶子节点。
('demoId', [19]);