import { Menu } from 'antd'; const SubMenu = Menu.SubMenu; const ItemMenu = Menu.Item; import cloneDeep from 'lodash/cloneDeep'; class WeaMenuVertical extends React.Component { constructor(props) { super(props); this.state = { mode: props.mode || 'vertical', datas: props.datas || [], inlineWidth: props.inlineWidth || 197, verticalWidth: props.verticalWidth || 61, fontSize: props.fontSize, selectedKey: props.defaultSelectedKey || '', // 包含SubMenu,只做单选 defaultSelectedKey: props.defaultSelectedKey || '', // 包含SubMenu,只做单选 canClick: true, translatepage: props.translatepage || '', }; this.changeheight = this.changeheight.bind(this); } componentWillReceiveProps(nextProps) { // console.log("nextProps:",nextProps); if ( JSON.stringify(this.props.datas) !== JSON.stringify(nextProps.datas) || (this.props.defaultSelectedKey !== nextProps.defaultSelectedKey && this.state.defaultSelectedKey !== nextProps.defaultSelectedKey) ) { let key = nextProps.defaultSelectedKey && nextProps.defaultSelectedKey.indexOf('verTop_') === 0 ? nextProps.defaultSelectedKey.substring(7) : nextProps.defaultSelectedKey; this.setState({ datas: nextProps.datas || [], defaultSelectedKey: nextProps.defaultSelectedKey || '', selectedKey: key || '', }); } } changeheight() { let asdh = $('#menuScrollWrapper').height(); $('.wea-menu-vertical .ant-menu-vertical .ant-menu-submenu>.ant-menu-sub').css({ maxHeight: asdh, overflow: 'auto' }); } render() { const { mode, datas } = this.state; const { selectedKey } = this.state; let that = this; return ( {}} inlineIndent={14} mode={mode} selectedKeys={[selectedKey]} // onOpen={(e)=>{that.changeOpen(e.openKeys)}} // onClose={(e)=>{that.changeOpen(e.openKeys)}} onClick={(e) => { that.changeSelectedKey(e.key, that.getDataByKey(e.key, datas), 0); }} > {this.renderMenuItem(datas, 1)} ); } onModeChange() { const { mode } = this.state; if (typeof this.props.onModeChange == 'function') { this.props.onModeChange(mode); } } changeSelectedKey(key, data, type) { if (window.event && window.event.shiftKey) { window.open(data.fullrouteurl || data.url, '_blank'); return; } if (data && data.target != 'mainFrame') { window.open(data.fullrouteurl || data.url, data.target); return; } const { canClick } = this.state; const { clickBlock } = this.props; const that = this; // let d = new Date(); // console.log(canClick,d.getTime()); if (canClick) { if (key && key.indexOf('verTop_') === 0) { key = key.substring(7); } this.setState({ canClick: false, selectedKey: key, }); if (typeof this.props.onSelect == 'function') { this.props.onSelect(key, data, type); } setTimeout(() => { that.setState({ canClick: true }); }, clickBlock || 300); } } getDataByKey(key, datas) { let that = this; let obj = ''; for (let i = 0; i < datas.length && obj == ''; i++) { if (datas[i].id == key) { obj = cloneDeep(datas[i]); } if (obj == '' && datas[i].child && datas[i].child.length > 0) { obj = that.getDataByKey(key, datas[i].child); } } return obj; } renderMenuItem(datas, level) { const selectedClassName = 'wea-menu-selected'; let that = this; const { selectedKey } = this.state; let datasArr = new Array(); for (let i = 0; i < datas.length; i++) { const data = datas[i]; const isSubMenu = data.child && data.child.length > 0; const isSelected = selectedKey == data.id || `verTop_${selectedKey}` == data.id; if (data.isVerticalHide !== 'true') { if (isSubMenu) { datasArr.push( { that.changeSelectedKey(e.key, data, 0); }} title={that.renderTitle(data, level)} > {that.renderMenuItem(data.child, level + 1)} , ); if (level == 2 && i == 0 && !data.isVerticalHide) { datasArr.push(); } } else { datasArr.push( {that.renderTitle(data, level)} , ); } } } return datasArr; } renderTitle(data, level) { const { fontSize, translatepage } = this.state; const needImg = level == 1; const img = data.iconType == '2' && data.iconImgSrc ? ( ) : data.icon ? ( ) : ( ); if (level > 1) { return ( {translatepage == '1' ? (data.fname ? data.fname : data.name) : data.name} ); } return needImg ? img : ''; } } export default WeaMenuVertical;