From 5088d267c69e87673c85ba302dd9dc62c9da4951 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期日, 16 二月 2020 18:54:49 +0800
Subject: [PATCH] 2020-02-16

---
 src/tabviews/formtab/actionList/index.jsx |  510 ++++++++++++++++++--------------------------------------
 1 files changed, 166 insertions(+), 344 deletions(-)

diff --git a/src/tabviews/formtab/actionList/index.jsx b/src/tabviews/formtab/actionList/index.jsx
index f6a51ac..72af4f9 100644
--- a/src/tabviews/formtab/actionList/index.jsx
+++ b/src/tabviews/formtab/actionList/index.jsx
@@ -11,11 +11,13 @@
 class MainAction extends Component {
   static propTpyes = {
     MenuID: PropTypes.string,      // 鑿滃崟ID
+    primaryId: PropTypes.string,   // 涓婚敭
     actions: PropTypes.array,      // 鎸夐挳缁�
     logcolumns: PropTypes.array,   // 鏄剧ず鍒�
     dict: PropTypes.object,        // 瀛楀吀椤�
     data: PropTypes.any,           // 鏁版嵁
     setting: PropTypes.any,        // 椤甸潰閫氱敤璁剧疆
+    getFormData: PropTypes.func,   // 鑾峰彇琛ㄥ崟鍊�
     refreshdata: PropTypes.func,   // 鎵ц瀹屾垚鍚庢暟鎹埛鏂�
   }
 
@@ -33,21 +35,29 @@
 
     let _this = this
 
-    if (item.OpenType === 'prompt') {
-      confirm({
-        title: this.props.dict['main.action.confirm.tip'],
-        onOk() {
-          return new Promise(resolve => {
-            _this.execSubmit(item, data, resolve)
+    if (item.btnType !== 'cancel') {
+      this.props.getFormData().then(res => {
+        if (item.OpenType === 'prompt') {
+          confirm({
+            title: this.props.dict['main.action.confirm.tip'],
+            onOk() {
+              return new Promise(resolve => {
+                _this.execSubmit(item, data, resolve, res)
+              })
+            },
+            onCancel() {}
           })
-        },
-        onCancel() {}
+        } else if (item.OpenType === 'exec') {
+          this.setState({loadingUuid: item.uuid})
+
+          this.execSubmit(item, data, () => {
+            this.setState({loadingUuid: ''})
+          }, res)
+        }
       })
-    } else if (item.OpenType === 'exec') {
-      this.setState({loadingUuid: item.uuid})
-      this.execSubmit(item, data, () => {
-        this.setState({loadingUuid: ''})
-      })
+    } else {
+      item.afterExecSuccess = 'close'
+      this.props.refreshdata(item, 'success', '')
     }
   }
 
@@ -55,7 +65,9 @@
    * @description 鎸夐挳鎻愪氦鎵ц
    */
   execSubmit = (btn, data, _resolve, formdata) => {
-    const { setting, logcolumns } = this.props
+    const { setting, logcolumns, primaryId } = this.props
+
+    let _primaryId = primaryId
 
     if (btn.intertype === 'inner') {
       // 浣跨敤鍐呴儴鎺ュ彛鏃讹紝鍐呴儴鍑芥暟鍜屾暟鎹簮涓嶅彲鍚屾椂涓虹┖, 浣跨敤绯荤粺鍑芥暟鏃讹紝绫诲瀷涓嶅彲涓虹┖
@@ -65,163 +77,58 @@
         return
       }
 
-      // 鎵ц鏂瑰紡涓哄琛屾嫾鎺ワ紝涓旀墦寮�鏂瑰紡涓鸿〃鍗曟椂锛屼細杞负寰幆鍙戦�佽姹�
-      // 鎵撳紑鏂瑰紡涓烘ā鎬佹锛屼娇鐢ㄥ唴閮ㄥ嚱鏁版坊鍔�
-      if (
-        btn.Ot === 'notRequired' ||
-        btn.Ot === 'requiredSgl' ||
-        (btn.Ot === 'requiredOnce' && btn.OpenType !== 'pop') ||
-        (btn.OpenType === 'pop' && !btn.innerFunc && btn.sql && btn.sqlType === 'insert')
-      ) {
-
-        // 鍒涘缓鍑瘉鏃讹紝闇�瑕侀�夋嫨琛屾椂
-        if (data.length === 0 && !btn.innerFunc && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) {
-          notification.warning({
-            top: 92,
-            message: '浣跨敤鍒涘缓鍑瘉鍑芥暟锛岄渶瑕侀�夋嫨琛岋紒',
-            duration: 10
-          })
-          return
-        }
-
-        let param = { // 绯荤粺瀛樺偍杩囩▼
-          func: 'sPC_TableData_InUpDe',
-          BID: ''
-        }
-        let primaryId = setting.primaryKey && data[0] ? (data[0][setting.primaryKey] || '') : ''
-
-        if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { // 鏄惁寮规鎴栫洿鎺ユ墽琛�
-          let ID = ''
-          if (btn.Ot === 'notRequired') {
-            
-          } else if (btn.Ot === 'requiredSgl') {
-            ID = data[0][setting.primaryKey]
-          } else if (btn.Ot === 'requiredOnce') { // id鍊兼嫾鎺�
-            let ids = data.map(d => { return d[setting.primaryKey]})
-            ID = ids.join(',')
-          }
-
-          if (btn.innerFunc) { // 浣跨敤鑷畾涔夊嚱鏁�
-            param.func = btn.innerFunc
-            if (setting.primaryKey) { // 涓婚敭瀛樺湪鏃讹紝璁剧疆涓婚敭鍙傛暟
-              param[setting.primaryKey] = ID
-            }
-          } else if (btn.sql) {
-            param.ID = primaryId
-            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, '', param, data[0], logcolumns)) // 鏁版嵁婧�
-            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
-            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-          }
-        } else if (btn.OpenType === 'pop') { // 琛ㄥ崟
-          if (btn.innerFunc) {
-            param.func = btn.innerFunc
-
-            if (setting.primaryKey) { // 涓婚敭瀛樺湪鏃讹紝璁剧疆涓婚敭鍙傛暟
-              param[setting.primaryKey] = primaryId
-            }
-
-            formdata.forEach(_data => {
-              param[_data.key] = _data.value
-            })
-
-          } else if (btn.sql && btn.sqlType === 'insert') { // 绯荤粺鍑芥暟娣诲姞鏃讹紝鐢熸垚uuid
-            param.ID = Utils.getguid()
-            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns)) // 鏁版嵁婧�
-            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
-            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-          } else if (btn.sql) {
-            param.ID = primaryId
-            param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data[0], logcolumns)) // 鏁版嵁婧�
-            param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
-            param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-          }
-        }
-
-        Api.genericInterface(param).then((res) => {
-          if (res.status) {
-            this.execSuccess(btn, res)
-          } else {
-            this.execError(res, btn)
-          }
-          _resolve()
+      // 鍒涘缓鍑瘉鏃讹紝闇�瑕侀�夋嫨琛屾椂
+      if (!data && !btn.innerFunc && btn.verify && btn.verify.voucher && btn.verify.voucher.enabled) {
+        notification.warning({
+          top: 92,
+          message: '浣跨敤鍒涘缓鍑瘉鍑芥暟锛岄渶瑕侀�夋嫨琛岋紒',
+          duration: 10
         })
-      } else if (btn.Ot === 'required' || (btn.Ot === 'requiredOnce' && btn.OpenType === 'pop')) {
-        let _params = data.map(cell => {
-          let param = {
-            func: 'sPC_TableData_InUpDe',
-            BID: ''
-          }
-          let primaryId = setting.primaryKey ? cell[setting.primaryKey] : ''
-
-          if (btn.OpenType === 'prompt' || btn.OpenType === 'exec') { // 鏄惁寮规鎴栫洿鎺ユ墽琛�
-
-            if (btn.innerFunc) {
-              param.func = btn.innerFunc
-              if (setting.primaryKey) {
-                param[setting.primaryKey] = primaryId
-              }
-            } else if (btn.sql) {
-              param.ID = primaryId
-              param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, '', param, cell, logcolumns)) // 鏁版嵁婧�
-              param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
-              param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-            }
-          } else if (btn.OpenType === 'pop') { // 琛ㄥ崟
-            if (btn.innerFunc) {
-              param.func = btn.innerFunc
-
-              formdata.forEach(_data => {
-                param[_data.key] = _data.value
-              })
-
-              if (setting.primaryKey) {
-                param[setting.primaryKey] = primaryId
-              }
-            } else if (btn.sql) {
-              param.ID = primaryId
-              param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, cell, logcolumns)) // 鏁版嵁婧�
-              param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
-              param.secretkey = Utils.encrypt(param.LText, param.timestamp)
-            }
-          }
-
-          return param
-        })
-
-        if (_params.length <= 20) {
-          let deffers = _params.map(param => {
-            return new Promise(resolve => {
-              Api.genericInterface(param).then(res => {
-                resolve(res)
-              })
-            })
-          })
-          Promise.all(deffers).then(result => {
-            let iserror = false
-            let errorMsg = ''
-            result.forEach(res => {
-              if (res.status) {
-                errorMsg = res
-              } else {
-                iserror = true
-                errorMsg = res
-              }
-            })
-            if (!iserror) {
-              this.execSuccess(btn, errorMsg)
-            } else {
-              this.execError(errorMsg, btn)
-            }
-            _resolve()
-          })
-        } else { // 瓒呭嚭20涓姹傛椂寰幆鎵ц
-          this.innerLoopRequest(_params, btn, _resolve)
-        }
-      } else {
-        this.actionSettingError()
-        _resolve()
         return
       }
