From 27f12ae6cbc056470fa8291322a75676f806b54c Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期五, 14 二月 2020 14:26:13 +0800 Subject: [PATCH] 2020-02-14 --- src/components/tabview/index.jsx | 4 src/locales/en-US/header.js | 2 src/locales/zh-CN/header.js | 2 src/components/sidemenu/editthdmenu/menuform/index.scss | 0 src/tabviews/commontable/index.jsx | 2 src/components/sidemenu/editthdmenu/menuform/index.jsx | 98 +++++++++++++++++++ src/components/sidemenu/editthdmenu/index.jsx | 174 +++++++++++++++++++++++++++++++--- src/utils/option.js | 7 + 8 files changed, 270 insertions(+), 19 deletions(-) diff --git a/src/components/sidemenu/editthdmenu/index.jsx b/src/components/sidemenu/editthdmenu/index.jsx index 026d4eb..0ffe016 100644 --- a/src/components/sidemenu/editthdmenu/index.jsx +++ b/src/components/sidemenu/editthdmenu/index.jsx @@ -5,16 +5,19 @@ import HTML5Backend from 'react-dnd-html5-backend' import { notification, Modal, Button, Spin, Icon, Col, Card, Tabs, Row, Input } from 'antd' import moment from 'moment' + +import Api from '@/api' +import { sysTemps } from '@/utils/option.js' +import zhCN from '@/locales/zh-CN/header.js' +import enUS from '@/locales/en-US/header.js' +import nortable from '@/assets/img/normaltable.jpg' + import Preview from './preview' +import MenuForm from './menuform' import TransferForm from '@/components/transferform' import Utils from '@/utils/utils.js' import DragElement from '../menuelement' import asyncLoadComponent from '@/utils/asyncLoadComponent' -import { sysTemps } from '@/utils/option.js' -import Api from '@/api' -import zhCN from '@/locales/zh-CN/header.js' -import enUS from '@/locales/en-US/header.js' -import nortable from '@/assets/img/normaltable.jpg' import './index.scss' const ComTableConfig = asyncLoadComponent(() => import('@/templates/comtableconfig')) @@ -63,7 +66,9 @@ subTabConfig: null, // 瀛愭爣绛鹃厤缃俊鎭� subConfig: null, // 瀛愰厤缃俊鎭� btnTab: null, // 鎵撳紑鏂版爣绛炬垨褰撳墠椤甸潰鍒锋柊鐨勬寜閽� - btnTabConfig: null // 鎵撳紑鏂版爣绛炬寜閽厤缃� + btnTabConfig: null, // 鎵撳紑鏂版爣绛炬寜閽厤缃� + handleMVisible: false, // 娣诲姞鎴栦慨鏀硅彍鍗曟ā鎬佹锛堣鑹叉潈闄愬垎閰嶇瓑锛� + sysMenu: false // 娣诲姞鎴栫紪杈戣彍鍗曪紙瑙掕壊鏉冮檺鍒嗛厤绛夛級 } /** @@ -83,7 +88,7 @@ */ handleMenu = (menu) => { const _this = this - + console.log(menu) if (!is(fromJS(this.props.menulist), fromJS(this.state.menulist))) { notification.warning({ top: 92, @@ -117,6 +122,23 @@ }) } else if (menu.type === 'edit') { let _menu = menu.card + + if (_menu.PageParam && _menu.PageParam.Template === 'RolePermission') { // 鍗曢〉闈慨鏀� + let _menu_ = { + ..._menu, + ParentID: this.props.supMenu.MenuID, + Template: _menu.PageParam.Template + } + + this.setState({ + handleMVisible: true, + sysMenu: _menu_ + }) + + return + } + + let param = { func: 'sPC_Get_LongParam', MenuID: _menu.MenuID @@ -351,6 +373,22 @@ useTemplate = (template, useType) => { const { editMenu } = this.state + if (useType === 'sys' && template.type === 'RolePermission') { // 鐙珛椤甸潰 + let _menu = { + ...template, + MenuID: Utils.getuuid(), + MenuName: template.title, + Template: template.type, + ParentID: this.props.supMenu.MenuID, + } + + this.setState({ + handleMVisible: true, + sysMenu: _menu + }) + return + } + new Promise(resolve => { if (useType === 'sys') { resolve(true) @@ -427,17 +465,39 @@ } getUsedTemplate = () => { - Api.getSystemConfig({func: 'sPC_Get_UserTemp', TypeCharTwo: 'menu'}).then(res => { - this.setState({ - usedTemplates: res.UserTemp.map(temp => { + let { sysTemplates } = this.state - return { - uuid: temp.MenuID, - title: temp.MenuName, - type: temp.Template, - url: illust[temp.Template] - } + Api.getSystemConfig({func: 'sPC_Get_UserTemp', TypeCharTwo: 'menu'}).then(res => { + let _templates = [] + let hasRolePermission = false + + res.UserTemp.forEach(temp => { + if (temp.Template === 'RolePermission') { + hasRolePermission = true + return + } + + _templates.push({ + uuid: temp.MenuID, + title: temp.MenuName, + type: temp.Template, + url: illust[temp.Template] }) + }) + + if (!hasRolePermission) { + sysTemplates = sysTemplates.map(temp => { + if (temp.type === 'RolePermission') { + temp.hidden = false + } + + return temp + }) + } + + this.setState({ + usedTemplates: _templates, + sysTemplates: sysTemplates }) }) } @@ -459,6 +519,67 @@ } }) } + + /** + * @description 涓夌骇鑿滃崟娣诲姞鎴栦慨鏀� + */ + memuSubmit = () => { + const { sysMenu } = this.state + let sysTemplates = JSON.parse(JSON.stringify(this.state.sysTemplates)) + + if (sysMenu.isSystem) { + sysTemplates = sysTemplates.map(temp => { + if (temp.type === sysMenu.type) { + temp.hidden = true + } + + return temp + }) + } + + this.menuFormRef.handleConfirm().then(res => { + + let param = { + func: 'sPC_TrdMenu_AddUpt', + ParentID: res.ParentID, + MenuID: sysMenu.MenuID, + MenuNo: res.MenuNo, + Template: sysMenu.Template, + MenuName: res.MenuName, + Sort: (this.props.supMenuList.length + 1) * 10, + PageParam: JSON.stringify({Template: sysMenu.Template, OpenType: 'newtab'}), + LongParam: '' + } + + this.setState({ + confirmLoading: true + }) + console.log(param) + Api.getSystemConfig(param).then(response => { + if (response.status) { + this.setState({ + sysTemplates: sysTemplates, + confirmLoading: false, + handleMVisible: false, + sysMenu: '', + tabview: '' + }) + + this.props.reload() + } else { + this.setState({ + confirmLoading: false + }) + notification.warning({ + top: 92, + message: response.message, + duration: 10 + }) + } + }) + }) + } + UNSAFE_componentWillMount () { this.getUsedTemplate() @@ -528,6 +649,8 @@ <TabPane tab="绯荤粺妯℃澘" key="1"> <Row> {this.state.sysTemplates.map((template, index) => { + if (template.hidden) return '' + return ( <Col key={`${index}`} span={8}> <Card @@ -624,10 +747,29 @@ onOk={this.thawMemuSubmit} confirmLoading={this.state.confirmLoading} onCancel={this.thawMemuCancel} + destroyOnClose > {!this.state.thawmenulist && <Spin style={{marginLeft: 'calc(50% - 22px)', marginTop: '70px', marginBottom: '70px'}} size="large" />} {this.state.thawmenulist && <TransferForm ref="trawmenu" dict={this.state.dict} menulist={this.state.thawmenulist}/>} </Modal> + {/* 瑙e喕鑿滃崟妯℃�佹 */} + <Modal + title={this.state.sysMenu && this.state.sysMenu.isSystem ? this.state.dict['header.menu.tadd'] : this.state.dict['header.menu.tupdate']} + okText={this.state.dict['header.confirm']} + cancelText={this.state.dict['header.cancel']} + visible={this.state.handleMVisible} + onOk={this.memuSubmit} + confirmLoading={this.state.confirmLoading} + onCancel={() => {this.setState({handleMVisible: false})}} + destroyOnClose + > + <MenuForm + menu={this.state.sysMenu} + dict={this.state.dict} + supMenuList={this.props.supMenuList} + wrappedComponentRef={(inst) => this.menuFormRef = inst} + /> + </Modal> {this.state.loading && <Spin className="loading-thdmenu" size="large" />} </div> ) diff --git a/src/components/sidemenu/editthdmenu/menuform/index.jsx b/src/components/sidemenu/editthdmenu/menuform/index.jsx new file mode 100644 index 0000000..c366f49 --- /dev/null +++ b/src/components/sidemenu/editthdmenu/menuform/index.jsx @@ -0,0 +1,98 @@ +import React, {Component} from 'react' +import PropTypes from 'prop-types' +import { Form, Row, Col, Input, Select } from 'antd' +import './index.scss' + + +class MainSearch extends Component { + static propTpyes = { + menu: PropTypes.object, // 鑿滃崟淇℃伅 + dict: PropTypes.object, // 瀛楀吀椤� + supMenuList: PropTypes.any // 琛ㄦ牸鏁版嵁 + } + + state = {} + + handleConfirm = () => { + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� + return new Promise((resolve, reject) => { + this.props.form.validateFieldsAndScroll((err, values) => { + if (!err) { + resolve(values) + } else { + reject(err) + } + }) + }) + } + + render() { + const { getFieldDecorator } = this.props.form + const formItemLayout = { + labelCol: { + xs: { span: 24 }, + sm: { span: 8 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + } + } + return ( + <Form {...formItemLayout} style={{paddingRight: '20px'}}> + <Row gutter={24}> + <Col span={24}> + <Form.Item label={'涓婄骇鑿滃崟'}> + {getFieldDecorator('ParentID', { + initialValue: this.props.menu.ParentID, + rules: [ + { + required: true, + message: this.props.dict['form.required.select'] + '涓婄骇鑿滃崟!' + } + ] + })( + <Select + showSearch + filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0} + > + {this.props.supMenuList.map(option => + <Select.Option id={option.id} title={option.text} key={option.id} value={option.id}>{option.text}</Select.Option> + )} + </Select> + )} + </Form.Item> + </Col> + <Col span={24}> + <Form.Item label={'鑿滃崟鍚嶇О'}> + {getFieldDecorator('MenuName', { + initialValue: this.props.menu.MenuName || '', + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + '鑿滃崟鍚嶇О!' + } + ] + })(<Input placeholder="" autoComplete="off" />)} + </Form.Item> + </Col> + <Col span={24}> + <Form.Item label={'鑿滃崟鍙傛暟'}> + {getFieldDecorator('MenuNo', { + initialValue: this.props.menu.MenuNo || '', + rules: [ + { + required: true, + message: this.props.dict['form.required.input'] + '鑿滃崟鍙傛暟!' + } + ] + })(<Input placeholder="" autoComplete="off" />)} + </Form.Item> + </Col> + </Row> + </Form> + ) + } +} + +export default Form.create()(MainSearch) \ No newline at end of file diff --git a/src/components/sidemenu/editthdmenu/menuform/index.scss b/src/components/sidemenu/editthdmenu/menuform/index.scss new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/components/sidemenu/editthdmenu/menuform/index.scss diff --git a/src/components/tabview/index.jsx b/src/components/tabview/index.jsx index b951d46..bfe7e6e 100644 --- a/src/components/tabview/index.jsx +++ b/src/components/tabview/index.jsx @@ -83,7 +83,7 @@ return (<Comps.CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>) } else if (view.type === 'DataManage') { return (<Comps.DataManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>) - } else if (view.type === 'RoleManage') { + } else if (view.type === 'RolePermission') { return (<Comps.RoleManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>) } else if (view.type === 'TabForm') { return (<Comps.TabForm MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>) @@ -161,7 +161,7 @@ Comps.Iframe = asyncComponent(() => import('@/tabviews/iframe')) } else if (!Comps.DataManage && newtab.type === 'DataManage') { Comps.DataManage = asyncComponent(() => import('@/tabviews/datamanage')) - } else if (!Comps.RoleManage && newtab.type === 'RoleManage') { + } else if (!Comps.RoleManage && newtab.type === 'RolePermission') { Comps.RoleManage = asyncComponent(() => import('@/tabviews/rolemanage')) } else if (!Comps.TabForm && newtab.type === 'TabForm') { Comps.TabForm = asyncComponent(() => import('@/tabviews/tabform')) diff --git a/src/locales/en-US/header.js b/src/locales/en-US/header.js index 3b703ad..69b6f15 100644 --- a/src/locales/en-US/header.js +++ b/src/locales/en-US/header.js @@ -21,6 +21,8 @@ 'header.password.diff': 'Two passwords that you enter is inconsistent!', 'header.password.resetsuccess': 'Password modified successfully!', 'header.login.develop': '鐧诲綍寮�鍙戞満', + 'header.menu.tadd': '娣诲姞鑿滃崟', + 'header.menu.tupdate': '淇敼鑿滃崟', 'header.menu.close': 'Are you sure to delete the menu <<@M>> ?', 'header.menu.update': 'Are you sure to modify the configuration information of the menu <<@M>> ?', 'header.menu.presave': 'Menu order has been adjusted, Please save!', diff --git a/src/locales/zh-CN/header.js b/src/locales/zh-CN/header.js index c01c6ae..53711d3 100644 --- a/src/locales/zh-CN/header.js +++ b/src/locales/zh-CN/header.js @@ -21,6 +21,8 @@ 'header.password.diff': '涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷达紒', 'header.password.resetsuccess': '瀵嗙爜淇敼鎴愬姛锛�', 'header.login.develop': '鐧诲綍寮�鍙戞満', + 'header.menu.tadd': '娣诲姞鑿滃崟', + 'header.menu.tupdate': '淇敼鑿滃崟', 'header.menu.close': '纭畾鍒犻櫎銆夽M銆嬭彍鍗曞悧锛�', 'header.menu.update': '纭畾淇敼鑿滃崟銆夽M銆嬬殑閰嶇疆淇℃伅鍚楋紵', 'header.menu.presave': '鑿滃崟椤哄簭宸茶皟鏁达紝璇蜂繚瀛橈紒', diff --git a/src/tabviews/commontable/index.jsx b/src/tabviews/commontable/index.jsx index 5b5d3df..9c6156d 100644 --- a/src/tabviews/commontable/index.jsx +++ b/src/tabviews/commontable/index.jsx @@ -447,7 +447,7 @@ let LText = `select top ${pageSize} ${arr_field} from (select ${arr_field} ,ROW_NUMBER() over(order by ${orderBy}) as rows from ${_dataresource} ${_search}) tmptable where rows > ${pageSize * (pageIndex - 1)} order by tmptable.rows` let DateCount = `select count(1) as total from ${_dataresource} ${_search}` - + // console.log(LText) param.LText = Utils.formatOptions(LText) param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000' param.secretkey = Utils.encrypt(param.LText, param.timestamp) diff --git a/src/utils/option.js b/src/utils/option.js index 5091a41..747831e 100644 --- a/src/utils/option.js +++ b/src/utils/option.js @@ -51,6 +51,13 @@ baseconfig: '', isSystem: true, isSubtable: true + }, + { + title: '瑙掕壊鏉冮檺鍒嗛厤', + type: 'RolePermission', + url: mainsubtable, + isSystem: true, + hidden: true } ] -- Gitblit v1.8.0