From 316877c1d9e5b6d92334f30b03d97d7e833cd934 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 02 二月 2021 16:01:57 +0800
Subject: [PATCH] 2021-02-02

---
 src/tabviews/commontable/index.jsx |  254 ++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 222 insertions(+), 32 deletions(-)

diff --git a/src/tabviews/commontable/index.jsx b/src/tabviews/commontable/index.jsx
index 2139f68..73a85b8 100644
--- a/src/tabviews/commontable/index.jsx
+++ b/src/tabviews/commontable/index.jsx
@@ -8,8 +8,9 @@
 import zhCN from '@/locales/zh-CN/main.js'
 import enUS from '@/locales/en-US/main.js'
 import Utils from '@/utils/utils.js'
+import options from '@/store/options.js'
 import UtilsDM from '@/utils/utils-datamanage.js'
-import UtilsUpdate from '@/utils/utils-update.js'
+import { updateCommonTable } from '@/utils/utils-update.js'
 import asyncComponent from '@/utils/asyncComponent'
 import asyncSpinComponent from '@/utils/asyncSpinComponent'
 import MKEmitter from '@/utils/events.js'
@@ -64,6 +65,8 @@
     statFields: [],       // 鍚堣瀛楁
     statFValue: [],       // 鍚堣鍊�
     absFields: [],        // 缁濆鍊煎瓧娈�
