index.jsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import React, { useState, useMemo, useCallback } from 'react';
  2. import { IconUser, IconStar, IconUserGroup, IconEdit, IconApps, IconSetting } from '@douyinfe/semi-icons';
  3. import { Nav, Button } from '../../../index';
  4. export default function Demo() {
  5. const [selectedKeys, setSelectedKeys] = useState(['入驻审核']);
  6. const navItems = useMemo(
  7. () => [
  8. { itemKey: 'user', text: '用户管理', icon: <IconUser /> },
  9. { itemKey: 'union', text: '公会中心', icon: <IconStar /> },
  10. {
  11. itemKey: 'union-management',
  12. text: '公会管理',
  13. icon: <IconUserGroup />,
  14. items: ['公告设置', '公会查询', '信息录入'],
  15. },
  16. {
  17. itemKey: 'approve-management',
  18. text: '审批管理',
  19. icon: <IconEdit />,
  20. items: [
  21. '入驻审核',
  22. {
  23. itemKey: 'operation-management',
  24. text: '运营管理',
  25. items: ['人员管理', '人员变更'],
  26. },
  27. ],
  28. },
  29. {
  30. text: '任务平台',
  31. icon: <IconSetting />,
  32. itemKey: 'job',
  33. items: ['任务管理', '用户任务查询'],
  34. },
  35. ],
  36. []
  37. );
  38. const navItemKeys = useMemo(
  39. () =>
  40. navItems.reduce((prev, item) => {
  41. const que = [item];
  42. while (que.length) {
  43. const cur = que.pop();
  44. if (cur) {
  45. if (typeof cur === 'object') {
  46. if (Array.isArray(cur.items) && cur.items.length) {
  47. que.push(...cur.items);
  48. } else if (cur.itemKey) {
  49. prev.push(cur.itemKey);
  50. }
  51. } else {
  52. prev.push(cur);
  53. }
  54. }
  55. }
  56. return prev;
  57. }, []),
  58. [navItems]
  59. );
  60. const randomSelect = useCallback(() => {
  61. const randomIndex = Math.floor(Math.random() * navItemKeys.length);
  62. setSelectedKeys([navItemKeys[randomIndex]]);
  63. }, [navItemKeys]);
  64. const handleSelect = (...args) => {
  65. console.log(...args);
  66. setSelectedKeys(args[0].selectedKeys);
  67. };
  68. return (
  69. <div style={{ height: '100vh', display: 'inline-block' }}>
  70. <Button onClick={randomSelect}>随机选中</Button>
  71. <Nav onSelect={handleSelect} selectedKeys={selectedKeys} items={navItems} />
  72. </div>
  73. );
  74. }