From 326aa6b3effaccc71cfe0775d47b0f29eb3695a6 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期日, 25 八月 2024 00:36:40 +0800
Subject: [PATCH] 2024-08-25

---
 src/menu/components/share/actioncomponent/index.jsx |  421 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 323 insertions(+), 98 deletions(-)

diff --git a/src/menu/components/share/actioncomponent/index.jsx b/src/menu/components/share/actioncomponent/index.jsx
index cbddcc2..c30f245 100644
--- a/src/menu/components/share/actioncomponent/index.jsx
+++ b/src/menu/components/share/actioncomponent/index.jsx
@@ -2,11 +2,11 @@
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
 import { Modal, notification, Button } from 'antd'
+import moment from 'moment'
 
-import Utils, { FuncUtils } from '@/utils/utils.js'
-import { getActionForm } from './formconfig'
+import Utils from '@/utils/utils.js'
+import { getActionForm, getBaseTableActionForm } from './formconfig'
 import asyncSpinComponent from '@/utils/asyncSpinComponent'
-
 import MKEmitter from '@/utils/events.js'
 import ActionForm from './actionform'
 import MenuUtils from '@/utils/utils-custom.js'
@@ -20,6 +20,7 @@
 const VerifyExcelIn = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelin'))
 const VerifyExcelOut = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelout'))
 const VerifyMegvii = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifymegvii'))
