From c34bcb0a3054bdab29fbaff17e587c19d7b5de28 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 16 九月 2020 23:39:28 +0800 Subject: [PATCH] 2020-09-16 --- src/views/menudesign/index.jsx | 246 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 166 insertions(+), 80 deletions(-) diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx index b7569eb..43a9a4e 100644 --- a/src/views/menudesign/index.jsx +++ b/src/views/menudesign/index.jsx @@ -4,12 +4,14 @@ import { is, fromJS } from 'immutable' import moment from 'moment' import HTML5Backend from 'react-dnd-html5-backend' -import { notification, Modal, Collapse, Card, Icon, Switch, Button } from 'antd' +import { ConfigProvider, notification, Modal, Collapse, Card, Icon, Switch, Button } from 'antd' import Api from '@/api' import Utils from '@/utils/utils.js' import zhCN from '@/locales/zh-CN/mob.js' import enUS from '@/locales/en-US/mob.js' +import antdEnUS from 'antd/es/locale/en_US' +import antdZhCN from 'antd/es/locale/zh_CN' import asyncComponent from '@/utils/asyncComponent' import './index.scss' @@ -17,6 +19,7 @@ // const { TabPane } = Tabs const { Panel } = Collapse const { confirm } = Modal +const _locale = localStorage.getItem('lang') !== 'en-US' ? antdZhCN : antdEnUS const Header = asyncComponent(() => import('@/menu/header')) const MenuForm = asyncComponent(() => import('@/menu/menuform')) @@ -26,23 +29,28 @@ // const DataSource = asyncComponent(() => import('@/mob/datasource')) const TableComponent = asyncComponent(() => import('@/templates/sharecomponent/tablecomponent')) -class Mobile extends Component { +sessionStorage.setItem('isEditState', 'true') + +class MenuDesign extends Component { state = { dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS, MenuId: this.props.match.params.MenuId, tableFields: [], activeKey: 'basedata', + menuloading: false, oriConfig: null, - parentId: '', openEdition: '', config: null, editElem: null } UNSAFE_componentWillMount() { - this.getMenuParam() // this.testFunc() + } + + shouldComponentUpdate (nextProps, nextState) { + return !is(fromJS(this.state), fromJS(nextState)) } /** @@ -60,14 +68,11 @@ closeView = () => { const { oriConfig, config } = this.state - const _this = this if (!is(fromJS(oriConfig), fromJS(config))) { confirm({ title: '閰嶇疆宸蹭慨鏀癸紝鏀惧純淇濆瓨鍚楋紵', content: '', - okText: _this.state.dict['mob.confirm'], - cancelText: _this.state.dict['mob.cancel'], onOk() { window.close() }, @@ -79,7 +84,20 @@ } submitConfig = () => { - const { config, openEdition, parentId } = this.state + const { config, openEdition } = this.state + + if (!config.MenuName || !config.MenuNo || !config.fstMenuId || !config.parentId) { + notification.warning({ + top: 92, + message: '璇峰畬鍠勮彍鍗曞熀鏈俊鎭紒', + duration: 5 + }) + return + } + + if (config.enabled && this.verifyConfig()) { + config.enabled = false + } let _config = fromJS(config).toJS() delete _config.fstMenuList @@ -87,42 +105,64 @@ delete _config.sysRoles delete _config.tableFields + let funcs = [] + _config.components.forEach(component => { + if (component.setting && component.setting.innerFunc) { + funcs.push(`select '${_config.uuid}' as MenuID,'${component.setting.innerFunc}' as ProcName,'${component.setting.name}' as MenuName`) + } + if (component.action) { + component.action.forEach(item => { + if (!item.innerFunc) return + funcs.push(`select '${_config.uuid}' as MenuID,'${item.innerFunc}' as ProcName,'${item.label}' as MenuName`) + }) + } + }) + let param = { func: 'sPC_TrdMenu_AddUpt', - ParentID: parentId, - MenuID: config.uuid, - MenuNo: config.MenuNo, - EasyCode: '', - Template: '', - MenuName: '', - PageParam: '', + FstID: _config.fstMenuId, + SndID: _config.parentId, + ParentID: _config.parentId, + MenuID: _config.uuid, + MenuNo: _config.MenuNo, + EasyCode: _config.easyCode, + Template: 'CustomPage', + MenuName: _config.MenuName, + PageParam: JSON.stringify({Template: 'CustomPage', OpenType: 'newtab'}), LongParam: window.btoa(window.encodeURIComponent(JSON.stringify(_config))), - // LText: _vals.func.map(item => `select '${menu.MenuID}' as MenuID,'${item.func}' as ProcName,'${item.label}' as MenuName`), - // LTexttb: _tables.map(item => `select '${menu.MenuID}' as MenuID,'${item}' as tbName`), - TypeCharOne: 'mob' + LText: funcs.join(' union all '), + LTexttb: '', // 琛ㄥ悕 } - let _LText = '' - // _LText = _LText.join(' union all ') - let _LTexttb = '' - // _LTexttb = _LTexttb.join(' union all ') - - param.LText = Utils.formatOptions(_LText) - param.LTexttb = Utils.formatOptions(_LTexttb) - param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' + param.LText = Utils.formatOptions(param.LText) + param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') param.secretkey = Utils.encrypt(param.LText, param.timestamp) if (openEdition) { // 鐗堟湰绠$悊 param.open_edition = openEdition } + this.setState({ + menuloading: true + }) + Api.getSystemConfig(param).then(response => { if (response.status) { this.setState({ oriConfig: fromJS(config).toJS(), - openEdition: response.open_edition || '' + openEdition: response.open_edition || '', + menuloading: false + }) + notification.success({ + top: 92, + message: '淇濆瓨鎴愬姛', + duration: 2 }) } else { + this.setState({ + openEdition: response.open_edition || '', + menuloading: false + }) notification.warning({ top: 92, message: response.message, @@ -154,6 +194,7 @@ version: 1.0, uuid: this.props.match.params.MenuId, MenuID: this.props.match.params.MenuId, + parentId: this.props.match.params.ParentId, Template: 'CustomPage', easyCode: '', enabled: false, @@ -162,7 +203,11 @@ tables: [], components: [] } + } else { + config.uuid = this.props.match.params.MenuId + config.MenuID = this.props.match.params.MenuId } + this.setState({ oriConfig: config, config: fromJS(config).toJS(), @@ -212,9 +257,9 @@ }) } - initMenuList = (list) => { + initMenuList = (msg) => { this.setState({ - config: {...this.state.config, fstMenuList: list} + config: {...this.state.config, ...msg} }) } @@ -225,8 +270,6 @@ confirm({ title: '纭畾鍒犻櫎鍏冪礌鍚楋紵', content: '', - okText: this.state.dict['mob.confirm'], - cancelText: this.state.dict['mob.cancel'], onOk() { config.components = config.components.filter(item => item.uuid !== id) @@ -247,9 +290,49 @@ onEnabledChange = () => { const { config } = this.state + if (!config.enabled && this.verifyConfig(true)) { + return + } + this.setState({ config: {...config, enabled: !config.enabled} }) + } + + verifyConfig = (show) => { + const { config } = this.state + let error = '' + + if (!config.MenuName || !config.MenuNo || !config.fstMenuId || !config.parentId) { + notification.warning({ + top: 92, + message: '璇峰畬鍠勮彍鍗曞熀鏈俊鎭紒', + duration: 5 + }) + return 'false' + } + + config.components.forEach(item => { + if (!error && item.setting) { + if (item.setting.interType === 'system' && item.setting.execute !== 'false' && !item.setting.dataresource) { + error = `缁勪欢銆�${item.setting.name}銆嬫湭璁剧疆鏁版嵁婧恅 + } else if (item.setting.interType === 'system' && item.setting.execute === 'false' && item.scripts.length === 0) { + error = `缁勪欢銆�${item.setting.name}銆嬫湭璁剧疆鏁版嵁婧恅 + } else if (item.setting.interType && !item.setting.primaryKey) { + error = `缁勪欢銆�${item.setting.name}銆嬫湭璁剧疆涓婚敭` + } + } + }) + + if (show && error) { + notification.warning({ + top: 92, + message: error, + duration: 5 + }) + } + + return error } // 鏇存柊閰嶇疆淇℃伅 @@ -279,55 +362,58 @@ const { activeKey, dict, MenuId, config } = this.state return ( - <div className="pc-menu-view" id="view"> - <Header view="design" closeView={this.closeView} /> - <DndProvider backend={HTML5Backend}> - <div className="menu-body"> - <div className="menu-setting"> - <Collapse accordion activeKey={activeKey} bordered={false} onChange={(key) => this.setState({activeKey: key})}> - {/* 鍩烘湰淇℃伅 */} - <Panel header={dict['mob.basemsg']} key="basedata"> - {/* 鑿滃崟淇℃伅 */} - <MenuForm - dict={dict} - config={config} - MenuId={MenuId} - parentId={this.props.match.params.ParentId} - MenuName={this.props.match.params.MenuName} - MenuNo={this.props.match.params.MenuNo} - initMenuList={this.initMenuList} - updateConfig={this.updateConfig} - /> - {/* 琛ㄥ悕娣诲姞 */} - {config ? <TableComponent config={config} updatetable={this.updatetable}/> : null} - </Panel> - {/* 缁勪欢娣诲姞 */} - <Panel header={dict['mob.component']} key="component"> - <SourceWrap /> - </Panel> - {/* <Panel header={dict['mob.style']} key="style"> - <Controller /> - </Panel> */} - </Collapse> + <ConfigProvider locale={_locale}> + <div className="pc-menu-view" id="view"> + <Header view="design" closeView={this.closeView} /> + <DndProvider backend={HTML5Backend}> + <div className="menu-body"> + <div className="menu-setting"> + <Collapse accordion activeKey={activeKey} bordered={false} onChange={(key) => this.setState({activeKey: key})}> + {/* 鍩烘湰淇℃伅 */} + <Panel header={dict['mob.basemsg']} key="basedata"> + {/* 鑿滃崟淇℃伅 */} + <MenuForm + dict={dict} + config={config} + MenuId={MenuId} + parentId={this.props.match.params.ParentId} + MenuName={this.props.match.params.MenuName} + MenuNo={this.props.match.params.MenuNo} + initMenuList={this.initMenuList} + updateConfig={this.updateConfig} + /> + {/* 琛ㄥ悕娣诲姞 */} + {config ? <TableComponent config={config} updatetable={this.updatetable}/> : null} + </Panel> + {/* 缁勪欢娣诲姞 */} + <Panel header={dict['mob.component']} key="component"> + <SourceWrap /> + </Panel> + {/* <Panel header={dict['mob.style']} key="style"> + <Controller /> + </Panel> */} + </Collapse> + </div> + <div className="menu-view"> + <Card title={ + <div> + {config && config.MenuName} + <Icon type="redo" style={{marginLeft: '10px'}} title="鍒锋柊鏍囩鍒楄〃" onClick={() => this.reloadTab()} /> + </div> + } bordered={false} extra={ + <div> + {config ? <Switch className="big" checkedChildren={dict['mob.enable']} unCheckedChildren={dict['mob.disable']} checked={config.enabled} onChange={this.onEnabledChange} /> : null} + <Button type="primary" onClick={this.submitConfig} loading={this.state.menuloading}>{dict['mob.save']}</Button> + </div> + } style={{ width: '100%' }}> + {/* {config && config.components ? <MenuShell menu={config} handleList={this.updateConfig} deleteCard={this.deleteCard} /> : null} */} + {config && config.components ? <MenuShell name="Glass" menu={config} handleList={this.updateConfig} deleteCard={this.deleteCard} /> : null} + </Card> + </div> </div> - <div className="menu-view"> - <Card title={ - <div> - {config && config.MenuName} - <Icon type="redo" style={{marginLeft: '10px'}} title="鍒锋柊鏍囩鍒楄〃" onClick={() => this.reloadTab()} /> - </div> - } bordered={false} extra={ - <div> - {config ? <Switch className="big" checkedChildren={dict['mob.enable']} unCheckedChildren={dict['mob.disable']} checked={config.enabled} onChange={this.onEnabledChange} /> : null} - <Button type="primary" onClick={this.submitConfig} loading={this.state.menuloading}>{dict['mob.save']}</Button> - </div> - } style={{ width: '100%' }}> - {config ? <MenuShell config={config} handleList={this.updateConfig} deleteCard={this.deleteCard} /> : null} - </Card> - </div> - </div> - </DndProvider> - </div> + </DndProvider> + </div> + </ConfigProvider> ) } } @@ -340,4 +426,4 @@ return {} } -export default connect(mapStateToProps, mapDispatchToProps)(Mobile) \ No newline at end of file +export default connect(mapStateToProps, mapDispatchToProps)(MenuDesign) \ No newline at end of file -- Gitblit v1.8.0