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