From 03a22ec6f9ad7303d10b4c65bb5bc6fa5cbd448a Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期六, 22 十月 2022 23:21:42 +0800
Subject: [PATCH] 2022-10-22

---
 src/menu/components/share/actioncomponent/index.jsx |  300 ++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 163 insertions(+), 137 deletions(-)

diff --git a/src/menu/components/share/actioncomponent/index.jsx b/src/menu/components/share/actioncomponent/index.jsx
index e208f94..0f29f3c 100644
--- a/src/menu/components/share/actioncomponent/index.jsx
+++ b/src/menu/components/share/actioncomponent/index.jsx
@@ -1,18 +1,15 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
-import {connect} from 'react-redux'
 import { is, fromJS } from 'immutable'
 import { Modal, notification, Button } from 'antd'
 
 import Utils, { FuncUtils } from '@/utils/utils.js'
-import zhCN from '@/locales/zh-CN/model.js'
-import enUS from '@/locales/en-US/model.js'
-import { getActionForm } from './formconfig'
+import { getActionForm, getBaseTableActionForm } from './formconfig'
 import asyncSpinComponent from '@/utils/asyncSpinComponent'
 
 import MKEmitter from '@/utils/events.js'
 import ActionForm from './actionform'
-import MenuUtils from '@/menu/utils/menuUtils.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import CreateFunc from '@/templates/zshare/createfunc'
 import DragElement from './dragaction'
 import './index.scss'
@@ -22,36 +19,48 @@
 const VerifyPrint = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyprint'))
 const VerifyExcelIn = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelin'))
 const VerifyExcelOut = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifyexcelout'))
