天天看點

elementui 樹形控件半選展示問題

elementui 樹形控件半選展示問題

    • 問題
    • 解決

問題

因為需要,父節點的半選節點也存進了資料庫,但在樹形元件擷取完資料進行頁面回顯時,把不該選中的子節點也全部勾上了

解決

找了網上的例子,基本都是用了setChecked方法,但試了還是不行

var that = this;
            menuIds.map((i, n) => {
              var node = that.$refs.menu.getNode(i);
              if (node.isLeaf) {
                //設定某個節點的勾選狀态
                that.$refs.menu.setChecked(node, true);
              }
            })
           

最後,隻好用背景過濾資料的方式來解決

sql:

-- 擷取所有有子類的菜單
SELECT id FROM `sys_permission` where id in (SELECT DISTINCT pid FROM `sys_permission`)
           

Java代碼:

public List<SysRolePermission> filterPermission(Long roleId) {
        //擷取所有有子類的菜單
        List<Long> roleIds = permissionMapper.getParentPermission();
        //擷取角色的所有權限包括半選的父節點
        List<SysRolePermission> roleList = rolePermissionMapper.selectList(new QueryWrapper<SysRolePermission>().eq("role_id", roleId));
        if (roleIds.size() > 0) {
            Iterator<SysRolePermission> roles = roleList.iterator();
            while (roles.hasNext()) {
                SysRolePermission rolePermission = roles.next();
                //把所有存在子節點的過濾掉
                if (roleIds.contains(rolePermission.getPermissionId())) {
                    roles.remove();
                }
            }
        }
        return roleList;
    }