index.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import React, { useState, useCallback } from 'react';
  2. import { Nav, Button } from '@douyinfe/semi-ui';
  3. import {IconAppCenter, IconArticle, IconFolder, IconPhoneStroke, IconSetting} from '@douyinfe/semi-icons';
  4. const defaultItems = [
  5. {
  6. title: '应用管理',
  7. key: 'app',
  8. icon: <IconAppCenter />,
  9. children: [
  10. { title: '应用控制台', key: '/app/perm', children: [] },
  11. { title: '查看应用', key: '/app/list', children: [] },
  12. { title: '创建应用', key: '/app/create', children: [] },
  13. { title: '应用鉴权', key: '/app/auth', children: [] },
  14. ],
  15. },
  16. {
  17. title: '版本管理',
  18. key: 'version',
  19. icon: <IconArticle />,
  20. children: [
  21. { title: '版本发布', key: '/version/release', children: [] },
  22. { title: '产品功能发布', key: '/feature/release', children: [] },
  23. { title: '发版记录', key: '/version/releases', children: [] },
  24. { title: '开发文档', key: '/version/doc', children: [] },
  25. { title: 'VESDK介绍', key: '/version/sdkinfo', children: [] },
  26. ],
  27. },
  28. {
  29. title: '模块化打包',
  30. key: 'module',
  31. icon: <IconFolder />,
  32. children: [
  33. // { title: 'CI打包配置', key: '/module/ciconfig', children: [] },
  34. { title: '业务打包配置', key: '/module/cilist', children: [] },
  35. { title: '宏模块管理', key: '/module/group', children: [] },
  36. { title: '宏参数管理', key: '/module/param', children: [] },
  37. { title: '分支管理', key: '/module/branch', children: [] },
  38. ],
  39. },
  40. {
  41. title: '机型打分',
  42. key: 'device',
  43. icon: <IconPhoneStroke />,
  44. children: [
  45. { title: '机型性能查询', key: '/benchmark/performance', children: [] },
  46. { title: '生成黑白名单', key: '/benchmark/list', children: [] },
  47. { title: '黑白名单管理', key: '/benchmark/manage', children: [] },
  48. { title: '机型查询', key: '/benchmark/model', children: [] },
  49. { title: '元数据管理', key: '/benchmark/data', children: [] },
  50. { title: '场景打分管理', key: '/benchmark/scene', children: [] },
  51. ],
  52. },
  53. {
  54. title: 'VESDK数据',
  55. key: 'vesdk',
  56. icon: <IconPhoneStroke />,
  57. children: [
  58. { title: 'VESDK DAU趋势', key: '/trend/dau', children: [] },
  59. { title: 'VESDK API趋势', key: '/trend/api', children: [] },
  60. ],
  61. },
  62. {
  63. title: '工具能力',
  64. key: 'setting',
  65. icon: <IconSetting />,
  66. children: [
  67. { title: '群消息发送', key: '/setting/msg', children: [] },
  68. { title: '群标签管理', key: '/setting/tag', children: [] },
  69. { title: '上传文件', key: '/setting/upload', children: [] },
  70. ],
  71. },
  72. ];
  73. const normalize = ({ title: text, key: itemKey, children: items, ...rest } = {}) => ({
  74. ...rest,
  75. text,
  76. itemKey,
  77. items: Array.isArray(items) && items.length ? items.map(normalize) : undefined,
  78. });
  79. const Demo = (props = {}) => {
  80. const [items, setItems] = useState(() => defaultItems.map(normalize));
  81. const [selectedKeys, setSelectedKeys] = useState([]);
  82. const [openKeys, setOpenKeys] = useState([]);
  83. const onSelect = useCallback(item => {
  84. console.log(item);
  85. setSelectedKeys([item.itemKey]);
  86. }, []);
  87. const onOpenChange = useCallback(item => {
  88. console.log('onOpenChange: ', item);
  89. setOpenKeys([...item.openKeys]);
  90. });
  91. return (
  92. <div style={{ width: '100%', height: '100vh' }}>
  93. <Button onClick={() => setItems(defaultItems.map(normalize))}>重置导航</Button>
  94. <Nav
  95. defaultSelectedKeys={selectedKeys}
  96. openKeys={openKeys}
  97. style={{ height: '100%' }}
  98. bodyStyle={{ height: 480 }}
  99. items={items}
  100. onSelect={onSelect}
  101. onOpenChange={onOpenChange}
  102. header={{
  103. logo: <img src="https://sf6-cdn-tos.douyinstatic.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/root-web-sites/webcast_logo.svg" />,
  104. text: 'Semi 运营后台',
  105. }}
  106. footer={{
  107. collapseButton: true,
  108. }}
  109. />
  110. </div>
  111. );
  112. };
  113. export default Demo;