+const VerifyMegvii = asyncSpinComponent(() => import('@/templates/sharecomponent/actioncomponent/verifymegvii'))
 
 class ActionComponent extends Component {
   static propTpyes = {
-    type: PropTypes.string,          // 鑿滃崟绫诲瀷锛屼富琛ㄦ垨瀛愯〃
     config: PropTypes.object,        // 鑿滃崟閰嶇疆淇℃伅
     setSubConfig: PropTypes.func,    // 璁剧疆瀛愰厤缃俊鎭�
     updateaction: PropTypes.func     // 鑿滃崟閰嶇疆鏇存柊
   }
 
   state = {
-    dict: localStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
+    appType: sessionStorage.getItem('appType'),
     card: null,          // 缂栬緫涓厓绱�
     formlist: null,      // 琛ㄥ崟淇℃伅
     actionlist: null,    // 鎸夐挳缁�
     visible: false,      // 妯℃�佹鎺у埗
-    profVisible: false   // 楠岃瘉淇℃伅妯℃�佹
+    profVisible: false,  // 楠岃瘉淇℃伅妯℃�佹
+    record: null
   }
 
   /**
    * @description 鎼滅储鏉′欢鍒濆鍖�
    */
   UNSAFE_componentWillMount () {
+    const { config } = this.props
+
+    let actionlist = fromJS(config.action).toJS() || []
+
     this.setState({
-      actionlist: fromJS(this.props.config.action).toJS()
+      actionlist: actionlist.map(item => {
+        if (item.btnstyle) { // 鍏煎
+          item.style = item.style || {}
+          item.style = {...item.style, ...item.btnstyle}
+          delete item.btnstyle
+        }
+
+        return item
+      })
     })
   }
 
   componentDidMount () {
     MKEmitter.addListener('addButton', this.addButton)
-    MKEmitter.addListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -76,17 +85,14 @@
       return
     }
     MKEmitter.removeListener('addButton', this.addButton)
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
+  getStyle = (style) => {
     const { config } = this.props
     const { card, actionlist } = this.state
 
-    if (comIds[0] !== config.uuid || comIds[1] !== 'actionlist') return
-
     let _card = fromJS(card).toJS()
-    _card.btnstyle = style
+    _card.style = style
 
     let _actionlist = actionlist.map(cell => {
       if (cell.uuid === _card.uuid) return _card
@@ -101,16 +107,14 @@
   }
 
   changeBtnStyle = (element) => {
-    const { config } = this.props
-
-    let _style = element.btnstyle ? fromJS(element.btnstyle).toJS() : {}
-    let options = ['font', 'border', 'background', 'margin']
+    let _style = element.style ? fromJS(element.style).toJS() : {}
+    let options = ['font', 'border', 'background', 'margin', 'padding']
 
     this.setState({
       card: element
     })
 
-    MKEmitter.emit('changeStyle', [config.uuid, 'actionlist', element.uuid], options, _style)
+    MKEmitter.emit('changeStyle', options, _style, this.getStyle)
   }
 
   addButton = (cardId, element) => {
@@ -142,13 +146,13 @@
    * @description 鎸夐挳缂栬緫锛岃幏鍙栨寜閽〃鍗曚俊鎭�
    */
   handleAction = (card) => {
-    const { menu, config } = this.props
+    const { config } = this.props
 
     let usefulFields = sessionStorage.getItem('permFuncField')
     if (usefulFields) {
       try {
         usefulFields = JSON.parse(usefulFields)
-      } catch {
+      } catch (e) {
         usefulFields = []
       }
     } else {
@@ -156,28 +160,44 @@
     }
 
     let ableField = usefulFields.join(', ')
+    let msg = `鍑芥暟鍚嶇О闇�浠�${ableField}绛夊瓧绗﹀紑濮�;`
     let functip = <div>
-      <p style={{marginBottom: '5px'}}>{this.state.dict['model.tooltip.func.innerface'].replace('@ableField', ableField)}</p>
+      <p style={{marginBottom: '5px'}}>{msg}</p>
     </div>
+    
+    if (!ableField) { // 鏃犲瓧娈甸檺鍒�
+      functip = ''
+    }
 
-    let menulist = sessionStorage.getItem('fstMenuList')
-    if (menulist) {
-      try {
-        menulist = JSON.parse(menulist)
-      } catch {
-        menulist = []
+    let supId = ''
+    if (config.setting && config.setting.supModule) {
+      let pid = config.setting.supModule[config.setting.supModule.length - 1]
+      if (pid && pid !== 'empty') {
+        supId = pid
+      } else {
+        supId = ''
       }
-    } else {
-      menulist = []
     }
     
-    let modules = MenuUtils.getSubModules(menu.components, config.uuid)
+    let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, config.uuid, supId)
 
-    this.setState({
-      visible: true,
-      card: card,
-      formlist: getActionForm(card, functip, config.setting, usefulFields, this.props.type, menulist, modules)
-    })
+    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(window.GLOB.customMenu.components, config.uuid) || []
+  
+      this.setState({
+        visible: true,
+        card: card,
+        formlist: getActionForm(card, functip, config, usefulFields, modules, anchors)
+      })
+    }
   }
 
   /**
@@ -209,7 +229,7 @@
    */
   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: '#666666', default: '#333333' }
     let _actionlist = fromJS(this.state.actionlist).toJS()
     
     this.actionFormRef.handleConfirm().then(btn => {
@@ -222,15 +242,23 @@
         }
 
         if (item.uuid === btn.uuid) {
-          btn.btnstyle = item.btnstyle || {}
-
-          if (btn.class !== item.class || btn.show !== item.show || !btn.btnstyle.color) {
-            if (btn.show === 'link' || btn.show === 'icon') {
-              btn.btnstyle.color = color[btn.class]
-              btn.btnstyle.backgroundColor = 'transparent'
+          if (config.subtype === 'basetable') {
+            let _c = btn.class.replace('border-', '')
+            if (btn.class.indexOf('border') > -1 || btn.class === 'default') {
+              btn.style = {color: color[_c], backgroundColor: '#fff', borderColor: color[_c], marginRight: '15px'}
             } else {
-              btn.btnstyle.color = '#ffffff'
-              btn.btnstyle.backgroundColor = color[btn.class]
+              btn.style = {color: '#fff', backgroundColor: color[_c], borderColor: color[_c], marginRight: '15px'}
+            }
+          } else {
+            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'
+              } else {
+                btn.style.color = '#ffffff'
+                btn.style.backgroundColor = color[btn.class]
+              }
             }
           }
           return btn
@@ -262,30 +290,26 @@
    */
   deleteElement = (card) => {
     const { config } = this.props
-    const { dict } = this.state
+    const { appType } = this.state
     let _this = this
 
     confirm({
-      content: dict['model.confirm'] + dict['model.delete'] + ` - ${card.label} 锛焋,
+      content: `纭畾鍒犻櫎 - ${card.label} 锛焋,
       onOk() {
         let _actionlist = fromJS(_this.state.actionlist).toJS()
 
         _actionlist = _actionlist.filter(item => item.uuid !== card.uuid)
 
-        if (!card.origin) {
-          MKEmitter.emit('delButtons', [card.uuid])
-        }
-
-        let btnlog = config.btnlog || []
-        if (card.OpenType === 'popview' || card.verify || card.modal) {
-          btnlog.push(card)
-        }
-
         _this.setState({
           actionlist: _actionlist
         }, () => {
-          _this.props.updateaction({...config, action: _actionlist, btnlog})
+          _this.props.updateaction({...config, action: _actionlist})
         })
+
+        if (card.origin || appType === 'mob') return
+        if (appType === 'pc' && card.OpenType !== 'popview') return
+
+        MKEmitter.emit('delButtons', [card.uuid])
       },
       onCancel() {}
     })
@@ -299,6 +323,7 @@
       profVisible: true,
       card: element
     })
+    MKEmitter.emit('modalStatus', '楠岃瘉淇℃伅')
   }
 
   /**
@@ -326,6 +351,7 @@
       }, () => {
         this.props.updateaction({...config, action: _actionlist})
       })
+      MKEmitter.emit('modalStatus', false)
     })
   }
 
@@ -333,7 +359,7 @@
    * @description 鍒涘缓鎸夐挳瀛樺偍杩囩▼
    */
   creatFunc = () => {
-    const { menu } = this.props
+    const menu = window.GLOB.customMenu
     let _config = fromJS(this.props.config).toJS()
 
     this.actionFormRef.handleConfirm().then(res => {
@@ -352,19 +378,10 @@
       }
 
       if (btn.OpenType === 'pop') {
-        let fields = []
-        if (btn.groups.length > 0) {
-          btn.groups.forEach(group => {
-            fields = [...fields, ...group.sublist]
-          })
-        } else {
-          fields = btn.fields
-        }
-
         let _param = {
           funcName: btn.innerFunc,
           name: _config.setting.tableName || '',
-          fields: fields,
+          fields: btn.modal ? btn.modal.fields : [],
           menuNo: menu.MenuNo
         }
         newLText = Utils.formatOptions(FuncUtils.getfunc(_param, btn, menu, _config))
@@ -402,16 +419,16 @@
    * @description 鎸夐挳鍙屽嚮瑙﹀彂瀛愰厤缃�
    */
   btnDoubleClick = (element) => {
-    if (sessionStorage.getItem('style-control') && sessionStorage.getItem('style-control') !== 'false') return
-    
-    if (element.OpenType === 'pop' || element.OpenType === 'popview') {
+    if (sessionStorage.getItem('style-control') && sessionStorage.getItem('style-control') === 'true') return
+
+    if (element.OpenType === 'pop' || element.OpenType === 'popview' || element.execMode === 'pop') {
       this.props.setSubConfig(element)
+    } else if (element.OpenType === 'innerpage' && element.pageTemplate === 'linkpage') {
+      MKEmitter.emit('changeEditMenu', {MenuID: element.linkmenu})
+    } else if (element.OpenType === 'funcbutton' && (element.funcType === 'copyurl' || element.funcType === 'scan') && element.linkmenu) {
+      MKEmitter.emit('changeEditMenu', {MenuID: element.linkmenu})
     } else {
-      notification.warning({
-        top: 92,
-        message: '姝ゆ寜閽棤瀛愰厤缃」锛�',
-        duration: 5
-      })
+      this.handleAction(element)
     }
   }
 
@@ -419,13 +436,15 @@
     let config = fromJS(this.props.config).toJS()
 
     let btn = null
-    if (config.subtype === 'normaltable') {
+    let _col = null
+    if (config.subtype === 'normaltable' || config.subtype === 'editable' || config.subtype === 'basetable') {
       config.cols.forEach(col => {
         if (col.type !== 'action') return
 
         col.elements = col.elements.filter(item => {
           if (item.uuid === id) {
             btn = item
+            _col = col
           }
           return item.uuid !== id
         })
@@ -434,8 +453,9 @@
 
     if (!btn) return
 
-    btn.Ot = 'requiredSgl'
     config.action.push(btn)
+
+    MKEmitter.emit('cardDelElement', _col.uuid, btn.uuid)
 
     this.setState({
       actionlist: config.action
@@ -444,14 +464,54 @@
     })
   }
 
+  getVerify = (card) => {
+    const { config } = this.props
+
+    if (!card) return null
+
+    if (['pop', 'prompt', 'exec'].includes(card.OpenType)) {
+      return <VerifyCard
+        card={card}
+        config={config}
+        columns={config.columns}
+        wrappedComponentRef={(inst) => this.verifyRef = inst}
+      />
+    } else if (card.OpenType === 'excelIn') {
+      return <VerifyExcelIn
+        card={card}
+        columns={config.columns}
+        wrappedComponentRef={(inst) => this.verifyRef = inst}
+      />
+    } else if (card.OpenType === 'excelOut') {
+      return <VerifyExcelOut
+        card={card}
+        config={config}
+        wrappedComponentRef={(inst) => this.verifyRef = inst}
+      />
+    } else if (card.OpenType === 'funcbutton' && card.funcType === 'print') {
+      return <VerifyPrint
+        card={card}
+        columns={config.columns}
+        wrappedComponentRef={(inst) => this.verifyRef = inst}
+      />
+    } else if (card.OpenType === 'funcbutton' && card.funcType === 'megvii') {
+      return <VerifyMegvii
+        card={card}
+        columns={config.columns}
+        wrappedComponentRef={(inst) => this.verifyRef = inst}
+      />
+    }
+  }
+
   render() {
     const { config } = this.props
-    const { actionlist, visible, card, dict, profVisible } = this.state
+    const { actionlist, visible, appType, card, profVisible, record } = this.state
 
     return (
-      <div className={'model-menu-action-list'}>
+      <div className={'model-menu-action-list length' + actionlist.length}>
         <DragElement
           list={actionlist}
+          type={appType === 'mob' || config.subtype === 'basetable' ? config.subtype : ''}
           handleList={this.handleList}
           dropButton={this.dropButton}
           handleMenu={this.handleAction}
@@ -462,87 +522,53 @@
         />
         {/* 缂栬緫鎸夐挳锛氬鍒躲�佺紪杈� */}
         <Modal
-          title={dict['model.action'] + '-' + (card && card.copyType === 'action' ? dict['model.copy'] : dict['model.edit'])}
+          title="鎸夐挳路缂栬緫"
           visible={visible}
-          width={850}
+          width={920}
           maskClosable={false}
           onCancel={this.editModalCancel}
           footer={[
-            <CreateFunc key="create" dict={dict} ref="btnCreatFunc" trigger={this.creatFunc}/>,
-            <Button key="cancel" onClick={this.editModalCancel}>{dict['model.cancel']}</Button>,
-            <Button key="confirm" type="primary" onClick={this.handleSubmit}>{dict['model.confirm']}</Button>
+            record && record.intertype === 'inner' ? <CreateFunc key="create" ref="btnCreatFunc" trigger={this.creatFunc}/> : null,
+            <Button key="cancel" onClick={this.editModalCancel}>鍙栨秷</Button>,
+            <Button key="confirm" type="primary" onClick={this.handleSubmit}>纭畾</Button>
           ]}
           destroyOnClose
         >
           <ActionForm
-            dict={dict}
             card={card}
             formlist={this.state.formlist}
             inputSubmit={this.handleSubmit}
             setting={config.setting}
+            updRecord={(record) => this.setState({record: fromJS(record).toJS()})}
             wrappedComponentRef={(inst) => this.actionFormRef = inst}
           />
         </Modal>
         {/* 鎸夐挳浣跨敤绯荤粺瀛樺偍杩囩▼鏃讹紝楠岃瘉淇℃伅妯℃�佹 */}
         <Modal
-          wrapClassName="model-table-action-verify-modal"
-          title={'楠岃瘉淇℃伅'}
+          wrapClassName="mk-pop-modal"
           visible={profVisible}
-          width={'75vw'}
+          width={'90vw'}
           maskClosable={false}
-          style={{minWidth: '900px', maxWidth: '1200px'}}
-          okText={dict['model.submit']}
+          okText="鎻愪氦"
           onOk={this.verifySubmit}
-          onCancel={() => { this.setState({ profVisible: false }) }}
+          onCancel={() => {
+            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
         >
-          {card && !card.execMode && card.OpenType !== 'excelIn' && card.OpenType !== 'excelOut' ?
-            <VerifyCard
-              card={card}
-              dict={dict}
-              config={config}
-              columns={config.columns}
-              wrappedComponentRef={(inst) => this.verifyRef = inst}
-            /> : null
-          }
-          {card && card.execMode ?
-            <VerifyPrint
-              card={card}
-              dict={dict}
-              columns={config.columns}
-              wrappedComponentRef={(inst) => this.verifyRef = inst}
-            /> : null
-          }
-          {card && card.OpenType === 'excelIn' ?
-            <VerifyExcelIn
-              card={card}
-              dict={dict}
-              columns={config.columns}
-              wrappedComponentRef={(inst) => this.verifyRef = inst}
-            /> : null
-          }
-          {card && card.OpenType === 'excelOut' ?
-            <VerifyExcelOut
-              card={card}
-              dict={dict}
-              config={config}
-              wrappedComponentRef={(inst) => this.verifyRef = inst}
-            /> : null
-          }
+          {this.getVerify(card)}
         </Modal>
       </div>
     )
   }
 }
 
-const mapStateToProps = (state) => {
-  return {
-    menu: state.customMenu
-  }
-}
-
-const mapDispatchToProps = () => {
-  return {}
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(ActionComponent)
\ No newline at end of file
+export default ActionComponent
\ No newline at end of file

--
Gitblit v1.8.0