index.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { Menu, message } from 'antd';
  2. import { useState, useEffect } from 'react';
  3. import { useDispatch, useSelector } from 'react-redux'
  4. import { add, active } from '@reducers/tabPanes'
  5. import OrgManager from "../OrgManager";
  6. import RoleManager from "../RoleManager";
  7. import UserManager from "../UserManager";
  8. import DataManager from "../DataManager";
  9. import InpaManager from "../InpaManager"
  10. import NullPage from "../NullPage";
  11. import FuncManager from "../FuncManager";
  12. import OperationLog from "../OperationLog";
  13. import LoginLog from "../LoginLog";
  14. import ExceptionLog from "../ExceptionLog";
  15. import apiObj from '@api/index';
  16. const { xPost, api } = apiObj;
  17. const { SubMenu } = Menu;
  18. const propTypes = {};
  19. const defaultProps = {};
  20. const pageMap = {
  21. '组织管理': <OrgManager />,
  22. '角色管理': <RoleManager />,
  23. '用户管理': <UserManager />,
  24. '数据权限': <DataManager />,
  25. '病区管理': <InpaManager />,
  26. '功能管理': <FuncManager />,
  27. '操作日志': <OperationLog />,
  28. '登录日志': <LoginLog />,
  29. '异常日志': <ExceptionLog />,
  30. }
  31. let firstMenuPage = null; //第一个菜单,自动激活时用
  32. function AMenu() {
  33. const [menuList, setMenuList] = useState([]); //菜单列表数据
  34. const dispatch = useDispatch();
  35. //当前选中的菜单
  36. const { activeTab, panes } = useSelector(state => {
  37. return state.tabPanes;
  38. });
  39. //切换菜单、增加tab
  40. function changeMenu(val) {
  41. const idName = val.key.split("-");
  42. const item = panes.find((it) => it.key === idName[0]);
  43. //console.log(item);
  44. if (item) { //已存在当前tab,则定位即可不增加
  45. dispatch(active(idName[0]));
  46. return;
  47. }
  48. dispatch(
  49. add({ title: idName[0], content: pageMap[idName[0]] || <NullPage />, key: idName[0] })
  50. )
  51. }
  52. //获取菜单数据
  53. function getUserMenus() {
  54. xPost(api.getUserShowMemuTree).then((res) => {
  55. if (res.data.code === 200) {
  56. const data = res.data.data;
  57. const menuData = data.showMenuInfo;
  58. setMenuList(menuData);
  59. firstMenuPage = menuData[0].children ? menuData[0].children[0] : menuData[0]
  60. } else {
  61. message.error(res.data.msg || '获取菜单失败');
  62. }
  63. })
  64. }
  65. function getSubMenu(data) {
  66. return data.map((it) => {
  67. if (it.menuType === '1') {
  68. return (
  69. <Menu.Item key={it.menuName}>{it.menuName}</Menu.Item>
  70. )
  71. } else if (it.menuType === '0') {
  72. return (
  73. <SubMenu key={it.menuId} title={it.menuName}>
  74. {it.children ? getSubMenu(it.children) : ''}
  75. </SubMenu>
  76. )
  77. } else {
  78. return ''
  79. }
  80. })
  81. }
  82. useEffect(() => {
  83. getUserMenus();
  84. const timeO = setTimeout(() => {
  85. dispatch(
  86. add({ title: firstMenuPage.menuName, content: pageMap[firstMenuPage.menuName] || <NullPage />, key: firstMenuPage.menuName })
  87. );
  88. }, 500);
  89. return function clearOut() {
  90. clearTimeout(timeO);
  91. }
  92. }, []);
  93. return (
  94. <Menu
  95. /*defaultSelectedKeys={[menuList[0].menuName]}
  96. defaultOpenKeys={[menuList[0].menuId]}*/
  97. selectedKeys={activeTab}
  98. mode="inline"
  99. onClick={changeMenu}
  100. >
  101. {
  102. getSubMenu(menuList)
  103. }
  104. </Menu>
  105. )
  106. }
  107. AMenu.propTypes = propTypes;
  108. AMenu.defaultProps = defaultProps;
  109. export default AMenu;