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