+    loadCustomApi: true,  // 鍔犺浇澶栭儴璧勬簮
+    hasReqFields: false
   }
 
   /**
@@ -86,6 +89,7 @@
         config = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam)))
         config.MenuID = this.props.MenuID
         config.MenuName = MenuName
+        config.setting.MenuName = MenuName
       } catch (e) {
         console.warn('Parse Failure')
         config = ''
@@ -147,7 +151,7 @@
       }
 
       // 鐗堟湰鍏煎
-      config = UtilsUpdate.updateCommonTable(config)
+      config = updateCommonTable(config)
 
       // 鏉冮檺杩囨护
       if (this.props.menuType !== 'HS') {
@@ -210,7 +214,7 @@
       config.setting.execute = config.setting.default !== 'false'     // 榛樿sql鏄惁鎵ц锛岃浆涓篵oolean 缁熶竴鏍煎紡
       config.setting.customScript = ''                                // 鑷畾涔夎剼鏈�
 
-      if (config.setting.interType === 'system') {
+      if (config.setting.interType === 'system' || (config.setting.interType === 'custom' && config.setting.requestMode === 'system')) {
         if (config.setting.scripts && config.setting.scripts.length > 0) {
           let _customScript = ''
           config.setting.scripts.forEach(item => {
@@ -338,13 +342,13 @@
       }
 
       let valid = true // 鎼滅储鏉′欢蹇呭~楠岃瘉, 鍒濆鎼滅储鏉′欢, 濡傞�氳繃涓婄骇閫忚锛屽啓鍏ユ悳绱㈡潯浠�
-      let initSearch = config.search.map(item => {
-        let _item = fromJS(item).toJS()
-
-        if (_item.required === 'true' && !_item.initval) {
+      let hasReqFields = false
+      config.search.forEach(item => {
+        if (item.required !== 'true') return
+        if (!item.initval) {
           valid = false
         }
-        return _item
+        hasReqFields = true
       })
 
       this.setState({
@@ -360,11 +364,11 @@
         columns: _columns,
         arr_field: _arrField.join(','),
         BID: param && param.BID ? param.BID : '',
-        search: Utils.initMainSearch(initSearch) // 鎼滅储鏉′欢鍒濆鍖栵紙鍚湁鏃堕棿鏍煎紡锛岄渶瑕佽浆鍖栵級
+        search: Utils.initMainSearch(config.search), // 鎼滅储鏉′欢鍒濆鍖栵紙鍚湁鏃堕棿鏍煎紡锛岄渶瑕佽浆鍖栵級
+        hasReqFields
       }, () => {
         if (config.setting.onload !== 'false' && valid) { // 鍒濆鍖栧彲鍔犺浇
-          this.loadmaindata()
-          this.getStatFieldsValue()
+          this.loadData()
         }
         this.setShortcut()
       })
@@ -422,12 +426,13 @@
     }
   }
 
-  /**
-   * @description 涓昏〃鏁版嵁鍔犺浇
-   */ 
-  async loadmaindata () {
-    const { setting, arr_field, BIDs, search, orderBy, BID, pageIndex, pageSize, absFields } = this.state
-    let requireFields = search.filter(item => item.required && (!item.value || item.value.length === 0))
+  loadData = () => {
+    const { setting, search, BIDs, loadCustomApi, hasReqFields } = this.state
+    let requireFields = []
+
+    if (hasReqFields) {
+      requireFields = search.filter(item => item.required && (!item.value || item.value.length === 0))
+    }
 
     this.setState({
       selectedData: [],
@@ -448,7 +453,198 @@
         duration: 3
       })
       return
+    } else if (window.GLOB.systemType === 'production' && setting.interType === 'custom' && !setting.proInterface) {
+      notification.warning({
+        top: 92,
+        message: '鏈缃寮忕郴缁熷湴鍧�!',
+        duration: 3
+      })
+      return
     }
+
+    if (setting.interType === 'custom' && loadCustomApi) {
+      if (setting.execTime === 'once') {
+        this.setState({loadCustomApi: false})
+      }
+
+      this.loadOutResource()
+      if (setting.execType === 'async') {
+        this.loadmaindata()
+      }
+    } else {
+      this.loadmaindata()
+    }
+  }
+
+  loadOutResource = () => {
+    const { setting, search, BID } = this.state
+
+    let param = UtilsDM.getPrevQueryParams(setting, search, BID, this.props.menuType)
+
+    if (setting.execType === 'sync') {
+      this.setState({
+        loading: true
+      })
+    }
+
+    Api.genericInterface(param).then(res => {
+      if (res.status) {
+        if (res.mk_ex_invoke === 'false') {
+          this.loadmaindata()
+        } else {
+          this.customOuterRequest(res)
+        }
+      } else {
+        this.setState({
+          loading: false
+        })
+        notification.error({
+          top: 92,
+          message: res.message,
+          duration: 10
+        })
+      }
+    }, () => {
+      this.setState({
+        loading: false
+      })
+    })
+  }
+
+  customOuterRequest = (result) => {
+    const { setting } = this.state
+    let url = ''
+
+    if (window.GLOB.systemType === 'production') {
+      url = setting.proInterface
+    } else {
+      url = setting.interface
+    }
+
+    let mkey = result.mk_api_key || ''
+
+    delete result.mk_ex_invoke
+    delete result.status
+    delete result.message
+    delete result.ErrCode
+    delete result.ErrMesg
+    delete result.mk_api_key
+
+    let param = {}
+
+    Object.keys(result).forEach(key => {
+      key = key.replace(/^mk_/ig, '')
+      param[key] = result[key]
+    })
+
+    Api.directRequest(url, setting.method, param).then(res => {
+      if (typeof(res) !== 'object' || Array.isArray(res)) {
+        let error = '鏈煡鐨勮繑鍥炵粨鏋滐紒'
+
+        if (typeof(res) === 'string') {
+          error = res.replace(/'/ig, '"')
+        }
+
+        let _result = {
+          mk_api_key: mkey,
+          $ErrCode: 'E',
+          $ErrMesg: error
+        }
+
+        this.customCallbackRequest(_result)
+      } else {
+        res.mk_api_key = mkey
+        this.customCallbackRequest(res)
+      }
+    }, (e) => {
+      let _result = {
+        mk_api_key: mkey,
+        $ErrCode: 'E',
+        $ErrMesg: e && e.statusText ? e.statusText : ''
+      }
+
+      this.customCallbackRequest(_result)
+    })
+  }
+
+  customCallbackRequest = (result) => {
+    const { setting } = this.state
+    let errSql = ''
+    if (result.$ErrCode === 'E') {
+      errSql = `
+        set @ErrorCode='E'
+        set @retmsg='${result.$ErrMesg}'
+      `
+      delete result.$ErrCode
+      delete result.$ErrMesg
+    }
+
+    let lines = UtilsDM.getCallBackSql(setting, result)
+    let param = {}
+
+    if (setting.callbackType === 'script') { // 浣跨敤鑷畾涔夎剼鏈�
+      let sql = lines.map(item => (`
+        ${item.insert}
+        ${item.selects.join(` union all
+        `)}
+      `))
+      sql = sql.join('')
+      
+      param = UtilsDM.getCallBackQueryParams(setting, sql, errSql)
+
+      if (this.state.BID) {
+        param.BID = this.state.BID
+      }
+
+      if (this.props.menuType === 'HS') { // 鍑芥暟 sPC_TableData_InUpDe 浜戠楠岃瘉
+        param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
+      }
+    } else {
+      param.func = 's_ex_result_back'
+      param.s_ex_result = lines.map((item, index) => ({
+        MenuID: this.state.config.MenuID,
+        MenuName: this.state.config.MenuName,
+        TableName: item.table,
+        LongText: window.btoa(window.encodeURIComponent(`${item.insert}  ${item.selects.join(` union all `)}`)),
+        Sort: index + 1
+      }))
+
+      if ((window.GLOB.systemType !== 'production' && options.sysType !== 'cloud') || window.debugger === true) {
+        let sql = lines.map(item => (`
+          ${item.insert}
+          ${item.selects.join(` union all
+          `)}
+        `))
+        sql = sql.join('')
+        console.info(sql.replace(/\n\s{10}/ig, '\n'))
+      }
+    }
+
+    Api.genericInterface(param).then(res => {
+      if (res.status) {
+        this.loadmaindata()
+      } else {
+        this.setState({
+          loading: false
+        })
+        notification.error({
+          top: 92,
+          message: res.message,
+          duration: 10
+        })
+      }
+    }, () => {
+      this.setState({
+        loading: false
+      })
+    })
+  }
+
+  /**
+   * @description 涓昏〃鏁版嵁鍔犺浇
+   */ 
+  async loadmaindata () {
+    const { setting, arr_field, search, orderBy, BID, pageIndex, pageSize, absFields } = this.state
 
     this.setState({
       loading: true
@@ -462,6 +658,9 @@
     }
 
     let result = await Api.genericInterface(param)
+
+    this.getStatFieldsValue()
+    
     if (result.status) {
       this.setState({
         data: result.data.map((item, index) => {
@@ -567,12 +766,7 @@
   getStatFieldsValue = () => {
     const { setting, search, BID, orderBy, statFields } = this.state
 
-    if (statFields.length === 0 || setting.interType !== 'system' || !setting.dataresource) return
-
-    let requireFields = search.filter(item => item.required && (!item.value || item.value.length === 0))
-    if (requireFields.length > 0) {
-      return
-    }
+    if (statFields.length === 0 || !(setting.interType === 'system' || (setting.interType === 'custom' && setting.requestMode === 'system')) || !setting.dataresource) return
 
     let _orderBy = orderBy || setting.order
     let param = UtilsDM.getStatQueryDataParams(setting, statFields, search, _orderBy, BID, this.props.menuType)
@@ -627,8 +821,7 @@
         search: searches,
         setting: {...setting, onload: 'true'}
       }, () => {
-        this.loadmaindata()
-        this.getStatFieldsValue()
+        this.loadData()
       })
     } else {
       MKEmitter.emit('resetTable', this.props.MenuID + 'mainTable') // 鍒楄〃閲嶇疆
@@ -636,8 +829,7 @@
         pageIndex: 1,
         search: searches
       }, () => {
-        this.loadmaindata()
-        this.getStatFieldsValue()
+        this.loadData()
       })
     }
   }
@@ -659,7 +851,7 @@
       pageSize: pagination.pageSize,
       orderBy: (sorter.field && sorter.order) ? `${sorter.field} ${sorter.order}` : ''
     }, () => {
-      this.loadmaindata()
+      this.loadData()
     })
   }
 
@@ -672,13 +864,11 @@
       this.setState({
         pageIndex: 1
       }, () => {
-        this.loadmaindata()
-        this.getStatFieldsValue()
+        this.loadData()
       })
     } else {
       MKEmitter.emit('resetTable', this.props.MenuID + 'mainTable', 'false') // 鍒楄〃閲嶇疆
-      this.loadmaindata()
-      this.getStatFieldsValue()
+      this.loadData()
     }
   }
 

--
Gitblit v1.8.0