From bd1dfc9e6c9b9f8076ca2783ce598e0936b4c664 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 22 十二月 2021 14:36:03 +0800
Subject: [PATCH] 2021-12-22

---
 src/tabviews/zshare/actionList/normalbutton/index.jsx |  270 +++++++++++++++++++++++++++++++++--------------------
 1 files changed, 167 insertions(+), 103 deletions(-)

diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index 0bf6a30..ba6f77f 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -3,7 +3,7 @@
 import moment from 'moment'
 import {connect} from 'react-redux'
 import { is, fromJS } from 'immutable'
-import { Button, Modal, notification, message, Drawer, Icon } from 'antd'
+import { Button, Modal, notification, message, Drawer } from 'antd'
 
 import Api from '@/api'
 import Utils, { getSysDefaultSql } from '@/utils/utils.js'
@@ -13,7 +13,8 @@
 import asyncSpinComponent from '@/utils/asyncSpinComponent'
 import { updateForm } from '@/utils/utils-update.js'
 import MKEmitter from '@/utils/events.js'
-import './index.scss'
+import MkIcon from '@/components/mk-icon'
+// import './index.scss'
 
 const MutilForm = asyncSpinComponent(() => import('@/tabviews/zshare/mutilform'))
 const { confirm } = Modal
@@ -37,13 +38,15 @@
     dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
     visible: false,
     formdata: null,
-    tabledata: null,
+    selines: null,
     confirmLoading: false,
     btnconfig: null,
     loading: false,
     loadingNumber: '',
     disabled: false,
-    checkParam: null
+    hidden: false,
+    checkParam: null,
+    autoMatic: false
   }
 
   moduleParams = null
@@ -59,7 +62,7 @@
           disabled = true
         }
       })
-      this.setState({disabled})
+      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
     }
   }
 
@@ -68,13 +71,17 @@
   }
 
   componentDidMount () {
-    const { position } = this.props
+    const { position, btn } = this.props
 
     MKEmitter.addListener('triggerBtnId', this.actionTrigger)
     if (position === 'form') {
       MKEmitter.addListener('triggerFormSubmit', this.actionSubmit)
     }
     MKEmitter.addListener('returnModuleParam', this.resetModuleParam)
+
+    if (btn.autoMatic) {
+      MKEmitter.addListener('triggerBtnPopSubmit', this.triggerBtnPopSubmit)
+    }
   }
 
   UNSAFE_componentWillReceiveProps (nextProps) {
@@ -91,7 +98,7 @@
           }
         })
       }
-      this.setState({disabled})
+      this.setState({disabled, hidden: disabled && btn.control === 'hidden'})
     }
   }
 
@@ -102,6 +109,15 @@
     MKEmitter.removeListener('triggerBtnId', this.actionTrigger)
     MKEmitter.removeListener('triggerFormSubmit', this.actionSubmit)
     MKEmitter.removeListener('returnModuleParam', this.resetModuleParam)
