|
@@ -1,7 +1,8 @@
|
|
-import { Menu, message } from 'antd';
|
|
|
|
|
|
+import { Menu, message, Button } from 'antd';
|
|
import { useState, useEffect } from 'react';
|
|
import { useState, useEffect } from 'react';
|
|
-import { useDispatch, useSelector } from 'react-redux'
|
|
|
|
|
|
+import { useDispatch, useSelector, setstate } from 'react-redux'
|
|
import { add, active } from '@reducers/tabPanes'
|
|
import { add, active } from '@reducers/tabPanes'
|
|
|
|
+import { toglecollapsed } from '@reducers/tabPanes.js';
|
|
import OrgManager from "../OrgManager";
|
|
import OrgManager from "../OrgManager";
|
|
import RoleManager from "../RoleManager";
|
|
import RoleManager from "../RoleManager";
|
|
import UserManager from "../UserManager";
|
|
import UserManager from "../UserManager";
|
|
@@ -15,11 +16,59 @@ import ExceptionLog from "../ExceptionLog";
|
|
import MyMessage from "../MyMessage";
|
|
import MyMessage from "../MyMessage";
|
|
import MsgManage from "../MsgManage";
|
|
import MsgManage from "../MsgManage";
|
|
import apiObj from '@api/index';
|
|
import apiObj from '@api/index';
|
|
|
|
+import './index.less'
|
|
|
|
+import iconLt from '@images/lt.png';
|
|
|
|
+import QXGL from '@images/icon-key.png';
|
|
|
|
+import QXGL1 from '@images/icon-key1.png';
|
|
|
|
+import XTSZ from '@images/icon-set.png';
|
|
|
|
+import XTSZ1 from '@images/icon-set1.png';
|
|
|
|
+import RZGL from '@images/icon-note.png';
|
|
|
|
+import RZGL1 from '@images/icon-note1.png';
|
|
|
|
+import ZNTZ from '@images/icon-tip.png';
|
|
|
|
+import ZNTZ1 from '@images/icon-tip1.png';
|
|
|
|
+import BAZK from '@images/icon-add.png';
|
|
|
|
+import BAZK1 from '@images/icon-add1.png';
|
|
|
|
+
|
|
|
|
+import { createFromIconfontCN, MenuUnfoldOutlined, MenuFoldOutlined } from '@ant-design/icons';
|
|
|
|
+// import right from "@images/icon-right.png";
|
|
|
|
+// import chart from '../../../src/images/icon-chart.png';
|
|
|
|
+
|
|
|
|
+// import right from '../../../src/images/icon-right.png';
|
|
|
|
|
|
const { post, api } = apiObj;
|
|
const { post, api } = apiObj;
|
|
const { SubMenu } = Menu;
|
|
const { SubMenu } = Menu;
|
|
const propTypes = {};
|
|
const propTypes = {};
|
|
const defaultProps = {};
|
|
const defaultProps = {};
|
|
|
|
+const icon = [{
|
|
|
|
+ icon: QXGL,
|
|
|
|
+ icon1: QXGL1,
|
|
|
|
+ name: 'QXGL',
|
|
|
|
+},
|
|
|
|
+{
|
|
|
|
+ icon: XTSZ,
|
|
|
|
+ icon1: XTSZ1,
|
|
|
|
+ name: 'XTSZ',
|
|
|
|
+},
|
|
|
|
+{
|
|
|
|
+ icon: RZGL,
|
|
|
|
+ icon1: RZGL1,
|
|
|
|
+ name: 'RZGL',
|
|
|
|
+},
|
|
|
|
+{
|
|
|
|
+ icon: ZNTZ,
|
|
|
|
+ icon1: ZNTZ1,
|
|
|
|
+ name: 'ZNTZ',
|
|
|
|
+},
|
|
|
|
+{
|
|
|
|
+ icon: BAZK,
|
|
|
|
+ icon1: BAZK1,
|
|
|
|
+ name: 'BAZK',
|
|
|
|
+},
|
|
|
|
+]
|
|
|
|
+const MyIcon = createFromIconfontCN({
|
|
|
|
+ scriptUrl: '//at.alicdn.com/t/font_2938689_8eruev6ldqw.js', // 在 iconfont.cn 上生成
|
|
|
|
+ type: 'icon-paobu',
|
|
|
|
+});
|
|
|
|
|
|
const pageMap = {
|
|
const pageMap = {
|
|
'QXGL-ZZGL': <OrgManager />,
|
|
'QXGL-ZZGL': <OrgManager />,
|
|
@@ -34,24 +83,30 @@ const pageMap = {
|
|
'ZNTZ-WDTZ': <MyMessage />,
|
|
'ZNTZ-WDTZ': <MyMessage />,
|
|
'ZNTZ-TZGL': <MsgManage />,
|
|
'ZNTZ-TZGL': <MsgManage />,
|
|
}
|
|
}
|
|
|
|
+const menuiocn =
|
|
|
|
+ [{ icon: require('@images/logo.png') }]
|
|
|
|
+const rootSubmenuKeys = [];
|
|
|
|
+
|
|
|
|
|
|
let firstMenuPage = {}; //第一个菜单,自动激活时用
|
|
let firstMenuPage = {}; //第一个菜单,自动激活时用
|
|
function AMenu() {
|
|
function AMenu() {
|
|
const [menuList, setMenuList] = useState([]); //菜单列表数据
|
|
const [menuList, setMenuList] = useState([]); //菜单列表数据
|
|
const dispatch = useDispatch();
|
|
const dispatch = useDispatch();
|
|
//当前选中的菜单
|
|
//当前选中的菜单
|
|
- const { activeTab, panes } = useSelector(state => {
|
|
|
|
|
|
+ const { activeTab, panes, collapsed } = useSelector(state => {
|
|
return state.tabPanes;
|
|
return state.tabPanes;
|
|
});
|
|
});
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+ // const {collapsed}
|
|
|
|
+
|
|
|
|
+ // let collapsed = false
|
|
//切换菜单、增加tab
|
|
//切换菜单、增加tab
|
|
function changeMenu(val) {
|
|
function changeMenu(val) {
|
|
|
|
+ console.log('我是切换菜单的val=========', val)
|
|
const idName = val.key.split("&");
|
|
const idName = val.key.split("&");
|
|
const item = panes.find((it) => it.key === val.key);
|
|
const item = panes.find((it) => it.key === val.key);
|
|
//console.log(item);
|
|
//console.log(item);
|
|
if (item) { //已存在当前tab,则定位即可不增加
|
|
if (item) { //已存在当前tab,则定位即可不增加
|
|
- dispatch(active({idName:val.key}));
|
|
|
|
|
|
+ dispatch(active({ idName: val.key }));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
dispatch(
|
|
dispatch(
|
|
@@ -66,49 +121,94 @@ function AMenu() {
|
|
const menuData = data.showMenuInfo;
|
|
const menuData = data.showMenuInfo;
|
|
setMenuList(menuData);
|
|
setMenuList(menuData);
|
|
firstMenuPage = findFirstPage(menuData);
|
|
firstMenuPage = findFirstPage(menuData);
|
|
- const {menuName,code}=firstMenuPage;
|
|
|
|
|
|
+ const { menuName, code } = firstMenuPage;
|
|
dispatch(
|
|
dispatch(
|
|
- add({ title: menuName, content: pageMap[code] || <NullPage />, key: code+"&"+menuName })
|
|
|
|
|
|
+ add({ title: menuName, content: pageMap[code] || <NullPage />, key: code + "&" + menuName })
|
|
);
|
|
);
|
|
} else {
|
|
} else {
|
|
message.error(res.data.msg || '获取菜单失败');
|
|
message.error(res.data.msg || '获取菜单失败');
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
}
|
|
- function findFirstPage(menuData){
|
|
|
|
|
|
+ function findFirstPage(menuData) {
|
|
//获取第一个菜单页面,默认选中
|
|
//获取第一个菜单页面,默认选中
|
|
- if(!menuData) return null;
|
|
|
|
- let page1=null;
|
|
|
|
- menuData.find((it)=>{
|
|
|
|
- if(it.menuType==='1'){
|
|
|
|
- page1=it;
|
|
|
|
|
|
+ if (!menuData) return null;
|
|
|
|
+ let page1 = null;
|
|
|
|
+ menuData.find((it) => {
|
|
|
|
+ if (it.menuType === '1') {
|
|
|
|
+ page1 = it;
|
|
return true;
|
|
return true;
|
|
- }else if(it.menuType==='0'&&it.children){
|
|
|
|
- page1=findFirstPage(it.children);
|
|
|
|
- if(page1) return true
|
|
|
|
|
|
+ } else if (it.menuType === '0' && it.children) {
|
|
|
|
+ page1 = findFirstPage(it.children);
|
|
|
|
+ if (page1) return true
|
|
}
|
|
}
|
|
});
|
|
});
|
|
return page1;
|
|
return page1;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ const rootSubmenuKeys = [] //所有包含子集的一级菜单
|
|
|
|
+ const [openKeys, setOpenKeys] = useState([]);
|
|
|
|
+
|
|
|
|
+ function onOpenChange(keys) {
|
|
|
|
+ console.log('我是选中的一级标签====', openKeys)
|
|
|
|
+ const latestOpenKey = keys.find(key => openKeys.indexOf(key) === -1);
|
|
|
|
+ if (rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
|
|
|
|
+ setOpenKeys(latestOpenKey ? [latestOpenKey] : []);
|
|
|
|
+ } else {
|
|
|
|
+ setOpenKeys(keys);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
function getSubMenu(data) { //menuType=0目录,1页面,2按钮
|
|
function getSubMenu(data) { //menuType=0目录,1页面,2按钮
|
|
|
|
+
|
|
return data.map((it) => {
|
|
return data.map((it) => {
|
|
|
|
+ var iconitem
|
|
|
|
+ var openkey
|
|
|
|
+ if (it.menuType == 0) {
|
|
|
|
+ let item = it.code + it.menuName
|
|
|
|
+ rootSubmenuKeys.push(item)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ icon.find((value) => {
|
|
|
|
+ let checked
|
|
|
|
+ if (it.code == value.name) {
|
|
|
|
+
|
|
|
|
+ console.log('我是activetab=====', activeTab)
|
|
|
|
+ if (activeTab.indexOf(it.code) === -1) {
|
|
|
|
+ checked = true
|
|
|
|
+ iconitem = value.icon
|
|
|
|
+ } else {
|
|
|
|
+ checked = false
|
|
|
|
+ iconitem = value.icon1
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ })
|
|
if (it.menuType === '1') {
|
|
if (it.menuType === '1') {
|
|
return (
|
|
return (
|
|
- <Menu.Item key={it.code+"&"+it.menuName}>{it.menuName}</Menu.Item>
|
|
|
|
|
|
+ <Menu.Item key={it.code + "&" + it.menuName} icon={<img src={iconitem} />}>{it.menuName}</Menu.Item>
|
|
|
|
+
|
|
)
|
|
)
|
|
} else if (it.menuType === '0') {
|
|
} else if (it.menuType === '0') {
|
|
return (
|
|
return (
|
|
- <SubMenu key={it.code+"&"+it.menuName} title={it.menuName}>
|
|
|
|
|
|
+ <SubMenu key={it.code + "&" + it.menuName} title={it.menuName} icon={<img src={iconitem} />}>
|
|
{it.children ? getSubMenu(it.children) : ''}
|
|
{it.children ? getSubMenu(it.children) : ''}
|
|
</SubMenu>
|
|
</SubMenu>
|
|
|
|
+
|
|
)
|
|
)
|
|
} else {
|
|
} else {
|
|
return ''
|
|
return ''
|
|
}
|
|
}
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+ function toggleCollapsed() {
|
|
|
|
+ dispatch(toglecollapsed([]))
|
|
|
|
+ }
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
getUserMenus();
|
|
getUserMenus();
|
|
|
|
+
|
|
/*const timeO = setTimeout(() => {
|
|
/*const timeO = setTimeout(() => {
|
|
dispatch(
|
|
dispatch(
|
|
add({ title: firstMenuPage.menuName, content: pageMap[firstMenuPage.menuName] || <NullPage />, key: firstMenuPage.code })
|
|
add({ title: firstMenuPage.menuName, content: pageMap[firstMenuPage.menuName] || <NullPage />, key: firstMenuPage.code })
|
|
@@ -119,18 +219,36 @@ function AMenu() {
|
|
}*/
|
|
}*/
|
|
|
|
|
|
}, []);
|
|
}, []);
|
|
|
|
+
|
|
return (
|
|
return (
|
|
|
|
+ <div className='menu'>
|
|
|
|
+
|
|
<Menu
|
|
<Menu
|
|
/*defaultSelectedKeys={[menuList[0].menuName]}
|
|
/*defaultSelectedKeys={[menuList[0].menuName]}
|
|
defaultOpenKeys={[menuList[0].menuId]}*/
|
|
defaultOpenKeys={[menuList[0].menuId]}*/
|
|
selectedKeys={activeTab}
|
|
selectedKeys={activeTab}
|
|
mode="inline"
|
|
mode="inline"
|
|
onClick={changeMenu}
|
|
onClick={changeMenu}
|
|
|
|
+ openKeys={openKeys}
|
|
|
|
+ onOpenChange={onOpenChange}
|
|
>
|
|
>
|
|
{
|
|
{
|
|
getSubMenu(menuList)
|
|
getSubMenu(menuList)
|
|
}
|
|
}
|
|
|
|
+
|
|
</Menu>
|
|
</Menu>
|
|
|
|
+ <div className='pstcollaps'>
|
|
|
|
+ <div className='collaps'> {collapsed ? <MenuUnfoldOutlined className='trigger'
|
|
|
|
+ onClick={toggleCollapsed}></MenuUnfoldOutlined> : <MenuFoldOutlined className='trigger'
|
|
|
|
+ onClick={toggleCollapsed}></MenuFoldOutlined>}</div>
|
|
|
|
+ {
|
|
|
|
+ !collapsed ? <div className='compomentname'> ©杭州朗通信息技术有限公司 </div> : <div className='compomentname' />
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ </div>
|
|
)
|
|
)
|
|
}
|
|
}
|
|
AMenu.propTypes = propTypes;
|
|
AMenu.propTypes = propTypes;
|