+
+      let param = { // 绯荤粺瀛樺偍杩囩▼
+        func: 'sPC_TableData_InUpDe',
+        BID: ''
+      }
+
+      if (btn.innerFunc) {
+        param.func = btn.innerFunc
+
+        param[setting.primaryKey] = primaryId
+
+        formdata.forEach(_data => {
+          param[_data.key] = _data.value
+        })
+
+        if (!param[setting.primaryKey]) {
+          param[setting.primaryKey] = Utils.getguid()
+        }
+
+        _primaryId = param[setting.primaryKey]
+
+      } else if (btn.sql && btn.sqlType === 'insert') { // 绯荤粺鍑芥暟娣诲姞鏃讹紝鐢熸垚uuid
+        param.ID = Utils.getguid()
+        param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data, logcolumns)) // 鏁版嵁婧�
+        param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
+        param.secretkey = Utils.encrypt(param.LText, param.timestamp)
+
+        _primaryId = param.ID
+      } else if (btn.sql) {
+        param.ID = primaryId
+        param.LText = Utils.formatOptions(Utils.getSysDefaultSql(btn, setting, formdata, param, data, logcolumns)) // 鏁版嵁婧�
+        param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
+        param.secretkey = Utils.encrypt(param.LText, param.timestamp)
+      }
+
+      Api.genericInterface(param).then((res) => {
+        if (res.status) {
+          this.execSuccess(btn, res, _primaryId)
+        } else {
+          this.execError(res, btn)
+        }
+        _resolve()
+      })
     } else if (btn.intertype === 'outer') {
       /** *********************璋冪敤澶栭儴鎺ュ彛************************* */
 
@@ -231,183 +138,102 @@
         return
       }
 