+    MKEmitter.removeListener('triggerBtnPopSubmit', this.triggerBtnPopSubmit)
+  }
+
+  triggerBtnPopSubmit = (id) => {
+    const { btn } = this.props
+
+    if (btn.uuid !== id) return
+
+    this.handleOk()
   }
 
   actionSubmit = (res) => {
@@ -109,11 +125,9 @@
 
     if (btn.uuid !== res.menuId) return
 
-    this.setState({
-      loading: true
-    })
+    this.setState({ loading: true })
 
-    this.execSubmit(this.state.tabledata, () => {}, res.form)
+    this.execSubmit(this.state.selines, () => {}, res.form)
   }
 
   resetModuleParam = (menuId, btnId, param) => {
@@ -127,17 +141,12 @@
   /**
    * @description 鎸夐挳鐘舵�佹敼鍙�
    */
-  updateStatus = (type) => {
-    if (type === 'start') {
-      this.setState({
-        loading: true
-      })
-    } else if (type === 'over') {
-      this.setState({
-        loading: false,
-        visible: false
-      })
-    }
+  updateStatus = () => {
+    this.setState({
+      loading: false,
+      visible: false,
+      confirmLoading: false
+    })
   }
   
   /**
@@ -145,9 +154,9 @@
    */
   actionTrigger = (triggerId, record, type) => {
     const { Tab, BID, btn, selectedData, setting } = this.props
-    const { loading } = this.state
+    const { loading, disabled } = this.state
 
-    if ((triggerId && btn.uuid !== triggerId) || loading) return
+    if ((triggerId && btn.uuid !== triggerId) || loading || disabled) return
 
     if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
       notification.warning({
@@ -161,6 +170,8 @@
         return
       }
     }
+
+    this.setState({autoMatic: type === 'autoMatic'})
 
     let _this = this
     let data = record || selectedData || []
@@ -235,14 +246,15 @@
       return
     }
 
+    this.setState({
+      selines: data
+    })
+    
     if (btn.OpenType === 'formSubmit') {
-      this.setState({
-        tabledata: data
-      })
       MKEmitter.emit('mkFormSubmit', btn.uuid)
       return
     } else if (btn.OpenType === 'prompt') {
-      this.updateStatus('start')
+      this.setState({loading: true})
       confirm({
         title: this.state.dict['main.action.confirm.tip'],
         onOk() {
@@ -251,22 +263,20 @@
           })
         },
         onCancel() {
-          _this.updateStatus('over')
+          _this.setState({loading: false})
         }
       })
     } else if (btn.OpenType === 'exec') {
-      this.updateStatus('start')
+      this.setState({loading: true})
       this.execSubmit(data, () => { this.setState({loading: false})})
     } else if (btn.OpenType === 'pop') {
-      this.updateStatus('start')
-
       let modal = this.state.btnconfig
       if (!modal && btn.modal) {
         modal = this.handleModelConfig(btn.modal)
       }
 
       this.setState({
-        tabledata: data,
+        loading: true,
         btnconfig: modal
       }, () => {
         this.improveAction()
@@ -672,7 +682,18 @@
   }
 
   execRealSubmit = (data, _resolve, formdata) => {
-    const { setting, btn } = this.props
+    const { setting, btn, Tab, BID } = this.props
+
+    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+      notification.warning({
+        top: 92,
+        message: '闇�瑕佷笂绾т富閿�硷紒',
+        duration: 5
+      })
+      _resolve()
+      return
+    }
+
     if (btn.intertype === 'system' || btn.intertype === 'inner') { // 绯荤粺鎺ュ彛
       let params = []
 
@@ -700,19 +721,21 @@
                   delete _param.ErrMesg
                   delete _param.message
 
-                  Api.genericInterface(_param).then(result => {
-                    if (!result.status) {
-                      notification.warning({
-                        top: 92,
-                        message: result.message,
-                        duration: 5
-                      })
-                    }
-                  })
+                  setTimeout(() => {
+                    Api.genericInterface(_param).then(result => {
+                      if (!result.status) {
+                        notification.warning({
+                          top: 92,
+                          message: result.message,
+                          duration: 5
+                        })
+                      }
+                    })
+                  }, 600)
                 }
                 resolve(res)
               }, () => {
-                this.updateStatus('over')
+                this.updateStatus()
                 _resolve()
               })
             }, 100 * i)
@@ -867,7 +890,7 @@
                 }
                 resolve()
               }, () => {
-                _this.updateStatus('over')
+                _this.updateStatus()
                 resolve()
                 _resolve()
               })
@@ -884,7 +907,7 @@
         _resolve()
       }
     }, () => {
-      this.updateStatus('over')
+      this.updateStatus()
       _resolve()
     })
   }
@@ -1136,7 +1159,7 @@
         _resolve()
       }
     }, () => {
-      this.updateStatus('over')
+      this.updateStatus()
       _resolve()
     })
   }
