递归实现管理后台权限列表渲染

权限列表

const menuList = [
  {
    title: "首页", // 菜单标题名称
    key: "/home", // 对应的path
    icon: "home", // 图标名称
    isPublic: true, // 公开的
  },
  {
    title: "商品",
    key: "/products",
    icon: "appstore",
    children: [
      // 子菜单列表
      {
        title: "品类管理",
        key: "/category",
        icon: "bars",
      },
      {
        title: "商品管理",
        key: "/product",
        icon: "tool",
      },
    ],
  },

  {
    title: "用户管理",
    key: "/user",
    icon: "user",
  },
  {
    title: "角色管理",
    key: "/role",
    icon: "safety",
  },

  {
    title: "图形图表",
    key: "/charts",
    icon: "area-chart",
    children: [
      {
        title: "柱形图",
        key: "/charts/bar",
        icon: "bar-chart",
      },
      {
        title: "折线图",
        key: "/charts/line",
        icon: "line-chart",
      },
      {
        title: "饼图",
        key: "/charts/pie",
        icon: "pie-chart",
      },
    ],
  },

  {
    title: "订单管理",
    key: "/order",
    icon: "windows",
  },
];

export default menuList;

递归遍历权限例表

  const getMenunodes = (menuList) => {
    return menuList.map((item) => {
      if (!item.children) {
        return (
          <Menu.Item key={item.key}>
            <Link to={item.key}>
              <Icon type={item.icon} />
              <span>{item.title}</span>
            </Link>
          </Menu.Item>
        );
      } else {
        return (
          <SubMenu
            key={item.key}
            title={
              <span>
                <Icon type={item.type} />
                <span>{item.title}</span>
              </span>
            }
          >
            {getMenunodes(item.children)}
          </SubMenu>
        );
      }
    });
  };

左边菜单栏,高亮显示

  const { pathname } = useLocation();
  console.log(pathname);
  return (
    <div>
      <Menu
        defaultSelectedKeys={[pathname]}
        defaultOpenKeys={["sub1"]}
        mode="inline"
        theme="dark"
      >
        {getMenunodes(menuList)}
      </Menu>
    </div>
  );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值