From d1cd5af5adb53e91efdd278328e1b6f8ad834fb5 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 06 二月 2025 21:11:56 +0800
Subject: [PATCH] Merge branch 'positec' into dms

---
 src/menu/components/share/pastecomponent/index.jsx |  219 +++++++++++++++++++++++++++++++++---------------------
 1 files changed, 133 insertions(+), 86 deletions(-)

diff --git a/src/menu/components/share/pastecomponent/index.jsx b/src/menu/components/share/pastecomponent/index.jsx
index 2d12bb3..90944e9 100644
--- a/src/menu/components/share/pastecomponent/index.jsx
+++ b/src/menu/components/share/pastecomponent/index.jsx
@@ -1,13 +1,16 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { fromJS } from 'immutable'
-import { Icon, Modal, notification } from 'antd'
+import { Modal, notification } from 'antd'
+import { SnippetsOutlined } from '@ant-design/icons'
 
 import Utils from '@/utils/utils.js'
 import MKEmitter from '@/utils/events.js'
+import MenuUtils from '@/utils/utils-custom.js'
 import asyncComponent from '@/utils/asyncComponent'
-import './index.scss'
+// import './index.scss'
 
+const { confirm } = Modal
 const PasteForm = asyncComponent(() => import('@/templates/zshare/pasteform'))
 
 class PasteController extends Component {
@@ -20,83 +23,99 @@
     visible: false
   }
 