@@ -1168,15 +1191,17 @@
           delete _param.ErrMesg
           delete _param.message
   
-          Api.genericInterface(_param).then(result => {
-            if (!result.status) {
-              notification.warning({
-                top: 92,
-                message: result.message,
-                duration: 5
-              })
-            }
-          })
+          setTimeout(() => {
+            Api.genericInterface(_param).then(result => {
+              if (!result.status) {
+                notification.warning({
+                  top: 92,
+                  message: result.message,
+                  duration: 5
+                })
+              }
+            })
+          }, 600)
         }
         if (params.length === 0) {
           this.execSuccess(res)
@@ -1189,7 +1214,7 @@
         _resolve()
       }
     }, () => {
-      this.updateStatus('over')
+      this.updateStatus()
       _resolve()
     })
   }
@@ -1242,7 +1267,7 @@
             _resolve()
           }
         }, () => {
-          this.updateStatus('over')
+          this.updateStatus()
           _resolve()
         })
       } else {
@@ -1348,9 +1373,9 @@
    */
   execSuccess = (res) => {
     const { btn } = this.props
-    const { btnconfig } = this.state
+    const { btnconfig, autoMatic } = this.state
 
-    if (res && res.ErrCode === 'S') { // 鎵ц鎴愬姛
+    if ((res && res.ErrCode === 'S') || autoMatic) { // 鎵ц鎴愬姛
       notification.success({
         top: 92,
         message: res.ErrMesg || this.state.dict['main.action.confirm.success'],
@@ -1364,7 +1389,14 @@
 
     }
     
-    if (btn.OpenType !== 'pop' || !btnconfig || btnconfig.setting.finish !== 'unclose') {
+    if (autoMatic) {
+      this.setState({
+        loading: false,
+        visible: false
+      })
+      MKEmitter.emit('autoExecOver', btn.uuid, 'success')
+      return
+    } else if (btn.OpenType !== 'pop' || !btnconfig || btnconfig.setting.finish !== 'unclose') {
       this.setState({
         loading: false,
         visible: false
@@ -1382,8 +1414,10 @@
 
     if (btn.execSuccess === 'closetab') {
       MKEmitter.emit('closeTabView', btn.$MenuID)
+    } else if (btn.execSuccess === 'closepoptab') {
+      MKEmitter.emit('popclose')
     } else if (btn.execSuccess !== 'never') {
-      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execSuccess, btn, id)
+      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execSuccess, btn, id, this.state.selines)
     }
 
     if (btn.refreshTab && btn.refreshTab.length > 0) {
@@ -1530,13 +1564,13 @@
    */
   execError = (res) => {
     const { btn } = this.props
-    const { btnconfig } = this.state
+    const { btnconfig, autoMatic } = this.state
 
-    if (res.ErrCode === 'E') {
+    if (res.ErrCode === 'E' && !autoMatic) {
       Modal.error({
         title: res.message || res.ErrMesg,
       })
-    } else if (res.ErrCode === 'N') {
+    } else if (res.ErrCode === 'N' || autoMatic) {
       notification.error({
         top: 92,
         message: res.message || res.ErrMesg,
@@ -1551,6 +1585,16 @@
       })
     } else if (res.ErrCode === 'NM') {
       message.error(res.message || res.ErrMesg)
+    }
+
+    if (autoMatic) {
+      this.setState({
+        loading: false,
+        loadingNumber: '',
+        visible: false
+      })
+      MKEmitter.emit('autoExecOver', btn.uuid, 'error')
+      return
     }
     
     this.setState({
@@ -1587,7 +1631,7 @@
               visible: false
             })
             if (btn.execError !== 'never') {
-              MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn)
+              MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn, '', this.state.selines)
             }
           }
         })
@@ -1604,8 +1648,10 @@
       MKEmitter.emit('mkFC', 'focus', btnconfig.setting.errFocus)
     }
 
-    if (btn.execError !== 'never') {
-      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn)
+    if (btn.execError === 'closepoptab') {
+      MKEmitter.emit('popclose')
+    } else if (btn.execError !== 'never') {
+      MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn, '', this.state.selines)
     }
   }
 
@@ -1648,10 +1694,10 @@
    */
   improveAction = () => {
     const { btn } = this.props
-    const { btnconfig } = this.state
+    const { btnconfig, autoMatic } = this.state
 
     if (btnconfig) {
-      if (btnconfig.setting.display === 'prompt') { // 濡傛灉琛ㄥ崟浠ユ槸鍚︽灞曠ず
+      if (!autoMatic && (btnconfig.setting.display === 'prompt' || btnconfig.setting.display === 'exec')) { // 濡傛灉琛ㄥ崟浠ユ槸鍚︽灞曠ず
         this.modelconfirm()
       } else {
         this.setState({
@@ -1680,14 +1726,14 @@
             message: res.message,
             duration: 5
           })
-          this.updateStatus('over')
+          this.setState({ loading: false })
         } else if (!_LongParam || (btn.OpenType === 'pop' && _LongParam.type !== 'Modal')) {
           notification.warning({
             top: 92,
             message: '鏈幏鍙栧埌鎸夐挳閰嶇疆淇℃伅锛�',
             duration: 5
           })
-          this.updateStatus('over')
+          this.setState({ loading: false })
         } else {
           _LongParam = updateForm(_LongParam)
           _LongParam = this.handleModelConfig(_LongParam)
@@ -1695,7 +1741,7 @@
           this.setState({
             btnconfig: _LongParam
           }, () => {
-            if (_LongParam.setting.display === 'prompt') { // 濡傛灉琛ㄥ崟浠ユ槸鍚︽灞曠ず
+            if (!autoMatic && (_LongParam.setting.display === 'prompt' || _LongParam.setting.display === 'exec')) { // 濡傛灉琛ㄥ崟浠ユ槸鍚︽灞曠ず
               this.modelconfirm()
             } else {
               this.setState({
@@ -1712,16 +1758,11 @@
    * @description 妯℃�佹锛堣〃鍗曪級锛岀‘璁�
    */
   handleOk = () => {
+    if (!this.formRef) return
     this.formRef.handleConfirm().then(res => {
-      this.setState({
-        confirmLoading: true
-      })
+      this.setState({ confirmLoading: true })
 
-      this.execSubmit(this.state.tabledata, () => {
-        this.setState({
-          confirmLoading: false
-        })
-      }, res)
+      this.execSubmit(this.state.selines, () => { this.setState({ confirmLoading: false }) }, res)
     })
   }
 
@@ -1730,15 +1771,15 @@
    */
   handleCancel = () => {
     this.setState({
+      loading: false,
       visible: false,
       confirmLoading: false
     })
-    this.updateStatus('over')
   }
 
   modelconfirm = () => {
     const { BData } = this.props
-    const { btnconfig, tabledata } = this.state
+    const { btnconfig, selines } = this.state
     let _this = this
 
     let result = []
@@ -1753,8 +1794,8 @@
 
       if (item.type === 'linkMain' && BData && BData.hasOwnProperty(item.field)) {
         _initval = BData[item.field]
-      } else if (_readin && tabledata[0] && tabledata[0].hasOwnProperty(item.field)) {
-        _initval = tabledata[0][item.field]
+      } else if (_readin && selines[0] && selines[0].hasOwnProperty(item.field)) {
+        _initval = selines[0][item.field]
       } else if (item.type === 'date' && _initval) {
         _initval = moment().subtract(_initval, 'days').format('YYYY-MM-DD')
       } else if (item.type === 'datemonth' && _initval) {
@@ -1778,6 +1819,24 @@
 
       if (['date', 'datemonth', 'datetime'].includes(_type) && item.declareType === 'nvarchar(50)') {
         _type = 'text'
+      } else if (item.type === 'rate') {
+        item.rateCount = item.rateCount || 5
+        let allowHalf = item.allowHalf === 'true'
+
+        if (allowHalf) {
+          _initval = parseFloat(_initval)
+          if (_initval % 0.5 !== 0) {
+            _initval = parseInt(_initval)
+          }
+        } else {
+          _initval = parseInt(_initval)
+        }
+
+        if (isNaN(_initval) || _initval < 0) {
+          _initval = 0
+        } else if (_initval > item.rateCount) {
+          _initval = item.rateCount
+        }
       }
 
       result.push({
@@ -1791,17 +1850,21 @@
       })
     })
 
-    confirm({
-      title: this.state.dict['main.action.confirm.tip'],
-      onOk() {
-        return new Promise(resolve => {
-          _this.execSubmit(tabledata, resolve, result)
-        })
-      },
-      onCancel() {
-        _this.updateStatus('over')
-      }
-    })
+    if (btnconfig.setting.display === 'exec') {
+      this.execSubmit(selines, () => {}, result)
+    } else {
+      confirm({
+        title: this.state.dict['main.action.confirm.tip'],
+        onOk() {
+          return new Promise(resolve => {
+            _this.execSubmit(selines, resolve, result)
+          })
+        },
+        onCancel() {
+          _this.setState({ loading: false })
+        }
+      })
+    }
   }
 
   /**
@@ -1841,11 +1904,11 @@
             menuType={this.props.menuType}
             action={btnconfig}
             inputSubmit={this.handleOk}
-            data={this.state.tabledata[0]}
+            data={this.state.selines[0]}
             BData={BData}
             wrappedComponentRef={(inst) => this.formRef = inst}
           />
-          <div style={{ position: 'absolute', zIndex: 1, right: 0, bottom: 0, width: '100%', borderTop: '1px solid #e9e9e9', padding: '10px 16px', background: '#fff', textAlign: 'right'}}>
+          <div className="ant-drawer-footer" style={{ position: 'absolute', zIndex: 1, right: 0, bottom: 0, width: '100%', borderTop: '1px solid #e9e9e9', padding: '10px 16px', background: '#fff', textAlign: 'right'}}>
             <Button onClick={this.handleCancel} style={{ marginRight: 8 }}>
               {btnconfig.setting.formType !== 'check' ? '鍙栨秷' : '鍏抽棴'}
             </Button>
@@ -1884,7 +1947,7 @@
             menuType={this.props.menuType}
             action={btnconfig}
             inputSubmit={this.handleOk}
-            data={this.state.tabledata[0]}
+            data={this.state.selines[0]}
             BData={BData}
             wrappedComponentRef={(inst) => this.formRef = inst}
           />
@@ -1895,7 +1958,9 @@
 
   render() {
     const { btn, show, style } = this.props
-    const { loadingNumber, loading, disabled } = this.state
+    const { loadingNumber, loading, disabled, hidden } = this.state
+
+    if (hidden) return null
 
     if (show === 'actionList') {
       return <div style={{display: 'inline-block'}} onClick={(e) => e.stopPropagation()}>
@@ -1910,7 +1975,7 @@
         {this.getModels()}
       </div>
     } else if (show && show.indexOf('plus') > -1) {
-      return <div className="mk-btn-wrap">
+      return <div style={{display: 'inline-block'}}>
         <Button
           type="link"
           loading={loading}
@@ -1928,11 +1993,10 @@
         label = btn.label
         icon = btn.icon || ''
       } else if (show === 'link') {
-        label = <span>{btn.label}{btn.icon ? <Icon style={{marginLeft: '8px'}} type={btn.icon}/> : ''}</span>
+        label = <span>{btn.label}{btn.icon ? <MkIcon style={{marginLeft: '8px'}} type={btn.icon}/> : ''}</span>
         icon = ''
       } else if (show === 'icon') {
         icon = btn.icon || ''
-      // } else if (show === 'text') {
       } else {
         label = btn.label
       }

--
Gitblit v1.8.0