From ee32a69f9a7f25c37757325dc28ac7b5127dceca Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 15 十月 2019 22:23:36 +0800
Subject: [PATCH] datamanage-update

---
 src/tabviews/datamanage/modules/action/index.jsx |  379 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 311 insertions(+), 68 deletions(-)

diff --git a/src/tabviews/datamanage/modules/action/index.jsx b/src/tabviews/datamanage/modules/action/index.jsx
index bcfedc3..84b092d 100644
--- a/src/tabviews/datamanage/modules/action/index.jsx
+++ b/src/tabviews/datamanage/modules/action/index.jsx
@@ -1,8 +1,9 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
-// import { is, fromJS } from 'immutable'
+import {connect} from 'react-redux'
 import { Button, Affix, Modal, notification } from 'antd'
 import MutilForm from '@/components/mutilform'
+import {modifyTabview} from '@/store/action'
 import Api from '@/api'
 import './index.scss'
 
@@ -10,102 +11,314 @@
 
 class MainAction extends Component {
   static propTpyes = {
-    MenuNo: PropTypes.string,
+    MenuNo: PropTypes.string, // 鑿滃崟鍙傛暟
+    columns: PropTypes.array, // 鏄剧ず鍒楃敤浜庤〃鍗曞垪
     actions: PropTypes.array, // 鎼滅储鏉′欢鍒楄〃
-    dict: PropTypes.object // 瀛楀吀椤�
+    dict: PropTypes.object, // 瀛楀吀椤�
+    mainKey: PropTypes.array
   }
 
   state = {
-    visible: false,
-    formdata: null,
-    tabledata: null,
-    confirmLoading: false,
-    execAction: null
+    visible: false, // 寮圭獥鏄惁鏄剧ず
+    formdata: null, // 琛ㄥ崟鏄剧ず鍒楁暟鎹�
+    tabledata: null, // 鍒楄〃閫夋嫨鏁版嵁
+    confirmLoading: false, // 纭涓�
+    execAction: null, // 鎵ц鎸夐挳灞炴��
+    primarykey: null, // 涓婚敭
+    bidkey: null, // BID
+    defaultproc: { // 榛樿娣诲姞銆佷慨鏀广�佸垹闄ゅ瓨鍌ㄨ繃绋�
+      Add: 'sDataManageAdd',
+      Update: 'sDataManageUpt',
+      Delete: 'sDataManageDel'
+    }
   }
   
-  refreshdata = () => {
-    this.props.refreshdata()
+  submitaction = (action, datalist, primarykey, bidkey) => {
+    if (action.Ot === 'requiredSgl' || action.Ot === 'requiredOnce') { // 閫夋嫨鍗曡鎴栧琛宨d鎷兼帴鎵ц
+      let ids = datalist.map(data => {
+        return data[primarykey]
+      })
+      let bids = null
+      if (bidkey) {
+        bids = datalist.map(data => {
+          return data[bidkey] || ''
+        })
+      }
+      return Api.submitInterface({
+        func: action.AuditProc || this.state.defaultproc[action.Action],
+        ID: ids.join(','), // 涓婚敭瀛楁
+        BID: bids ? bids.join(',') : '' // BID瀛楁
+      })
+    } else if (action.Ot === 'required') { // 鍙�夊琛岋紝寰幆鎵ц
+      let deffers = datalist.map(data => {
+        return new Promise((resolve, reject) => {
+          Api.submitInterface({
+            func: action.AuditProc || this.state.defaultproc[action.Action],
+            ID: data[primarykey], // 涓婚敭瀛楁
+            BID: data[bidkey] || '' // BID瀛楁
+          }).then(res => {
+            resolve(res)
+          })
+        })
+      })
+      return Promise.all(deffers)
+    } else { // 涓嶉�夎
+      return Api.submitInterface({
+        func: action.AuditProc || this.state.defaultproc[action.Action],
+        ID: '', // 涓婚敭瀛楁
+        BID: '' // BID瀛楁
+      })
+    }
   }
   actionTrigger = (item) => {
     let _this = this
-    let data = this.props.gettableselected() || []
-    if (item.Ot === 'required' && data.length === 0) {
+    let datalist = this.props.gettableselected() || []
+
+    /************* 鏍¢獙鍒楄〃鏁版嵁閫夋嫨鏄惁姝g‘ **************/
+
+    if ((item.Ot === 'requiredSgl' || item.Ot === 'required' || item.Ot === 'requiredOnce') && datalist.length === 0) {
       // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹�
       notification.warning({
         top: 92,
-        message: this.props.dict['main.action.confirm.selectline']
+        message: this.props.dict['main.action.confirm.selectline'],
+        duration: 10
       })
       return
-    } else if (item.Ot === 'pop' && data.length !== 1) {
-      if (data.length === 0) {
-        // 闇�瑕侀�夋嫨琛屾椂锛屾牎楠屾暟鎹�
+    } else if (item.Ot === 'requiredSgl' && datalist.length > 1) {
+      // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁
+      notification.warning({
+        top: 92,
+        message: this.props.dict['main.action.confirm.selectSingleLine'],
+        duration: 10
+      })
+      return
+    }
+
+    /************* 鏍¢獙涓婚敭涓嶣ID **************/
+    let ID = []
+    let BID = []
+    if (item.Ot === 'requiredSgl' || item.Ot === 'required' || item.Ot === 'requiredOnce') {
+      this.props.mainKey.forEach(key => {
+        if (key.IDField === '1') {
+          ID.push(key.FieldName)
+        } else {
+          BID.push(key.FieldName)
+        }
+      })
+  
+      if (ID.length === 0) { // 涓婚敭鏍¢獙
         notification.warning({
           top: 92,
-          message: this.props.dict['main.action.confirm.selectline']
+          message: this.props.dict['main.action.primarykey.required'],
+          duration: 10
         })
         return
-      } else {
-        // 闇�瑕侀�夋嫨鍗曡鏃讹紝鏍¢獙鏁版嵁
+      } else if (ID.length > 1) {
         notification.warning({
           top: 92,
-          message: this.props.dict['main.action.confirm.selectSingleLine']
+          message: this.props.dict['main.action.primarykey.repetition'],
+          duration: 10
+        })
+        return
+      }
+  
+      if (BID.length > 1) { // BID鏍¢獙
+        notification.warning({
+          top: 92,
+          message: this.props.dict['main.action.primarykey.repetitionbid'],
+          duration: 10
         })
         return
       }
     }
 
-    if (item.Action === 'Prompt' || item.Action === 'Delete') {
+    /********************* 鎿嶄綔澶勭悊 **********************/
+
+    if (item.OpenType === 'prompt') { // 纭妗�
       confirm({
         title: this.props.dict['main.action.confirm.tip'],
         onOk() {
-          return Api.setActionSubmit({
-            func: 'SetActionSubmitSuccess'
-            // func: 'SetActionSubmitError'
-          }).then((res) => {
-            if (res.status) {
-              notification.success({
-                top: 92,
-                message: _this.props.dict['main.action.confirm.success']
-                // duration: 0
-                // description:
-              })
-              _this.refreshdata()
-            } else {
-              notification.error({
-                top: 92,
-                message: res.message
-              })
-            }
-          })
+          return _this.submitaction(item, datalist, ID[0], (BID.length === 1 ? BID[0] : ''))
+            .then(res => {
+              if (Array.isArray(res)) {
+                let iserror = false
+                res.forEach(result => {
+                  if (!result.status && !iserror) {
+                    notification.error({
+                      top: 92,
+                      message: result.message,
+                      duration: 15
+                    })
+                    iserror = true
+                  }
+                })
+                if (!iserror) {
+                  notification.success({
+                    top: 92,
+                    message: _this.props.dict['main.action.confirm.success']
+                  })
+                  if (item.ReloadForm && item.ReloadForm !== 'false' && item.ReloadForm !== 'singlegrid') {
+                    _this.props.refreshdata(item.ReloadForm)
+                  }
+                }
+              } else {
+                if (res.status) {
+                  notification.success({
+                    top: 92,
+                    message: _this.props.dict['main.action.confirm.success']
+                  })
+                  if (item.ReloadForm && item.ReloadForm !== 'false' && item.ReloadForm !== 'singlegrid') {
+                    _this.props.refreshdata(item.ReloadForm)
+                  }
+                } else {
+                  notification.error({
+                    top: 92,
+                    message: res.message,
+                    duration: 15
+                  })
+                }
+              }
+            })
         },
         onCancel() {}
       })
-    } else if (item.Action === 'Update') {
-      Api.getModelFormData(item.MenuID).then(res => {
-        if (res.status) {
-          this.setState({
-            formdata: res.data.map(input => {
-              let validate = input.Validate && JSON.parse(input.Validate)
-              input.DynOptions = JSON.parse(input.DynOptions)
-              input.required = (validate && validate.required) || false
-              return input
-            }),
-            visible: true,
-            execAction: item,
-            tabledata: data[0]
-          })
+    } else if (item.OpenType === 'execproc') { // 鐩存帴鎵ц
+      this.submitaction(item, datalist, ID[0], (BID.length === 1 ? BID[0] : ''))
+        .then(res => {
+          if (Array.isArray(res)) {
+            let iserror = false
+            res.forEach(result => {
+              if (!result.status && !iserror) {
+                notification.error({
+                  top: 92,
+                  message: result.message,
+                  duration: 15
+                })
+                iserror = true
+              }
+            })
+            if (!iserror) {
+              notification.success({
+                top: 92,
+                message: this.props.dict['main.action.confirm.success']
+              })
+              if (item.ReloadForm && item.ReloadForm !== 'false' && item.ReloadForm !== 'singlegrid') {
+                this.props.refreshdata(item.ReloadForm)
+              }
+            }
+          } else {
+            if (res.status) {
+              notification.success({
+                top: 92,
+                message: this.props.dict['main.action.confirm.success']
+              })
+              if (item.ReloadForm && item.ReloadForm !== 'false' && item.ReloadForm !== 'singlegrid') {
+                this.props.refreshdata(item.ReloadForm)
+              }
+            } else {
+              notification.error({
+                top: 92,
+                message: res.message,
+                duration: 15
+              })
+            }
+          }
+        })
+    } else if (item.OpenType === 'newpage') { // 鎵撳紑鏂伴〉闈�
+      let src = '#/' + item.LinkUrl + '?param=' + window.btoa(JSON.stringify({UserId: sessionStorage.getItem('UserID'), ID: datalist[0][ID[0]], BID: BID.length === 1 ? datalist[0][BID[0]] : ''}))
+      window.open(src)
+    } else if (item.OpenType === 'pop') {
+      this.setState({
+        formdata: this.props.columns.map(column => {
+          column.readonly = false
+          if (column.ReadOnly.includes(item.MenuID)) {
+            column.readonly = true
+          }
+          return column
+        }),
+        visible: true,
+        execAction: item,
+        primarykey: ID[0],
+        bidkey: BID.length === 1 ? BID[0] : '',
+        tabledata: datalist[0] || ''
+      })
+    } else if (item.OpenType === 'tab') {
+      let menu = {
+        MenuNo: this.props.MenuNo,
+        MenuID: item.MenuID,
+        MenuName: item.MenuName,
+        type: 'TabForm',
+        param: {
+          formdata: this.props.columns.map(column => {
+            column.readonly = false
+            if (column.ReadOnly.includes(item.MenuID)) {
+              column.readonly = true
+            }
+            return column
+          }),
+          execAction: item,
+          primarykey: ID[0],
+          bidkey: BID.length === 1 ? BID[0] : '',
+          tabledata: datalist[0] || '',
+          defaultproc: this.state.defaultproc,
+          dict: this.props.dict
         }
+      }
+      let tabs = JSON.parse(JSON.stringify(this.props.tabviews))
+      let _index = null
+      let isexit = false
+      tabs = tabs.map((tab, index) => {
+        tab.selected = false
+        if (tab.MenuNo === this.props.MenuNo && tab.MenuID === item.MenuID) {
+          isexit = true
+          tab.selected = true
+          tab.param = menu.param
+        } else if (tab.MenuNo === this.props.MenuNo && tab.type !== 'TabForm') {
+          _index = index
+          menu.MenuName = tab.MenuName + '-' + menu.MenuName
+          menu.selected = true
+        }
+        return tab
+      })
+      if (!isexit) {
+        tabs.splice(_index + 1, 0, menu)
+      }
+      this.props.modifyTabview(tabs)
+    } else if (item.OpenType === 'blank') {
+      this.props.switchview(item)
+    } else {
+      notification.warning({
+        top: 92,
+        message: this.props.dict['main.action.settingerror'],
+        duration: 10
       })
     }
   }
 
+  changemenu(e) {
+    let menu = {}
+    let tabs = JSON.parse(JSON.stringify(this.props.tabviews))
+    tabs = tabs.filter(tab => {
+      tab.selected = false
+      return tab.MenuID !== menu.MenuID
+    })
+    menu.selected = true
+    tabs.push(menu)
+    this.props.modifyTabview(tabs)
+  }
+
   getModels = () => {
+    if (!this.state.execAction) return
+    let cols = +this.state.execAction.FormLineQty
+    if (![1, 2, 3].includes(cols)) {
+      cols = 2
+    }
     return (
       <Modal
         wrapClassName='action-modal'
-        title={(this.state.execAction && this.state.execAction.MenuName) || ''}
+        title={this.state.execAction.MenuName || ''}
         visible={this.state.visible}
-        width={(this.state.execAction && +this.state.execAction.PopWidth) || 520}
+        width={document.body.clientWidth * this.state.execAction.PopWidth}
         onOk={this.handleOk}
         confirmLoading={this.state.confirmLoading}
         onCancel={this.handleCancel}
@@ -115,6 +328,7 @@
             dict={this.props.dict}
             formlist={this.state.formdata}
             data={this.state.tabledata}
+            cols={cols}
             wrappedComponentRef={(inst) => this.formRef = inst}
           />}
       </Modal>
@@ -126,11 +340,25 @@
       this.setState({
         confirmLoading: true
       })
-      console.log(res)
-      Api.setActionSubmit({
-        func: 'SetActionSubmitSuccess'
-      }).then((res) => {
-        if (res.status) {
+      let values = []
+      this.props.columns.forEach(column => {
+        let value = ''
+        if (res[column.FieldName] || res[column.FieldName] === 0) { // 渚濇閫夊彇琛ㄥ崟鍊笺�佽〃鏍兼暟鎹�笺�佸垵濮嬪��
+          value = res[column.FieldName]
+        } else if (this.state.tabledata && this.state.tabledata[column.FieldName]) {
+          value = this.state.tabledata[column.FieldName]
+        } else if (column.InitVal) {
+          value = column.InitVal
+        }
+        values.push(value)
+      })
+      Api.submitInterface({
+        func: this.state.execAction.AuditProc || this.state.defaultproc[this.state.execAction.Action],
+        AddLongText: values.join(','), // 琛ㄥ崟鏁版嵁
+        ID: (this.state.tabledata && this.state.primarykey) ? this.state.tabledata[this.state.primarykey] : '', // 涓婚敭瀛楁
+        BID: (this.state.tabledata && this.state.bidkey) ? this.state.tabledata[this.state.bidkey] : '' // BID瀛楁
+      }).then(result => {
+        if (result.status) {
           notification.success({
             top: 92,
             message: this.props.dict['main.action.confirm.success']
@@ -139,10 +367,17 @@
             confirmLoading: false,
             visible: false
           })
+          if (this.state.execAction.ReloadForm && this.state.execAction.ReloadForm !== 'false' && this.state.execAction.ReloadForm !== 'singlegrid') {
+            this.props.refreshdata(this.state.execAction.ReloadForm)
+          }
         } else {
+          this.setState({
+            confirmLoading: false
+          })
           notification.error({
             top: 92,
-            message: res.message
+            message: result.message,
+            duration: 15
           })
         }
       })
@@ -151,6 +386,7 @@
 
   handleCancel = () => {
     this.setState({
+      confirmLoading: false,
       visible: false
     })
     this.formRef.handleReset()
@@ -159,11 +395,6 @@
   UNSAFE_componentWillMount () {
 
   }
-
-  // shouldComponentUpdate (nextProps, nextState) {
-  //   console.log(!is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState)))
-  //   return true
-  // }
 
   render() {
     return (
@@ -186,4 +417,16 @@
   }
 }
 
-export default MainAction
\ No newline at end of file
+const mapStateToProps = (state) => {
+  return {
+    tabviews: state.tabviews
+  }
+}
+
+const mapDispatchToProps = (dispatch) => {
+  return {
+    modifyTabview: (tabviews) => dispatch(modifyTabview(tabviews))
+  }
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(MainAction)
\ No newline at end of file

--
Gitblit v1.8.0