-  handleMenuClick = () => {
-    this.setState({visible: true})
-  }
-
-  resetconfig = (item, copyBtns) => {
+  resetconfig = (item, config) => {
     let _uuid = Utils.getuuid()
-
-    if (item.OpenType === 'popview') {
-      let _cell = fromJS(item).toJS()
-      _cell.$originUuid = _cell.uuid
-      _cell.uuid = _uuid
-      copyBtns.set(_uuid, _cell)
-    }
 
     if (item.uuid) {
       item.uuid = _uuid
     }
 
-    if (item.copyType === 'cardcell') {
+    if (item.copyType === 'action') {
+      MenuUtils.resetBtn(item, _uuid)
+    } else if (item.copyType === 'cardcell' && config.subtype === 'datacard') {
       item.setting = item.setting || {}
+      item.$cardType = 'extendCard'
       item.setting.width = item.setting.width || 6
 
       if (item.elements) {
         item.elements = item.elements.map(cell => {
+          if (cell.datatype === 'dynamic') {
+            cell.datatype = 'static'
+          }
           cell.uuid = Utils.getuuid()
+
+          if (cell.eleType === 'button') {
+            MenuUtils.resetBtn(cell, _uuid)
+          }
+          return cell
+        })
+      }
+      if (item.backElements) {
+        item.backElements = item.backElements.map(cell => {
+          if (cell.datatype === 'dynamic') {
+            cell.datatype = 'static'
+          }
+          cell.uuid = Utils.getuuid()
+
+          if (cell.eleType === 'button') {
+            MenuUtils.resetBtn(cell, _uuid)
+          }
+          return cell
+        })
+      }
+    } else if (item.copyType === 'cardcell') {
+      item.setting = item.setting || {}
+      item.setting.width = item.setting.width || 6
+      delete item.$cardType
+
+      if (config.type === 'carousel') {
+        delete item.setting.linkbtn
+        delete item.backElements
+      }
+
+      if (item.elements) {
+        item.elements = item.elements.map(cell => {
+          cell.uuid = Utils.getuuid()
+          if (cell.eleType === 'button') {
+            MenuUtils.resetBtn(cell, _uuid)
+          }
           return cell
         })
       }
       if (item.backElements) {
         item.backElements = item.backElements.map(cell => {
           cell.uuid = Utils.getuuid()
+          if (cell.eleType === 'button') {
+            MenuUtils.resetBtn(cell, _uuid)
+          }
           return cell
         })
       }
     } else if (item.copyType === 'cols') {
-      let loopCol = (col) => {
-        col.subcols = col.subcols.map(c => {
-          c.uuid = Utils.getuuid()
+      let loopCol = (cols) => {
+        return cols.map(col => {
+          col.uuid = Utils.getuuid()
 
-          if (c.type === 'colspan' && c.subcols) {
-            c = loopCol(c)
-          } else if (c.type === 'custom' && c.elements) {
-            c.elements = c.elements.map(cell => {
+          if (col.type === 'action') {
+            col.type = 'custom'
+          }
+
+          if (col.type === 'colspan' && col.subcols) {
+            col.subcols = loopCol(col.subcols)
+          } else if (col.type === 'custom' && col.elements) {
+            col.elements = col.elements.map(cell => {
               cell.uuid = Utils.getuuid()
+              if (cell.eleType === 'button') {
+                MenuUtils.resetBtn(cell, _uuid)
+              }
               return cell
             })
           }
-          return c
+          return col
         })
-
-        return col
       }
 
-      item.cols = item.cols.map(_item => {
-        _item.uuid = Utils.getuuid()
-        if (_item.type === 'colspan' && _item.subcols) {
-          _item = loopCol(_item)
-        } else if (_item.type === 'custom' && _item.elements) {
-          _item.elements = _item.elements.map(cell => {
-            cell.uuid = Utils.getuuid()
-            return cell
-          })
-        } else if (_item.type === 'action' && _item.elements) {
-          _item.elements = _item.elements.map(cell => {
-            let _uuid = Utils.getuuid()
-            if (cell.OpenType === 'popview') {
-              let _cell = fromJS(cell).toJS()
-              _cell.$originUuid = _cell.uuid
-              _cell.uuid = _uuid
-              copyBtns.set(_uuid, _cell)
-            }
-            cell.uuid = _uuid
-            return cell
-          })
-        }
-        return _item
-      })
+      item.cols = loopCol(item.cols)
     }
 
     return item
@@ -106,40 +125,45 @@
     const { options } = this.props
     this.pasteFormRef.handleConfirm().then(res => {
       if (!options.includes(res.copyType)) {
-        notification.warning({
-          top: 92,
-          message: '閰嶇疆淇℃伅鏍煎紡閿欒锛�',
-          duration: 5
-        })
+        notification.warning({ top: 92, message: '閰嶇疆淇℃伅鏍煎紡閿欒锛�', duration: 5 })
         return
+      }
+
+      if (!this.props.config) {
+        this.props.updateConfig(res)
+        this.setState({visible: false})
+        return
+      }
+
+      if (res.copyType === 'editcols') {
+        res.copyType = 'cols'
       }
 
       let type = res.copyType
       let config = fromJS(this.props.config).toJS()
-      let copyBtns = new Map()
 
-      res = this.resetconfig(res, copyBtns)
+      res = this.resetconfig(res, config)
       delete res.copyType
 
-      copyBtns = [...copyBtns.values()]
-
-      if (copyBtns.length > 0) {
-        MKEmitter.emit('copyButtons', copyBtns)
-      }
-
-      if (type === 'action') {
-        config.action = config.action || []
-        config.action = config.action.filter(item => !item.origin)
-
+      if (config.type === 'form') {
+        this.props.updateConfig(res)
+        this.setState({visible: false})
+        return
+      } else if (type === 'action') {
+        if (res.style) {
+          delete res.style.width
+          delete res.style.float
+        }
+        if (['line', 'bar', 'scatter'].includes(config.type) && !['excelOut', 'excelIn'].includes(res.OpenType)) {
+          notification.warning({ top: 92, message: '鍥捐〃涓笉鏀寔姝ょ被鎸夐挳锛�', duration: 5 })
+          return
+        }
         MKEmitter.emit('addButton', config.uuid, res)
       } else if (type === 'search' || type === 'form') {
-        config.search = config.search || []
-        config.search = config.search.filter(item => !item.origin)
-
-        let keys = config.search.map(item => item.field.toLowerCase())
+        let keys = config.search.map(item => item.field ? item.field.toLowerCase() : '')
 
         if (type === 'form') {
-          if (['number', 'switch', 'textarea', 'checkcard', 'fileupload', 'hint', 'color', 'funcvar'].includes(res.type)) {
+          if (['number', 'switch', 'textarea', 'fileupload', 'hint', 'color', 'funcvar'].includes(res.type)) {
             res.type = 'text'
           } else if (res.type === 'radio') {
             res.type = 'select'
@@ -150,31 +174,54 @@
           }
         }
 
+        this.setState({visible: false})
         if (res.field && keys.includes(res.field.toLowerCase())) {
-          notification.warning({
-            top: 92,
-            message: '鎼滅储瀛楁宸插瓨鍦紒',
-            duration: 5
+          confirm({
+            title: '鎼滅储瀛楁宸插瓨鍦紒',
+            okText: '鐭ラ亾浜�',
+            cancelText: '鏇挎崲',
+            onOk() {},
+            onCancel() {
+              MKEmitter.emit('plusSearch', config.uuid, res, 'replace')
+            }
           })
-          return
+        } else {
+          MKEmitter.emit('plusSearch', config.uuid, res, 'simple')
         }
-
-        config.search.push(res)
+        return
       } else if (type === 'cardcell') {
         config.subcards.push(res)
+      } else if (type === 'menucell') {
+        config.subMenus.push(res)
       } else if (type === 'cols') {
         config.cols = config.cols.filter(col => !col.origin)
 
-        let keys = config.cols.map(col => (col.field || '$empty'))
-
-        res.cols.forEach(col => {
-          if (!keys.includes(col.field)) {
-            config.cols.push(col)
+        if ((config.subtype === 'normaltable' || config.subtype === 'editable') && res.cols.length === 1) {
+          config.cols.push(...res.cols)
+        } else {
+          let keys = config.cols.map(col => (col.field || '$empty'))
+  
+          let cols = []
+          res.cols.forEach(col => {
+            if (!col.field || !keys.includes(col.field)) {
+              cols.push(col)
+            }
+          })
+  
+          if (cols.length === 0) {
+            notification.warning({
+              top: 92,
+              message: '鏄剧ず鍒楀凡瀛樺湪锛�',
+              duration: 5
+            })
+            return
+          } else {
+            config.cols.push(...cols)
           }
-        })
+        }
       }
 
-      this.props.updateConfig(config)
+      this.props.updateConfig(config, type)
       this.setState({visible: false})
 
       notification.success({
@@ -190,7 +237,7 @@
 
     return (
       <div style={{display: 'inline-block'}}>
-        <Icon type="snippets" style={{color: 'purple'}} onClick={() => {this.setState({visible: true})}} />
+        <SnippetsOutlined style={{color: 'purple'}} onClick={() => {this.setState({visible: true})}} />
         <Modal
           title="绮樿创"
           visible={visible}

--
Gitblit v1.8.0