-      let _params = [] // 璇锋眰鍙傛暟鏁扮粍
-
-      if (btn.Ot === 'notRequired' || btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce') {
-        let param = {
-          BID: ''
-        }
-
-        if (btn.OpenType === 'pop' && formdata) { // 琛ㄥ崟
-          formdata.forEach(_data => {
-            param[_data.key] = _data.value
-          })
-        }
-
-        // 鑾峰彇id
-        if (btn.Ot === 'notRequired') {
-          
-        } else if (btn.Ot === 'requiredSgl' && setting.primaryKey) {
-          param[setting.primaryKey] = data[0][setting.primaryKey]
-        } else if (btn.Ot === 'requiredOnce' && setting.primaryKey) {
-          let ids = data.map(d => { return d[setting.primaryKey]})
-          param[setting.primaryKey] = ids.join(',')
-        }
-
-        _params.push(param)
-      } else if (btn.Ot === 'required') {
-        // 閫夋嫨澶氳锛屽惊鐜皟鐢�
-
-        let _formparam = {}
-        if (btn.OpenType === 'pop' && formdata) { // 琛ㄥ崟
-          formdata.forEach(_data => {
-            _formparam[_data.key] = _data.value
-          })
-        }
-
-        _params = data.map(cell => {
-          let _cell = {
-            BID: '',
-          }
-          if (setting.primaryKey) {
-            _cell[setting.primaryKey] = cell[setting.primaryKey]
-          }
-
-          _cell = {..._formparam, ..._cell}
-
-          return _cell
-        })
-      } else {
-        this.actionSettingError()
-        _resolve()
-        return
+      let param = {
+        BID: ''
       }
 
-      // 寰幆璋冪敤澶栭儴鎺ュ彛锛堝寘鎷唴閮ㄥ強鍥炶皟鍑芥暟锛�
-      this.outerLoopRequest(_params, btn, _resolve)
+      param[setting.primaryKey] = primaryId
+
+      formdata.forEach(_data => {
+        param[_data.key] = _data.value
+      })
+
+      if (!param[setting.primaryKey]) {
+        param[setting.primaryKey] = Utils.getguid()
+      }
+      _primaryId = param[setting.primaryKey]
+
+      let _outParam = null
+  
+      new Promise(resolve => {
+        // 鍐呴儴璇锋眰
+        if (btn.innerFunc) {
+          param.func = btn.innerFunc
+          // 瀛樺湪鍐呴儴鍑芥暟鏃讹紝鏁版嵁棰勫鐞�
+          Api.genericInterface(param).then(res => {
+            if (res.status) {
+              delete res.ErrCode
+              delete res.ErrMesg
+              delete res.message
+              delete res.status
+  
+              // 浣跨敤澶勭悊鍚庣殑鏁版嵁璋冪敤澶栭儴鎺ュ彛
+              resolve(res)
+            } else {
+              this.execError(res, btn)
+              resolve(false)
+              _resolve()
+            }
+          })
+        } else {
+          resolve(param)
+        }
+      }).then(res => {
+        if (!res) return
+        // 澶栭儴璇锋眰
+        _outParam = JSON.parse(JSON.stringify(res))
+  
+        if (btn.sysInterface === 'true') {
+          res.rduri = window.GLOB.mainSystemApi || window.GLOB.subSystemApi
+        } else {
+          res.rduri = btn.interface
+        }
+
+        if (btn.outerFunc) {
+          res.func = btn.outerFunc
+        }
+  
+        res.appkey = window.GLOB.appkey || '' // 澶栭儴璇锋眰鏃讹紝缁熶竴娣诲姞appkey
+  
+        return Api.genericInterface(res)
+      }).then(response => {
+        if (!response) return
+        // 鍥炶皟璇锋眰
+        if (btn.callbackFunc) {
+          // 瀛樺湪鍥炶皟鍑芥暟鏃讹紝璋冪敤
+          delete response.message
+          delete response.status
+  
+          response.func = btn.callbackFunc
+  
+          let _callbackparam = {..._outParam, ...response}
+          return Api.genericInterface(_callbackparam)
+        } else {
+          if (response.status) {
+            this.execSuccess(btn, response, _primaryId)
+            _resolve()
+          } else {
+            this.execError(response, btn)
+            _resolve()
+          }
+        }
+      }).then(res => {
+        if (!res) return
+  
+        if (res.status) {
+          this.execSuccess(btn, res, _primaryId)
+          _resolve()
+        } else {
+          this.execError(res, btn)
+          _resolve()
+        }
+      })
       
     } else {
       this.actionSettingError()
       _resolve()
       return
     }
