From e36eb1999794bd71e76482b92a0b0b20f49d0032 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 05 三月 2021 19:37:03 +0800
Subject: [PATCH] 2021-03-05

---
 src/templates/comtableconfig/index.jsx |  830 +++++++++++++++++++++++-----------------------------------
 1 files changed, 329 insertions(+), 501 deletions(-)

diff --git a/src/templates/comtableconfig/index.jsx b/src/templates/comtableconfig/index.jsx
index 5d8ab5e..f944b3b 100644
--- a/src/templates/comtableconfig/index.jsx
+++ b/src/templates/comtableconfig/index.jsx
@@ -9,7 +9,7 @@
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
-import UtilsUpdate from '@/utils/utils-update.js'
+import { updateCommonTable } from '@/utils/utils-update.js'
 import zhCN from '@/locales/zh-CN/model.js'
 import enUS from '@/locales/en-US/model.js'
 
@@ -37,31 +37,26 @@
 class ComTableConfig extends Component {
   static propTpyes = {
     menu: PropTypes.any,
-    optionLibs: PropTypes.any,
     reloadmenu: PropTypes.func,
     handleView: PropTypes.func
   }
 
   state = {
-    dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
+    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     config: null,            // 椤甸潰閰嶇疆
-    tableFields: [],         // 琛ㄦ牸鏄剧ず鍒�
     formlist: null,          // 鎼滅储鏉′欢銆佹寜閽�佹樉绀哄垪琛ㄥ崟瀛楁
     menuloading: false,      // 鑿滃崟淇濆瓨涓�
     menucloseloading: false, // 鑿滃崟鍏抽棴鏃讹紝閫夋嫨淇濆瓨
     loading: false,          // 鍔犺浇涓紝椤甸潰spin
     closeVisible: false,     // 鍏抽棴妯℃�佹
-    tables: [],              // 鍙敤琛ㄥ悕
     originMenu: null,        // 鍘熷鑿滃崟
     originActions: null,     // 鍘熷鎸夐挳淇℃伅锛屼娇鐢ㄥ凡鏈夌敤鎴锋ā鏉�
     delActions: [],          // 鍒犻櫎鎸夐挳鍒楄〃
     copyActions: [],         // 澶嶅埗鎸夐挳缁�
     tabviews: [],            // 鎵�鏈夋爣绛鹃〉
-    optionLibs: null,        // 鑷畾涔変笅鎷夐�夐」搴�
     thawButtons: [],         // 宸查�夋嫨瑕佽В鍐荤殑鎸夐挳
     activeKey: '0',          // 榛樿灞曞紑鍩烘湰淇℃伅
     chartview: null,         // 褰撳墠瑙嗗浘
-    pasteContent: null,      // 绮樿创閰嶇疆淇℃伅
     openEdition: ''          // 缂栬緫鐗堟湰鏍囪锛岄槻姝㈠浜烘搷浣�
   }
 
@@ -71,7 +66,7 @@
    * 2銆佽缃搷浣滅被鍨嬨�佸師濮嬭彍鍗曚俊鎭紙姣忔淇濆瓨鍚庨噸缃級銆佸凡浣跨敤琛ㄥ強鍩烘湰淇℃伅琛ㄥ崟
    */
   UNSAFE_componentWillMount () {
-    const { menu, optionLibs } = this.props
+    const { menu } = this.props
     let _LongParam = menu.LongParam
     let _config = ''
 
@@ -83,21 +78,6 @@
       _config.isAdd = true
     } else {
       _config = _LongParam
-      _config.search.forEach(item => {
-        if (
-          (item.type === 'select' || item.type === 'multiselect' || item.type === 'link') &&
-          item.resourceType === '0' &&
-          item.options && item.options.length > 0
-        ) {
-          optionLibs.set(menu.MenuID + item.uuid, {
-            uuid: menu.MenuID + item.uuid,
-            label: item.label,
-            parname: menu.MenuName,
-            type: 'search',
-            options: item.options
-          })
-        }
-      })
     }
 
     // 椤甸潰閰嶇疆涓繚鐣欒彍鍗曚俊鎭紝鍙敤浜庢暟鎹紶閫�
@@ -109,7 +89,7 @@
     _config.easyCode = _config.easyCode || ''
 
     // 鐗堟湰鍏煎
-    _config = UtilsUpdate.updateCommonTable(_config)
+    _config = updateCommonTable(_config)
     
     let _oriActions = []
     if (_config.type === 'user') {
@@ -120,17 +100,17 @@
           item.linkTab = ''
         }
 
-        if (item.OpenType === 'pop') { // 鍚湁瀛愰厤缃」鐨勬寜閽�(琛ㄥ崟)
+        if (item.OpenType === 'pop' || item.execMode === 'pop') { // 鍚湁瀛愰厤缃」鐨勬寜閽�(琛ㄥ崟)
           _oriActions.push({
             prebtn: fromJS(item).toJS(),
             curuuid: uuid,
             Template: 'Modal'
           })
-        } else if (item.OpenType === 'tab' || item.OpenType === 'blank') { // 鍚湁瀛愰厤缃」鐨勬寜閽�(鏍囩鍚庡綋鍓嶉〉鎵撳紑)
+        } else if (item.OpenType === 'tab' && item.tabTemplate === 'FormTab') { // 鍚湁瀛愰厤缃」鐨勬寜閽�(鏍囩椤垫墦寮�)
           _oriActions.push({
             prebtn: fromJS(item).toJS(),
             curuuid: uuid,
-            Template: item.tabTemplate
+            Template: 'FormTab'
           })
         }
 
@@ -157,7 +137,6 @@
       config: _config,
       openEdition: menu.open_edition || '',
       activeKey: menu.activeKey || '0',
-      optionLibs: optionLibs,
       originActions: _oriActions,
       originMenu: fromJS(_config).toJS()
     })
