index.js 3.9 KB

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