当前位置:首页 > 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 属性实现懒加载子节点。

完整示例代码

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

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>
  );
};

react实现树形权限面板

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

相关文章

vue实现权限分离

vue实现权限分离

Vue 实现权限分离的方法 在 Vue 项目中实现权限分离通常涉及前端路由控制、组件级权限和接口权限管理。以下是几种常见的实现方式: 基于路由的权限控制 通过动态路由的方式,根据用户权限加载不同的路…

vue实现权限管理

vue实现权限管理

Vue 权限管理实现方案 权限管理通常分为路由权限和功能权限两部分,以下是常见的实现方式: 路由权限控制 动态路由加载 通过用户角色或权限标识动态生成可访问的路由表。在路由守卫中校验权限: //…

vue实现面板拖拽

vue实现面板拖拽

Vue 实现面板拖拽的方法 使用 HTML5 原生拖拽 API HTML5 提供了原生的拖拽 API,可以通过 draggable 属性和相关事件实现拖拽功能。 在 Vue 模板中为元素添加 dra…

vue权限如何实现

vue权限如何实现

Vue 权限实现方案 在 Vue 项目中实现权限控制通常涉及路由权限、按钮权限和接口权限三个方面。以下是具体实现方法: 路由权限控制 路由权限通常通过动态路由和全局路由守卫实现。用户登录后获取权…

vue权限实现原理

vue权限实现原理

Vue权限实现原理 Vue权限控制的核心在于动态路由和组件级权限校验,通常结合后端返回的权限数据实现。以下是常见的实现方式: 路由级权限控制 路由级权限通过动态生成可访问路由表实现。用户登录后获取权…

vue实现操作权限

vue实现操作权限

Vue 实现操作权限的方法 使用自定义指令 在 Vue 中可以通过自定义指令来实现操作权限控制。创建一个指令,检查用户是否有权限执行某个操作。 // 注册全局指令 Vue.directive('p…