+const VerifyPay = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifypay'))
 
 class ActionComponent extends Component {
   static propTpyes = {
@@ -60,17 +61,9 @@
   }
 
   componentDidMount () {
+    MKEmitter.addListener('revertBtn', this.revertBtn)
     MKEmitter.addListener('addButton', this.addButton)
-  }
-
-  /**
-   * @description 鐩戝惉鍒版寜閽鍒舵椂锛岃Е鍙戞寜閽紪杈�
-   */
-  UNSAFE_componentWillReceiveProps (nextProps) {
-    const { actionlist } = this.state
-    if (!is(fromJS(nextProps.config.action), fromJS(this.props.config.action)) && !is(fromJS(nextProps.config.action), fromJS(actionlist))) {
-      this.setState({actionlist: fromJS(nextProps.config.action).toJS()})
-    }
+    MKEmitter.addListener('submitModal', this.handleSave)
   }
 
   shouldComponentUpdate (nextProps, nextState) {
@@ -84,7 +77,43 @@
     this.setState = () => {
       return
     }
+    MKEmitter.removeListener('revertBtn', this.revertBtn)
     MKEmitter.removeListener('addButton', this.addButton)
+    MKEmitter.removeListener('submitModal', this.handleSave)
+  }
+
+  revertBtn = (id) => {
+    if (id && id !== this.props.config.uuid) return
+
+    this.setState({
+      actionlist: fromJS(this.props.config.action).toJS()
+    })
+  }
+
+  handleSave = (componentId, btnId, modal) => {
+    const { config } = this.props
+
+    if (config.uuid !== componentId) return
+
+    const { actionlist } = this.state
+
+    let _index = actionlist.findIndex(cell => cell.uuid === btnId)
+
+    if (_index === -1) return
+
+    let _actionlist = actionlist.map(cell => {
+      if (cell.uuid === btnId) {
+        cell.modal = modal
+      }
+
+      return cell
+    })
+
+    this.setState({
+      actionlist: _actionlist
+    }, () => {
+      this.props.updateaction({...config, action: _actionlist})
+    })
   }
 
   getStyle = (style) => {
@@ -92,7 +121,17 @@
     const { card, actionlist } = this.state
 
     let _card = fromJS(card).toJS()
-    _card.style = style
+    _card.style = fromJS(style).toJS()
+
+    if (_card.style.paddingLeft === '15px') {
+      delete _card.style.paddingLeft
+    }
+    if (_card.style.paddingRight === '15px') {
+      delete _card.style.paddingRight
+    }
+    if (_card.style.minHeight === '28px') {
+      delete _card.style.minHeight
+    }
 
     let _actionlist = actionlist.map(cell => {
       if (cell.uuid === _card.uuid) return _card
@@ -108,7 +147,11 @@
 
   changeBtnStyle = (element) => {
     let _style = element.style ? fromJS(element.style).toJS() : {}
-    let options = ['font', 'border', 'background', 'margin', 'padding']
+    let options = ['font', 'border', 'background', 'margin', 'padding', 'minHeight']
+
+    _style.paddingLeft = _style.paddingLeft || '15px'
+    _style.paddingRight = _style.paddingRight || '15px'
+    _style.minHeight = _style.minHeight || '28px'
 
     this.setState({
       card: element
@@ -120,6 +163,8 @@
   addButton = (cardId, element) => {
     if (cardId !== this.props.config.uuid) return
 
+    delete element.eleType
+    
     const { actionlist } = this.state
 
     this.setState({actionlist: [...actionlist, element]})
@@ -178,15 +223,28 @@
         supId = ''
       }
     }
-    
-    let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, config.uuid, supId) || []
-    let anchors = MenuUtils.getAnchors(window.GLOB.customMenu.components, config.uuid) || []
 
-    this.setState({
-      visible: true,
-      card: card,
-      formlist: getActionForm(card, functip, config, usefulFields, modules, anchors)
-    })
+    let menu = window.GLOB.customMenu
+    
+    let modules = MenuUtils.getSubModules(menu.components, config.uuid, supId, menu.interfaces || null)
+
+    if (config.subtype === 'basetable') {
+      delete card.eleType // 鍖哄垎鎸夐挳浣嶇疆
+
+      this.setState({
+        visible: true,
+        card: card,
+        formlist: getBaseTableActionForm(card, functip, config, usefulFields, modules)
+      })
+    } else {
+      let anchors = MenuUtils.getAnchors(menu.components, config.uuid) || []
+  
+      this.setState({
+        visible: true,
+        card: card,
+        formlist: getActionForm(card, functip, config, usefulFields, modules, anchors)
+      })
+    }
   }
 
   /**
@@ -218,11 +276,138 @@
    */
   handleSubmit = () => {
     const { config } = this.props
-    let color = { primary: '#1890ff', yellow: '#c49f47', orange: 'orange', danger: '#ff4d4f', green: '#26C281', dgreen: '#32c5d2', purple: '#8E44AD', cyan: '#13c2c2', gray: '#666666' }
+    let color = { primary: '#1890ff', yellow: '#c49f47', orange: 'orange', danger: '#ff4d4f', green: '#26C281', dgreen: '#32c5d2', purple: '#8E44AD', cyan: '#13c2c2', gray: '#E7E7EF', default: 'rgba(0, 0, 0, 0.65)' }
     let _actionlist = fromJS(this.state.actionlist).toJS()
     
     this.actionFormRef.handleConfirm().then(btn => {
       _actionlist = _actionlist.filter(item => !item.origin || item.uuid === btn.uuid)
+
+      if ((btn.OpenType === 'excelIn' || btn.OpenType === 'excelOut') && (!btn.verify || !btn.verify.columns) && (config.subtype === 'basetable' || config.subtype === 'normaltable')) {
+        let columns = []
+        let maps = []
+        let labels = {}
+        if (config.subtype === 'normaltable') {
+          config.columns.forEach(col => {
+            labels[col.field] = col.label
+          })
+        }
+
+        if (btn.OpenType === 'excelOut') {
+          let pushcol = (item) => {
+            let cell = {
+              Column: item.field,
+              Text: item.label,
+              Width: 20,
+              abs: 'false',
+              output: 'true',
+              required: 'false',
+              type: 'text',
+              noValue: 'true',
+              uuid: Utils.getuuid()
+            }
+  
+            if (item.type === 'number') {
+              cell.type = 'number'
+              cell.decimal = item.decimal
+
+              if (item.noValue === 'hide') {
+                cell.noValue = 'false'
+              }
+            }
+  
+            columns.push(cell)
+          }
+
+          config.cols.forEach(item => {
+            if (item.Hide === 'true') return
+
+            if (config.subtype === 'normaltable') {
+              if (item.type === 'colspan') {
+                item.subcols.forEach(cell => {
+                  if (!cell.field || cell.Hide === 'true' || maps.includes(cell.field)) return
+                  maps.push(cell.field)
+  
+                  pushcol(cell)
+                })
+              } else if (item.type === 'custom') {
+                item.elements.forEach(cell => {
+                  if (!cell.field || maps.includes(cell.field)) return
+                  maps.push(cell.field)
+  
+                  pushcol({...cell, label: labels[cell.field]})
+                })
+              }
+            }
+
+            if (!item.field || maps.includes(item.field)) return
+            maps.push(item.field)
+  
+            pushcol(item)
+          })
+
+          btn.verify = btn.verify || {enable: 'false', dataType: 'default', scripts: []}
+          btn.verify.columns = columns
+        } else {
+          let pushcol = (item) => {
+            let _type = 'Nvarchar(50)'
+            let _limit = '50'
+            if (item.type === 'number' && !item.decimal) {
+              _type = 'Int'
+              _limit = ''
+            } else if (item.type === 'number') {
+              _type = 'Decimal(18,' + item.decimal + ')'
+              _limit = item.decimal
+            }
+
+            let _cell = {
+              uuid: Utils.getuuid(),
+              Column: item.field,
+              Text: item.label,
+              type: _type,
+              limit: _limit,
+              import: 'true',
+              required: 'true'
+            }
+
+            if (_type !== 'Nvarchar(50)') {
+              _cell.min = 0
+              _cell.max = 999999
+            }
+  
+            columns.push(_cell)
+          }
+
+          config.cols.forEach(item => {
+            if (item.Hide === 'true') return
+
+            if (config.subtype === 'normaltable') {
+              if (item.type === 'colspan') {
+                item.subcols.forEach(cell => {
+                  if (!cell.field || cell.Hide === 'true' || maps.includes(cell.field)) return
+                  maps.push(cell.field)
+  
+                  pushcol(cell)
+                })
+              } else if (item.type === 'custom') {
+                item.elements.forEach(cell => {
+                  if (!cell.field || maps.includes(cell.field)) return
+                  maps.push(cell.field)
+  
+                  pushcol({...cell, label: labels[cell.field]})
+                })
+              }
+            }
+
+            if (!item.field || maps.includes(item.field)) return
+            maps.push(item.field)
+  
+            pushcol(item)
+          })
+
+          btn.verify = btn.verify || {sheet: 'Sheet1', default: 'true', range: 1, scripts: [], uniques: []}
+          btn.verify.columns = columns
+        }
+      }
 
       let labelrepet = false
       _actionlist = _actionlist.map(item => {
@@ -231,16 +416,51 @@
         }
 
         if (item.uuid === btn.uuid) {
-          btn.style = item.style || {}
-          if (btn.class !== item.class || btn.show !== item.show || !btn.style.color || item.focus) {
-            if (btn.show === 'icon') {
-              btn.style.color = color[btn.class]
-              btn.style.backgroundColor = 'transparent'
+          if (config.subtype === 'basetable') {
+            let _c = btn.class.replace('border-', '')
+            if (btn.class === 'default') {
+              btn.style = {color: 'rgba(0, 0, 0, 0.65)', backgroundColor: '#fff', borderColor: '#d9d9d9', marginRight: '15px'}
+            } else if (btn.class.indexOf('border') > -1) {
+              btn.style = {color: color[_c], backgroundColor: '#fff', borderColor: color[_c], marginRight: '15px'}
+            } else if (btn.class === 'gray') {
+              btn.style = {color: 'rgba(0, 0, 0, 0.65)', backgroundColor: color[_c], borderColor: color[_c], marginRight: '15px'}
             } else {
-              btn.style.color = '#ffffff'
-              btn.style.backgroundColor = color[btn.class]
+              btn.style = {color: '#fff', backgroundColor: color[_c], borderColor: color[_c], marginRight: '15px'}
+            }
+          } else {
+            btn.style = item.style || {}
+            if (btn.class) {
+              if (btn.class !== item.class || btn.show !== item.show || !btn.style.color || (item.focus && !btn.style.color)) {
+                // if (btn.show === 'icon') {
+                //   btn.style.color = color[btn.class]
+                //   btn.style.backgroundColor = 'transparent'
+                // } 
+                if (btn.class === 'default') {
+                  btn.style.color = 'rgba(0, 0, 0, 0.65)'
+                  btn.style.backgroundColor = '#fff'
+                  btn.style.borderColor = '#d9d9d9'
+                } else if (btn.class.indexOf('border') > -1) {
+                  let _c = btn.class.replace('border-', '')
+                  btn.style.color = color[_c]
+                  btn.style.backgroundColor = '#fff'
+                  btn.style.borderColor = color[_c]
+                  btn.style.borderWidth = '1px'
+                } else if (btn.class === 'gray') {
+                  btn.style.color = 'rgba(0, 0, 0, 0.65)'
+                  btn.style.backgroundColor = color[btn.class]
+                  btn.style.borderColor = color[btn.class]
+                } else {
+                  btn.style.color = '#ffffff'
+                  btn.style.backgroundColor = color[btn.class]
+                  btn.style.borderColor = color[btn.class]
+                }
+              }
+            } else if (btn.color) {
+              btn.style = {}
             }
           }
+
+          btn.updateTime = moment().format('YYYY-MM-DD HH:mm')
           return btn
         } else {
           return item
@@ -270,26 +490,20 @@
    */
   deleteElement = (card) => {
     const { config } = this.props
-    const { appType } = this.state
-    let _this = this
+    let that = this
 
     confirm({
       content: `纭畾鍒犻櫎 - ${card.label} 锛焋,
       onOk() {
-        let _actionlist = fromJS(_this.state.actionlist).toJS()
+        let _actionlist = fromJS(that.state.actionlist).toJS()
 
         _actionlist = _actionlist.filter(item => item.uuid !== card.uuid)
 
-        _this.setState({
+        that.setState({
           actionlist: _actionlist
         }, () => {
-          _this.props.updateaction({...config, action: _actionlist})
+          that.props.updateaction({...config, action: _actionlist})
         })
-
-        if (card.origin || appType === 'mob') return
-        if (appType === 'pc' && card.OpenType !== 'popview') return
-
-        MKEmitter.emit('delButtons', [card.uuid])
       },
       onCancel() {}
     })
@@ -303,7 +517,6 @@
       profVisible: true,
       card: element
     })
-    MKEmitter.emit('modalStatus', '楠岃瘉淇℃伅')
   }
 
   /**
@@ -312,7 +525,7 @@
   verifySubmit = () => {
     const { config } = this.props
     const { card } = this.state
-    
+
     this.verifyRef.handleConfirm().then(res => {
       let _actionlist = fromJS(this.state.actionlist).toJS()
       _actionlist = _actionlist.filter(item => !item.origin || item.uuid === card.uuid)
@@ -320,6 +533,7 @@
       _actionlist = _actionlist.map(item => {
         if (item.uuid === card.uuid) {
           item.verify = res
+          item.updateTime = moment().format('YYYY-MM-DD HH:mm')
         }
   
         return item
@@ -331,7 +545,6 @@
       }, () => {
         this.props.updateaction({...config, action: _actionlist})
       })
-      MKEmitter.emit('modalStatus', false)
     })
   }
 
@@ -339,59 +552,47 @@
    * @description 鍒涘缓鎸夐挳瀛樺偍杩囩▼
    */
   creatFunc = () => {
+    const { config } = this.props
     const menu = window.GLOB.customMenu
-    let _config = fromJS(this.props.config).toJS()
 
-    this.actionFormRef.handleConfirm().then(res => {
-      let btn = res         // 鎸夐挳淇℃伅
-      let newLText = ''     // 鍒涘缓瀛樺偍杩囩▼sql
-      let DelText = ''      // 鍒犻櫎瀛樺偍杩囩▼sql
+    return new Promise((resolve) => {
+      this.actionFormRef.handleConfirm().then(res => {
+        let btn = fromJS(res).toJS()
+        let _config = fromJS(config).toJS()
 
-      // 鍒涘缓瀛樺偍杩囩▼锛屽繀椤诲~鍐欏唴閮ㄥ嚱鏁板悕
-      if (btn.intertype !== 'inner') {
-        notification.warning({
-          top: 92,
-          message: '浣跨敤鍐呴儴鍑芥暟鏃讹紝鎵嶅彲浠ュ垱寤哄瓨鍌ㄨ繃绋嬶紒',
-          duration: 5
-        })
-        return
-      }
+        if (btn.OpenType === 'excelIn') {
+          btn.func = btn.innerFunc
+          btn.menuNo = menu.MenuNo
+          btn.MenuName = menu.MenuName + _config.name
+          btn.$type = 'excelIn'
 
-      if (btn.OpenType === 'pop') {
-        let _param = {
-          funcName: btn.innerFunc,
-          name: _config.setting.tableName || '',
-          fields: btn.modal ? btn.modal.fields : [],
-          menuNo: menu.MenuNo
+          resolve(btn)
+        } else if (btn.OpenType === 'excelOut') {
+          _config.MenuName = menu.MenuName + '-' + _config.name
+          _config.menuNo = menu.MenuNo
+          _config.MenuID = menu.MenuID
+          _config.func = btn.innerFunc
+          _config.$type = 'table'
+          
+          resolve(_config)
+        } else {
+          btn.func = btn.innerFunc
+          btn.name = _config.setting.tableName || ''
+          btn.menuNo = menu.MenuNo
+          btn.MenuID = menu.MenuID
+          btn.MenuName = menu.MenuName + _config.name
+          btn.fields = []
+          btn.columns = _config.columns
+          btn.primaryKey = _config.setting.primaryKey || 'ID'
+          btn.$type = 'btn'
+
+          if (btn.OpenType === 'pop') {
+            btn.fields = btn.modal ? btn.modal.fields : []
+          }
+
+          resolve(btn)
         }
-        newLText = Utils.formatOptions(FuncUtils.getfunc(_param, btn, menu, _config))
-        DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc))
-      } else if (btn.OpenType === 'excelIn') {
-        let _param = {
-          funcName: btn.innerFunc,
-          menuNo: menu.MenuNo
-        }
-        newLText = Utils.formatOptions(FuncUtils.getexcelInfunc(_param, btn, menu))
-        DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc))
-      } else if (btn.OpenType === 'excelOut') {
-        let _param = {
-          innerFunc: btn.innerFunc
-        }
-
-        newLText = Utils.formatOptions(FuncUtils.getTableFunc(_param, menu, _config)) // 鍒涘缓瀛樺偍杩囩▼sql
-        DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc))
-      } else {
-        let _param = {
-          funcName: btn.innerFunc,
-          name: _config.setting.tableName || '',
-          fields: '',
-          menuNo: menu.MenuNo
-        }
-        newLText = Utils.formatOptions(FuncUtils.getfunc(_param, btn, menu, _config))
-        DelText = Utils.formatOptions(FuncUtils.dropfunc(btn.innerFunc))
-      }
-
-      this.refs.btnCreatFunc.exec(btn.innerFunc, newLText, DelText)
+      })
     })
   }
 
@@ -417,9 +618,9 @@
 
     let btn = null
     let _col = null
-    if (config.subtype === 'normaltable' || config.subtype === 'editable') {
+    if (config.type === 'table') {
       config.cols.forEach(col => {
-        if (col.type !== 'action') return
+        if (col.type !== 'custom') return
 
         col.elements = col.elements.filter(item => {
           if (item.uuid === id) {
@@ -428,6 +629,24 @@
           }
           return item.uuid !== id
         })
+      })
+    } else if (config.type === 'card' && config.subcards) {
+      config.subcards.forEach(scard => {
+        scard.elements = scard.elements.filter(item => {
+          if (item.uuid === id) {
+            btn = item
+            _col = scard
+          }
+          return item.uuid !== id
+        })
+        scard.backElements = scard.backElements.filter(item => {
+          if (item.uuid === id) {
+            btn = item
+            _col = scard
+          }
+          return item.uuid !== id
+        })
+        return scard
       })
     }
 
@@ -480,6 +699,12 @@
         columns={config.columns}
         wrappedComponentRef={(inst) => this.verifyRef = inst}
       />
+    } else if (card.payMode === 'system') {
+      return <VerifyPay
+        card={card}
+        columns={config.columns}
+        wrappedComponentRef={(inst) => this.verifyRef = inst}
+      />
     }
   }
 
@@ -491,7 +716,7 @@
       <div className={'model-menu-action-list length' + actionlist.length}>
         <DragElement
           list={actionlist}
-          type={appType === 'mob' ? config.subtype : ''}
+          type={appType === 'mob' || config.subtype === 'basetable' ? config.subtype : ''}
           handleList={this.handleList}
           dropButton={this.dropButton}
           handleMenu={this.handleAction}
@@ -503,18 +728,20 @@
         {/* 缂栬緫鎸夐挳锛氬鍒躲�佺紪杈� */}
         <Modal
           title="鎸夐挳路缂栬緫"
+          wrapClassName="mk-scroll-modal"
           visible={visible}
           width={920}
           maskClosable={false}
           onCancel={this.editModalCancel}
           footer={[
-            record && record.intertype === 'inner' ? <CreateFunc key="create" ref="btnCreatFunc" trigger={this.creatFunc}/> : null,
+            record && record.intertype === 'inner' ? <CreateFunc key="create" getMsg={this.creatFunc}/> : null,
             <Button key="cancel" onClick={this.editModalCancel}>鍙栨秷</Button>,
             <Button key="confirm" type="primary" onClick={this.handleSubmit}>纭畾</Button>
           ]}
           destroyOnClose
         >
           <ActionForm
+            type={config.type === 'tree' ? 'card' : ''}
             card={card}
             formlist={this.state.formlist}
             inputSubmit={this.handleSubmit}
@@ -535,11 +762,9 @@
             if (this.verifyRef.handleCancel) {
               this.verifyRef.handleCancel().then(() => {
                 this.setState({ profVisible: false })
-                MKEmitter.emit('modalStatus', false)
               })
             } else {
               this.setState({ profVisible: false })
-              MKEmitter.emit('modalStatus', false)
             }
           }}
           destroyOnClose

--
Gitblit v1.8.0