| | |
| | | import { Modal, notification, Button, Spin, Cascader } from 'antd' |
| | | // import { ClockCircleOutlined, SyncOutlined, WarningOutlined, CheckCircleOutlined } from '@ant-design/icons' |
| | | import moment from 'moment' |
| | | import md5 from 'md5' |
| | | |
| | | import Api from '@/api' |
| | | import Utils from '@/utils/utils.js' |
| | | import MenuUtils, { setLangTrans } from '@/utils/utils-custom.js' |
| | | import './index.scss' |
| | | |
| | | const { confirm } = Modal |
| | | |
| | | class TransMenu extends Component { |
| | | state = { |
| | | visible: false, |
| | | loading: false, |
| | | saveing: false, |
| | | lang: '', |
| | | dicts: [], |
| | | menus: [], |
| | |
| | | lang: langs[0], |
| | | loading: true, |
| | | visible: true, |
| | | saveing: false, |
| | | values: [] |
| | | }) |
| | | |
| | |
| | | menus.push(fstItem) |
| | | }) |
| | | |
| | | menus.push({ |
| | | value: 'home_page_id', |
| | | label: '首页', |
| | | }) |
| | | |
| | | this.setState({menus: menus, loading: false}) |
| | | }) |
| | | } |
| | | |
| | | submit = () => { |
| | | const { menulist } = this.props |
| | | const { values } = this.state |
| | | |
| | | if (!values || values.length !== 3) { |
| | | if (!values || (values.length !== 3 && values[0] !== 'home_page_id')) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '请选择三级菜单!', |
| | | message: '请选择菜单!', |
| | | duration: 5 |
| | | }) |
| | | return |
| | | } |
| | | |
| | | console.log(values) |
| | | console.log(menulist) |
| | | this.setState({saveing: true}) |
| | | |
| | | if (values[0] === 'home_page_id') { |
| | | this.transThdMenu({ |
| | | value: 'home_page_id', |
| | | MenuID: 'home_page_id', |
| | | label: '首页' |
| | | }) |
| | | } else { |
| | | this.transFirstMenu(values[0], values[1], values[2]) |
| | | } |
| | | } |
| | | |
| | | transFirstMenu = (firstId, secId, thdId) => { |
| | | const { menulist } = this.props |
| | | const { menus, dicts } = this.state |
| | | let tail = md5(window.GLOB.appkey + sessionStorage.getItem('lang')).toLowerCase() |
| | | |
| | | tail = tail.slice(-8) |
| | | |
| | | let oriFirstMenu = menus.filter(item => item.value === firstId)[0] |
| | | let oriSecMenu = oriFirstMenu.children.filter(item => item.value === secId)[0] |
| | | let oriThdMenu = oriSecMenu.children.filter(item => item.value === thdId)[0] |
| | | |
| | | oriThdMenu = fromJS(oriThdMenu).toJS() |
| | | |
| | | let curFirstId = firstId |
| | | if (curFirstId.length <= 24) { |
| | | curFirstId = md5(window.GLOB.appkey + curFirstId + sessionStorage.getItem('lang')).toLowerCase() |
| | | } else { |
| | | curFirstId = curFirstId.slice(0, 24) + tail |
| | | } |
| | | |
| | | let curSectId = secId |
| | | if (curSectId.length <= 24) { |
| | | curSectId = md5(window.GLOB.appkey + curSectId + sessionStorage.getItem('lang')).toLowerCase() |
| | | } else { |
| | | curSectId = curSectId.slice(0, 24) + tail |
| | | } |
| | | |
| | | let curThdId = thdId |
| | | if (curThdId.length <= 24) { |
| | | curThdId = md5(window.GLOB.appkey + curThdId + sessionStorage.getItem('lang')).toLowerCase() |
| | | } else { |
| | | curThdId = curThdId.slice(0, 24) + tail |
| | | } |
| | | |
| | | let firstName = oriFirstMenu.label |
| | | let secName = oriSecMenu.label |
| | | |
| | | dicts.forEach(item => { |
| | | if (item.type !== 'menu') return |
| | | if (item.reg === firstName) { |
| | | firstName = item.value |
| | | } |
| | | if (item.reg === secName) { |
| | | secName = item.value |
| | | } |
| | | if (item.reg === oriThdMenu.label) { |
| | | oriThdMenu.label = item.value |
| | | } |
| | | }) |
| | | |
| | | let firstParam = { |
| | | func: 'sPC_MainMenu_Add', |
| | | MenuID: curFirstId, |
| | | MenuName: firstName, |
| | | PageParam: JSON.stringify({ |
| | | OpenType: 'menu', |
| | | linkUrl: '' |
| | | }) |
| | | } |
| | | |
| | | let secParam = { |
| | | func: 'sPC_SndMenu_Add', |
| | | ParentID: curFirstId, |
| | | MenuID: curSectId, |
| | | MenuName: secName, |
| | | PageParam: JSON.stringify({ |
| | | Icon: '' |
| | | }) |
| | | } |
| | | |
| | | oriThdMenu.fstMenuId = curFirstId |
| | | oriThdMenu.parentId = curSectId |
| | | oriThdMenu.MenuID = curThdId |
| | | |
| | | if (menulist.findIndex(item => item.MenuID === firstParam.MenuID) === -1) { |
| | | Api.getCloudConfig(firstParam).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | this.setState({saveing: false}) |
| | | return |
| | | } |
| | | |
| | | this.transSecondMenu(secParam, oriThdMenu, true) |
| | | }) |
| | | } else { |
| | | this.transSecondMenu(secParam, oriThdMenu) |
| | | } |
| | | } |
| | | |
| | | transSecondMenu = (secParam, oriThdMenu, reload) => { |
| | | const { menulist } = this.props |
| | | |
| | | let creat = true |
| | | |
| | | menulist.forEach(item => { |
| | | if (item.children.findIndex(cell => cell.MenuID === secParam.MenuID) > -1) { |
| | | creat = false |
| | | } |
| | | }) |
| | | |
| | | if (creat) { |
| | | Api.getCloudConfig(secParam).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | this.setState({saveing: false}) |
| | | return |
| | | } |
| | | |
| | | this.transThdMenu(oriThdMenu, true) |
| | | }) |
| | | } else { |
| | | this.transThdMenu(oriThdMenu, reload) |
| | | } |
| | | } |
| | | |
| | | transThdMenu = (menu, reload) => { |
| | | const { menulist } = this.props |
| | | const { lang, dicts } = this.state |
| | | |
| | | let _param = { |
| | | func: 'sPC_Get_LongParam', |
| | | MenuID: menu.value, |
| | | lang: lang |
| | | } |
| | | |
| | | let creat = true |
| | | |
| | | if (menu.MenuID === 'home_page_id') { |
| | | creat = false |
| | | } else { |
| | | menulist.forEach(item => { |
| | | item.children.forEach(cell => { |
| | | if (cell.children.findIndex(n => n.MenuID === menu.MenuID) > -1) { |
| | | creat = false |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | Api.getCloudConfig(_param).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | this.setState({saveing: false}) |
| | | return |
| | | } |
| | | |
| | | let config = null |
| | | if (res.LongParam) { |
| | | try { |
| | | config = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam))) |
| | | } catch (e) { |
| | | console.warn('Parse Failure') |
| | | config = '' |
| | | } |
| | | } |
| | | |
| | | if (!config) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: '未获取到菜单配置信息', |
| | | duration: 5 |
| | | }) |
| | | this.setState({saveing: false}) |
| | | |
| | | if (reload) { |
| | | this.props.reload() |
| | | } |
| | | return |
| | | } |
| | | |
| | | let btnDict = {} |
| | | let titDict = {} |
| | | let lisDict = {} |
| | | let regs = [] |
| | | |
| | | dicts.forEach(item => { |
| | | if (item.type === 'button') { |
| | | btnDict[item.reg] = item.value |
| | | } else if (item.type === 'title') { |
| | | titDict[item.reg] = item.value |
| | | } else if (item.type === 'list') { |
| | | lisDict[item.reg] = item.value |
| | | } else if (item.type === 'text') { |
| | | regs.push({reg: new RegExp(item.reg, 'g'), value: item.value, sort: item.reg.length}) |
| | | } |
| | | }) |
| | | |
| | | regs.sort((a, b) => b.sort - a.sort) |
| | | |
| | | let tail = md5(window.GLOB.appkey + sessionStorage.getItem('lang')).toLowerCase() |
| | | |
| | | tail = tail.slice(-8) |
| | | |
| | | setLangTrans(config, btnDict, titDict, lisDict, regs, tail) |
| | | |
| | | if (config.components) { |
| | | let commonId = Utils.getuuid() |
| | | if (config.interfaces && config.interfaces.length > 0) { |
| | | config.interfaces = config.interfaces.map(inter => { |
| | | inter.uuid = md5(commonId + inter.uuid) |
| | | return inter |
| | | }) |
| | | } |
| | | config.components = MenuUtils.resetConfig(config.components, commonId, false) |
| | | config.tables = config.tables || [] |
| | | config.style = config.style || {} |
| | | } |
| | | |
| | | config.MenuName = menu.label |
| | | config.fstMenuId = menu.fstMenuId || '' |
| | | config.parentId = menu.parentId || '' |
| | | config.uuid = menu.MenuID || '' |
| | | config.open_edition = '' |
| | | if (config.MenuNo) { |
| | | config.MenuNo = config.MenuNo + '_' + sessionStorage.getItem('lang') |
| | | } |
| | | |
| | | let param = { |
| | | func: 'sPC_TrdMenu_AddUpt', |
| | | FstID: config.fstMenuId, |
| | | SndID: config.parentId, |
| | | ParentID: config.parentId, |
| | | MenuID: config.uuid, |
| | | MenuNo: config.MenuNo || '', |
| | | EasyCode: config.easyCode || '', |
| | | Template: config.Template, |
| | | MenuName: config.MenuName || '', |
| | | PageParam: JSON.stringify({Template: config.Template, OpenType: config.OpenType || 'newtab'}) |
| | | } |
| | | |
| | | if (creat) { |
| | | param.open_edition = config.open_edition |
| | | param.LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(config))) |
| | | |
| | | this.setMenu(param, true) |
| | | } else { |
| | | Api.getCloudConfig({ |
| | | func: 'sPC_Get_LongParam', |
| | | MenuID: menu.MenuID |
| | | }).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | this.setState({saveing: false}) |
| | | return |
| | | } |
| | | |
| | | config.open_edition = res.open_edition || '' |
| | | param.open_edition = config.open_edition |
| | | param.LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(config))) |
| | | |
| | | if (res.LongParam) { |
| | | const that = this |
| | | confirm({ |
| | | title: '菜单已存在,确定重新生成吗?', |
| | | content: '', |
| | | onOk() { |
| | | that.setMenu(param, true) |
| | | }, |
| | | onCancel() {} |
| | | }) |
| | | } else { |
| | | this.setMenu(param, true) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | setMenu = (param, reload) => { |
| | | param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') |
| | | param.secretkey = Utils.encrypt('', param.timestamp) |
| | | |
| | | Api.getCloudConfig(param).then(res => { |
| | | if (!res.status) { |
| | | notification.warning({ |
| | | top: 92, |
| | | message: res.message, |
| | | duration: 5 |
| | | }) |
| | | this.setState({saveing: false}) |
| | | return |
| | | } |
| | | |
| | | notification.success({ |
| | | top: 92, |
| | | message: '添加成功。', |
| | | duration: 5 |
| | | }) |
| | | |
| | | this.setState({ |
| | | loading: false, |
| | | visible: false |
| | | }) |
| | | |
| | | if (reload) { |
| | | this.props.reload() |
| | | } |
| | | }) |
| | | } |
| | | |
| | | cancel = () => { |
| | |
| | | } |
| | | |
| | | render () { |
| | | const { visible, loading, menus } = this.state |
| | | const { visible, loading, saveing, menus } = this.state |
| | | |
| | | return ( |
| | | <> |
| | |
| | | maskClosable={false} |
| | | onOk={this.submit} |
| | | onCancel={this.cancel} |
| | | confirmLoading={saveing} |
| | | destroyOnClose |
| | | > |
| | | {loading ? <Spin /> : <div> |