From f8c3c53f9e29541f8c0e3fcbf682c301fd17e06a Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期一, 23 十一月 2020 17:49:23 +0800 Subject: [PATCH] 2020-11-23 --- src/components/sidemenu/index.jsx | 328 +++++++++++++++++++++-------------------------------- 1 files changed, 131 insertions(+), 197 deletions(-) diff --git a/src/components/sidemenu/index.jsx b/src/components/sidemenu/index.jsx index 79cf836..90b0d6b 100644 --- a/src/components/sidemenu/index.jsx +++ b/src/components/sidemenu/index.jsx @@ -6,7 +6,7 @@ import { Menu, Icon, notification } from 'antd' import asyncComponent from '@/utils/asyncComponent' -import { modifyTabview, resetEditLevel } from '@/store/action' +import { modifyTabview, resetEditLevel, modifyMenuTree, modifyMainMenu } from '@/store/action' import { SySMenuList } from './config' import options from '@/store/options.js' import zhCN from '@/locales/zh-CN/main.js' @@ -20,16 +20,11 @@ class Sidemenu extends Component { static propTypes = { - collapse: PropTypes.bool, - mainMenu: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.object - ]) + collapse: PropTypes.bool } state = { dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, - mainMenuList: null, // 涓�绾ц彍鍗曪紝缂栬緫璋冩暣涓婄骇鑿滃崟鏃惰幏鍙� subMenulist: [], // 浜岀骇鑿滃崟 editMenu: null, // 缂栬緫涓夌骇鑿滃崟鏃惰缃� rootSubmenuKeys: null, @@ -49,179 +44,23 @@ return } - let _param = {func: 'sPC_Get_FunMenu', ParentID: menu.MenuID, systemType: options.sysType} + menu = fromJS(menu).toJS() + let openKey = '' - if (sessionStorage.getItem('isEditState') === 'true') { // 缂栬緫鐘舵�佹椂锛岃幏鍙栬彍鍗曪紝澧炲姞鍙傛暟debug - _param.debug = 'Y' + if (menu.children[0]) { + openKey = menu.openId || menu.children[0].MenuID } - let result = await Api.getSystemConfig(_param) - if (result.status) { - if (this.props.editState && this.props.editLevel === 'HS') return - - if (result.data.length === 0) { // 鏌ヨ鑿滃崟涓虹┖ - this.setState({ - subMenulist: [], - rootSubmenuKeys: [], - openKeys: [] - }) - return - } - - let SubMenuId = sessionStorage.getItem('SubMenu') // 鏄惁涓烘墦寮�鏂伴〉闈� - let ThirdMenuId = sessionStorage.getItem('ThirdMenu') // 鏄惁涓烘墦寮�鏂伴〉闈� - let submenuId = '' // 灞曞紑浜岀骇鑿滃崟ID - let tabId = '' // 鎵撳紑鐨則ab椤礽d - let msg = { - UserID: sessionStorage.getItem('UserID'), - LoginUID: sessionStorage.getItem('LoginUID'), - User_Name: sessionStorage.getItem('User_Name'), - Full_Name: sessionStorage.getItem('Full_Name'), - Member_Level: sessionStorage.getItem('Member_Level'), - dataM: sessionStorage.getItem('dataM'), - avatar: sessionStorage.getItem('avatar'), - debug: sessionStorage.getItem('debug'), - role_id: sessionStorage.getItem('role_id'), - mainlogo: window.GLOB.mainlogo, - mstyle: window.GLOB.style, - MainMenu: menu.MenuID - } - - if (SubMenuId && ThirdMenuId) { - submenuId = SubMenuId - let submenu = result.data.filter(item => item.ParentID === SubMenuId)[0] - - if (!submenu) { - submenuId = '' - } else { - tabId = ThirdMenuId - let tabmenu = submenu.FunMenu.filter(item => item.MenuID === ThirdMenuId)[0] - if (!tabmenu) { - submenuId = '' - tabId = '' - } - } - sessionStorage.removeItem('SubMenu') - sessionStorage.removeItem('ThirdMenu') - } - let parentID = submenuId ? submenuId : result.data[0].ParentID // 灞曞紑浜岀骇鑿滃崟ID - - let iframes = ['Main/Index', 'bda/rdt', 'Home/rdt'] - - let menulist = result.data.map(item => { - let _smenu = {} - _smenu.id = item.ParentID - _smenu.MenuID = item.ParentID - _smenu.text = item.MenuNameP - - try { - _smenu.PageParam = JSON.parse(item.PageParamP) - } catch (e) { - _smenu.PageParam = {Icon: 'folder'} - } - - if (item.FunMenu) { - _smenu.children = item.FunMenu.map(child => { - let _tmenu = { - ParentId: item.ParentID, - OpenType: 'newtab' - } - - if (child.LinkUrl === 'CommonTable') { - _tmenu.type = 'CommonTable' - } else if (iframes.includes(child.LinkUrl.split('?')[0])) { - _tmenu.type = 'iframe' - _tmenu.forbidden = true - } - - if (_tmenu.type !== 'iframe') { - try { - _tmenu.PageParam = JSON.parse(child.PageParam) - } catch (e) { - _tmenu.PageParam = {OpenType: 'newtab'} - } - _tmenu.type = _tmenu.PageParam.Template || _tmenu.type - _tmenu.OpenType = _tmenu.PageParam.OpenType - } - - if (_tmenu.type === 'NewPage') { - _tmenu.src = _tmenu.PageParam.url - if (this.props.memberLevel < 20) { // 浼氬憳绛夌骇澶т簬绛変簬20鏃讹紝鏈夌紪杈戞潈闄� - _tmenu.forbidden = true - } - if (_tmenu.src.indexOf('paramsmain/') > -1) { - try { - let _url = _tmenu.src.split('paramsmain/')[0] + 'paramsmain/' - let _param = JSON.parse(window.decodeURIComponent(window.atob(_tmenu.src.split('paramsmain/')[1]))) - _param.UserID = sessionStorage.getItem('UserID') - _param.LoginUID = sessionStorage.getItem('LoginUID') - _param.User_Name = sessionStorage.getItem('User_Name') - _tmenu.src = _url + window.btoa(window.encodeURIComponent(JSON.stringify(_param))) - } catch { - console.warn('鑿滃崟鍙傛暟瑙f瀽閿欒锛�') - } - } - } else { - // 鎵撳紑鏂伴〉闈㈤摼鎺� - _tmenu.src = '#/paramsmain/' + window.btoa(window.encodeURIComponent(JSON.stringify({ - ...msg, - SubMenu: _smenu.MenuID, - ThirdMenu: child.MenuID - }))) - } - - _tmenu.id = child.MenuID - _tmenu.MenuID = child.MenuID - _tmenu.MenuNo = child.MenuNo - _tmenu.MenuName = child.MenuName - _tmenu.text = child.MenuName - return _tmenu - }) - } - return _smenu - }) - - this.setState({ - subMenulist: menulist, - rootSubmenuKeys: result.data.map(item => item.ParentID), - openKeys: this.props.collapse ? [] : [parentID], - editMenu: this.props.editLevel === 'level3' && menulist.filter(menu => menu.MenuID === this.state.editMenu.MenuID)[0] - }) - if (tabId) { - let _menu = menulist.filter(menu => menu.MenuID === submenuId)[0] - let opentab = _menu && _menu.children.filter(tab => tab.MenuID === tabId)[0] - if (opentab) { - if (sessionStorage.getItem('MenuParam')) { - try { - let thParam = JSON.parse(sessionStorage.getItem('MenuParam')) - - if (tabId === thParam.ThirdMenu) { - delete thParam.ThirdMenu - opentab.param = thParam - } - } catch { - console.warn('鑿滃崟鍙傛暟瑙f瀽閿欒锛�') - } - sessionStorage.removeItem('MenuParam') - } - - opentab.selected = true - let home = this.props.tabviews[0] - home.selected = false - this.props.modifyTabview([home, opentab]) - } - } - } else { - notification.warning({ - top: 92, - message: result.message, - duration: 5 - }) - } + this.setState({ + subMenulist: menu.children, + rootSubmenuKeys: menu.children.map(item => item.MenuID), + openKeys: this.props.collapse ? [] : [openKey], + editMenu: this.props.editLevel === 'level3' ? menu.children.filter(_menu => _menu.MenuID === this.state.editMenu.MenuID)[0] : null + }) } - enterManageView = (type) => { - let menulist = SySMenuList[type] + enterManageView = () => { + let menulist = SySMenuList if (window.GLOB.systemType === 'production') { menulist.forEach(menu => { @@ -252,10 +91,7 @@ let menu = JSON.parse(e.target.dataset.item) - if (menu.OpenType === 'newpage') { - e.preventDefault() - window.open(menu.src) - } else if (menu.OpenType === 'NewPage') { + if (menu.OpenType === 'newpage' || menu.OpenType === 'NewPage') { e.preventDefault() window.open(menu.src) } else if (menu.OpenType === 'blank') { @@ -285,7 +121,7 @@ UNSAFE_componentWillReceiveProps (nextProps) { if (!is(fromJS(this.props.mainMenu), fromJS(nextProps.mainMenu)) && nextProps.mainMenu && nextProps.mainMenu.MenuID === 'systemManageView') { - this.enterManageView(nextProps.mainMenu.MenuID) + this.enterManageView() } else if (!is(fromJS(this.props.mainMenu), fromJS(nextProps.mainMenu))) { // 涓昏彍鍗曞垏鎹紝璇锋眰2銆�3绾ц彍鍗曟暟鎹� this.loadsubmenu(nextProps.mainMenu) @@ -316,17 +152,6 @@ // 缂栬緫浜岀骇鑿滃崟 e.stopPropagation() this.props.resetEditLevel('level2') - // 鑾峰彇涓�绾ц彍鍗曞垪琛� - Api.getSystemConfig({func: 'sPC_Get_MainMenu', debug: 'Y'}).then(res => { - this.setState({ - mainMenuList: res.data.map(item => { - return { - MenuID: item.MenuID, - text: item.MenuName - } - }) - }) - }) } enterThrEdit = (e, menu) => { @@ -337,7 +162,113 @@ } reload = () => { - this.loadsubmenu(this.props.mainMenu) + const { mainMenu } = this.props + let _param = {func: 's_get_pc_menus', systemType: options.sysType, debug: 'Y'} + if (options.sysType !== 'cloud' && window.GLOB.systemType !== 'production') { + _param.linkurl = window.GLOB.linkurl + } + _param.pro_sys = window.GLOB.systemType === 'production' ? 'Y' : '' + + Api.getSystemConfig(_param).then(result => { + // 鐧诲綍瓒呮椂 + if (!result) return + + if (result.status) { + let res = this.getMenulist(result) + let _mainMenu = res.menulist.filter(item => item.MenuID === mainMenu.MenuID)[0] + + this.props.modifyMenuTree(res.menulist) + this.props.modifyMainMenu(_mainMenu || null) + } else { + notification.error({ + top: 92, + message: result.message, + duration: 10 + }) + } + this.loadsubmenu(this.props.mainMenu) + }) + } + + getMenulist = (result) => { + let iframes = ['Main/Index', 'bda/rdt', 'Home/rdt'] + let menulist = result.fst_menu.map(fst => { + let fstItem = { + MenuID: fst.MenuID, + MenuName: fst.MenuName, + PageParam: {OpenType: 'menu', linkUrl: ''}, + children: [] + } + if (fst.PageParam) { + try { + fstItem.PageParam = JSON.parse(fst.PageParam) + } catch (e) { + fstItem.PageParam = {OpenType: 'menu', linkUrl: ''} + } + } + + if (fst.snd_menu) { + fstItem.children = fst.snd_menu.map(snd => { + let sndItem = { + ParentId: fst.MenuID, + MenuID: snd.MenuID, + MenuName: snd.MenuName, + PageParam: {Icon: 'folder'}, + children: [] + } + + if (snd.PageParam) { + try { + sndItem.PageParam = JSON.parse(snd.PageParam) + } catch (e) { + sndItem.PageParam = {Icon: 'folder'} + } + } + + if (snd.trd_menu) { + sndItem.children = snd.trd_menu.map(trd => { + let trdItem = { + FstId: fst.MenuID, + ParentId: snd.MenuID, + MenuID: trd.MenuID, + MenuName: trd.MenuName, + MenuNo: trd.MenuNo, + EasyCode: trd.EasyCode, + type: 'CommonTable', // 榛樿鍊间负甯哥敤琛� + OpenType: 'newtab' // 鎵撳紑鏂瑰紡 + } + + if (trd.LinkUrl && iframes.includes(trd.LinkUrl.split('?')[0])) { + trdItem.type = 'iframe' + trdItem.LinkUrl = trd.LinkUrl + trdItem.forbidden = true + } else { + try { + trdItem.PageParam = trd.PageParam ? JSON.parse(trd.PageParam) : {OpenType: 'newtab'} + } catch (e) { + trdItem.PageParam = {OpenType: 'newtab'} + } + + trdItem.type = trdItem.PageParam.Template || trdItem.type + trdItem.OpenType = trdItem.PageParam.OpenType || trdItem.OpenType + + if (trdItem.type === 'CustomPage' && this.props.memberLevel < 20) { // 浼氬憳绛夌骇澶т簬绛変簬20鏃讹紝鏈夌紪杈戞潈闄� + trdItem.forbidden = true + } + } + + return trdItem + }) + } + + return sndItem + }) + } + + return fstItem + }) + + return { menulist } } exitEdit = () => { @@ -362,7 +293,7 @@ title={ <span className={editShow && index === 0 ? 'edit-control' : ''}> <Icon type={item.PageParam.Icon} /> - <span>{item.text}</span> + <span>{item.MenuName}</span> </span> } > @@ -372,7 +303,7 @@ {item.children.map(cell => { return ( <Menu.Item key={cell.MenuID}> - <a href={cell.src} id={cell.MenuID} data-item={JSON.stringify(cell)} onClick={this.changemenu.bind(this)}>{cell.text}</a> + <a href={cell.src} id={cell.MenuID} data-item={JSON.stringify(cell)} onClick={this.changemenu.bind(this)}>{cell.MenuName}</a> </Menu.Item> ) })} @@ -383,13 +314,13 @@ {this.props.editLevel === 'level2' ? <EditSecMenu menulist={this.state.subMenulist} - supMenuList={this.state.mainMenuList} + menuTree={this.props.menuTree} supMenu={this.props.mainMenu} reload={this.reload} exitEdit={this.exitEdit} /> : null } - {this.props.editLevel === 'level3' && this.state.subMenulist && this.state.editMenu ? + {this.props.editLevel === 'level3' && this.state.editMenu ? <EditThdMenu menulist={this.state.editMenu.children} supMenuList={this.state.subMenulist} @@ -408,7 +339,8 @@ tabviews: state.tabviews, collapse: state.collapse, isiframe: state.isiframe, - mainMenu: state.selectedMainMenu, + mainMenu: state.mainMenu, + menuTree: state.menuTree, memberLevel: state.memberLevel, editState: state.editState, editLevel: state.editLevel @@ -417,6 +349,8 @@ const mapDispatchToProps = (dispatch) => { return { + modifyMenuTree: (menuTree) => dispatch(modifyMenuTree(menuTree)), + modifyMainMenu: (mainMenu) => dispatch(modifyMainMenu(mainMenu)), modifyTabview: (tabviews) => dispatch(modifyTabview(tabviews)), resetEditLevel: (level) => dispatch(resetEditLevel(level)) } -- Gitblit v1.8.0