-  }
-
-  /**
-   * @description 鍐呴儴璇锋眰寰幆鎵ц
-   */
-  innerLoopRequest = (params, btn, _resolve) => {
-    if (!params && params.length === 0) return
-
-    let param = params.shift()
-
-    Api.genericInterface(param).then(res => {
-      if (res.status) {
-        if (params.length === 0) {
-          this.execSuccess(btn, res)
-          _resolve()
-        } else {
-          this.innerLoopRequest(params, btn, _resolve)
-        }
-      } else {
-        this.execError(res, btn)
-        _resolve()
-      }
-    })
-  }
-
-  /**
-   * @description 澶栭儴璇锋眰寰幆鎵ц
-   */
-  outerLoopRequest = (params, btn, _resolve) => {
-    if (!params && params.length === 0) return
-
-    let param = params.shift()
-    let _outParam = null
-
-    new Promise(resolve => {
-      // 鍐呴儴璇锋眰
-      if (btn.innerFunc) {
-        param.func = btn.innerFunc
-        // 瀛樺湪鍐呴儴鍑芥暟鏃讹紝鏁版嵁棰勫鐞�
-        Api.genericInterface(param).then(res => {
-          if (res.status) {
-            delete res.ErrCode
-            delete res.ErrMesg
-            delete res.message
-            delete res.status
-
-            // 浣跨敤澶勭悊鍚庣殑鏁版嵁璋冪敤澶栭儴鎺ュ彛
-            resolve(res)
-          } else {
-            this.execError(res, btn)
-            resolve(false)
-            _resolve()
-          }
-        })
-      } else {
-        resolve(param)
-      }
-    }).then(res => {
-      if (!res) return
-      // 澶栭儴璇锋眰
-      _outParam = JSON.parse(JSON.stringify(res))
-
-      if (btn.sysInterface === 'true') {
-        res.rduri = window.GLOB.mainSystemApi || window.GLOB.subSystemApi
-      } else {
-        res.rduri = btn.interface
-      }
-      // res.method = btn.method
-      if (btn.outerFunc) {
-        res.func = btn.outerFunc
-      }
-
-      res.appkey = window.GLOB.appkey || '' // 澶栭儴璇锋眰鏃讹紝缁熶竴娣诲姞appkey
-
-      return Api.genericInterface(res)
-    }).then(response => {
-      if (!response) return
-      // 鍥炶皟璇锋眰
-      if (btn.callbackFunc) {
-        // 瀛樺湪鍥炶皟鍑芥暟鏃讹紝璋冪敤
-        delete response.message
-        delete response.status
-
-        response.func = btn.callbackFunc
-
-        let _callbackparam = {..._outParam, ...response}
-        return Api.genericInterface(_callbackparam)
-      } else {
-        if (response.status) {
-          // 涓�娆¤姹傛垚鍔燂紝杩涜涓嬩竴椤硅姹�
-
-          if (params.length === 0) {
-            this.execSuccess(btn, response)
-            _resolve()
-          } else {
-            this.outerLoopRequest(params, btn, _resolve)
-          }
-        } else {
-          this.execError(response, btn)
-          _resolve()
-        }
-      }
-    }).then(res => {
-      if (!res) return
-
-      if (res.status) {
-        if (params.length === 0) {
-          this.execSuccess(btn, res)
-          _resolve()
-        } else {
-          this.outerLoopRequest(params, btn, _resolve)
-        }
-      } else {
-        this.execError(res, btn)
-        _resolve()
-      }
-    })
   }
 
   /**
@@ -418,12 +244,8 @@
    * 4銆佹ā鎬佹鎵ц鎴愬姛鍚庢槸鍚﹀叧闂�
    * 5銆侀�氱煡涓诲垪琛ㄥ埛鏂�
    */
-  execSuccess = (btn, res) => {
-    if (btn.OpenType === 'excelOut') { // 瀵煎嚭excel
-      this.setState({
-        loadingUuid: ''
-      })
-    } else if (res && res.ErrCode === 'S') { // 鎵ц鎴愬姛
+  execSuccess = (btn, res, primaryId) => {
+    if (res && res.ErrCode === 'S') { // 鎵ц鎴愬姛
       notification.success({
         top: 92,
         message: res.ErrMesg || this.props.dict['main.action.confirm.success'],
@@ -433,7 +255,7 @@
 
     }
 
-    this.props.refreshdata(btn, 'success')
+    this.props.refreshdata(btn, 'success', primaryId)
   }
 
   /**

--
Gitblit v1.8.0