@@ -222,23 +201,41 @@
     })
   }
 
-  getFuncNames = (data, funcNames, tableNames) => {
-    data.forEach(item => {
-      if (item.subfuncs) {
-        this.getFuncNames(item.subfuncs, funcNames, tableNames)
-      } else {
-        if (item.tableName) {
-          tableNames.push(item.tableName)
+  getFuncNames = (config) => {
+    let funcNames = []
+    let tableNames = []
+
+    if (config.setting.tableName) {
+      tableNames.push(config.setting.tableName)
+    }
+    if (config.setting.innerFunc) {
+      funcNames.push({func: config.setting.innerFunc, label: config.MenuName || ''})
+    }
+    if (config.setting.outerFunc) {
+      funcNames.push({func: config.setting.outerFunc, label: config.MenuName || ''})
+    }
+
+    config.action.forEach(item => {
+      let tablename = item.OpenType === 'excelIn' ? (item.sheet || '') : (item.sql || '')
+
+      if (item.OpenType === 'excelOut' && item.intertype === 'system') {
+        tablename = config.setting.tableName || ''
+      }
+
+      if (['pop', 'prompt', 'exec', 'excelIn', 'excelOut', 'funcbutton'].includes(item.OpenType)) {
+        if (tablename) {
+          tableNames.push(tablename)
         }
         if (item.innerFunc) {
           funcNames.push({func: item.innerFunc, label: item.label || ''})
         }
-
         if (item.callbackFunc) {
           funcNames.push({func: item.callbackFunc, label: item.label || ''})
         }
       }
     })
+
+    tableNames = Array.from(new Set(tableNames))
 
     return {
       func: funcNames,
@@ -299,70 +296,6 @@
       _config.enabled = false
     }
 
-    _config.funcs = [] // 椤甸潰鍙婂瓙椤甸潰瀛樺偍杩囩▼闆�
-
-    _config.funcs.push({
-      type: 'view',
-      subtype: 'view',
-      uuid: menu.MenuID,
-      intertype: _config.setting.interType || 'system',
-      interface: _config.setting.interface || '',
-      tableName: _config.setting.tableName || '',
-      innerFunc: _config.setting.innerFunc || '',
-      outerFunc: _config.setting.outerFunc || ''
-    })
-
-    _config.action.forEach(item => {
-      let tablename = item.OpenType === 'excelIn' ? (item.sheet || '') : (item.sql || '')
-
-      if (item.OpenType === 'excelOut' && item.intertype === 'system') {
-        tablename = _config.setting.tableName || ''
-      }
-
-      if (item.OpenType === 'tab' || item.OpenType === 'blank') {
-        _config.funcs.push({
-          type: 'tab',
-          subtype: 'btn',
-          uuid: item.uuid,
-          label: item.label,
-          linkTab: item.uuid
-        })
-      } else if (item.OpenType === 'popview') {
-        _config.funcs.push({
-          type: 'tab',
-          subtype: 'btn',
-          uuid: item.uuid,
-          label: item.label,
-          linkTab: item.linkTab
-        })
-      } else if (['pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(item.OpenType)) {
-        _config.funcs.push({
-          type: 'button',
-          subtype: 'btn',
-          uuid: item.uuid,
-          label: item.label,
-          tableName: tablename,
-          intertype: item.intertype,
-          interface: item.interface || '',
-          innerFunc: item.innerFunc || '',
-          outerFunc: item.outerFunc || '',
-          callbackFunc: item.callbackFunc || ''
-        })
-      }
-    })
-
-    _config.tabgroups.forEach(group => {
-      group.sublist.forEach(tab => {
-        _config.funcs.push({
-          type: 'tab',
-          subtype: 'tab',
-          uuid: tab.uuid,
-          label: tab.label,
-          linkTab: tab.linkTab
-        })
-      })
-    })
-
     if (this.state.closeVisible) { // 鏄剧ず鍏抽棴瀵硅瘽妗嗘椂锛屾ā鎬佹涓繚瀛樻寜閽紝鏄剧ず淇濆瓨涓姸鎬�
       this.setState({
         menucloseloading: true
@@ -373,300 +306,252 @@
       })
     }
 
-    new Promise(resolve => {
-      let deffers = []
-      _config.funcs.forEach(item => {
-        if (item.type === 'tab') {
-          let deffer = new Promise(resolve => {
-            Api.getSystemConfig({
-              func: 'sPC_Get_LongParam',
-              MenuID: item.linkTab
-            }).then(result => {
-              if (result.status && result.LongParam) {
-                let _LongParam = ''
+    // 淇濆瓨鏃跺垹闄ら厤缃被鍨嬶紝system 銆乽ser
+    delete _config.type
+    delete _config.isAdd
+
+    let _LongParam = ''
+
+    try {
+      _LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(_config)))
+    } catch (e) {
+      notification.warning({
+        top: 92,
+        message: '缂栬瘧閿欒',
+        duration: 5
+      })
+      this.setState({
+        menucloseloading: false,
+        menuloading: false
+      })
+      return
+    }
+
+    let _sort = 0
+    let btntabs = []
+
+    let btnParam = {             // 娣诲姞鑿滃崟鎸夐挳
+      func: 'sPC_Button_AddUpt',
+      Type: 40,                  // 娣诲姞鑿滃崟涓嬬殑鎸夐挳type涓�40锛屾寜閽笅鐨勬寜閽畉ype涓�60
+      ParentID: menu.MenuID,
+      MenuNo: _config.MenuNo,
+      Template: _config.Template || '',
+      PageParam: '',
+      LongParam: '',
+      LText: []
+    }
+
+    _config.action.forEach(item => {
+      _sort++
+      if (item.OpenType === 'popview') {
+        btntabs.push({
+          uuid: item.uuid,
+          linkTab: item.linkTab,
+          label: item.label,
+          sort: _sort
+        })
+      }
       
-                if (result.LongParam) {
-                  try {
-                    _LongParam = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam)))
-                  } catch (e) {
-                    console.warn('Parse Failure')
-                    _LongParam = ''
-                  }
-                }
+      btnParam.LText.push(`select '${item.uuid}' as menuid, '${item.label}' as menuname, '${_sort * 10}' as Sort`)
+    })
+
+    btnParam.LText = btnParam.LText.join(' union all ')
+    btnParam.LText = Utils.formatOptions(btnParam.LText)
+    btnParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
+    btnParam.secretkey = Utils.encrypt(btnParam.LText, btnParam.timestamp)
     
-                if (_LongParam) {
-                  item.menuNo = _LongParam.tabNo || ''
-                  item.subfuncs = _LongParam.funcs || []
-                }
-              }
-              resolve()
-            })
-          })
+    let tabParam = { // 娣诲姞鑿滃崟tab椤�
+      func: 'sPC_sMenusTab_AddUpt',
+      MenuID: menu.MenuID
+    }
 
-          deffers.push(deffer)
-        }
-      })
+    let _LText = []
 
-      if (deffers.length === 0) {
-        resolve()
-      } else {
-        Promise.all(deffers).then(() => {
-          resolve()
-        })
-      }
-    }).then(() => {
-      // 淇濆瓨鏃跺垹闄ら厤缃被鍨嬶紝system 銆乽ser
-      delete _config.type
-      delete _config.isAdd
-
-      let _LongParam = ''
-
-      try {
-        _LongParam = window.btoa(window.encodeURIComponent(JSON.stringify(_config)))
-      } catch (e) {
-        notification.warning({
-          top: 92,
-          message: '缂栬瘧閿欒',
-          duration: 5
-        })
-        this.setState({
-          menucloseloading: false,
-          menuloading: false
-        })
-        return
-      }
-
-      let _sort = 0
-      let btntabs = []
-
-      let btnParam = {             // 娣诲姞鑿滃崟鎸夐挳
-        func: 'sPC_Button_AddUpt',
-        Type: 40,                  // 娣诲姞鑿滃崟涓嬬殑鎸夐挳type涓�40锛屾寜閽笅鐨勬寜閽畉ype涓�60
-        ParentID: menu.MenuID,
-        MenuNo: _config.MenuNo,
-        Template: _config.Template || '',
-        PageParam: '',
-        LongParam: '',
-        LText: []
-      }
-
-      _config.action.forEach(item => {
+    btntabs.forEach(item => {
+      _LText.push(`select '${item.uuid}' as MenuID ,'${item.linkTab}' as Tabid,'${item.label}' as TabName ,'${item.sort * 10}' as Sort`)
+    })
+    _config.tabgroups.forEach(group => {
+      group.sublist.forEach(item => {
         _sort++
-        if (item.OpenType === 'popview') {
-          btntabs.push({
-            uuid: item.uuid,
-            linkTab: item.linkTab,
-            label: item.label,
-            sort: _sort
+        _LText.push(`select '${menu.MenuID}' as MenuID ,'${item.linkTab}' as Tabid,'${item.label}' as TabName ,'${_sort * 10}' as Sort`)
+      })
+    })
+
+    _LText = _LText.join(' union all ')
+
+    // 娓呯┖鑿滃崟涓嬪叧鑱旂殑鏍囩
+    if (!_LText) {
+      _LText = `select '${menu.MenuID}' as MenuID ,'' as Tabid,'' as TabName ,'0' as Sort`
+    }
+
+    tabParam.LText = Utils.formatOptions(_LText)
+    tabParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
+    tabParam.secretkey = Utils.encrypt(tabParam.LText, tabParam.timestamp)
+
+    let _vals = this.getFuncNames(_config)
+
+    let param = {
+      func: 'sPC_TrdMenu_AddUpt',
+      FstID: _config.fstMenuId,
+      SndID: _config.ParentId,
+      ParentID: _config.ParentId,
+      MenuID: menu.MenuID,
+      MenuNo: _config.MenuNo,
+      EasyCode: _config.easyCode || '',
+      Template: _config.Template || '',
+      MenuName: _config.MenuName,
+      PageParam: JSON.stringify({...menu.PageParam, Template: _config.Template, OpenType: _config.OpenType}),
+      LongParam: _LongParam,
+      LText: _vals.func.map(item => `select '${menu.MenuID}' as MenuID,'${item.func}' as ProcName,'${item.label}' as MenuName`),
+      LTexttb: _vals.table.map(item => `select '${menu.MenuID}' as MenuID,'${item}' as tbName`)
+    }
+
+    if (menu.menuSort) { // 鑿滃崟鏂板缓鏃惰缃帓搴�
+      param.Sort = menu.menuSort
+    }
+
+    param.LText = param.LText.join(' union all ')
+    param.LText = Utils.formatOptions(param.LText)
+    param.LTexttb = param.LTexttb.join(' union all ')
+    param.LTexttb = Utils.formatOptions(param.LTexttb)
+    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
+    param.secretkey = Utils.encrypt(param.LText, param.timestamp)
+
+    if (openEdition) { // 鐗堟湰绠$悊
+      param.open_edition = openEdition
+    }
+
+    // 鏈夋寜閽垨鏍囩鍒犻櫎鏃讹紝鍏堣繘琛屽垹闄ゆ搷浣�
+    // 鍒犻櫎鎴愬姛鍚庯紝淇濆瓨椤甸潰閰嶇疆
+    new Promise(resolve => {
+      if (delActions.length > 0) {
+        let deffers = delActions.map(item => {
+          let _param = {
+            func: 'sPC_MainMenu_Del',
+            MenuID: item.card ? item.card.uuid : item.uuid
+          }
+
+          if (item.type === 'action') {
+            let _ParentParam = null
+
+            try {
+              _ParentParam = window.btoa(window.encodeURIComponent(JSON.stringify(item.card)))
+            } catch (e) {
+              console.warn('Stringify Failure')
+              _ParentParam = null
+            }
+
+            if (_ParentParam) { // 鍒犻櫎鎸夐挳鏃讹紝淇濆瓨鎸夐挳閰嶇疆淇℃伅锛岀敤浜庢仮澶嶆寜閽�
+              _param.ParentParam = _ParentParam
+            }
+          }
+
+          return new Promise(resolve => {
+            Api.getSystemConfig(_param).then(response => {
+              resolve(response)
+            })
           })
-        }
-        
-        btnParam.LText.push(`select '${item.uuid}' as menuid, '${item.label}' as menuname, '${_sort * 10}' as Sort`)
-      })
-
-      btnParam.LText = btnParam.LText.join(' union all ')
-      btnParam.LText = Utils.formatOptions(btnParam.LText)
-      btnParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
-      btnParam.secretkey = Utils.encrypt(btnParam.LText, btnParam.timestamp)
-      
-      let tabParam = { // 娣诲姞鑿滃崟tab椤�
-        func: 'sPC_sMenusTab_AddUpt',
-        MenuID: menu.MenuID
-      }
-
-      let _LText = []
-
-      btntabs.forEach(item => {
-        _LText.push(`select '${item.uuid}' as MenuID ,'${item.linkTab}' as Tabid,'${item.label}' as TabName ,'${item.sort * 10}' as Sort`)
-      })
-      _config.tabgroups.forEach(group => {
-        group.sublist.forEach(item => {
-          _sort++
-          _LText.push(`select '${menu.MenuID}' as MenuID ,'${item.linkTab}' as Tabid,'${item.label}' as TabName ,'${_sort * 10}' as Sort`)
         })
-      })
-
-      _LText = _LText.join(' union all ')
-
-      // 娓呯┖鑿滃崟涓嬪叧鑱旂殑鏍囩
-      if (!_LText) {
-        _LText = `select '${menu.MenuID}' as MenuID ,'' as Tabid,'' as TabName ,'0' as Sort`
-      }
-
-      tabParam.LText = Utils.formatOptions(_LText)
-      tabParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
-      tabParam.secretkey = Utils.encrypt(tabParam.LText, tabParam.timestamp)
-
-      let _vals = this.getFuncNames(_config.funcs, [], [])
-      let _tables = Array.from(new Set(_vals.table))
-
-      let param = {
-        func: 'sPC_TrdMenu_AddUpt',
-        FstID: _config.fstMenuId,
-        SndID: _config.ParentId,
-        ParentID: _config.ParentId,
-        MenuID: menu.MenuID,
-        MenuNo: _config.MenuNo,
-        EasyCode: _config.easyCode || '',
-        Template: _config.Template || '',
-        MenuName: _config.MenuName,
-        PageParam: JSON.stringify({...menu.PageParam, Template: _config.Template, OpenType: _config.OpenType}),
-        LongParam: _LongParam,
-        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`)
-      }
-
-      if (menu.menuSort) { // 鑿滃崟鏂板缓鏃惰缃帓搴�
-        param.Sort = menu.menuSort
-      }
-
-      param.LText = param.LText.join(' union all ')
-      param.LText = Utils.formatOptions(param.LText)
-      param.LTexttb = param.LTexttb.join(' union all ')
-      param.LTexttb = Utils.formatOptions(param.LTexttb)
-      param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
-      param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-
-      if (openEdition) { // 鐗堟湰绠$悊
-        param.open_edition = openEdition
-      }
-
-      // 鏈夋寜閽垨鏍囩鍒犻櫎鏃讹紝鍏堣繘琛屽垹闄ゆ搷浣�
-      // 鍒犻櫎鎴愬姛鍚庯紝淇濆瓨椤甸潰閰嶇疆
-      new Promise(resolve => {
-        if (delActions.length > 0) {
-          let deffers = delActions.map(item => {
-            let _param = {
-              func: 'sPC_MainMenu_Del',
-              MenuID: item.card ? item.card.uuid : item.uuid
-            }
-
-            if (item.type === 'action') {
-              let _ParentParam = null
-
-              try {
-                _ParentParam = window.btoa(window.encodeURIComponent(JSON.stringify(item.card)))
-              } catch (e) {
-                console.warn('Stringify Failure')
-                _ParentParam = null
-              }
-
-              if (_ParentParam) { // 鍒犻櫎鎸夐挳鏃讹紝淇濆瓨鎸夐挳閰嶇疆淇℃伅锛岀敤浜庢仮澶嶆寜閽�
-                _param.ParentParam = _ParentParam
-              }
-            }
-
-            return new Promise(resolve => {
-              Api.getSystemConfig(_param).then(response => {
-                resolve(response)
-              })
-            })
-          })
-          Promise.all(deffers).then(result => {
-            let error = null
-            result.forEach(response => {
-              if (!response.status) {
-                error = response
-              }
-            })
-  
-            if (error) {
-              this.setState({
-                menuloading: false,
-                menucloseloading: false
-              })
-              notification.warning({
-                top: 92,
-                message: error.message,
-                duration: 5
-              })
-              resolve(false)
-            } else {
-              this.setState({
-                delActions: []
-              })
-              resolve(true)
+        Promise.all(deffers).then(result => {
+          let error = null
+          result.forEach(response => {
+            if (!response.status) {
+              error = response
             }
           })
-        } else if (delActions.length === 0) {
-          resolve(true)
-        }
-      }).then(resp => {
-        if (resp === false) return
 
-        if (thawButtons.length > 0) {
-          let defers = thawButtons.map(item => {
-            return new Promise((resolve) => {
-              Api.getSystemConfig({
-                func: 'sPC_MainMenu_ReDel',
-                MenuID: item
-              }).then(res => {
-                if (res.status) {
-                  resolve('')
-                } else {
-                  resolve(res.message)
-                }
-              })
-            })
-          })
-
-          return Promise.all(defers)
-        } else {
-          return true
-        }
-      }).then(res => {
-        if (res === true || res === false) return res
-
-        let msg = res.filter(Boolean)[0]
-        if (msg) {
-          notification.warning({
-            top: 92,
-            message: msg,
-            duration: 5
-          })
-          return false
-        } else {
-          this.setState({
-            thawButtons: []
-          })
-          return true
-        }
-      }).then(resp => {
-        if (resp === false) return
-        let localParam = fromJS(param).toJS()
-        Api.getSystemConfig(param).then(response => {
-          if (response.status) {
-            this.setState({
-              config: _config,
-              openEdition: response.open_edition || '',
-              originMenu: fromJS(_config).toJS()
-            })
-
-            this.props.reloadmenu()
-            
-            this.submitAction(btnParam, tabParam)
-
-            localParam.func = 'sPC_TrdMenu_AddUpt_For_Local'
-            delete localParam.LongParam
-            delete localParam.PageParam
-            delete localParam.Template
-            delete localParam.Sort
-            delete localParam.EasyCode
-            delete localParam.open_edition
-
-            Api.getLocalConfig(localParam)
-          } else {
+          if (error) {
             this.setState({
               menuloading: false,
               menucloseloading: false
             })
             notification.warning({
               top: 92,
-              message: response.message,
+              message: error.message,
               duration: 5
             })
+            resolve(false)
+          } else {
+            this.setState({
+              delActions: []
+            })
+            resolve(true)
           }
         })
+      } else if (delActions.length === 0) {
+        resolve(true)
+      }
+    }).then(resp => {
+      if (resp === false) return
+
+      if (thawButtons.length > 0) {
+        let defers = thawButtons.map(item => {
+          return new Promise((resolve) => {
+            Api.getSystemConfig({
+              func: 'sPC_MainMenu_ReDel',
+              MenuID: item
+            }).then(res => {
+              if (res.status) {
+                resolve('')
+              } else {
+                resolve(res.message)
+              }
+            })
+          })
+        })
+
+        return Promise.all(defers)
+      } else {
+        return true
+      }
+    }).then(res => {
+      if (res === true || res === false) return res
+
+      let msg = res.filter(Boolean)[0]
+      if (msg) {
+        notification.warning({
+          top: 92,
+          message: msg,
+          duration: 5
+        })
+        return false
+      } else {
+        this.setState({
+          thawButtons: []
+        })
+        return true
+      }
+    }).then(resp => {
+      if (resp === false) return
+      let localParam = fromJS(param).toJS()
+      Api.getSystemConfig(param).then(response => {
+        if (response.status) {
+          this.setState({
+            config: _config,
+            openEdition: response.open_edition || '',
+            originMenu: fromJS(_config).toJS()
+          })
+
+          localParam.func = 'sPC_TrdMenu_AddUpt_For_Local'
+          delete localParam.LongParam
+          delete localParam.PageParam
+          delete localParam.Template
+          delete localParam.Sort
+          delete localParam.EasyCode
+          delete localParam.open_edition
+
+          this.submitAction(btnParam, tabParam, localParam)
+        } else {
+          this.setState({
+            menuloading: false,
+            menucloseloading: false
+          })
+          notification.warning({
+            top: 92,
+            message: response.message,
+            duration: 5
+          })
+        }
       })
     })
   }
@@ -674,7 +559,7 @@
   /**
    * @description 淇濆瓨鎴栦慨鏀硅彍鍗曟寜閽泦
    */
-  submitAction = (btnParam, tabParam) => {
+  submitAction = (btnParam, tabParam, localParam) => {
     const { config } = this.state
 
     new Promise(resolve => {
@@ -701,29 +586,25 @@
         deffers.push(defer)
       }
 
-      if (deffers.length === 0) {
-        resolve(true)
-      } else {
-        Promise.all(deffers).then(result => {
-          let error = false
-          result.forEach(res => {
-            if (!res.status) {
-              error = res
-            }
-          })
-
-          if (error) {
-            notification.warning({
-              top: 92,
-              message: error.message,
-              duration: 5
-            })
-            resolve(false)
-          } else {
-            resolve(true)
+      Promise.all(deffers).then(result => {
+        let error = false
+        result.forEach(res => {
+          if (!res.status) {
+            error = res
           }
         })
-      }
+
+        if (error) {
+          notification.warning({
+            top: 92,
+            message: error.message,
+            duration: 5
+          })
+          resolve(false)
+        } else {
+          resolve(true)
+        }
+      })
     }).then(response => {
       if (response === false) return response
 
@@ -734,6 +615,8 @@
         let curBtn = config.action.filter(cell => item.curuuid === cell.uuid)[0] // 鏌ョ湅鍒濆鍖栨寜閽槸鍚﹀瓨鍦�
         if (!curBtn) return
         if (curBtn.OpenType !== item.prebtn.OpenType) return
+        if (curBtn.OpenType === 'tab' && curBtn.tabTemplate !== 'FormTab') return
+        if (curBtn.OpenType === 'funcbutton' && curBtn.execMode !== 'pop') return
 
         oriActions.push({
           prebtn: item.prebtn,
@@ -841,6 +724,8 @@
             menucloseloading: false
           })
         }
+        this.props.reloadmenu()
+        Api.getLocalConfig(localParam)
       } else {
         this.setState({
           menuloading: false,
@@ -882,7 +767,7 @@
    */
   setSubConfig = (item, type) => {
     const { menu } = this.props
-    const { config, originMenu, optionLibs, activeKey, openEdition } = this.state
+    const { config, originMenu, activeKey, openEdition } = this.state
 
     if (config.isAdd) { // 鏂板缓鑿滃崟锛屾彁绀鸿彍鍗曞皻鏈繚瀛�
       notification.warning({
@@ -891,16 +776,6 @@
         duration: 5
       })
     } else {
-      // 鍩烘湰淇℃伅楠岃瘉
-      if (!config.fstMenuId || !config.ParentId || !config.MenuName || !config.MenuNo) {
-        notification.warning({
-          top: 92,
-          message: this.state.dict['model.menu.basemsg'],
-          duration: 5
-        })
-        this.setState({activeKey: '0'})
-        return
-      }
       if (!is(fromJS(originMenu), fromJS(config))) { // 鑿滃崟淇℃伅鍙樺寲鏃讹紝鎻愮ず淇濆瓨
         notification.warning({
           top: 92,
@@ -910,7 +785,7 @@
         return
       }
 
-      let submenu = menu.fstMenuList.filter(item => item.MenuID === config.fstMenuId)[0]
+      let submenu = menu.fstMenuList.filter(_menu => _menu.MenuID === config.fstMenuId)[0]
 
       let _Menu = {
         ...menu,
@@ -920,7 +795,7 @@
         MenuNo: config.MenuNo,
         ParentId: config.ParentId,
         fstMenuId: config.fstMenuId,
-        supMenuList: submenu ? submenu.options : []
+        supMenuList: submenu ? submenu.children : []
       }
 
       // 鑿滃崟淇℃伅楠岃瘉閫氳繃鍚庯紝璺宠浆瀛愰厤缃〉闈�
@@ -929,17 +804,17 @@
       let isbutton = true
       let _btnTab = null
       
-      if (type === 'button' && item.OpenType === 'pop') {
-        _view = 'Modal'             // 琛ㄥ崟椤甸潰
-      } else if (type === 'button' && (item.OpenType === 'tab' || item.OpenType === 'blank')) {
-        _view = item.tabTemplate    // 鏂版爣绛鹃〉妯℃澘
+      if (type === 'button' && (item.OpenType === 'pop' || item.execMode === 'pop')) {
+        _view = 'Modal'      // 琛ㄥ崟椤甸潰
+      } else if (type === 'button' && item.OpenType === 'tab') {
+        _view = 'FormTab'    // 琛ㄥ崟鏍囩椤垫ā鏉�
         _btnTab = item
       } else if (type === 'button' && item.OpenType === 'popview') {
-        _view = item.tabType        // 鏂板脊绐楁爣绛炬ā鏉�
+        _view = 'SubTable'   // 鏂板脊绐楁爣绛炬ā鏉� tabType 灞炴�у凡鍘婚櫎
         uuid = item.linkTab
         isbutton = false
       } else if (type === 'tab') {
-        _view = item.type           // 鏍囩妯℃澘
+        _view = 'SubTable'   // 鏍囩妯℃澘
         uuid = item.linkTab
         isbutton = false
       }
@@ -948,7 +823,6 @@
       _Menu.open_edition = openEdition  // 鏇存柊鐗堟湰鍙�
 
       let param = {
-        optionLibs: optionLibs,
         editMenu: _Menu,
         editTab: !isbutton ? item : '',
         tabConfig: null,
@@ -1090,9 +964,39 @@
       }
     })
     
+    config.action && config.action.forEach((btn) => {
+      if (['prompt', 'exec', 'pop'].includes(btn.OpenType) && btn.Ot === 'required' && btn.verify && btn.verify.scripts && btn.verify.scripts.length > 0) {
+        let hascheck = false
+        btn.verify.scripts.forEach(item => {
+          if (item.status === 'false') return
+    
+          if (/\$check@|@check\$/ig.test(item.sql)) {
+            hascheck = true
+          }
+        })
+        if (hascheck) {
+          notification.warning({
+            top: 92,
+            message: `鍙�夋嫨澶氳鐨勬寜閽��${btn.label}銆嬩腑 $check@ 鎴� @check$ 灏嗕笉浼氱敓鏁堬紒`,
+            duration: 5
+          })
+        }
+      }
+      if (btn.intertype === 'custom' && btn.callbackType === 'script' && (!btn.verify || !btn.verify.cbScripts || !btn.verify.cbScripts.filter(item => item.status !== 'false').length === 0)) {
+        notification.warning({
+          top: 92,
+          message: `鎸夐挳銆�${btn.label}銆嬫湭璁剧疆鍥炶皟鑴氭湰锛� 灏嗕笉浼氱敓鏁堬紒`,
+          duration: 5
+        })
+      }
+    })
 
-    if (config.setting.interType === 'system' && config.setting.default !== 'false' && !config.setting.dataresource) {
-      return '鑿滃崟灏氭湭璁剧疆鏁版嵁婧愶紝涓嶅彲鍚敤锛�'
+    if ((config.setting.interType === 'system' || config.setting.requestMode === 'system') && config.setting.default === 'false' && config.setting.scripts && config.setting.scripts.filter(item => item.status !== 'false').length === 0) {
+      return '鏁版嵁婧愪腑涓嶆墽琛岄粯璁ql锛屼笖鏈坊鍔犺嚜瀹氫箟鑴氭湰锛屼笉鍙惎鐢紒'
+    } else if (config.setting.interType === 'custom' && config.setting.procMode !== 'inner' && config.setting.preScripts && config.setting.preScripts.filter(item => item.status !== 'false').length === 0) {
+      return '鏁版嵁婧愭湭璁剧疆鍓嶇疆鑴氭湰锛屼笉鍙惎鐢紒'
+    } else if (config.setting.interType === 'custom' && config.setting.callbackType === 'script' && config.setting.cbScripts && config.setting.cbScripts.filter(item => item.status !== 'false').length === 0) {
+      return '鏁版嵁婧愭湭璁剧疆鍥炶皟鑴氭湰锛屼笉鍙惎鐢紒'
     } else if (!config.setting.primaryKey) {
       return '鑿滃崟灏氭湭璁剧疆涓婚敭锛屼笉鍙惎鐢紒'
     } else if (config.columns.length === 0) {
@@ -1132,56 +1036,16 @@
         config: res.config
       })
     } else if (res.type === 'paste') {
-      this.setState({
-        pasteContent: res.content
-      }, () => {
-        this.setState({
-          pasteContent: null
-        })
-      })
-    } else if (res.type === 'replace') {
-      let config = fromJS(this.state.config).toJS()
-
-      if (res.repType === 'field') {
-        let origin = res.origin.toLowerCase()
-        let value = res.value
-
-        config.search = config.search.map(item => {
-          if (item.field && item.field.toLowerCase() === origin) {
-            item.field = value
-          } else if (item.datefield && item.datefield.toLowerCase() === origin) {
-            item.datefield = value
-          }
-          return item
-        })
-        config.columns = config.columns.map(item => {
-          if (item.field && item.field.toLowerCase() === origin) {
-            item.field = value
-          } else if (item.nameField && item.nameField.toLowerCase() === origin) {
-            item.nameField = value
-          }
-          return item
-        })
-      }
-
-      notification.success({
-        top: 92,
-        message: '鏇挎崲鎴愬姛銆�',
-        duration: 2
-      })
-      this.setState({ config })
+      this.setState({config: res.config})
     }
   }
 
   /**
    * @description 鏇存柊鎼滅储鏉′欢閰嶇疆淇℃伅
    */
-  updatesearch = (config, options) => {
-    const { optionLibs } = this.state
-
+  updatesearch = (config) => {
     this.setState({
-      config: config,
-      optionLibs: options || optionLibs
+      config: config
     })
   }
 
@@ -1209,28 +1073,6 @@
   }
   
   /**
-   * @description 鏇存柊甯哥敤琛ㄤ俊鎭紝蹇嵎娣诲姞鍚庢洿鏂伴厤缃俊鎭�
-   */
-  updatetable = (config, fields) => {
-    const { tableFields } = this.state
-
-    this.setState({
-      config: config,
-      tableFields: fields ? fields : tableFields
-    })
-  }
-
-  /**
-   * @description 鏇存柊鏍囩閰嶇疆淇℃伅
-   */
-  updatetabs = (config) => {
-
-    this.setState({
-      config: config
-    })
-  }
-
-  /**
    * @description 鏇存柊閰嶇疆淇℃伅
    */
   updateconfig = (config) => {
@@ -1243,7 +1085,7 @@
     const { menu } = this.props
     const { activeKey, config, chartview } = this.state
 
-    const confActions = config.action.filter(_action => !_action.origin && ['pop', 'popview', 'blank', 'tab'].includes(_action.OpenType))
+    const confActions = config.action.filter(_action => !_action.origin && (['pop', 'popview'].includes(_action.OpenType) || (_action.OpenType === 'tab' && _action.tabTemplate === 'FormTab') || (_action.OpenType === 'funcbutton' && _action.execMode === 'pop')))
 
     let configTabs = []
     config.tabgroups.forEach(group => {
@@ -1269,7 +1111,7 @@
                 <TableComponent
                   config={config}
                   containerId="main-basedata"
-                  updatetable={this.updatetable}
+                  updatetable={this.updateconfig}
                 />
               </Panel>
               {/* 鎼滅储鏉′欢娣诲姞 */}
@@ -1280,7 +1122,6 @@
                 <FieldsComponent
                   config={config}
                   type="search"
-                  tableFields={this.state.tableFields}
                   updatefield={this.updateconfig}
                 />
               </Panel>
@@ -1320,7 +1161,6 @@
                 <FieldsComponent
                   config={config}
                   type="columns"
-                  tableFields={this.state.tableFields}
                   updatefield={this.updateconfig}
                 />
               </Panel>
@@ -1360,7 +1200,7 @@
               </div>
             } bordered={false} extra={
               <div>
-                <EditComponent dict={this.state.dict} type="maintable" config={this.state.config} MenuID={this.props.menu.MenuID} thawButtons={this.state.thawButtons} refresh={this.editConfig}/>
+                <EditComponent dict={this.state.dict} options={['search', 'action', 'columns']} config={this.state.config} MenuID={this.props.menu.MenuID} thawButtons={this.state.thawButtons} refresh={this.editConfig}/>
                 <Switch className="big" checkedChildren={this.state.dict['model.enable']} unCheckedChildren={this.state.dict['model.disable']} checked={this.state.config.enabled} onChange={this.onEnabledChange} />
                 <Button type="primary" onClick={this.submitConfig} loading={this.state.menuloading}>{this.state.dict['model.save']}</Button>
                 <Button onClick={this.cancelConfig}>{this.state.dict['model.back']}</Button>
@@ -1369,22 +1209,16 @@
               <SettingComponent
                 config={config}
                 MenuID={this.props.menu.MenuID}
-                permFuncField={this.props.permFuncField}
                 updatesetting={this.updateconfig}
               />
               <SearchComponent
-                menu={{MenuID: this.props.menu.MenuID, MenuName: config.MenuName}}
                 config={config}
-                pasteContent={this.state.pasteContent}
-                sysRoles={this.props.sysRoles}
-                optionLibs={this.state.optionLibs}
                 updatesearch={this.updatesearch}
               />
               <div className="chart-view" style={{position: 'relative'}}>
                 {/* 瑙嗗浘缁� 鏉冮檺 浼氬憳绛夌骇20+ */}
                 {this.props.memberLevel >= 20 ? <ChartGroupComponent
                   config={config}
-                  sysRoles={this.props.sysRoles}
                   updatechartgroup={this.updatechartgroup}
                 /> : null}
                 {config.charts.map(item => {
@@ -1399,16 +1233,12 @@
                           menu={{ MenuID: this.props.menu.MenuID, MenuName: config.MenuName, MenuNo: config.MenuNo, fstMenuList: this.props.menu.fstMenuList }}
                           config={config}
                           tabs={this.state.tabviews}
-                          pasteContent={this.state.pasteContent}
-                          usefulFields={this.props.permFuncField}
                           setSubConfig={(_btn) => this.setSubConfig(_btn, 'button')}
                           updateaction={this.updateaction}
                         />
                         <ColumnComponent
                           config={config}
                           menu={this.props.menu}
-                          sysRoles={this.props.sysRoles}
-                          pasteContent={this.state.pasteContent}
                           updatecolumn={this.updateconfig}
                         />
                       </Col>
@@ -1441,7 +1271,7 @@
                 config={config}
                 tabs={this.state.tabviews}
                 setSubConfig={(item) => this.setSubConfig(item, 'tab')}
-                updatetabs={this.updatetabs}
+                updatetabs={this.updateconfig}
               />
             </Card>
           </div>
@@ -1470,8 +1300,6 @@
 
 const mapStateToProps = (state) => {
   return {
-    sysRoles: state.sysRoles,
-    permFuncField: state.permFuncField,
     memberLevel: state.memberLevel
   }
 }

--
Gitblit v1.8.0