src/components/sidemenu/editthdmenu/index.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/sidemenu/editthdmenu/menuform/index.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/sidemenu/editthdmenu/menuform/index.scss | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/tabview/index.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/locales/en-US/header.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/locales/zh-CN/header.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/tabviews/commontable/index.jsx | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/utils/option.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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> {/* 解冻菜单模态框 */} <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> ) src/components/sidemenu/editthdmenu/menuform/index.jsx
New file @@ -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) src/components/sidemenu/editthdmenu/menuform/index.scss
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')) 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!', 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': '菜单顺序已调整,请保存!', 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) src/utils/option.js
@@ -51,6 +51,13 @@ baseconfig: '', isSystem: true, isSubtable: true }, { title: '角色权限分配', type: 'RolePermission', url: mainsubtable, isSystem: true, hidden: true } ]