当前位置:首页 > React

react实现树形权限面板

2026-01-27 12:03:48React

实现思路

树形权限面板通常用于管理系统中的角色权限分配,需要展示层级结构的权限列表,并支持勾选操作。React 结合第三方库如 antdTree 组件可以高效实现。

安装依赖

确保项目中已安装 antdreact

npm install antd @ant-design/icons

数据结构设计

权限数据通常为嵌套结构,示例:

const treeData = [
  {
    title: '系统管理',
    key: 'sys',
    children: [
      { title: '用户管理', key: 'user' },
      { title: '角色管理', key: 'role' },
    ],
  },
  {
    title: '内容管理',
    key: 'content',
    children: [
      { title: '文章管理', key: 'article' },
      { title: '评论管理', key: 'comment' },
    ],
  },
];

组件实现

使用 Tree 组件渲染树形结构,并处理勾选逻辑:

import React, { useState } from 'react';
import { Tree } from 'antd';

const PermissionTree = ({ initialCheckedKeys, onCheck }) => {
  const [checkedKeys, setCheckedKeys] = useState(initialCheckedKeys || []);

  const handleCheck = (selectedKeys) => {
    setCheckedKeys(selectedKeys);
    onCheck(selectedKeys);
  };

  return (
    <Tree
      checkable
      treeData={treeData}
      checkedKeys={checkedKeys}
      onCheck={handleCheck}
    />
  );
};

export default PermissionTree;

父子组件交互

在父组件中调用并处理权限提交:

const App = () => {
  const handlePermissionChange = (checkedKeys) => {
    console.log('当前选中权限:', checkedKeys);
  };

  return (
    <PermissionTree
      initialCheckedKeys={['user', 'article']}
      onCheck={handlePermissionChange}
    />
  );
};

自定义样式与功能扩展

  • 图标增强:通过 icon 属性为节点添加图标。
  • 半选状态:使用 halfCheckedKeys 处理部分选中状态。
  • 搜索过滤:结合 Input 组件实现树节点搜索功能。

性能优化

  • 虚拟滚动:对大型树数据启用 virtualScroll 属性。
  • 动态加载:通过 loadData 属性实现懒加载子节点。

完整示例代码

整合后的完整实现可参考以下结构:

react实现树形权限面板

import React, { useState } from 'react';
import { Tree, Input } from 'antd';
import { SearchOutlined } from '@ant-design/icons';

const PermissionTree = ({ data, checkedKeys, onChange }) => {
  const [searchValue, setSearchValue] = useState('');

  const filteredData = data.map(item => ({
    ...item,
    children: item.children.filter(child => 
      child.title.toLowerCase().includes(searchValue.toLowerCase())
    ),
  }));

  return (
    <div>
      <Input
        prefix={<SearchOutlined />}
        placeholder="搜索权限"
        onChange={(e) => setSearchValue(e.target.value)}
      />
      <Tree
        checkable
        treeData={filteredData}
        checkedKeys={checkedKeys}
        onCheck={onChange}
      />
    </div>
  );
};

标签: 面板权限
分享给朋友:

相关文章

vue实现前端权限

vue实现前端权限

Vue 前端权限实现方案 前端权限控制的核心在于根据用户角色或权限动态控制页面访问、菜单展示和操作按钮。以下是几种常见的实现方式: 基于路由的权限控制 通过路由守卫拦截未授权访问,动态生成可访问路由…

vue router权限实现

vue router权限实现

Vue Router 权限实现方案 Vue Router 的权限控制通常基于用户角色或权限标识,限制用户访问特定路由。以下是几种常见实现方式: 路由守卫(全局前置守卫) 利用 router.befo…

vue权限控制实现

vue权限控制实现

Vue 权限控制实现方法 路由级权限控制 通过路由守卫(beforeEach)实现动态路由过滤,结合用户角色或权限列表控制访问。 // router.js router.beforeEach((to…

vue按钮权限实现

vue按钮权限实现

实现按钮权限的常见方法 在Vue项目中实现按钮权限控制,通常有以下几种方案: 基于v-directive的自定义指令 创建自定义指令v-permission,在指令中判断用户权限并控制DOM显示隐藏…

如何实现权限管理vue

如何实现权限管理vue

权限管理实现方案 在Vue项目中实现权限管理通常涉及前端路由控制、按钮级权限和接口权限校验。以下是几种常见方法: 基于路由的权限控制 使用Vue Router的beforeEach钩子进行路由拦截,…

vue route实现权限控制

vue route实现权限控制

Vue Router 权限控制实现方法 路由元信息(meta)结合导航守卫 在路由配置中通过 meta 字段标记权限要求,例如需要登录或特定角色: const routes = [ {…