From e2afee71874538e31ed57032e3ad1bba1188ab4b Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 20 十月 2022 15:31:41 +0800
Subject: [PATCH] 2022-10-20

---
 src/menu/stylecombcontrolbutton/index.scss                             |    2 
 src/menu/components/timeline/normal-timeline/index.jsx                 |    2 
 src/menu/components/card/table-card/index.jsx                          |   10 
 src/mob/components/tabs/antv-tabs/index.jsx                            |  125 --
 src/tabviews/zshare/actionList/popupbutton/index.jsx                   |    5 
 src/tabviews/zshare/normalTable/index.jsx                              |    2 
 src/utils/utils-custom.js                                              |   41 
 src/tabviews/zshare/actionList/excelInbutton/index.jsx                 |    5 
 src/menu/components/share/actioncomponent/dragaction/index.jsx         |   40 
 src/menu/components/module/voucher/index.jsx                           |    2 
 src/views/tabledesign/source.jsx                                       |   45 
 src/menu/components/chart/antv-scatter/index.jsx                       |   11 
 src/menu/components/tabs/tabcomponents/index.jsx                       |   12 
 src/menu/components/table/base-table/index.scss                        |   18 
 src/mob/components/official/index.jsx                                  |    2 
 src/menu/components/tree/antd-tree/index.jsx                           |   10 
 src/tabviews/zshare/actionList/newpagebutton/index.jsx                 |    7 
 src/menu/stylecombcontroller/index.jsx                                 |   10 
 src/menu/tableshell/card.jsx                                           |    2 
 src/tabviews/zshare/actionList/normalbutton/index.jsx                  |   33 
 src/views/mobdesign/index.jsx                                          |   36 
 src/views/interface/history/index.jsx                                  |    8 
 src/views/menudesign/index.jsx                                         |   24 
 src/tabviews/custom/components/card/cardcellList/index.jsx             |    2 
 src/tabviews/zshare/actionList/funczip/index.jsx                       |    4 
 src/menu/tableshell/index.jsx                                          |   10 
 src/menu/components/card/cardcellcomponent/index.jsx                   |    4 
 src/menu/components/form/tab-form/index.jsx                            |   32 
 src/menu/components/share/actioncomponent/formconfig.jsx               |  676 ++++++++++++++
 src/mob/components/menubar/normal-menubar/index.jsx                    |   10 
 src/menu/components/carousel/prop-card/index.jsx                       |   32 
 src/tabviews/zshare/actionList/funcMegvii/index.jsx                    |    4 
 src/menu/pastecontroller/index.jsx                                     |    7 
 src/menu/components/card/data-card/index.jsx                           |   10 
 src/menu/components/chart/antv-pie/index.jsx                           |   11 
 src/views/popdesign/index.jsx                                          |   24 
 src/menu/components/chart/antv-dashboard/index.jsx                     |   11 
 src/menu/components/tabs/table-tabs/dragabletabs.jsx                   |   19 
 src/menu/components/table/base-table/columns/index.jsx                 |   18 
 src/mob/components/menubar/common-menubar/index.jsx                    |   10 
 src/menu/components/card/prop-card/index.jsx                           |   29 
 src/menu/components/table/normal-table/index.jsx                       |   10 
 src/menu/components/table/normal-table/columns/index.jsx               |    6 
 src/menu/components/tabs/antv-tabs/index.jsx                           |  125 --
 src/tabviews/zshare/cardcomponent/index.jsx                            |   16 
 src/menu/components/group/normal-group/index.jsx                       |   53 -
 src/menu/components/tabs/paste/index.jsx                               |   18 
 src/mob/components/tabs/antv-tabs/dragabletabs.jsx                     |    2 
 src/menu/components/table/edit-table/columns/index.jsx                 |    4 
 src/pc/components/navbar/normal-navbar/index.jsx                       |    9 
 src/menu/components/group/groupcomponents/index.jsx                    |    2 
 src/menu/components/tabs/table-tabs/options.jsx                        |  219 ----
 src/menu/components/share/actioncomponent/dragaction/card.jsx          |    2 
 src/tabviews/zshare/chartcomponent/index.jsx                           |    5 
 src/menu/components/chart/chart-custom/index.jsx                       |   11 
 src/menu/components/table/base-table/columns/editColumn/formconfig.jsx |   49 
 src/menu/components/tabs/table-tabs/index.jsx                          |  182 ---
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx                |    5 
 src/menu/components/card/cardcellcomponent/dragaction/card.jsx         |    2 
 src/menu/components/form/simple-form/index.jsx                         |   32 
 src/menu/components/tabs/antv-tabs/dragabletabs.jsx                    |    2 
 src/menu/components/chart/antv-bar/index.jsx                           |   11 
 src/menu/components/code/sandbox/index.jsx                             |   10 
 src/views/tabledesign/index.jsx                                        |    4 
 src/mob/components/tabs/tabcomponents/index.jsx                        |   22 
 src/tabviews/zshare/actionList/index.jsx                               |   12 
 src/tabviews/subtable/index.jsx                                        |    6 
 src/menu/components/table/edit-table/index.jsx                         |   10 
 src/menu/components/carousel/data-card/index.jsx                       |   10 
 src/utils/utils.js                                                     |    5 
 src/mob/components/search/single-search/index.jsx                      |   10 
 src/menu/components/card/balcony/index.jsx                             |    2 
 src/tabviews/zshare/actionList/tabbutton/index.jsx                     |    9 
 src/menu/components/form/step-form/index.jsx                           |   32 
 src/views/pcdesign/index.jsx                                           |   26 
 src/menu/components/table/base-table/options.jsx                       |  153 --
 src/menu/components/tabs/table-tabs/index.scss                         |  111 --
 src/menu/components/share/actioncomponent/index.jsx                    |   38 
 src/tabviews/zshare/actionList/printbutton/index.jsx                   |    5 
 src/menu/components/search/main-search/index.jsx                       |   10 
 src/pc/components/login/normal-login/index.jsx                         |   10 
 src/mob/components/topbar/normal-navbar/index.jsx                      |    9 
 src/menu/components/editor/braft-editor/index.jsx                      |   10 
 src/menu/stylecombcontrolbutton/index.jsx                              |  163 +-
 src/menu/components/table/base-table/index.jsx                         |    2 
 85 files changed, 1,234 insertions(+), 1,565 deletions(-)

diff --git a/src/menu/components/card/balcony/index.jsx b/src/menu/components/card/balcony/index.jsx
index 114c9ba..31c5004 100644
--- a/src/menu/components/card/balcony/index.jsx
+++ b/src/menu/components/card/balcony/index.jsx
@@ -39,8 +39,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
diff --git a/src/menu/components/card/cardcellcomponent/dragaction/card.jsx b/src/menu/components/card/cardcellcomponent/dragaction/card.jsx
index e0c82a5..0410a0b 100644
--- a/src/menu/components/card/cardcellcomponent/dragaction/card.jsx
+++ b/src/menu/components/card/cardcellcomponent/dragaction/card.jsx
@@ -181,7 +181,7 @@
   const clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'cardcell') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', card, parent, 'cardcell')
+      MKEmitter.emit('clickComponent', card.uuid, parent.uuid)
     }
   }
 
diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx
index 2cb20e5..8ab612e 100644
--- a/src/menu/components/card/cardcellcomponent/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/index.jsx
@@ -99,9 +99,7 @@
 
     if (cardCell.uuid !== parentId) return
 
-    const { elements } = this.state
-
-    let _elements = elements.map(item => {
+    let _elements = this.state.elements.map(item => {
       if (keys.includes(item.uuid)) {
         return this.resetCardStyle(item, {...item.style, ...style})
       }
diff --git a/src/menu/components/card/data-card/index.jsx b/src/menu/components/card/data-card/index.jsx
index 74ab7e1..7e33108 100644
--- a/src/menu/components/card/data-card/index.jsx
+++ b/src/menu/components/card/data-card/index.jsx
@@ -46,8 +46,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: true,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: true,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -661,7 +659,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/card/prop-card/index.jsx b/src/menu/components/card/prop-card/index.jsx
index d379bfc..0bec608 100644
--- a/src/menu/components/card/prop-card/index.jsx
+++ b/src/menu/components/card/prop-card/index.jsx
@@ -44,8 +44,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: true,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -107,7 +105,6 @@
 
   componentDidMount () {
     MKEmitter.addListener('mkUpdateInter', this.mkUpdateInter)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
   }
 
   shouldComponentUpdate (nextProps, nextState) {
@@ -122,24 +119,6 @@
       return
     }
     MKEmitter.removeListener('mkUpdateInter', this.mkUpdateInter)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { card } = this.state
-
-    if (card.uuid !== parentId) return
-
-    let subcards = card.subcards.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({card: {...card, subcards: []}}, () => {
-      this.updateComponent({...card, subcards: subcards})
-    })
   }
 
   mkUpdateInter = (inter, split) => {
@@ -540,7 +519,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/card/table-card/index.jsx b/src/menu/components/card/table-card/index.jsx
index 6f24dab..91e11b6 100644
--- a/src/menu/components/card/table-card/index.jsx
+++ b/src/menu/components/card/table-card/index.jsx
@@ -45,8 +45,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',    // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: true,     // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -499,7 +497,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/carousel/data-card/index.jsx b/src/menu/components/carousel/data-card/index.jsx
index d4af996..820ee56 100644
--- a/src/menu/components/carousel/data-card/index.jsx
+++ b/src/menu/components/carousel/data-card/index.jsx
@@ -41,8 +41,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',    // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,   // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -235,7 +233,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/carousel/prop-card/index.jsx b/src/menu/components/carousel/prop-card/index.jsx
index bb43d43..30a541e 100644
--- a/src/menu/components/carousel/prop-card/index.jsx
+++ b/src/menu/components/carousel/prop-card/index.jsx
@@ -42,8 +42,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -92,10 +90,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -107,24 +101,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { card } = this.state
-
-    if (card.uuid !== parentId) return
-
-    let subcards = card.subcards.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({card: {...card, subcards: []}}, () => {
-      this.updateComponent({...card, subcards: subcards})
-    })
   }
 
   /**
@@ -322,7 +298,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/chart/antv-bar/index.jsx b/src/menu/components/chart/antv-bar/index.jsx
index 51de3eb..319cd3f 100644
--- a/src/menu/components/chart/antv-bar/index.jsx
+++ b/src/menu/components/chart/antv-bar/index.jsx
@@ -67,8 +67,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,   // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: card.type === 'bar' ? true : false, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -143,7 +141,7 @@
   handleTabsChange = (parentId) => {
     const { card } = this.state
 
-    if (parentId === card.parentId || parentId === 'all') {
+    if (parentId.indexOf(card.uuid) > -1 || parentId === 'all') {
       let _element = document.getElementById(card.uuid + 'canvas')
       if (_element) {
         _element.innerHTML = ''
@@ -1345,7 +1343,12 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.updateComponent(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/chart/antv-dashboard/index.jsx b/src/menu/components/chart/antv-dashboard/index.jsx
index b05efaa..22f6b8e 100644
--- a/src/menu/components/chart/antv-dashboard/index.jsx
+++ b/src/menu/components/chart/antv-dashboard/index.jsx
@@ -110,8 +110,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: card.subtype === 'ratioboard' ? 'array' : 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -177,7 +175,7 @@
   handleTabsChange = (parentId) => {
     const { card } = this.state
 
-    if (parentId === card.parentId || parentId === 'all') {
+    if (parentId.indexOf(card.uuid) > -1 || parentId === 'all') {
       let _element = document.getElementById(card.uuid + 'dashboard')
       if (_element) {
         _element.innerHTML = ''
@@ -522,7 +520,12 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.updateComponent(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/chart/antv-pie/index.jsx b/src/menu/components/chart/antv-pie/index.jsx
index d8aa2b3..9009ffd 100644
--- a/src/menu/components/chart/antv-pie/index.jsx
+++ b/src/menu/components/chart/antv-pie/index.jsx
@@ -60,8 +60,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,   // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -134,7 +132,7 @@
   handleTabsChange = (parentId) => {
     const { card } = this.state
 
-    if (parentId === card.parentId || parentId === 'all') {
+    if (parentId.indexOf(card.uuid) > -1 || parentId === 'all') {
       let _element = document.getElementById(card.uuid + 'canvas')
       if (_element) {
         _element.innerHTML = ''
@@ -679,7 +677,12 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.updateComponent(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/chart/antv-scatter/index.jsx b/src/menu/components/chart/antv-scatter/index.jsx
index bfc607a..2180026 100644
--- a/src/menu/components/chart/antv-scatter/index.jsx
+++ b/src/menu/components/chart/antv-scatter/index.jsx
@@ -54,8 +54,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,   // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -131,7 +129,7 @@
   handleTabsChange = (parentId) => {
     const { card } = this.state
 
-    if (parentId === card.parentId || parentId === 'all') {
+    if (parentId.indexOf(card.uuid) > -1 || parentId === 'all') {
       let _element = document.getElementById(card.uuid + 'canvas')
       if (_element) {
         _element.innerHTML = ''
@@ -364,7 +362,12 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.updateComponent(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/chart/chart-custom/index.jsx b/src/menu/components/chart/chart-custom/index.jsx
index 4a1590c..d5ea198 100644
--- a/src/menu/components/chart/chart-custom/index.jsx
+++ b/src/menu/components/chart/chart-custom/index.jsx
@@ -47,8 +47,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,   // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false, // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -118,7 +116,7 @@
   handleTabsChange = (parentId) => {
     const { card } = this.state
 
-    if (parentId === card.parentId || parentId === 'all') {
+    if (parentId.indexOf(card.uuid) > -1 || parentId === 'all') {
       let _element = document.getElementById(card.uuid + 'canvas')
       if (_element) {
         _element.innerHTML = ''
@@ -245,7 +243,12 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.updateComponent(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/code/sandbox/index.jsx b/src/menu/components/code/sandbox/index.jsx
index 4f4d644..635e948 100644
--- a/src/menu/components/code/sandbox/index.jsx
+++ b/src/menu/components/code/sandbox/index.jsx
@@ -38,8 +38,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -149,7 +147,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/editor/braft-editor/index.jsx b/src/menu/components/editor/braft-editor/index.jsx
index bcb095f..a8d23f8 100644
--- a/src/menu/components/editor/braft-editor/index.jsx
+++ b/src/menu/components/editor/braft-editor/index.jsx
@@ -39,8 +39,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -152,7 +150,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/form/simple-form/index.jsx b/src/menu/components/form/simple-form/index.jsx
index 20e3704..3b87f6c 100644
--- a/src/menu/components/form/simple-form/index.jsx
+++ b/src/menu/components/form/simple-form/index.jsx
@@ -55,8 +55,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -107,10 +105,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -122,24 +116,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { card } = this.state
-
-    if (card.uuid !== parentId) return
-
-    let subcards = card.subcards.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({card: {...card, subcards: []}}, () => {
-      this.updateComponent({...card, subcards: subcards})
-    })
   }
 
   /**
@@ -644,7 +620,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/form/step-form/index.jsx b/src/menu/components/form/step-form/index.jsx
index 83e0c76..a28b55f 100644
--- a/src/menu/components/form/step-form/index.jsx
+++ b/src/menu/components/form/step-form/index.jsx
@@ -56,8 +56,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -114,10 +112,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -129,24 +123,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { card } = this.state
-
-    if (card.uuid !== parentId) return
-
-    let subcards = card.subcards.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({card: {...card, subcards: []}}, () => {
-      this.updateComponent({...card, subcards: subcards})
-    })
   }
 
   /**
@@ -727,7 +703,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/form/tab-form/index.jsx b/src/menu/components/form/tab-form/index.jsx
index bcc0621..b5ccead 100644
--- a/src/menu/components/form/tab-form/index.jsx
+++ b/src/menu/components/form/tab-form/index.jsx
@@ -56,8 +56,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -126,10 +124,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -141,24 +135,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { card } = this.state
-
-    if (card.uuid !== parentId) return
-
-    let subcards = card.subcards.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({card: {...card, subcards: []}}, () => {
-      this.updateComponent({...card, subcards: subcards})
-    })
   }
 
   /**
@@ -753,7 +729,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/group/groupcomponents/index.jsx b/src/menu/components/group/groupcomponents/index.jsx
index 63e02b1..b126069 100644
--- a/src/menu/components/group/groupcomponents/index.jsx
+++ b/src/menu/components/group/groupcomponents/index.jsx
@@ -98,8 +98,6 @@
       
       let newcard = {
         uuid: Utils.getuuid(),
-        tabId: config.uuid,
-        parentId: config.parentId,
         type: item.component,
         subtype: item.subtype,
         config: item.config,
diff --git a/src/menu/components/group/normal-group/index.jsx b/src/menu/components/group/normal-group/index.jsx
index 08229ed..3d5ec2f 100644
--- a/src/menu/components/group/normal-group/index.jsx
+++ b/src/menu/components/group/normal-group/index.jsx
@@ -35,8 +35,6 @@
       let _group = {
         uuid: group.uuid,
         type: group.type,
-        tabId: group.tabId || '',
-        parentId: group.parentId || '',
         subtype: group.subtype,
         width: 24,
         name: group.name,
@@ -59,11 +57,6 @@
     return !is(fromJS(this.state), fromJS(nextState))
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('tabsChange', this.handleTabsChange)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
   /**
    * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆
    */
@@ -71,27 +64,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('tabsChange', this.handleTabsChange)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { group } = this.state
-
-    if (group.uuid !== parentId) return
-
-    let components = group.components.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({
-      group: {...group, components: []}
-    }, () => {
-      this.updateComponent({...group, components: components})
-    })
   }
 
   changeStyle = () => {
@@ -110,20 +82,16 @@
     this.props.updateConfig(_card)
   }
 
-  handleTabsChange = (parentId) => {
-    const { group } = this.state
-
-    if (parentId === group.parentId) {
-      MKEmitter.emit('tabsChange', group.uuid)
-    }
-  }
-
   updateComponent = (component) => {
     const { group } = this.state
 
     if (!is(fromJS(group.setting), fromJS(component.setting)) || !is(fromJS(group.style), fromJS(component.style))) {
       // 娉ㄥ唽浜嬩欢-鏍囩鍙樺寲锛岄�氱煡缁勫唴鍏冪礌
-      MKEmitter.emit('tabsChange', group.uuid)
+      let ids = []
+      group.components.forEach(item => {
+        ids.push(item.uuid)
+      })
+      MKEmitter.emit('tabsChange', ids.join(','))
     }
 
     component.width = component.setting.width
@@ -137,8 +105,6 @@
 
   insert = (item) => {
     let group = fromJS(this.state.group).toJS()
-
-    item.parentId = group.parentId
 
     group.components.push(item)
 
@@ -156,13 +122,6 @@
     this.updateComponent({...this.state.group, setting: res})
   }
 
-  clickComponent = (e) => {
-    if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
-      e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.group)
-    }
-  }
-
   render() {
     const { group } = this.state
     let _style = resetStyle(group.style)
@@ -173,7 +132,7 @@
     }
 
     return (
-      <div className={'menu-group-edit-box ' + (paddingTop ? 'padding ' : '') + (group.setting.layout || '')} style={_style} onClick={this.clickComponent} id={group.uuid}>
+      <div className={'menu-group-edit-box ' + (paddingTop ? 'padding ' : '') + (group.setting.layout || '')} style={_style} id={group.uuid}>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             <NormalForm title="鍒嗙粍璁剧疆" width={700} update={this.updateWrap} getForms={this.getWrapForms}>
diff --git a/src/menu/components/module/voucher/index.jsx b/src/menu/components/module/voucher/index.jsx
index 7f230bd..329d64d 100644
--- a/src/menu/components/module/voucher/index.jsx
+++ b/src/menu/components/module/voucher/index.jsx
@@ -33,8 +33,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',    // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
diff --git a/src/menu/components/search/main-search/index.jsx b/src/menu/components/search/main-search/index.jsx
index d6250e4..3595d12 100644
--- a/src/menu/components/search/main-search/index.jsx
+++ b/src/menu/components/search/main-search/index.jsx
@@ -50,8 +50,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         width: 24,
         name: card.name,
         subtype: card.subtype,
@@ -397,7 +395,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/share/actioncomponent/dragaction/card.jsx b/src/menu/components/share/actioncomponent/dragaction/card.jsx
index 5518861..78a372c 100644
--- a/src/menu/components/share/actioncomponent/dragaction/card.jsx
+++ b/src/menu/components/share/actioncomponent/dragaction/card.jsx
@@ -94,7 +94,7 @@
         <EditOutlined className="edit" onClick={() => editCard(id)} />
         <CopyOutlined className="copy" onClick={() => copyCard(id)} />
         <CloseOutlined className="close" onClick={() => delCard(id)} />
-        {type !== 'datacard' ? <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={() => changeStyle(id)}/> : ''}
+        {type !== 'datacard' && type !== 'basetable' ? <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={() => changeStyle(id)}/> : ''}
         {hasProfile ? <ProfileOutlined className="profile" title="楠岃瘉" onClick={() => profileCard(id)} /> : null}
       </div>
     } trigger="hover">
diff --git a/src/menu/components/share/actioncomponent/dragaction/index.jsx b/src/menu/components/share/actioncomponent/dragaction/index.jsx
index d52c80d..b4f4a65 100644
--- a/src/menu/components/share/actioncomponent/dragaction/index.jsx
+++ b/src/menu/components/share/actioncomponent/dragaction/index.jsx
@@ -105,31 +105,29 @@
     accept: 'action',
     drop(item) {
       if (item.$init) { // 鎷栨嫿娣诲姞
-        let newcard = {}
-        newcard.uuid = Utils.getuuid()
-        newcard.focus = true
-        
         if (item.class === 'element') {
           delete item.overIndex
           return
-        } else {
-          newcard.label = 'button'
-          newcard.verify = null
-          newcard.show = 'link'
-          newcard.Ot = 'requiredSgl'
-          newcard.OpenType = item.value
-          newcard.class = 'primary'
-          newcard.style = { marginRight: '15px' }
+        }
+        let newcard = {}
+        newcard.uuid = Utils.getuuid()
+        newcard.focus = true
+        newcard.label = 'button'
+        newcard.verify = null
+        newcard.show = 'link'
+        newcard.Ot = 'requiredSgl'
+        newcard.OpenType = item.value
+        newcard.class = 'primary'
+        newcard.style = { marginRight: '15px' }
 
-          if (newcard.OpenType === 'excelIn') {
-            newcard.label = item.text
-            newcard.class = 'dgreen'
-            newcard.Ot = 'notRequired'
-          } else if (item.subType === 'excelOut') {
-            newcard.label = item.text
-            newcard.execSuccess = 'never'
-            newcard.class = 'dgreen'
-          }
+        if (newcard.OpenType === 'excelIn') {
+          newcard.label = item.text
+          newcard.class = 'dgreen'
+          newcard.Ot = 'notRequired'
+        } else if (newcard.OpenType === 'excelOut') {
+          newcard.label = item.text
+          newcard.execSuccess = 'never'
+          newcard.class = 'dgreen'
         }
 
         if (item.overIndex) {
diff --git a/src/menu/components/share/actioncomponent/formconfig.jsx b/src/menu/components/share/actioncomponent/formconfig.jsx
index 5c1870c..22eae11 100644
--- a/src/menu/components/share/actioncomponent/formconfig.jsx
+++ b/src/menu/components/share/actioncomponent/formconfig.jsx
@@ -1,4 +1,4 @@
-import { btnCustomClasses } from '@/utils/option.js'
+import { btnCustomClasses, btnClasses } from '@/utils/option.js'
 
 
 /**
@@ -1021,3 +1021,677 @@
 
   return forms
 }
+
+/**
+ * @description 鑾峰彇鎸夐挳琛ㄥ崟閰嶇疆淇℃伅
+ * @param {*} card           缂栬緫鎸夐挳
+ * @param {*} functip        鐢熸垚瀛樺偍杩囩▼鎻愮ず
+ * @param {*} setting        缁勪欢閰嶇疆
+ * @param {*} usefulFields   瀛樺偍杩囩▼鍙敤鐨勫紑濮嬪瓧娈�
+ */
+export function getBaseTableActionForm (card, functip, config, usefulFields) {
+  let viewType = sessionStorage.getItem('editMenuType') // 寮圭獥 popview
+  let printTemps = sessionStorage.getItem('printTemps')
+  printTemps = printTemps ? JSON.parse(printTemps) : []
+  let setting = config.setting || {}
+  let columns = config.columns || []
+  let modules = []
+
+  let opentypes = [
+    {
+      value: 'pop',
+      text: '寮圭獥锛堣〃鍗曪級'
+    }, {
+      value: 'prompt',
+      text: '鎻愮ず妗�'
+    }, {
+      value: 'exec',
+      text: '鐩存帴鎵ц'
+    }, {
+      value: 'excelIn',
+      text: '瀵煎叆Excel'
+    }, {
+      value: 'excelOut',
+      text: '瀵煎嚭Excel'
+    }, {
+      value: 'popview',
+      text: '寮圭獥锛堟爣绛撅級'
+    }, {
+      value: 'tab',
+      text: '鏍囩椤�'
+    }, {
+      value: 'innerpage',
+      text: '鏂伴〉闈�'
+    }, {
+      value: 'funcbutton',
+      text: '鍔熻兘鎸夐挳'
+    }
+  ]
+
+  let pageTemps = [
+    { value: 'billprint', text: '鍗曟嵁鎵撳嵃' },
+    { value: 'pay', text: '鏀粯' },
+    { value: 'custom', text: '鑷畾涔�' }
+  ]
+
+  let funTypes = [
+    { value: 'print', text: '鏍囩鎵撳嵃' },
+    { value: 'refund', text: '閫�娆�' },
+    { value: 'closetab', text: '鏍囩鍏抽棴' },
+    { value: 'changeuser', text: '鍒囨崲鐢ㄦ埛' },
+    { value: 'megvii', text: '鏃疯闈㈡澘鏈�' },
+    { value: 'filezip', text: '鏂囦欢鍘嬬缉鍖�' },
+  ]
+
+  let menulist = sessionStorage.getItem('fstMenuList')
+  if (menulist) {
+    try {
+      menulist = JSON.parse(menulist)
+    } catch (e) {
+      menulist = []
+    }
+  } else {
+    menulist = []
+  }
+
+  let refresh = []
+  if (viewType === 'popview') { // 寮圭獥鏍囩
+    opentypes = opentypes.filter(item => item.value !== 'popview' && item.value !== 'funcbutton')
+    refresh.push({
+      value: 'closepoptab', // 鍏抽棴寮圭獥鏍囩
+      text: '鍏抽棴寮圭獥'
+    })
+  }
+
+  if (card.OpenType === 'form') { // 鎷栨嫿娣诲姞绫诲瀷杞崲
+    card.OpenType = 'pop'
+  }
+
+  let forms = [
+    {
+      type: 'select',
+      key: 'OpenType',
+      label: '鎵撳紑鏂瑰紡',
+      initVal: card.OpenType,
+      required: true,
+      options: opentypes
+    },
+    {
+      type: 'text',
+      key: 'label',
+      label: '鎸夐挳鍚嶇О',
+      initVal: card.label,
+      required: true,
+    },
+    {
+      type: 'select',
+      key: 'funcType',
+      label: '鍔熻兘绫诲瀷',
+      initVal: card.funcType || '',
+      required: true,
+      options: funTypes
+    },
+    {
+      type: 'radio',
+      key: 'subFunc',
+      label: '鎺ュ彛鍚嶇О',
+      initVal: card.subFunc || 'addUser',
+      required: true,
+      options: [
+        { value: 'addUser', text: '娣诲姞鐢ㄦ埛' },
+      ]
+    },
+    {
+      type: 'select',
+      key: 'execMode',
+      label: '鎵ц鏂瑰紡',
+      initVal: card.execMode || 'exec',
+      required: true,
+      options: [{
+        value: 'exec',
+        text: '鐩存帴鎵ц'
+      }, {
+        value: 'prompt',
+        text: '鎻愮ず妗�'
+      }, {
+        value: 'pop',
+        text: '寮圭獥锛堣〃鍗曪級'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'intertype',
+      label: '鎺ュ彛绫诲瀷',
+      initVal: card.intertype || 'system',
+      required: true,
+      options: []
+    },
+    {
+      type: 'checkbox',
+      key: 'payType',
+      label: '鏀粯鏂瑰紡',
+      initVal: card.payType || [],
+      required: true,
+      options: [{
+        value: 'wxpay',
+        text: '寰俊'
+      // }, {
+      //   value: 'alipay',
+      //   text: '鏀粯瀹�'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'procMode',
+      label: '鍙傛暟澶勭悊',
+      initVal: card.procMode || (card.innerFunc ? 'inner' : 'system'),
+      required: true,
+      options: [{
+        value: 'system',
+        text: '绯荤粺鍑芥暟'
+      }, {
+        value: 'inner',
+        text: '鍐呴儴鍑芥暟'
+      }, {
+        value: 'none',
+        text: '鏃�'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'sqlType',
+      label: '鎿嶄綔绫诲瀷',
+      initVal: card.sqlType || '',
+      required: true,
+      options: []
+    },
+    {
+      type: 'text',
+      key: 'sql',
+      label: '琛ㄥ悕',
+      initVal: card.sql || setting.tableName || '',
+      required: true
+    },
+    {
+      type: 'text',
+      key: 'innerFunc',
+      label: '鍐呴儴鍑芥暟',
+      initVal: card.innerFunc || '',
+      tooltip: functip,
+      fields: usefulFields,
+      required: false,
+    },
+    {
+      type: 'text',
+      key: 'urlkey',
+      label: '鍦板潃瀛楁',
+      initVal: card.urlkey || '',
+      tooltip: '鍥剧墖锛堟枃浠讹級閾炬帴鐨勫瓧娈靛悕銆�',
+      required: false,
+      readonly: false
+    },
+    {
+      type: 'select',
+      key: 'pageTemplate',
+      label: '椤甸潰绫诲瀷',
+      initVal: card.pageTemplate || '',
+      required: true,
+      options: pageTemps
+    },
+    {
+      type: 'select',
+      key: 'printTemp',
+      label: '鎵撳嵃妯℃澘',
+      initVal: card.printTemp || '',
+      required: true,
+      options: printTemps
+    },
+    {
+      type: 'cascader',
+      key: 'linkmenu',
+      label: '鍏宠仈鑿滃崟',
+      initVal: card.linkmenu || [],
+      required: true,
+      extendName: 'MenuNo',
+      options: menulist
+    },
+    {
+      type: 'textarea',
+      key: 'url',
+      label: '椤甸潰鍦板潃',
+      initVal: card.url || '',
+      required: true
+    },
+    {
+      type: 'radio',
+      key: 'sysInterface',
+      label: '绯荤粺鎺ュ彛',
+      initVal: card.sysInterface || 'false',
+      required: true,
+      options: [{
+        value: 'true',
+        text: '鏄�'
+      }, {
+        value: 'false',
+        text: '鍚�'
+      }]
+    },
+    {
+      type: 'text',
+      key: 'outerFunc',
+      label: '澶栭儴鍑芥暟',
+      initVal: card.outerFunc || '',
+      required: false,
+    },
+    {
+      type: 'textarea',
+      key: 'interface',
+      label: '娴嬭瘯鍦板潃',
+      initVal: card.sysInterface === 'true' ? (window.GLOB.mainSystemApi || '') : (card.interface || ''),
+      required: true,
+      readonly: card.sysInterface === 'true'
+    },
+    {
+      type: 'textarea',
+      key: 'proInterface',
+      label: '姝e紡鍦板潃',
+      initVal: card.proInterface || '',
+      tooltip: '姝e紡绯荤粺鎵�浣跨敤鐨勬帴鍙e湴鍧�銆�',
+      required: false
+    },
+    {
+      type: 'radio',
+      key: 'method',
+      label: '璇锋眰鏂瑰紡',
+      initVal: card.method || 'post',
+      required: true,
+      options: [{
+        value: 'get',
+        text: 'GET'
+      }, {
+        value: 'post',
+        text: 'POST'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'cross',
+      label: '璺ㄥ煙璇锋眰',
+      initVal: card.cross || 'true',
+      tooltip: '濡傛灉鑷畾涔夋帴鍙d笉鏀寔璺ㄥ煙璇锋眰锛屼細閫氳繃褰撳墠绯荤粺杞彂銆�',
+      required: false,
+      options: [{
+        value: 'true',
+        text: '鏀寔'
+      }, {
+        value: 'false',
+        text: '涓嶆敮鎸�'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'callbackType',
+      label: '鍥炶皟鏂瑰紡',
+      initVal: card.callbackType || (card.callbackFunc ? 'func' : 'none'),
+      tooltip: '浣跨敤鍚庡彴鑴氭湰鎵ц鏃讹紝闇�瑕侀厤鍚堣鍒掍换鍔°��',
+      required: true,
+      options: [{
+        value: 'script',
+        text: '鑷畾涔夎剼鏈�'
+      }, {
+        value: 'default',
+        text: '鍚庡彴鑴氭湰'
+      }, {
+        value: 'func',
+        text: '鍥炶皟鍑芥暟'
+      }, {
+        value: 'none',
+        text: '鏃�'
+      }]
+    },
+    {
+      type: 'text',
+      key: 'cbTable',
+      label: '鍥炶皟琛ㄥ悕',
+      initVal: card.cbTable || '',
+      required: true
+    },
+    {
+      type: 'text',
+      key: 'callbackFunc',
+      label: '鍥炶皟鍑芥暟',
+      initVal: card.callbackFunc || '',
+      required: true
+    },
+    {
+      type: 'select',
+      key: 'Ot',
+      label: '琛岃缃�',
+      initVal: card.Ot || (card.sqlType === 'insert' ? 'notRequired' : 'requiredSgl'),
+      required: true,
+      options: []
+    },
+    {
+      type: 'select',
+      key: 'execSuccess',
+      label: '鎴愬姛鍚�',
+      initVal: card.execSuccess || 'grid',
+      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍笺�傛敞锛氫笂绾х粍浠跺湪鏁版嵁婧愪腑娣诲姞銆�',
+      required: true,
+      options: [{
+        value: 'never',
+        text: '涓嶅埛鏂�'
+      }, {
+        value: 'line',
+        text: '鍒锋柊琛�'
+      }, {
+        value: 'grid',
+        text: '鍒锋柊褰撳墠缁勪欢'
+      }, {
+        value: 'mainline',
+        text: '鍒锋柊涓婄骇缁勪欢 - 琛�'
+      }, 
+      ...refresh]
+    },
+    {
+      type: 'select',
+      key: 'execError',
+      label: '澶辫触鍚�',
+      initVal: card.execError || 'never',
+      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍硷紝娉細涓婄骇缁勪欢鍦ㄦ暟鎹簮涓坊鍔犮��',
+      required: true,
+      options: [{
+        value: 'never',
+        text: '涓嶅埛鏂�'
+      }, {
+        value: 'line',
+        text: '鍒锋柊琛�'
+      }, {
+        value: 'grid',
+        text: '鍒锋柊褰撳墠缁勪欢'
+      }, {
+        value: 'mainline',
+        text: '鍒锋柊涓婄骇缁勪欢 - 琛�'
+      },
+      ...refresh]
+    },
+    {
+      type: 'select',
+      key: 'popClose',
+      label: '鍏抽棴鍚�',
+      initVal: card.popClose || 'never',
+      required: true,
+      options: [{
+        value: 'never',
+        text: '涓嶅埛鏂�'
+      }, {
+        value: 'grid',
+        text: '鍒锋柊褰撳墠缁勪欢'
+      }, {
+        value: 'mainline',
+        text: '鍒锋柊涓婄骇缁勪欢 - 琛�'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'resetPageIndex',
+      label: '鍒锋柊鏃�',
+      initVal: card.resetPageIndex || 'true',
+      required: false,
+      options: [{
+        value: 'true',
+        text: '閲嶇疆椤电爜'
+      }, {
+        value: 'false',
+        text: '涓嶉噸缃�'
+      }]
+    },
+    {
+      type: 'icon',
+      key: 'icon',
+      label: '鍥炬爣',
+      initVal: card.icon,
+      required: false,
+      options: []
+    },
+    {
+      type: 'select',
+      key: 'class',
+      label: '棰滆壊',
+      initVal: card.class,
+      required: false,
+      options: btnClasses
+    },
+    {
+      type: 'radio',
+      key: 'joint',
+      label: '鎷兼帴鍙傛暟',
+      initVal: card.joint || 'true',
+      required: false,
+      options: [{
+        value: 'true',
+        text: '鏄�'
+      }, {
+        value: 'false',
+        text: '鍚�'
+      }]
+    },
+    {
+      type: 'text',
+      key: 'sheet',
+      label: '琛ㄥ悕',
+      initVal: card.sheet || setting.tableName || '',
+      required: true
+    },
+    {
+      type: 'radio',
+      key: 'pagination',
+      label: '鍒嗛〉',
+      initVal: card.pagination || 'false',
+      required: false,
+      options: [{
+        value: 'true',
+        text: '鏄�'
+      }, {
+        value: 'false',
+        text: '鍚�'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'search',
+      label: '鎼滅储鏉′欢',
+      initVal: card.search || 'false',
+      required: false,
+      options: [{
+        value: 'true',
+        text: '蹇呭~'
+      }, {
+        value: 'false',
+        text: '闈炲繀濉�'
+      }]
+    },
+    {
+      type: 'cascader',
+      key: 'syncComponent',
+      label: '鍒锋柊缁勪欢',
+      initVal: card.syncComponent || [],
+      tooltip: '鎵ц鎴愬姛鍚庯紙鎴栧脊绐楁爣绛惧叧闂椂锛夛紝闇�瑕佸悓姝ュ埛鏂扮殑缁勪欢銆傛敞锛氶�夋嫨褰撳墠缁勪欢鐨勪笂绾х粍浠舵棤鏁堬紝鍒锋柊涓婄骇缁勪欢璇烽�夋嫨鎴愬姛鍚庘�滃埛鏂颁笂绾х粍浠� - 琛屸�濄��',
+      required: false,
+      options: modules
+    },
+    {
+      type: 'cascader',
+      key: 'refreshTab',
+      label: '鍒锋柊鑿滃崟',
+      initVal: card.refreshTab || [],
+      tooltip: '鎵ц鎴愬姛鍚庯紙鎴栧姛鑳芥寜閽腑鏍囩鍏抽棴绫诲瀷锛夛紝闇�瑕佸悓姝ュ埛鏂扮殑鑿滃崟',
+      required: false,
+      forbid: viewType === 'popview',
+      options: menulist
+    },
+    {
+      type: 'cascader',
+      key: 'openmenu',
+      label: '鎵撳紑鑿滃崟',
+      tooltip: '鎵ц鎴愬姛鍚庨渶瑕佹墦寮�鐨勮彍鍗曘��',
+      initVal: card.openmenu || [],
+      extendName: 'MenuNo',
+      required: false,
+      allowClear: true,
+      options: menulist,
+      forbid: viewType === 'popview'
+    },
+    {
+      type: 'text',
+      key: 'output',
+      label: '杩斿洖鍊�',
+      tooltip: '鎵ц鎴愬姛鍚庣殑杩斿洖鍊笺�傜郴缁熷嚱鏁板彲鎸囧畾杩斿洖鐨勫彉閲忥紙浠绗﹀紑澶达紝杩斿洖id鏃跺彲浣跨敤@id@锛夛紱鑷畾涔夊嚱鏁板彲鎸囧畾杩斿洖瀛楁锛堝id锛夈��',
+      initVal: card.output || '',
+      required: false,
+      forbid: viewType === 'popview'
+    },
+    {
+      type: 'text',
+      key: 'tipTitle',
+      label: '纭鎻愮ず',
+      initVal: card.tipTitle || '',
+      tooltip: '娉細寮圭獥锛堣〃鍗曪級鍦ㄦ樉绀轰负鏄惁妗嗘椂鏈夋晥銆�',
+      required: false
+    },
+    {
+      type: 'radio',
+      key: 'display',
+      label: '鏄剧ず鏂瑰紡',
+      initVal: card.display || 'modal',
+      required: true,
+      options: [{
+        value: 'modal',
+        text: '妯℃�佹'
+      }, {
+        value: 'drawer',
+        text: '鎶藉眽'
+      }]
+    },
+    {
+      type: 'number',
+      key: 'ratio',
+      min: 1,
+      max: 3000,
+      precision: 0,
+      label: '姣斾緥',
+      initVal: card.ratio || 85,
+      tooltip: '妯℃�佹鎴栨娊灞夌殑瀹藉害锛屽皬浜�100涓虹獥鍙e搴︼紙鎴栭珮搴︼級鐧惧垎姣旓紝澶т簬100涓哄儚绱犲�笺��',
+      required: true
+    },
+    {
+      type: 'radio',
+      key: 'placement',
+      label: '鎶藉眽鏂瑰悜',
+      initVal: card.placement || 'right',
+      required: false,
+      options: [{
+        value: 'right',
+        text: '鍙充晶'
+      }, {
+        value: 'left',
+        text: '宸︿晶'
+      }, {
+        value: 'top',
+        text: '涓婁晶'
+      }, {
+        value: 'bottom',
+        text: '涓嬩晶'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'clickouter',
+      label: '鐐瑰嚮钂欏眰',
+      initVal: card.clickouter || 'unclose',
+      required: false,
+      options: [{
+        value: 'unclose',
+        text: '涓嶅叧闂�'
+      }, {
+        value: 'close',
+        text: '鍏抽棴'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'control',
+      label: '鎸夐挳鎺у埗',
+      initVal: card.control || (card.controlField ? 'disabled' : ''),
+      tooltip: '褰撻�夋嫨绂佺敤鎴栭殣钘忥紝涓斿瓧娈靛�间笌鎺у埗鍊肩浉绛夋椂锛屾寜閽細闅愯棌鎴栫鐢ㄣ�傚綋閫夋嫨涓婄骇锛屼富琛ㄥ瓧娈靛�间笌鎺у埗鍊肩浉绛夋垨涓昏〃瀛楁鍊间笉瀛樺湪鏃讹紝鎸夐挳浼氶殣钘忋�傛敞锛氬涓�肩敤閫楀彿鍒嗛殧',
+      required: false,
+      options: [{
+        value: '',
+        text: '鏃�'
+      }, {
+        value: 'disabled',
+        text: '绂佺敤'
+      }, {
+        value: 'hidden',
+        text: '闅愯棌'
+      }, {
+        value: 'parent',
+        text: '涓婄骇'
+      }]
+    },
+    {
+      type: 'select',
+      key: 'controlField',
+      label: '鎺у埗瀛楁',
+      initVal: card.controlField || '',
+      required: true,
+      allowClear: true,
+      options: columns
+    },
+    {
+      type: 'text',
+      key: 'controlVal',
+      label: '鎺у埗鍊�',
+      initVal: card.controlVal || '',
+      required: false
+    },
+    {
+      type: 'text',
+      key: 'reason',
+      label: '绂佺敤鍘熷洜',
+      initVal: card.reason || '',
+      required: false
+    },
+    {
+      type: 'radio',
+      key: 'hidden',
+      label: '闅愯棌',
+      initVal: card.hidden || 'false',
+      tooltip: '闅愯棌鍚庢寜閽湪椤甸潰涓笉鏄剧ず锛屼笖涓嶅弬涓庢潈闄愬垎閰嶃��',
+      required: false,
+      options: [{
+        value: 'false',
+        text: '鍚�'
+      }, {
+        value: 'true',
+        text: '鏄�'
+      }]
+    },
+    {
+      type: 'radio',
+      key: 'progress',
+      label: '杩涘害鎻愮ず',
+      initVal: card.progress || 'number',
+      required: false,
+      options: [{
+        value: 'number',
+        text: '鍓╀綑鏁�'
+      }, {
+        value: 'progressbar',
+        text: '杩涘害鏉�'
+      }]
+    }
+  ]
+
+  return forms
+}
diff --git a/src/menu/components/share/actioncomponent/index.jsx b/src/menu/components/share/actioncomponent/index.jsx
index cbddcc2..4a6ebd9 100644
--- a/src/menu/components/share/actioncomponent/index.jsx
+++ b/src/menu/components/share/actioncomponent/index.jsx
@@ -4,7 +4,7 @@
 import { Modal, notification, Button } from 'antd'
 
 import Utils, { FuncUtils } from '@/utils/utils.js'
-import { getActionForm } from './formconfig'
+import { getActionForm, getBaseTableActionForm } from './formconfig'
 import asyncSpinComponent from '@/utils/asyncSpinComponent'
 
 import MKEmitter from '@/utils/events.js'
@@ -169,6 +169,15 @@
       functip = ''
     }
 
+    if (config.subtype === 'basetable') {
+      this.setState({
+        visible: true,
+        card: card,
+        formlist: getBaseTableActionForm(card, functip, config, usefulFields)
+      })
+      return
+    }
+
     let supId = ''
     if (config.setting && config.setting.supModule) {
       let pid = config.setting.supModule[config.setting.supModule.length - 1]
@@ -218,7 +227,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 => {
@@ -231,14 +240,23 @@
         }
 
         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.indexOf('border') > -1 || btn.class === 'default') {
+              btn.style = {color: color[_c], backgroundColor: '#fff', borderColor: color[_c]}
             } else {
-              btn.style.color = '#ffffff'
-              btn.style.backgroundColor = color[btn.class]
+              btn.style = {color: '#fff', backgroundColor: color[_c], borderColor: color[_c]}
+            }
+          } 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
@@ -491,7 +509,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}
diff --git a/src/menu/components/table/base-table/columns/editColumn/formconfig.jsx b/src/menu/components/table/base-table/columns/editColumn/formconfig.jsx
index 7630d36..8938741 100644
--- a/src/menu/components/table/base-table/columns/editColumn/formconfig.jsx
+++ b/src/menu/components/table/base-table/columns/editColumn/formconfig.jsx
@@ -3,7 +3,6 @@
  * @param {object} card       // 鎼滅储鏉′欢瀵硅薄
  */
 export function getColumnForm (card, fields = []) {
-  let appType = sessionStorage.getItem('appType')
   let roleList = sessionStorage.getItem('sysRoles')
   if (roleList) {
     try {
@@ -15,13 +14,7 @@
     roleList = []
   }
 
-  let menulist = []
-
-  if (appType === 'pc') {
-    menulist = sessionStorage.getItem('appMenus')
-  } else if (!appType) {
-    menulist = sessionStorage.getItem('fstMenuList')
-  }
+  let menulist = sessionStorage.getItem('fstMenuList')
 
   if (menulist) {
     try {
@@ -69,10 +62,6 @@
     })
   }
 
-  if (!card.linkurl && (!card.linkmenu || card.linkmenu.length === 0)) {
-    card.perspective = ''
-  }
-
   return [
     {
       type: 'text',
@@ -90,20 +79,19 @@
       options: options
     },
     {
-      type: 'select',
+      type: card.isSub ? 'select' : 'text',
       key: 'field',
       label: '瀛楁',
       initVal: card.field,
       required: true,
-      options: fields
+      options: card.isSub ? fields : []
     },
     {
-      type: 'select',
+      type: 'text',
       key: 'nameField',
       label: '鍚嶇О瀛楁',
       initVal: card.nameField || '',
-      required: false,
-      options: [{uuid: 'empty', field: '', label: '绌�'}, ...fields]
+      required: false
     },
     {
       type: 'number',
@@ -335,24 +323,21 @@
         value: 'linkurl',
         text: '閾炬帴'
       }],
-      forbidden: appType === 'mob'
     },
     {
-      type: appType === 'pc' ? 'select' : 'cascader',
+      type: 'cascader',
       key: 'linkmenu',
       label: '鑿滃崟',
-      initVal: card.linkmenu || (appType === 'pc' ? '' : []),
+      initVal: card.linkmenu || [],
       required: true,
-      options: menulist,
-      forbidden: appType === 'mob'
+      options: menulist
     },
     {
       type: 'textarea',
       key: 'linkurl',
       label: '閾炬帴鍦板潃',
       initVal: card.linkurl || '',
-      required: true,
-      forbidden: appType === 'mob'
+      required: true
     },
     {
       type: 'multiselect',
@@ -361,19 +346,6 @@
       initVal: card.linkfields || [],
       required: false,
       options: fields,
-      forbidden: appType === 'mob'
-    },
-    {
-      type: 'radio',
-      key: 'open',
-      label: '鎵撳紑鏂瑰紡',
-      initVal: card.open || 'blank',
-      required: false,
-      forbid: appType !== 'pc',
-      options: [
-        { value: 'blank', text: '鏂扮獥鍙�' },
-        { value: 'self', text: '褰撳墠绐楀彛' }
-      ]
     },
     {
       type: 'radio',
@@ -402,8 +374,7 @@
       label: '榛戝悕鍗�',
       initVal: card.blacklist || [],
       required: false,
-      options: roleList,
-      forbidden: appType === 'mob'
+      options: roleList
     }
   ]
 }
diff --git a/src/menu/components/table/base-table/columns/index.jsx b/src/menu/components/table/base-table/columns/index.jsx
index a928fa8..5292b18 100644
--- a/src/menu/components/table/base-table/columns/index.jsx
+++ b/src/menu/components/table/base-table/columns/index.jsx
@@ -15,7 +15,6 @@
 const EditColumn = asyncIconComponent(() => import('./editColumn'))
 const MarkColumn = asyncIconComponent(() => import('@/menu/components/share/markcomponent'))
 const CardCellComponent = asyncComponent(() => import('@/menu/components/card/cardcellcomponent'))
-const MobPagination = asyncIconComponent(() => import('@/menu/components/share/mobPagination'))
 const PasteComponent = asyncIconComponent(() => import('@/components/paste'))
 
 class HeaderCol extends Component {
@@ -138,8 +137,7 @@
 
     return !is(fromJS(column), fromJS(nextProps.column)) ||
       !is(fromJS(config.columns), fromJS(nextProps.config.columns)) ||
-      !is(fromJS(config.action), fromJS(nextProps.config.action)) ||
-      !is(fromJS(config.search), fromJS(nextProps.config.search))
+      !is(fromJS(config.action), fromJS(nextProps.config.action))
   }
 
   render() {
@@ -192,7 +190,6 @@
   }
 
   state = {
-    appType: sessionStorage.getItem('appType'),
     tableId: '',
     data: [{uuid: Utils.getuuid()}],
     refresh: false,    // 寮哄埗鍒锋柊
@@ -252,7 +249,6 @@
 
     return !is(fromJS(this.state), fromJS(nextState)) ||
       !is(fromJS(config.wrap), fromJS(nextProps.config.wrap)) ||
-      !is(fromJS(config.search), fromJS(nextProps.config.search)) ||
       !is(fromJS(config.action), fromJS(nextProps.config.action)) ||
       config.setting.laypage !== nextProps.config.setting.laypage
   }
@@ -404,7 +400,6 @@
   }
 
   deleteCol = (col) => {
-    const { appType } = this.state
     let _columns = fromJS(this.state.columns).toJS()
 
     _columns = this.loopDelCol(_columns, col)
@@ -415,11 +410,11 @@
       this.props.updatecolumn({...this.props.config, cols: _columns})
     })
 
-    if (col.type !== 'action' || appType === 'mob') return
+    if (col.type !== 'action') return
 
     let uuids = []
     col.elements && col.elements.forEach(c => {
-      if (appType === 'pc' && c.OpenType !== 'popview') return
+      if (c.OpenType !== 'popview') return
 
       uuids.push(c.uuid)
     })
@@ -509,7 +504,7 @@
 
   render() {
     const { config } = this.props
-    const { fields, card, lineMarks, tableId, appType } = this.state
+    const { fields, card, lineMarks, tableId } = this.state
     const components = {
       header: {
         cell: DragableHeaderCol
@@ -537,16 +532,15 @@
             dataSource={this.state.data}
             rowSelection={config.wrap.tableType ? { type: 'radio' } : null}
             columns={columns}
-            pagination={appType !== 'mob' ? {
+            pagination={{
               current: 1,
               pageSize: 10,
               pageSizeOptions: ['10', '25', '50', '100', '500', '1000'],
               showSizeChanger: true,
               total: 58,
               showTotal: (total, range) => `${range[0]}-${range[1]} 鍏� ${total} 鏉
-            } : false}
+            }}
           />
-          {appType === 'mob' && config.setting.laypage !== 'fasle' ? <MobPagination /> : null}
         </DndProvider>
         <EditColumn column={card} fields={fields} submitCol={this.submitCol} cancelCol={this.cancelCol}/>
       </div>
diff --git a/src/menu/components/table/base-table/index.jsx b/src/menu/components/table/base-table/index.jsx
index 4979704..9620ec9 100644
--- a/src/menu/components/table/base-table/index.jsx
+++ b/src/menu/components/table/base-table/index.jsx
@@ -38,8 +38,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',    // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: true,     // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: true,   // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
diff --git a/src/menu/components/table/base-table/index.scss b/src/menu/components/table/base-table/index.scss
index a58b3c1..a5c6fd6 100644
--- a/src/menu/components/table/base-table/index.scss
+++ b/src/menu/components/table/base-table/index.scss
@@ -30,24 +30,6 @@
       }
     }
   }
-  .model-table-search-list.length0 {
-    min-height: 10px;
-    border-bottom: 0;
-    >.quickly-add {
-      right: unset;
-      left: -8px;
-      bottom: 0;
-    }
-    >.ant-row {
-      display: none;
-    }
-    >.ant-switch {
-      display: none;
-    }
-  }
-  .model-table-search-list.length0 + .length0 {
-    margin-top: -25px;
-  }
   .anticon-tool {
     position: absolute;
     z-index: 2;
diff --git a/src/menu/components/table/base-table/options.jsx b/src/menu/components/table/base-table/options.jsx
index 6bf71d0..3af1d39 100644
--- a/src/menu/components/table/base-table/options.jsx
+++ b/src/menu/components/table/base-table/options.jsx
@@ -2,58 +2,7 @@
  * @description Wrap琛ㄥ崟閰嶇疆淇℃伅
  */
 export default function (wrap, action = [], columns = []) {
-  let roleList = sessionStorage.getItem('sysRoles')
-  let appType = sessionStorage.getItem('appType')
-
-  if (roleList) {
-    try {
-      roleList = JSON.parse(roleList)
-    } catch (e) {
-      roleList = []
-    }
-  } else {
-    roleList = []
-  }
-
   const wrapForm = [
-    // {
-    //   type: 'text',
-    //   field: 'title',
-    //   label: '鏍囬',
-    //   initval: wrap.title || '',
-    //   required: false
-    // },
-    // {
-    //   type: 'text',
-    //   field: 'name',
-    //   label: '缁勪欢鍚嶇О',
-    //   initval: wrap.name || '',
-    //   tooltip: '鐢ㄤ簬缁勪欢闂寸殑鍖哄垎銆�',
-    //   required: true
-    // },
-    // {
-    //   type: 'number',
-    //   field: 'width',
-    //   label: '瀹藉害',
-    //   initval: wrap.width || 24,
-    //   tooltip: '鏍呮牸甯冨眬锛屾瘡琛岀瓑鍒嗕负24鍒椼��',
-    //   min: 1,
-    //   max: 24,
-    //   precision: 0,
-    //   required: true
-    // },
-    {
-      type: 'number',
-      field: 'height',
-      label: '琛ㄦ牸楂樺害',
-      initval: wrap.height || '',
-      tooltip: '琛ㄦ牸楂樺害锛岀┖鍊兼椂楂樺害鑷�傚簲銆�',
-      min: 10,
-      max: 3000,
-      precision: 0,
-      required: false,
-      forbid: appType === 'mob'
-    },
     {
       type: 'radio',
       field: 'tableType',
@@ -82,26 +31,14 @@
     },
     {
       type: 'radio',
-      field: 'tableHeader',
-      label: '琛ㄥご',
-      initval: wrap.tableHeader || 'show',
-      required: false,
-      options: [
-        {value: 'show', label: '鏄剧ず'},
-        {value: 'hidden', label: '闅愯棌'},
-      ]
-    },
-    {
-      type: 'radio',
-      field: 'collapse',
-      label: '鍙敹璧�',
-      initval: wrap.collapse || 'false',
+      field: 'actionfixed',
+      label: '鎸夐挳鍥哄畾',
+      initval: wrap.actionfixed || 'false',
       required: false,
       options: [
         {value: 'true', label: '鏄�'},
         {value: 'false', label: '鍚�'},
-      ],
-      forbid: appType === 'mob' || appType === 'pc'
+      ]
     },
     {
       type: 'radio',
@@ -119,17 +56,6 @@
     },
     {
       type: 'radio',
-      field: 'mode',
-      label: '妯″紡',
-      initval: wrap.mode || 'default',
-      required: false,
-      options: [
-        {value: 'default', label: '甯歌'},
-        {value: 'ghost', label: '閫忔槑'},
-      ]
-    },
-    {
-      type: 'radio',
       field: 'selected',
       label: '棣栬閫変腑',
       initval: wrap.selected || 'false',
@@ -139,6 +65,18 @@
         {value: 'false', label: '鏃�'},
         {value: 'init', label: '鍒濆鍖�'},
         {value: 'always', label: '鏁版嵁鍔犺浇'},
+      ]
+    },
+    {
+      type: 'radio',
+      field: 'tableMode',
+      label: '鍔犺浇妯″紡',
+      initval: wrap.tableMode || 'compatible',
+      tooltip: '浣跨敤鎬ラ�熸ā寮忔椂锛岃〃鏍间腑鐨勬爣璁般�佸弻鍑讳簨浠躲�佹牸寮忓寲銆佽鍚堝苟銆佸墠缂�銆佸悗缂�銆佸瓧娈甸�忚绛夋晥鏋滃皢鏃犳晥锛屼笖鏁版嵁閮戒細浠ユ枃鏈牸寮忔樉绀恒��',
+      required: false,
+      options: [
+        {value: 'compatible', label: '鍏煎'},
+        {value: 'fast', label: '鎬ラ��'},
       ]
     },
     {
@@ -162,6 +100,17 @@
       required: false
     },
     {
+      type: 'number',
+      field: 'height',
+      label: '琛ㄦ牸楂樺害',
+      initval: wrap.height || '',
+      tooltip: '琛ㄦ牸楂樺害锛岀┖鍊兼椂楂樺害鑷�傚簲銆�',
+      min: 10,
+      max: 3000,
+      precision: 0,
+      required: false,
+    },
+    {
       type: 'select',
       field: 'doubleClick',
       label: '鍙屽嚮浜嬩欢',
@@ -170,7 +119,6 @@
       required: false,
       allowClear: true,
       options: action.map(item => ({value: item.uuid, label: item.label})),
-      forbid: appType === 'mob'
     },
     {
       type: 'select',
@@ -192,52 +140,7 @@
       initval: wrap.controlVal || '',
       tooltip: '褰撳瓧娈靛�间笌绂佺敤鍊肩浉绛夋椂锛岃鏁版嵁浼氱鐢紝澶氫釜鍊肩敤閫楀彿鍒嗛殧銆�',
       required: false
-    },
-    {
-      type: 'radio',
-      field: 'empty',
-      label: '绌哄�奸殣钘�',
-      initval: wrap.empty || 'show',
-      tooltip: '褰撴煡璇㈡暟鎹负绌烘椂锛岄殣钘忚缁勪欢銆�',
-      required: false,
-      options: [
-        {value: 'show', label: '鍚�'},
-        {value: 'hidden', label: '鏄�'},
-      ],
-    },
-    {
-      type: 'radio',
-      field: 'supKey',
-      label: '涓婄骇涓婚敭',
-      initval: wrap.supKey || 'true',
-      tooltip: '褰撹缃笂绾х粍浠舵椂锛屼笂绾т富閿�间负绌烘槸鍚﹁繘琛屾暟鎹煡璇€��',
-      required: false,
-      options: [
-        {value: 'true', label: '楠岃瘉'},
-        {value: 'false', label: '蹇界暐'},
-      ],
-    },
-    {
-      type: 'radio',
-      field: 'permission',
-      label: '鏉冮檺楠岃瘉',
-      initval: wrap.permission || 'false',
-      required: false,
-      options: [
-        {value: 'true', label: '鍚敤'},
-        {value: 'false', label: '绂佺敤'},
-      ],
-      forbid: !appType
-    },
-    {
-      type: 'multiselect',
-      field: 'blacklist',
-      label: '榛戝悕鍗�',
-      initval: wrap.blacklist || [],
-      required: false,
-      options: roleList,
-      forbid: !!appType
-    },
+    }
   ]
 
   return wrapForm
diff --git a/src/menu/components/table/edit-table/columns/index.jsx b/src/menu/components/table/edit-table/columns/index.jsx
index 09ab9f2..e7a7c56 100644
--- a/src/menu/components/table/edit-table/columns/index.jsx
+++ b/src/menu/components/table/edit-table/columns/index.jsx
@@ -128,8 +128,7 @@
 
     return !is(fromJS(column), fromJS(nextProps.column)) ||
       !is(fromJS(config.columns), fromJS(nextProps.config.columns)) ||
-      !is(fromJS(config.action), fromJS(nextProps.config.action)) ||
-      !is(fromJS(config.search), fromJS(nextProps.config.search))
+      !is(fromJS(config.action), fromJS(nextProps.config.action))
   }
 
   render() {
@@ -243,7 +242,6 @@
     return !is(fromJS(this.state), fromJS(nextState)) ||
       !is(fromJS(config.wrap), fromJS(nextProps.config.wrap)) ||
       !is(fromJS(config.submit), fromJS(nextProps.config.submit)) ||
-      !is(fromJS(config.search), fromJS(nextProps.config.search)) ||
       !is(fromJS(config.action), fromJS(nextProps.config.action)) ||
       config.setting.laypage !== nextProps.config.setting.laypage
   }
diff --git a/src/menu/components/table/edit-table/index.jsx b/src/menu/components/table/edit-table/index.jsx
index 029fcd2..d95042e 100644
--- a/src/menu/components/table/edit-table/index.jsx
+++ b/src/menu/components/table/edit-table/index.jsx
@@ -43,8 +43,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',    // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: true,     // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -370,7 +368,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/table/normal-table/columns/index.jsx b/src/menu/components/table/normal-table/columns/index.jsx
index f2ef11f..d6097f3 100644
--- a/src/menu/components/table/normal-table/columns/index.jsx
+++ b/src/menu/components/table/normal-table/columns/index.jsx
@@ -12,7 +12,7 @@
 import './index.scss'
 
 const { confirm } = Modal
-const { Paragraph } = Typography
+const { Paragraph } = Typography 
 const EditColumn = asyncIconComponent(() => import('./editColumn'))
 const MarkColumn = asyncIconComponent(() => import('@/menu/components/share/markcomponent'))
 const CardCellComponent = asyncComponent(() => import('@/menu/components/card/cardcellcomponent'))
@@ -144,8 +144,7 @@
 
     return !is(fromJS(column), fromJS(nextProps.column)) ||
       !is(fromJS(config.columns), fromJS(nextProps.config.columns)) ||
-      !is(fromJS(config.action), fromJS(nextProps.config.action)) ||
-      !is(fromJS(config.search), fromJS(nextProps.config.search))
+      !is(fromJS(config.action), fromJS(nextProps.config.action))
   }
 
   render() {
@@ -258,7 +257,6 @@
 
     return !is(fromJS(this.state), fromJS(nextState)) ||
       !is(fromJS(config.wrap), fromJS(nextProps.config.wrap)) ||
-      !is(fromJS(config.search), fromJS(nextProps.config.search)) ||
       !is(fromJS(config.action), fromJS(nextProps.config.action)) ||
       config.setting.laypage !== nextProps.config.setting.laypage
   }
diff --git a/src/menu/components/table/normal-table/index.jsx b/src/menu/components/table/normal-table/index.jsx
index 4092f00..4b65160 100644
--- a/src/menu/components/table/normal-table/index.jsx
+++ b/src/menu/components/table/normal-table/index.jsx
@@ -45,8 +45,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',    // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: true,     // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: true,   // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -424,7 +422,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/components/tabs/antv-tabs/dragabletabs.jsx b/src/menu/components/tabs/antv-tabs/dragabletabs.jsx
index fbb97de..71b5bdb 100644
--- a/src/menu/components/tabs/antv-tabs/dragabletabs.jsx
+++ b/src/menu/components/tabs/antv-tabs/dragabletabs.jsx
@@ -62,6 +62,8 @@
     const dragIndex = newOrder.indexOf(dragKey)
     const hoverIndex = newOrder.indexOf(hoverKey)
 
+    if (dragIndex === -1) return
+
     newOrder.splice(dragIndex, 1)
     newOrder.splice(hoverIndex, 0, dragKey)
     
diff --git a/src/menu/components/tabs/antv-tabs/index.jsx b/src/menu/components/tabs/antv-tabs/index.jsx
index a272815..80cd4c0 100644
--- a/src/menu/components/tabs/antv-tabs/index.jsx
+++ b/src/menu/components/tabs/antv-tabs/index.jsx
@@ -44,17 +44,15 @@
       let _tabs = {
         uuid: tabs.uuid,
         type: tabs.type,
-        tabId: tabs.tabId || '',
-        parentId: tabs.parentId || '',
         subtype: tabs.subtype,
         width: 24,
         name: tabs.name,
         setting: {width: 24, position: 'top', tabStyle: 'line', name: tabs.name},
         style: { marginLeft: '8px', marginRight: '8px', marginTop: '8px', marginBottom: '8px' },
         subtabs: [
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 1', icon: '', components: [] },
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 2', icon: '', components: [] },
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 3', icon: '', components: [] }
+          { uuid: Utils.getuuid(), label: 'Tab 1', icon: '', components: [] },
+          { uuid: Utils.getuuid(), label: 'Tab 2', icon: '', components: [] },
+          { uuid: Utils.getuuid(), label: 'Tab 3', icon: '', components: [] }
         ]
       }
       this.setState({
@@ -74,12 +72,6 @@
     return !is(fromJS(this.state), fromJS(nextState))
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitSearch', this.getSearch)
-    MKEmitter.addListener('tabsChange', this.handleTabsChange)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
   /**
    * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆
    */
@@ -87,42 +79,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitSearch', this.getSearch)
-    MKEmitter.removeListener('tabsChange', this.handleTabsChange)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { tabs } = this.state
-
-    if (tabs.subtabs.findIndex(tab => tab.uuid === parentId) === -1) return
-
-    let _tabs = fromJS(tabs).toJS()
-    let _tabs_ = fromJS(tabs).toJS()
-
-    let components = []
-    _tabs.subtabs.forEach(tab => {
-      if (tab.uuid === parentId) {
-        components = tab.components.map(item => {
-          if (keys.includes(item.uuid)) {
-            item.style = {...item.style, ...style}
-          }
-          return item
-        })
-        tab.components = []
-      }
-    })
-
-    _tabs_.subtabs = _tabs_.subtabs.map(tab => {
-      if (tab.uuid === parentId) {
-        tab.components = components
-      }
-      return tab
-    })
-
-    this.setState({tabs: _tabs}, () => {
-      this.updateComponent(_tabs_)
-    })
   }
 
   changeStyle = () => {
@@ -141,12 +97,18 @@
     this.props.updateConfig(_card)
   }
 
-  handleTabsChange = (parentId) => {
-    const { tabs } = this.state
-
-    if (parentId === tabs.parentId) {
-      MKEmitter.emit('tabsChange', tabs.uuid)
-    }
+  getSubIds = (components, ids) => {
+    components.forEach(item => {
+      if (item.type === 'tabs') {
+        item.subtabs.forEach(tab => {
+          this.getSubIds(tab.components, ids)
+        })
+      } else if (item.type === 'group') {
+        this.getSubIds(item.components, ids)
+      } else {
+        ids.push(item.uuid)
+      }
+    })
   }
 
   updateComponent = (component) => {
@@ -154,7 +116,11 @@
 
     if (!is(fromJS(tabs.setting), fromJS(component.setting)) || !is(fromJS(tabs.style), fromJS(component.style))) {
       // 娉ㄥ唽浜嬩欢-鏍囩鍙樺寲锛岄�氱煡鏍囩鍐呭厓绱�
-      MKEmitter.emit('tabsChange', tabs.uuid)
+      let ids = []
+      tabs.subtabs.forEach(tab => {
+        this.getSubIds(tab.components, ids)
+      })
+      MKEmitter.emit('tabsChange', ids.join(','))
     }
 
     component.width = component.setting.width
@@ -236,59 +202,12 @@
     this.props.updateConfig(tabs)
   }
 
-  getSearch = (config) => {
-    const { tabs } = this.state
-
-    if (tabs.uuid !== config.uuid) return
-
-    let _tabs = fromJS(tabs).toJS()
-
-    _tabs.subtabs = _tabs.subtabs.map(t => {
-      if (t.uuid === config.tabId) {
-        t.search = config.search
-      }
-      return t
-    })
-
-    this.setState({
-      tabs: _tabs
-    })
-    this.props.updateConfig(_tabs)
-  }
-
-  setSearch = (tab) => {
-    const { tabs } = this.state
-    let card = {
-      uuid: tabs.uuid,
-      tabId: tab.uuid,
-      search: tab.search
-    }
-
-    if (!card.search) {
-      card.search = {
-        floor: 1,
-        setting: { type: 'title', field: '', title: '', focus: 'true', btn: 'hidden' },
-        groups: [],
-        fields: []
-      }
-    }
-    MKEmitter.emit('changeSearch', card)
-  }
-
-  clickComponent = (e) => {
-    if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
-      e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.tabs)
-    }
-  }
-
   getTabForms = (tab) => {
     const { tabs } = this.state
 
     if (!tab) {
       tab = {
         uuid: '',
-        parentId: tabs.uuid,
         label: '',
         icon: '',
         components: []
@@ -356,7 +275,7 @@
     let _style = resetStyle(tabs.style)
 
     return (
-      <div className={'menu-tabs-edit-box ' + (tabs.setting.display || '')} style={_style} onClick={this.clickComponent} id={tabs.uuid}>
+      <div className={'menu-tabs-edit-box ' + (tabs.setting.display || '')} style={_style} id={tabs.uuid}>
         <DraggableTabs defaultActiveKey={defaultActiveKey} tabBarStyle={{background: tabs.setting.backgroundColor || 'transparent'}} tabPosition={tabs.setting.position} type={tabs.setting.tabStyle} tabsMove={this.moveSwitch} onChange={this.onChange}>
           {tabs.subtabs.map(tab => (
             <TabPane tab={
@@ -372,8 +291,6 @@
                 <span style={{textDecoration: tab.hide === 'true' ? 'line-through' : 'none'}}>{tab.icon ? <MkIcon type={tab.icon} /> : null}{tab.label}</span>
               </Popover>
             } key={tab.uuid} style={{backgroundColor: tab.backgroundColor || 'transparent'}}>
-              {/* {appType === 'mob' && tabs.setting.position === 'top' && tabs.setting.display === 'inline-block' && tab.hasSearch === 'icon' ?
-                <SearchOutlined className="search-icon" onDoubleClick={() => this.setSearch(tab)}/> : null} */}
               <TabComponents config={tab} handleList={this.updateTabComponent} deleteCard={this.deleteCard} />
             </TabPane>
           ))}
diff --git a/src/menu/components/tabs/paste/index.jsx b/src/menu/components/tabs/paste/index.jsx
index 0f6fb9a..5fadf9c 100644
--- a/src/menu/components/tabs/paste/index.jsx
+++ b/src/menu/components/tabs/paste/index.jsx
@@ -24,10 +24,7 @@
     this.setState({visible: true})
   }
 
-  resetconfig = (item, Tab, copyBtns, uuids = {}, floor) => {
-    item.tabId = Tab.uuid
-    item.parentId = Tab.parentId
-    
+  resetconfig = (item, copyBtns, uuids = {}) => {
     if (item.type === 'tabs') {
       uuids[item.uuid] = MenuUtils.getuuid()
       item.uuid = uuids[item.uuid]
@@ -37,14 +34,9 @@
       item.subtabs.forEach(tab => {
         uuids[tab.uuid] = MenuUtils.getuuid()
         tab.uuid = uuids[tab.uuid]
-        tab.parentId = item.uuid
-
-        if (floor >= 3) {
-          tab.components = tab.components.filter(cell => cell.type !== 'tabs')
-        }
 
         tab.components = tab.components.map(cell => {
-          cell = this.resetconfig(cell, tab, copyBtns, uuids, floor + 1)
+          cell = this.resetconfig(cell, copyBtns, uuids)
           return cell
         })
       })
@@ -55,9 +47,6 @@
       item.name = item.setting.name
 
       item.components = item.components.map(cell => {
-        cell.tabId = Tab.uuid
-        cell.parentId = Tab.parentId
-
         cell = MenuUtils.resetComponentConfig(cell, copyBtns, uuids)
 
         return cell
@@ -100,9 +89,8 @@
       }
 
       let copyBtns = new Map()
-      let floor = MenuUtils.getFloor(Tab.parentId)
 
-      res = this.resetconfig(res, Tab, copyBtns, {}, floor)
+      res = this.resetconfig(res, copyBtns, {})
 
       delete res.copyType
       
diff --git a/src/menu/components/tabs/tabcomponents/index.jsx b/src/menu/components/tabs/tabcomponents/index.jsx
index d6bf416..ccecb5f 100644
--- a/src/menu/components/tabs/tabcomponents/index.jsx
+++ b/src/menu/components/tabs/tabcomponents/index.jsx
@@ -84,16 +84,6 @@
           })
           return
         }
-      } else if (item.component === 'tabs') {
-        let floor = MenuUtils.getFloor(config.parentId)
-        if (floor >= 3 ) {
-          notification.warning({
-            top: 92,
-            message: '鏍囩椤垫渶澶氫负涓夐噸缁撴瀯锛�',
-            duration: 5
-          })
-          return
-        }
       }
 
       let name = ''
@@ -129,8 +119,6 @@
       
       let newcard = {
         uuid: Utils.getuuid(),
-        tabId: config.uuid,
-        parentId: config.parentId,
         type: item.component,
         subtype: item.subtype,
         config: item.config,
diff --git a/src/menu/components/tabs/table-tabs/dragabletabs.jsx b/src/menu/components/tabs/table-tabs/dragabletabs.jsx
index fbb97de..fe563ff 100644
--- a/src/menu/components/tabs/table-tabs/dragabletabs.jsx
+++ b/src/menu/components/tabs/table-tabs/dragabletabs.jsx
@@ -19,6 +19,9 @@
 
     if (dragKey === hoverKey) {
       return;
+    } else if (!dragKey) {
+      monitor.getItem().added = true
+      props.tabsDrop(hoverKey)
     }
 
     props.moveTabNode(dragKey, hoverKey)
@@ -35,10 +38,10 @@
   }
 }
 
-const WrapTabNode = DropTarget('DND_NODE', cardTarget, connect => ({
+const WrapTabNode = DropTarget('menu', cardTarget, connect => ({
   connectDropTarget: connect.dropTarget(),
 }))(
-  DragSource('DND_NODE', cardSource, (connect, monitor) => ({
+  DragSource('menu', cardSource, (connect, monitor) => ({
     connectDragSource: connect.dragSource(),
     isDragging: monitor.isDragging(),
   }))(TabNode)
@@ -62,6 +65,11 @@
     const dragIndex = newOrder.indexOf(dragKey)
     const hoverIndex = newOrder.indexOf(hoverKey)
 
+    if (dragIndex === -1) {
+      this.props.tabsDrop(hoverKey, dragKey)
+      return
+    }
+
     newOrder.splice(dragIndex, 1)
     newOrder.splice(hoverIndex, 0, dragKey)
     
@@ -74,7 +82,7 @@
   renderTabBar = (props, DefaultTabBar) => (
     <DefaultTabBar {...props}>
       {node => (
-        <WrapTabNode key={node.key} index={node.key} moveTabNode={this.moveTabNode}>
+        <WrapTabNode key={node.key} index={node.key} moveTabNode={this.moveTabNode} tabsDrop={this.props.tabsDrop}>
           {node}
         </WrapTabNode>
       )}
@@ -82,10 +90,7 @@
   )
 
   shouldComponentUpdate (nextProps, nextState) {
-    return !is(fromJS(this.state), fromJS(nextState)) ||
-      !is(fromJS(nextProps.children), fromJS(this.props.children)) ||
-      nextProps.tabPosition !== this.props.tabPosition ||
-      nextProps.type !== this.props.type
+    return !is(fromJS(this.state), fromJS(nextState)) || !is(fromJS(nextProps.children), fromJS(this.props.children))
   }
 
   render() {
diff --git a/src/menu/components/tabs/table-tabs/index.jsx b/src/menu/components/tabs/table-tabs/index.jsx
index a272815..d5cfa87 100644
--- a/src/menu/components/tabs/table-tabs/index.jsx
+++ b/src/menu/components/tabs/table-tabs/index.jsx
@@ -2,7 +2,7 @@
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
 import { Tabs, Popover, Modal } from 'antd'
-import { PlusOutlined, CloseOutlined, EditOutlined, DeleteOutlined, FontColorsOutlined, ToolOutlined } from '@ant-design/icons'
+import { PlusOutlined, CloseOutlined, EditOutlined, DeleteOutlined, ToolOutlined } from '@ant-design/icons'
 
 import MKEmitter from '@/utils/events.js'
 import asyncComponent from '@/utils/asyncComponent'
@@ -12,13 +12,13 @@
 import { resetStyle } from '@/utils/utils-custom.js'
 import MenuUtils from '@/utils/utils-custom.js'
 import Utils from '@/utils/utils.js'
-import { getTabForm, getTabsSetForm } from './options'
+import { getTabForm } from './options'
 import './index.scss'
 
 const NormalForm = asyncIconComponent(() => import('@/components/normalform'))
-const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent'))
+// const CopyComponent = asyncIconComponent(() => import('@/menu/components/share/copycomponent'))
 const PasteComponent = asyncIconComponent(() => import('../paste'))
-const TabComponents = asyncComponent(() => import('../tabcomponents'))
+const BaseTable = asyncComponent(() => import('@/menu/components/table/base-table'))
 
 const { TabPane } = Tabs
 const { confirm } = Modal
@@ -31,10 +31,8 @@
   }
 
   state = {
-    appType: sessionStorage.getItem('appType'),
     tabs: null,
-    editab: null,
-    defaultActiveKey: ''
+    editab: null
   }
 
   UNSAFE_componentWillMount () {
@@ -44,27 +42,21 @@
       let _tabs = {
         uuid: tabs.uuid,
         type: tabs.type,
-        tabId: tabs.tabId || '',
-        parentId: tabs.parentId || '',
         subtype: tabs.subtype,
         width: 24,
         name: tabs.name,
-        setting: {width: 24, position: 'top', tabStyle: 'line', name: tabs.name},
+        setting: {},
         style: { marginLeft: '8px', marginRight: '8px', marginTop: '8px', marginBottom: '8px' },
         subtabs: [
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 1', icon: '', components: [] },
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 2', icon: '', components: [] },
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 3', icon: '', components: [] }
+          { uuid: Utils.getuuid(), label: '瀛愯〃1', icon: '', components: [{uuid: Utils.getuuid(), type: 'table', subtype: 'basetable', isNew: true}] },
         ]
       }
       this.setState({
-        defaultActiveKey: _tabs.subtabs[0].uuid,
         tabs: _tabs
       })
       this.props.updateConfig(_tabs)
     } else {
       this.setState({
-        defaultActiveKey: window.GLOB.TabsMap.get(tabs.uuid) || '',
         tabs: fromJS(tabs).toJS()
       })
     }
@@ -74,11 +66,7 @@
     return !is(fromJS(this.state), fromJS(nextState))
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitSearch', this.getSearch)
-    MKEmitter.addListener('tabsChange', this.handleTabsChange)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
-  }
+  componentDidMount () {}
 
   /**
    * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆
@@ -87,42 +75,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitSearch', this.getSearch)
-    MKEmitter.removeListener('tabsChange', this.handleTabsChange)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { tabs } = this.state
-
-    if (tabs.subtabs.findIndex(tab => tab.uuid === parentId) === -1) return
-
-    let _tabs = fromJS(tabs).toJS()
-    let _tabs_ = fromJS(tabs).toJS()
-
-    let components = []
-    _tabs.subtabs.forEach(tab => {
-      if (tab.uuid === parentId) {
-        components = tab.components.map(item => {
-          if (keys.includes(item.uuid)) {
-            item.style = {...item.style, ...style}
-          }
-          return item
-        })
-        tab.components = []
-      }
-    })
-
-    _tabs_.subtabs = _tabs_.subtabs.map(tab => {
-      if (tab.uuid === parentId) {
-        tab.components = components
-      }
-      return tab
-    })
-
-    this.setState({tabs: _tabs}, () => {
-      this.updateComponent(_tabs_)
-    })
   }
 
   changeStyle = () => {
@@ -141,22 +93,7 @@
     this.props.updateConfig(_card)
   }
 
-  handleTabsChange = (parentId) => {
-    const { tabs } = this.state
-
-    if (parentId === tabs.parentId) {
-      MKEmitter.emit('tabsChange', tabs.uuid)
-    }
-  }
-
   updateComponent = (component) => {
-    const { tabs } = this.state
-
-    if (!is(fromJS(tabs.setting), fromJS(component.setting)) || !is(fromJS(tabs.style), fromJS(component.style))) {
-      // 娉ㄥ唽浜嬩欢-鏍囩鍙樺寲锛岄�氱煡鏍囩鍐呭厓绱�
-      MKEmitter.emit('tabsChange', tabs.uuid)
-    }
-
     component.width = component.setting.width
     component.name = component.setting.name
 
@@ -223,6 +160,25 @@
     this.props.updateConfig(tabs)
   }
 
+  dropTable = (hoverKey, dragKey) => {
+    // let tabs = fromJS(this.state.tabs).toJS()
+    // let subtab = {}
+    // tabs.subtabs.forEach(item => {
+    //   subtab[item.uuid] = item
+    // })
+
+    // tabs.subtabs = []
+
+    // order.forEach(item => {
+    //   if (subtab[item]) {
+    //     tabs.subtabs.push(subtab[item])
+    //   }
+    // })
+
+    // this.setState({tabs})
+    // this.props.updateConfig(tabs)
+  }
+
   insert = (item, tab) => {
     let tabs = fromJS(this.state.tabs).toJS()
 
@@ -236,59 +192,12 @@
     this.props.updateConfig(tabs)
   }
 
-  getSearch = (config) => {
-    const { tabs } = this.state
-
-    if (tabs.uuid !== config.uuid) return
-
-    let _tabs = fromJS(tabs).toJS()
-
-    _tabs.subtabs = _tabs.subtabs.map(t => {
-      if (t.uuid === config.tabId) {
-        t.search = config.search
-      }
-      return t
-    })
-
-    this.setState({
-      tabs: _tabs
-    })
-    this.props.updateConfig(_tabs)
-  }
-
-  setSearch = (tab) => {
-    const { tabs } = this.state
-    let card = {
-      uuid: tabs.uuid,
-      tabId: tab.uuid,
-      search: tab.search
-    }
-
-    if (!card.search) {
-      card.search = {
-        floor: 1,
-        setting: { type: 'title', field: '', title: '', focus: 'true', btn: 'hidden' },
-        groups: [],
-        fields: []
-      }
-    }
-    MKEmitter.emit('changeSearch', card)
-  }
-
-  clickComponent = (e) => {
-    if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
-      e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.tabs)
-    }
-  }
-
   getTabForms = (tab) => {
     const { tabs } = this.state
 
     if (!tab) {
       tab = {
         uuid: '',
-        parentId: tabs.uuid,
         label: '',
         icon: '',
         components: []
@@ -308,7 +217,6 @@
 
     editab.label = res.label
     editab.icon = res.icon
-    // editab.hasSearch = res.hasSearch || ''
     editab.hide = res.hide || 'false'
     editab.backgroundColor = res.backgroundColor
     editab.controlVal = res.controlVal || ''
@@ -336,28 +244,17 @@
     this.props.updateConfig(tabs)
   }
 
-  getTabsForms = () => {
-    const { tabs } = this.state
+  updateConfig = () => {
 
-    return getTabsSetForm(tabs.setting, tabs.uuid)
-  }
-
-  updateTabs = (res) => {
-    this.updateComponent({...this.state.tabs, setting: res})
-  }
-
-  onChange = (key) => {
-    const { tabs } = this.state
-    window.GLOB.TabsMap.set(tabs.uuid, key)
   }
 
   render() {
-    const { tabs, defaultActiveKey } = this.state
+    const { tabs } = this.state
     let _style = resetStyle(tabs.style)
 
     return (
-      <div className={'menu-tabs-edit-box ' + (tabs.setting.display || '')} style={_style} onClick={this.clickComponent} id={tabs.uuid}>
-        <DraggableTabs defaultActiveKey={defaultActiveKey} tabBarStyle={{background: tabs.setting.backgroundColor || 'transparent'}} tabPosition={tabs.setting.position} type={tabs.setting.tabStyle} tabsMove={this.moveSwitch} onChange={this.onChange}>
+      <div className={'menu-tabs-edit-box ' + (tabs.setting.display || '')} style={_style} id={tabs.uuid}>
+        <DraggableTabs tabsMove={this.moveSwitch} tabsDrop={this.dropTable}>
           {tabs.subtabs.map(tab => (
             <TabPane tab={
               <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
@@ -365,29 +262,20 @@
                   <NormalForm title="鏍囩缂栬緫" width={800} update={this.updateTab} getForms={() => this.getTabForms(tab)}>
                     <EditOutlined style={{color: '#1890ff'}} title="缂栬緫"/>
                   </NormalForm>
-                  <PasteComponent Tab={tab} insert={this.insert} />
                   <CloseOutlined className="close" onClick={() => this.delTab(tab)} />
                 </div>
               } trigger="hover">
                 <span style={{textDecoration: tab.hide === 'true' ? 'line-through' : 'none'}}>{tab.icon ? <MkIcon type={tab.icon} /> : null}{tab.label}</span>
               </Popover>
-            } key={tab.uuid} style={{backgroundColor: tab.backgroundColor || 'transparent'}}>
-              {/* {appType === 'mob' && tabs.setting.position === 'top' && tabs.setting.display === 'inline-block' && tab.hasSearch === 'icon' ?
-                <SearchOutlined className="search-icon" onDoubleClick={() => this.setSearch(tab)}/> : null} */}
-              <TabComponents config={tab} handleList={this.updateTabComponent} deleteCard={this.deleteCard} />
+            } key={tab.uuid}>
+              <BaseTable card={tab.components[0]} updateConfig={this.updateConfig} />
             </TabPane>
           ))}
         </DraggableTabs>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
-            <NormalForm title="娣诲姞鏍囩" width={800} update={this.updateTab} getForms={() => this.getTabForms()}>
-              <PlusOutlined className="plus" title="娣诲姞鏍囩"/>
-            </NormalForm>
-            <NormalForm title="鏍囩椤佃缃�" width={800} update={this.updateTabs} getForms={this.getTabsForms}>
-              <EditOutlined style={{color: '#1890ff'}} title="缂栬緫"/>
-            </NormalForm>
-            <CopyComponent type="tabs" card={tabs}/>
-            <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle}/>
+            <PlusOutlined className="plus" title="娣诲姞瀛愯〃"/>
+            <PasteComponent insert={this.insert} />
             <DeleteOutlined className="close" onClick={() => this.props.deletecomponent(tabs.uuid)} />
           </div>
         } trigger="hover">
diff --git a/src/menu/components/tabs/table-tabs/index.scss b/src/menu/components/tabs/table-tabs/index.scss
index e45bad8..9f77d18 100644
--- a/src/menu/components/tabs/table-tabs/index.scss
+++ b/src/menu/components/tabs/table-tabs/index.scss
@@ -14,15 +14,6 @@
       padding-top: 15px;
     }
   }
-  .ant-tabs-left-content {
-    padding-left: 0;
-  }
-  .ant-tabs-right-content {
-    padding-right: 0;
-  }
-  .ant-tabs-bottom-bar {
-    margin-top: 0;
-  }
 
   >.anticon-tool {
     position: absolute;
@@ -35,12 +26,6 @@
     background: rgba(255, 255, 255, 0.55);
   }
 
-  .ant-tabs.ant-tabs-left, .ant-tabs.ant-tabs-bottom {
-    .tab-shell-inner {
-      padding-top: 25px;
-    }
-  }
-
   .ant-tabs-tabpane-active {
     min-height: 200px;
   }
@@ -48,30 +33,6 @@
     min-height: 100%;
   }
 
-  .ant-tabs .ant-tabs-top-bar > .ant-tabs-nav-container {
-    min-height: 40px;
-    >.ant-tabs-tab-next:not(.ant-tabs-tab-arrow-show) + .ant-tabs-nav-wrap > .ant-tabs-nav-scroll > .ant-tabs-nav {
-      width: 100%;
-      > div > .ant-tabs-tab-disabled {
-        float: right;
-      }
-    }
-  }
-  
-  .ant-tabs .ant-tabs-left-bar .ant-tabs-tab {
-    text-align: right;
-    > span {
-      display: inline-block;
-      padding: 8px 24px;
-    }
-  }
-  .ant-tabs .ant-tabs-right-bar .ant-tabs-tab {
-    text-align: left;
-    > span {
-      display: inline-block;
-      padding: 8px 24px;
-    }
-  }
   .ant-tabs-tab {
     padding: 0px!important;
     text-align: center;
@@ -80,65 +41,23 @@
       padding: 12px 16px;
     }
   }
-  .ant-tabs-bottom .ant-tabs-bottom-bar .ant-tabs-ink-bar {
-    top: 0px;
-  }
-  .ant-tabs-card {
-    .ant-tabs-left-bar, .ant-tabs-right-bar {
-      .ant-tabs-tab {
-        > span {
-          padding: 0px 16px;
-        }
-      }
-      .ant-tabs-tab-active {
-        padding-left: 0px!important;
-        padding-right: 0px!important;
-      }
-    }
-    
-    .ant-tabs-card-bar {
-      .ant-tabs-tab {
-        > span {
-          display: inline-block;
-          padding: 0px 16px;
-        }
-      }
+  .ant-tabs-nav-container-scrolling {
+    padding-left: 0px;
+    padding-right: 0px;
+    .ant-tabs-tab-arrow-show {
+      display: none;
     }
   }
-  .search-icon {
+  .ant-tabs-nav {
+    transform: none!important;
+  }
+  .ant-tabs-tab:last-child::after {
+    content: ' ';
+    display: inline-block;
     position: absolute;
-    top: 10px;
-    right: 40px;
-    font-size: 18px;
-    cursor: pointer;
-    padding: 3px;
-  }
-}
-.menu-tabs-edit-box:hover {
-  z-index: 1;
-  box-shadow: 0px 0px 4px #1890ff;
-}
-
-.mob-shell {
-  .menu-tabs-edit-box.flex {
-    >.ant-tabs.ant-tabs-top, >.ant-tabs.ant-tabs-bottom {
-      >.ant-tabs-bar {
-        >.ant-tabs-nav-container {
-          >.ant-tabs-nav-wrap {
-            >.ant-tabs-nav-scroll {
-              >.ant-tabs-nav {
-                display: block;
-                >div {
-                  display: flex;
-                  >.ant-tabs-tab {
-                    flex: 1;
-                  }
-                }
-              }
-            }
-          }
-        }
-      }
-    }
+    left: 100%;
+    height: 45px;
+    width: 100vw;
+    cursor: default;
   }
 }
diff --git a/src/menu/components/tabs/table-tabs/options.jsx b/src/menu/components/tabs/table-tabs/options.jsx
index bc2db9d..3793f20 100644
--- a/src/menu/components/tabs/table-tabs/options.jsx
+++ b/src/menu/components/tabs/table-tabs/options.jsx
@@ -1,10 +1,7 @@
-import MenuUtils from '@/utils/utils-custom.js'
-
 /**
  * @description tab琛ㄥ崟閰嶇疆淇℃伅
  */
-export function getTabForm(tab, setting) {
-  let appType = sessionStorage.getItem('appType')
+export function getTabForm(tab) {
   let roleList = sessionStorage.getItem('sysRoles')
 
   if (roleList) {
@@ -24,7 +21,7 @@
       label: '鍚嶇О',
       initval: tab.label || '',
       required: true,
-      focus: true,
+      focus: true
     },
     {
       type: 'mkicon',
@@ -32,43 +29,7 @@
       label: '鍥炬爣',
       initval: tab.icon || '',
       required: false,
-      allowClear: true,
-    },
-    // {
-    //   type: 'radio',
-    //   field: 'hasSearch',
-    //   label: '鎼滅储',
-    //   initval: tab.hasSearch || 'false',
-    //   required: false,
-    //   options: [
-    //     {value: 'false', label: '鏃�'},
-    //     {value: 'icon', label: '鏈�'},
-    //   ],
-    //   forbid: appType !== 'mob' || setting.position !== 'top' || setting.display !== 'inline-block',
-    //   span: 22
-    // },
-    {
-      type: 'text',
-      field: 'controlVal',
-      label: '闅愯棌鏍囪',
-      initval: tab.controlVal || '',
-      tooltip: '褰撶鐢ㄥ瓧娈靛�间笌闅愯棌鏍囪鐩哥瓑鏃讹紝鏍囩椤典細闅愯棌銆傛敞锛氬涓�艰鐢ㄩ�楀彿鍒嗛殧銆�',
-      required: false,
-    },
-    {
-      type: 'text',
-      field: 'selectVal',
-      label: '閫変腑鏍囪',
-      initval: tab.selectVal || '',
-      tooltip: '褰撻�変腑瀛楁鍊间笌閫変腑鏍囪鐩哥瓑鏃讹紝鏍囩椤甸粯璁ら�変腑銆�',
-      required: false
-    },
-    {
-      type: 'color',
-      field: 'backgroundColor',
-      label: '鑳屾櫙(鍐呭鍖�)',
-      initval: tab.backgroundColor || 'transparent',
-      required: false,
+      allowClear: true
     },
     {
       type: 'radio',
@@ -87,181 +48,9 @@
       label: '榛戝悕鍗�',
       initval: tab.blacklist || [],
       required: false,
-      options: roleList,
-      forbid: !!appType,
+      options: roleList
     },
   ]
 
   return tabForm
 }
-
-/**
- * @description tabs琛ㄥ崟閰嶇疆淇℃伅
- */
-export function getTabsSetForm(setting, uuid) {
-  let appType = sessionStorage.getItem('appType')
-  let roleList = sessionStorage.getItem('sysRoles')
-
-  let modules = MenuUtils.getSupModules(window.GLOB.customMenu.components, uuid) || []
-  modules.push({
-    value: 'preview',
-    label: '涓婁竴椤碉紙url鍙傛暟锛�'
-  })
-
-  if (roleList) {
-    try {
-      roleList = JSON.parse(roleList)
-    } catch (e) {
-      roleList = []
-    }
-  } else {
-    roleList = []
-  }
-
-  const tabForm = [
-    {
-      type: 'text',
-      field: 'name',
-      label: '缁勪欢鍚嶇О',
-      initval: setting.name || '',
-      tooltip: '鐢ㄤ簬缁勪欢闂寸殑鍖哄垎銆�',
-      required: true
-    },
-    {
-      type: 'number',
-      field: 'width',
-      label: '瀹藉害',
-      initval: setting.width || 24,
-      tooltip: '鏍呮牸甯冨眬锛屾瘡琛岀瓑鍒嗕负24鍒椼��',
-      min: 1,
-      max: 24,
-      precision: 0,
-      required: true
-    },
-    {
-      type: 'select',
-      field: 'position',
-      label: '鏍囩浣嶇疆',
-      initval: setting.position || 'top',
-      required: true,
-      options: [
-        {value: 'top', label: 'top'},
-        {value: 'bottom', label: 'bottom'},
-        {value: 'left', label: 'left'},
-        {value: 'right', label: 'right'},
-      ],
-      controlFields: [
-        {field: 'display', values: ['top', 'bottom']},
-      ]
-    },
-    {
-      type: 'radio',
-      field: 'tabStyle',
-      label: '椤电鏍峰紡',
-      initval: setting.tabStyle || 'line',
-      tooltip: '鏍囩浣嶇疆涓簍op鏃舵湁鏁堬紝榛樿鍊间负line銆�',
-      required: true,
-      options: [
-        {value: 'line', label: 'line'},
-        {value: 'card', label: 'card'},
-      ],
-    },
-    {
-      type: 'radio',
-      field: 'autoSwitch',
-      label: '鑷姩鍒囨崲',
-      initval: setting.autoSwitch || 'false',
-      tooltip: '瀛樺湪涓や釜鍙婁互涓婃爣绛炬椂鏈夋晥銆�',
-      required: false,
-      options: [
-        {value: 'true', label: '鏄�'},
-        {value: 'false', label: '鍚�'},
-      ],
-      controlFields: [
-        {field: 'interval', values: ['true']},
-        {field: 'tabLabel', values: ['true']},
-      ]
-    },
-    {
-      type: 'number',
-      field: 'interval',
-      label: '闂撮殧锛坰锛�',
-      initval: setting.interval || 5,
-      min: 1,
-      max: 1000,
-      precision: 0,
-      required: true
-    },
-    {
-      type: 'radio',
-      field: 'tabLabel',
-      label: '鏍囩鏍�',
-      initval: setting.tabLabel || 'show',
-      required: false,
-      options: [
-        {value: 'show', label: '鏄剧ず'},
-        {value: 'hide', label: '闅愯棌'},
-      ]
-    },
-    {
-      type: 'cascader',
-      field: 'supModule',
-      label: '涓婄骇缁勪欢',
-      initval: setting.supModule || [],
-      tooltip: '鏍囩缁勫彲浠ラ�夋嫨涓婄骇缁勪欢锛屽~鍏ョ鐢ㄥ瓧娈碉紝鐢ㄤ簬鎺у埗鏍囩闅愯棌銆�',
-      help: '鐢ㄤ簬鎺у埗鏍囩椤甸殣钘忋��',
-      required: false,
-      allowClear: true,
-      options: modules,
-      controlFields: [
-        {field: 'controlField', notNull: true},
-      ],
-    },
-    {
-      type: 'text',
-      field: 'controlField',
-      label: '绂佺敤瀛楁',
-      initval: setting.controlField || '',
-      tooltip: '鐢ㄤ簬鎺у埗鏍囩闅愯棌鐨勫瓧娈碉紝鍦ㄦ爣绛句腑濉叆闅愯棌鏍囪銆�',
-      required: true,
-    },
-    {
-      type: 'text',
-      field: 'selectField',
-      label: '閫変腑瀛楁',
-      initval: setting.selectField || '',
-      tooltip: '鐢ㄤ簬鎺у埗鏍囩椤靛垵濮嬪寲閫変腑锛屽湪鏍囩涓~鍏ラ�変腑鏍囪锛屾敞锛氭暟鎹簮浜巙rl鍙傛暟銆�',
-      required: false
-    },
-    {
-      type: 'color',
-      field: 'backgroundColor',
-      label: '鑳屾櫙(鏍囬鏍�)',
-      initval: setting.backgroundColor || 'transparent',
-      required: false
-    },
-    {
-      type: 'radio',
-      field: 'permission',
-      label: '鏉冮檺楠岃瘉',
-      initval: setting.permission || 'false',
-      required: false,
-      options: [
-        {value: 'true', label: '鍚敤'},
-        {value: 'false', label: '绂佺敤'},
-      ],
-      forbid: !appType
-    },
-    {
-      type: 'multiselect',
-      field: 'blacklist',
-      label: '榛戝悕鍗�',
-      initval: setting.blacklist || [],
-      required: false,
-      options: roleList,
-      forbid: !!appType
-    },
-  ]
-
-  return tabForm
-} 
\ No newline at end of file
diff --git a/src/menu/components/timeline/normal-timeline/index.jsx b/src/menu/components/timeline/normal-timeline/index.jsx
index 547ef31..7dda5d2 100644
--- a/src/menu/components/timeline/normal-timeline/index.jsx
+++ b/src/menu/components/timeline/normal-timeline/index.jsx
@@ -39,8 +39,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
diff --git a/src/menu/components/tree/antd-tree/index.jsx b/src/menu/components/tree/antd-tree/index.jsx
index 8d2ecb6..04211aa 100644
--- a/src/menu/components/tree/antd-tree/index.jsx
+++ b/src/menu/components/tree/antd-tree/index.jsx
@@ -40,8 +40,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         format: 'array',    // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: true,   // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -153,7 +151,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/menu/pastecontroller/index.jsx b/src/menu/pastecontroller/index.jsx
index 9d11f70..fbe0827 100644
--- a/src/menu/pastecontroller/index.jsx
+++ b/src/menu/pastecontroller/index.jsx
@@ -31,16 +31,12 @@
       item.subtabs.forEach(tab => {
         uuids[tab.uuid] = MenuUtils.getuuid()
         tab.uuid = uuids[tab.uuid]
-        tab.parentId = item.uuid
 
         if (appType !== 'mob') {
           tab.components = tab.components.filter(cell => cell.type !== 'menubar')
         }
 
         tab.components = tab.components.map(cell => {
-          cell.tabId = tab.uuid
-          cell.parentId = tab.parentId
-
           cell = this.resetconfig(cell, copyBtns, uuids)
           return cell
         })
@@ -52,9 +48,6 @@
       item.name = item.setting.name
 
       item.components = item.components.map(cell => {
-        cell.tabId = item.tabId || ''
-        cell.parentId = item.parentId || ''
-
         cell = MenuUtils.resetComponentConfig(cell, copyBtns, uuids)
         return cell
       })
diff --git a/src/menu/stylecombcontrolbutton/index.jsx b/src/menu/stylecombcontrolbutton/index.jsx
index 1df5924..e83fd2d 100644
--- a/src/menu/stylecombcontrolbutton/index.jsx
+++ b/src/menu/stylecombcontrolbutton/index.jsx
@@ -1,6 +1,5 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
-import { fromJS } from 'immutable'
 import { Button } from 'antd'
 import { FontColorsOutlined } from '@ant-design/icons'
 
@@ -18,6 +17,10 @@
     type: '',
     components: []
   }
+
+  type = null
+
+  components = {}
 
   componentDidMount () {
     sessionStorage.setItem('style-control', 'false')
@@ -37,90 +40,76 @@
   }
 
   submitCombineStyle = (style) => {
-    const { components, parent } = this.state
-
-    let keys = components.map(item => item.uuid)
-  
-    MKEmitter.emit('submitComponentStyle', parent.uuid, keys, style)
-
-    setTimeout(() => {
-      keys.forEach(key => {
-        document.getElementById(key).classList.add('selected-control-element')
-      })
-    }, 100)
-  }
-
-  clickComponent = (card, _p, _type) => {
-    const { menu } = this.props
-    const { parent, type } = this.state
-    let components = fromJS(this.state.components).toJS()
-
-    if (!parent) {
-      let _parent = null
-
-      if (_type === 'cardcell') {
-        _parent = _p
-        MKEmitter.emit('switchMultiStyle', 'open')
-      } else {
-        let getParents = (box) => {
-          box.components.forEach(item => {
-            if (item.type === 'tabs') {
-              item.subtabs.forEach(tab => {
-                if (tab.components.findIndex(cell => cell.uuid === card.uuid) > -1) {
-                  _parent = tab
-                } else {
-                  getParents(tab)
-                }
-              })
-            } else if (item.type === 'group') {
-              if (item.components.findIndex(cell => cell.uuid === card.uuid) > -1) {
-                _parent = item
-              }
-            }
-          })
-        }
-  
-        if (menu.components.findIndex(cell => cell.uuid === card.uuid) > -1) {
-          _parent = menu
-        } else {
-          getParents(menu)
-        }
-
-        MKEmitter.emit('switchMultiStyle', 'open')
-      }
-
-      document.getElementById(card.uuid).classList.add('selected-control-element')
-
-      sessionStorage.setItem('style-control', (_type ? _type : 'component'))
-
-      this.setState({
-        type: _type ? _type : 'component',
-        parent: _parent,
-        components: [card]
+    if (this.type === 'component') {
+      Object.keys(this.components).forEach((key, i) => {
+        setTimeout(() => {
+          this.components[key](style)
+        }, i * 10)
       })
     } else {
-      if (components.findIndex(cell => cell.uuid === card.uuid) > -1) {
-        components = components.filter(cell => cell.uuid !== card.uuid)
-        document.getElementById(card.uuid).classList.remove('selected-control-element')
-      } else if (type === 'cardcell' && parent.elements.findIndex(cell => cell.uuid === card.uuid) > -1) {
-        components.push(card)
-        document.getElementById(card.uuid).classList.add('selected-control-element')
-      }
-
-      if (components.length === 0) {
-        MKEmitter.emit('switchMultiStyle', 'close')
-        sessionStorage.setItem('style-control', 'true')
-      }
-
-      this.setState({
-        components: components,
-        parent: components.length ? parent : null
+      Object.keys(this.components).forEach((key, i) => {
+        setTimeout(() => {
+          MKEmitter.emit('submitComponentStyle', key, this.components[key], style)
+        }, i * 10)
       })
     }
   }
 
+  clickComponent = (id, pid, callback) => {
+    if (!this.type) {
+      if (pid) {
+        this.type = 'cardcell'
+      } else {
+        this.type = 'component'
+      }
+    } else if ((this.type === 'cardcell' && !pid) || (this.type === 'component' && pid)) {
+      return
+    }
+
+    let plus = true
+    if (this.type === 'cardcell') {
+      if (this.components[pid]) {
+        if (this.components[pid].includes(id)) {
+          this.components[pid] = this.components[pid].filter(item => item !== id)
+          if (this.components[pid].length === 0) {
+            delete this.components[pid]
+          }
+          plus = false
+        } else {
+          this.components[pid].push(id)
+        }
+      } else {
+        this.components[pid] = [id]
+      }
+    } else {
+      if (this.components[id]) {
+        delete this.components[id]
+        plus = false
+      } else {
+        this.components[id] = callback
+      }
+    }
+
+    if (plus) {
+      document.getElementById(id).classList.add('selected-control-element')
+      MKEmitter.emit('switchMultiStyle', 'open', this.type)
+    } else {
+      document.getElementById(id).classList.remove('selected-control-element')
+    }
+
+    let length = Object.keys(this.components).length
+
+    if (length === 0) {
+      MKEmitter.emit('switchMultiStyle', 'close')
+      sessionStorage.setItem('style-control', 'true')
+      this.type = null
+    } else {
+      sessionStorage.setItem('style-control', this.type)
+    }
+  }
+
   triggerStyleChange = () => {
-    const { label, components } = this.state
+    const { label } = this.state
 
     if (label === '鎵归噺璋冩暣') {
       document.body.className = 'style-control'
@@ -130,13 +119,23 @@
       document.body.className = ''
       sessionStorage.setItem('style-control', 'false')
 
-      components.forEach(item => {
-        document.getElementById(item.uuid).classList.remove('selected-control-element')
-      })
+      if (this.type === 'cardcell') {
+        Object.keys(this.components).forEach(key => {
+          this.components[key].forEach(id => {
+            document.getElementById(id).classList.remove('selected-control-element')
+          })
+        })
+      } else {
+        Object.keys(this.components).forEach(key => {
+          document.getElementById(key).classList.remove('selected-control-element')
+        })
+      }
 
       MKEmitter.emit('switchMultiStyle', 'close')
+      this.components = {}
+      this.type = null
 
-      this.setState({label: '鎵归噺璋冩暣', parent: null, components: []})
+      this.setState({label: '鎵归噺璋冩暣'})
     }
   }
   
diff --git a/src/menu/stylecombcontrolbutton/index.scss b/src/menu/stylecombcontrolbutton/index.scss
index 003e577..d6b8667 100644
--- a/src/menu/stylecombcontrolbutton/index.scss
+++ b/src/menu/stylecombcontrolbutton/index.scss
@@ -7,7 +7,7 @@
   background: #ffffff;
 }
 body.style-control {
-  .pc-menu-view::before {
+  .pc-menu-view::before, .menu-control::before  {
     content: ' ';
     position: absolute;
     left: 0;
diff --git a/src/menu/stylecombcontroller/index.jsx b/src/menu/stylecombcontroller/index.jsx
index 4e06d4f..e47bdd3 100644
--- a/src/menu/stylecombcontroller/index.jsx
+++ b/src/menu/stylecombcontroller/index.jsx
@@ -44,6 +44,7 @@
 
   state = {
     style: {},
+    type: '',
     borposition: 'outer'
   }
 
@@ -65,11 +66,12 @@
     MKEmitter.removeListener('switchMultiStyle', this.switchMultiStyle)
   }
 
-  switchMultiStyle = (type) => {
-    if (type === 'open') {
+  switchMultiStyle = (swit, type) => {
+    if (swit === 'open') {
       this.setState({
         visible: true,
         style: {},
+        type: type,
         borposition: 'outer'
       })
     } else {
@@ -269,7 +271,7 @@
         <div className="menu-combine-style-controller">
           <Form {...formItemLayout}>
             <Collapse expandIconPosition="right" destroyInactivePanel={true} defaultActiveKey="margin">
-              <Panel header="瀛椾綋" key="font">
+              {this.state.type === 'cardcell' ? <Panel header="瀛椾綋" key="font">
                 <Col span={12}>
                   <Form.Item colon={false} label={<FontSizeOutlined title="瀛椾綋澶у皬"/>}>
                     <InputNumber defaultValue={''} min={12} max={100} precision={0} onChange={this.changeFontSize} />
@@ -353,7 +355,7 @@
                     </Radio.Group>
                   </Form.Item>
                 </Col>
-              </Panel>
+              </Panel> : null}
               <Panel header="鑳屾櫙" key="background">
                 <Col span={24}>
                   <Form.Item
diff --git a/src/menu/tableshell/card.jsx b/src/menu/tableshell/card.jsx
index 0015811..55926ea 100644
--- a/src/menu/tableshell/card.jsx
+++ b/src/menu/tableshell/card.jsx
@@ -4,7 +4,7 @@
 import asyncComponent from '@/utils/asyncComponent'
 import './index.scss'
 
-const AntvTabs = asyncComponent(() => import('@/menu/components/tabs/antv-tabs'))
+const AntvTabs = asyncComponent(() => import('@/menu/components/tabs/table-tabs'))
 const BaseTable = asyncComponent(() => import('@/menu/components/table/base-table'))
 
 const Card = ({ id, card, delCard, updateConfig }) => {
diff --git a/src/menu/tableshell/index.jsx b/src/menu/tableshell/index.jsx
index 999d732..63fefeb 100644
--- a/src/menu/tableshell/index.jsx
+++ b/src/menu/tableshell/index.jsx
@@ -57,18 +57,16 @@
   const [, drop] = useDrop({
     accept: 'menu',
     drop(item) {
-      if (item.hasOwnProperty('originalIndex') || item.added) {
+      if (item.added) {
         delete item.added // 鍒犻櫎缁勪欢娣诲姞鏍囪
         return
       }
       
       let newcard = {
         uuid: Utils.getuuid(),
-        type: item.component,
-        subtype: item.subtype,
-        config: item.config,
-        width: item.width || 24,
-        isNew: true // 鏂版坊鍔犳爣蹇楋紝鐢ㄤ簬鍒濆鍖�
+        type: 'tabs',
+        subtype: 'tabs',
+        isNew: true
       }
       
       let targetId = ''
diff --git a/src/mob/components/menubar/common-menubar/index.jsx b/src/mob/components/menubar/common-menubar/index.jsx
index 09e5410..37c24c3 100644
--- a/src/mob/components/menubar/common-menubar/index.jsx
+++ b/src/mob/components/menubar/common-menubar/index.jsx
@@ -36,8 +36,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: '',
-        parentId: '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -135,7 +133,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/mob/components/menubar/normal-menubar/index.jsx b/src/mob/components/menubar/normal-menubar/index.jsx
index 3ccf007..a3ca2dc 100644
--- a/src/mob/components/menubar/normal-menubar/index.jsx
+++ b/src/mob/components/menubar/normal-menubar/index.jsx
@@ -41,8 +41,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: '',
-        parentId: '',
         format: 'object',   // 缁勪欢灞炴�� - 鏁版嵁鏍煎紡
         pageable: false,    // 缁勪欢灞炴�� - 鏄惁鍙垎椤�
         switchable: false,  // 缁勪欢灞炴�� - 鏁版嵁鏄惁鍙垏鎹�
@@ -273,7 +271,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/mob/components/official/index.jsx b/src/mob/components/official/index.jsx
index dc25062..7a1c6d0 100644
--- a/src/mob/components/official/index.jsx
+++ b/src/mob/components/official/index.jsx
@@ -32,8 +32,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         width: 24,
         name: card.name,
         subtype: card.subtype,
diff --git a/src/mob/components/search/single-search/index.jsx b/src/mob/components/search/single-search/index.jsx
index 95feec1..b733a7c 100644
--- a/src/mob/components/search/single-search/index.jsx
+++ b/src/mob/components/search/single-search/index.jsx
@@ -31,8 +31,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         width: 24,
         name: card.name,
         subtype: card.subtype,
@@ -109,7 +107,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/mob/components/tabs/antv-tabs/dragabletabs.jsx b/src/mob/components/tabs/antv-tabs/dragabletabs.jsx
index fbb97de..71b5bdb 100644
--- a/src/mob/components/tabs/antv-tabs/dragabletabs.jsx
+++ b/src/mob/components/tabs/antv-tabs/dragabletabs.jsx
@@ -62,6 +62,8 @@
     const dragIndex = newOrder.indexOf(dragKey)
     const hoverIndex = newOrder.indexOf(hoverKey)
 
+    if (dragIndex === -1) return
+
     newOrder.splice(dragIndex, 1)
     newOrder.splice(hoverIndex, 0, dragKey)
     
diff --git a/src/mob/components/tabs/antv-tabs/index.jsx b/src/mob/components/tabs/antv-tabs/index.jsx
index 3800c62..dc73a22 100644
--- a/src/mob/components/tabs/antv-tabs/index.jsx
+++ b/src/mob/components/tabs/antv-tabs/index.jsx
@@ -44,17 +44,15 @@
       let _tabs = {
         uuid: tabs.uuid,
         type: tabs.type,
-        tabId: tabs.tabId || '',
-        parentId: tabs.parentId || '',
         subtype: tabs.subtype,
         width: 24,
         name: tabs.name,
         setting: {width: 24, position: 'top', tabStyle: 'line', name: tabs.name},
         style: { marginLeft: '8px', marginRight: '8px', marginTop: '8px', marginBottom: '8px' },
         subtabs: [
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 1', icon: '', components: [] },
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 2', icon: '', components: [] },
-          { uuid: Utils.getuuid(), parentId: tabs.uuid, label: 'Tab 3', icon: '', components: [] }
+          { uuid: Utils.getuuid(), label: 'Tab 1', icon: '', components: [] },
+          { uuid: Utils.getuuid(), label: 'Tab 2', icon: '', components: [] },
+          { uuid: Utils.getuuid(), label: 'Tab 3', icon: '', components: [] }
         ]
       }
 
@@ -79,12 +77,6 @@
     return !is(fromJS(this.state), fromJS(nextState))
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitSearch', this.getSearch)
-    MKEmitter.addListener('tabsChange', this.handleTabsChange)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
   /**
    * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆
    */
@@ -92,42 +84,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitSearch', this.getSearch)
-    MKEmitter.removeListener('tabsChange', this.handleTabsChange)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { tabs } = this.state
-
-    if (tabs.subtabs.findIndex(tab => tab.uuid === parentId) === -1) return
-
-    let _tabs = fromJS(tabs).toJS()
-    let _tabs_ = fromJS(tabs).toJS()
-
-    let components = []
-    _tabs.subtabs.forEach(tab => {
-      if (tab.uuid === parentId) {
-        components = tab.components.map(item => {
-          if (keys.includes(item.uuid)) {
-            item.style = {...item.style, ...style}
-          }
-          return item
-        })
-        tab.components = []
-      }
-    })
-
-    _tabs_.subtabs = _tabs_.subtabs.map(tab => {
-      if (tab.uuid === parentId) {
-        tab.components = components
-      }
-      return tab
-    })
-
-    this.setState({tabs: _tabs}, () => {
-      this.updateComponent(_tabs_)
-    })
   }
 
   changeStyle = () => {
@@ -162,12 +118,18 @@
     this.props.updateConfig(_card)
   }
 
-  handleTabsChange = (parentId) => {
-    const { tabs } = this.state
-
-    if (parentId === tabs.parentId) {
-      MKEmitter.emit('tabsChange', tabs.uuid)
-    }
+  getSubIds = (components, ids) => {
+    components.forEach(item => {
+      if (item.type === 'tabs') {
+        item.subtabs.forEach(tab => {
+          this.getSubIds(tab.components, ids)
+        })
+      } else if (item.type === 'group') {
+        this.getSubIds(item.components, ids)
+      } else {
+        ids.push(item.uuid)
+      }
+    })
   }
 
   updateComponent = (component) => {
@@ -175,7 +137,11 @@
 
     if (!is(fromJS(tabs.setting), fromJS(component.setting)) || !is(fromJS(tabs.style), fromJS(component.style))) {
       // 娉ㄥ唽浜嬩欢-鏍囩鍙樺寲锛岄�氱煡鏍囩鍐呭厓绱�
-      MKEmitter.emit('tabsChange', tabs.uuid)
+      let ids = []
+      tabs.subtabs.forEach(tab => {
+        this.getSubIds(tab.components, ids)
+      })
+      MKEmitter.emit('tabsChange', ids.join(','))
     }
 
     component.width = component.setting.width
@@ -266,52 +232,12 @@
     this.props.updateConfig(tabs)
   }
 
-  getSearch = (config) => {
-    const { tabs } = this.state
-
-    if (tabs.uuid !== config.uuid) return
-
-    let _tabs = fromJS(tabs).toJS()
-
-    _tabs.subtabs = _tabs.subtabs.map(t => {
-      if (t.uuid === config.tabId) {
-        t.search = config.search
-      }
-      return t
-    })
-
-    this.setState({
-      tabs: _tabs
-    })
-    this.props.updateConfig(_tabs)
-  }
-
-  setSearch = (tab) => {
-    const { tabs } = this.state
-    let card = {
-      uuid: tabs.uuid,
-      tabId: tab.uuid,
-      search: tab.search
-    }
-
-    if (!card.search) {
-      card.search = {
-        floor: 1,
-        setting: { type: 'title', field: '', title: '', focus: 'true', btn: 'hidden' },
-        groups: [],
-        fields: []
-      }
-    }
-    MKEmitter.emit('changeSearch', card)
-  }
-
   getTabForms = (tab) => {
     const { tabs } = this.state
 
     if (!tab) {
       tab = {
         uuid: '',
-        parentId: tabs.uuid,
         label: '',
         icon: '',
         components: []
@@ -374,20 +300,13 @@
     window.GLOB.TabsMap.set(tabs.uuid, key)
   }
 
-  clickComponent = (e) => {
-    if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
-      e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.tabs)
-    }
-  }
-
   render() {
     const { tabs, defaultActiveKey } = this.state
     let _style = resetStyle(tabs.style)
     let _tabStyle = resetStyle(tabs.tabStyle)
 
     return (
-      <div className={'mob-tabs-edit-box ' + tabs.setting.display} style={_style} onClick={this.clickComponent} id={tabs.uuid}>
+      <div className={'mob-tabs-edit-box ' + tabs.setting.display} style={_style} id={tabs.uuid}>
         <DraggableTabs defaultActiveKey={defaultActiveKey} tabBarStyle={{background: tabs.setting.backgroundColor || 'transparent'}} tabPosition={'top'} type={tabs.setting.tabStyle} tabsMove={this.moveSwitch} onChange={this.onChange}>
           {tabs.subtabs.map(tab => (
             <TabPane tab={
@@ -404,8 +323,6 @@
                 <span style={{..._tabStyle, textDecoration: tab.hide === 'true' ? 'line-through' : 'none'}}>{tab.icon ? <MkIcon type={tab.icon} /> : null}{tab.label}</span>
               </Popover>
             } key={tab.uuid} style={{backgroundColor: tab.backgroundColor || 'transparent'}}>
-              {/* {appType === 'mob' && tabs.setting.display === 'inline-block' && tab.hasSearch === 'icon' ?
-                <SearchOutlined className="search-icon" onDoubleClick={() => this.setSearch(tab)}/> : null} */}
               <TabComponents config={tab} handleList={this.updateTabComponent} deleteCard={this.deleteCard} />
             </TabPane>
           ))}
diff --git a/src/mob/components/tabs/tabcomponents/index.jsx b/src/mob/components/tabs/tabcomponents/index.jsx
index 8cd28e1..474cd2c 100644
--- a/src/mob/components/tabs/tabcomponents/index.jsx
+++ b/src/mob/components/tabs/tabcomponents/index.jsx
@@ -2,7 +2,7 @@
 import { useDrop } from 'react-dnd'
 import { is, fromJS } from 'immutable'
 import update from 'immutability-helper'
-import { Empty, notification, Modal } from 'antd'
+import { Empty, Modal } from 'antd'
 
 import Utils from '@/utils/utils.js'
 import MKEmitter from '@/utils/events.js'
@@ -76,26 +76,8 @@
       item.added = true
 
       if (item.component === 'search') { // 绉诲姩绔爣绛鹃〉涓笉鍙坊鍔犳悳绱�
-        // if (cards.filter(card => card.type === 'search').length > 0) {
-        //   notification.warning({
-        //     top: 92,
-        //     message: '鎼滅储鏉′欢涓嶅彲閲嶅娣诲姞锛�',
-        //     duration: 5
-        //   })
-        //   return
-        // }
         item.added = false
         return
-      } else if (item.component === 'tabs') {
-        let floor = MenuUtils.getFloor(config.parentId)
-        if (floor >= 3 ) {
-          notification.warning({
-            top: 92,
-            message: '鏍囩椤垫渶澶氫负涓夐噸缁撴瀯锛�',
-            duration: 5
-          })
-          return
-        }
       }
 
       let name = ''
@@ -131,8 +113,6 @@
       
       let newcard = {
         uuid: Utils.getuuid(),
-        tabId: config.uuid,
-        parentId: config.parentId,
         type: item.component,
         subtype: item.subtype,
         config: item.config,
diff --git a/src/mob/components/topbar/normal-navbar/index.jsx b/src/mob/components/topbar/normal-navbar/index.jsx
index 123fa23..d711391 100644
--- a/src/mob/components/topbar/normal-navbar/index.jsx
+++ b/src/mob/components/topbar/normal-navbar/index.jsx
@@ -140,13 +140,6 @@
     MKEmitter.emit('changeStyle', ['font', 'background', 'border'], card.searchStyle || {}, this.getSearchStyle)
   }
 
-  clickComponent = (e) => {
-    if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
-      e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
-    }
-  }
-
   getSearch = (config) => {
     const { card } = this.state
 
@@ -223,7 +216,7 @@
     }
 
     return (
-      <div className="normal-topbar-edit-box" style={card.style} onClick={this.clickComponent} id={card.uuid}>
+      <div className="normal-topbar-edit-box" style={card.style} id={card.uuid}>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             <NormalForm title="瀵艰埅鏍忚缃�" width={900} update={this.updateWrap} getForms={this.getWrapForms}>
diff --git a/src/pc/components/login/normal-login/index.jsx b/src/pc/components/login/normal-login/index.jsx
index 683d9dc..a35605f 100644
--- a/src/pc/components/login/normal-login/index.jsx
+++ b/src/pc/components/login/normal-login/index.jsx
@@ -36,8 +36,6 @@
       let _card = {
         uuid: card.uuid,
         type: card.type,
-        tabId: card.tabId || '',
-        parentId: card.parentId || '',
         width: card.width || 24,
         name: card.name,
         subtype: card.subtype,
@@ -128,7 +126,13 @@
   clickComponent = (e) => {
     if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
       e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
+      MKEmitter.emit('clickComponent', this.state.card.uuid, null, (style) => {
+        let _card = {...this.state.card}
+        _card.style = {..._card.style, ...style}
+
+        this.setState({ card: _card })
+        this.props.updateConfig(_card)
+      })
     }
   }
 
diff --git a/src/pc/components/navbar/normal-navbar/index.jsx b/src/pc/components/navbar/normal-navbar/index.jsx
index 474c8f1..f14e91b 100644
--- a/src/pc/components/navbar/normal-navbar/index.jsx
+++ b/src/pc/components/navbar/normal-navbar/index.jsx
@@ -120,13 +120,6 @@
     MKEmitter.emit('changeStyle', ['width', 'margin'], card.logoStyle, this.getLogoStyle)
   }
 
-  clickComponent = (e) => {
-    if (sessionStorage.getItem('style-control') === 'true' || sessionStorage.getItem('style-control') === 'component') {
-      e.stopPropagation()
-      MKEmitter.emit('clickComponent', this.state.card)
-    }
-  }
-
   changeMenu = (menu) => {
     if (menu.property === 'link') {
       window.open(menu.link)
@@ -168,7 +161,7 @@
     const { card } = this.state
 
     return (
-      <div className="normal-navbar-edit-box" style={card.style} onClick={this.clickComponent} id={card.uuid}>
+      <div className="normal-navbar-edit-box" style={card.style} id={card.uuid}>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             <MenuComponent config={card} updateConfig={this.updateComponent} />
diff --git a/src/tabviews/custom/components/card/cardcellList/index.jsx b/src/tabviews/custom/components/card/cardcellList/index.jsx
index dca2e78..2d6260e 100644
--- a/src/tabviews/custom/components/card/cardcellList/index.jsx
+++ b/src/tabviews/custom/components/card/cardcellList/index.jsx
@@ -835,7 +835,6 @@
                 btn={card}
                 BData={data.$$BData || ''}
                 disabled={_disabled}
-                setting={cards.setting}
                 selectedData={_data}
               />
             </Col>
@@ -847,7 +846,6 @@
                 btn={card}
                 BData={data.$$BData || ''}
                 disabled={_disabled}
-                setting={cards.setting}
                 selectedData={_data}
               />
             </Col>
diff --git a/src/tabviews/subtable/index.jsx b/src/tabviews/subtable/index.jsx
index 7725c16..278430f 100644
--- a/src/tabviews/subtable/index.jsx
+++ b/src/tabviews/subtable/index.jsx
@@ -97,6 +97,8 @@
         config = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam)))
         config.setting.MenuName = Tab.label
         config.setting.$name = Tab.label
+        config.setting.foreignKey = Tab.foreignKey || ''
+        config.setting.supModule = Tab.supMenu || ''
       } catch (e) {
         console.warn('Parse Failure')
         config = ''
@@ -1021,7 +1023,6 @@
                       setting={setting}
                       actions={actions}
                       columns={columns}
-                      Tab={this.props.Tab}
                       MenuID={this.props.MenuID}
                       selectedData={selectedData}
                       ContainerId={this.props.ContainerId}
@@ -1060,7 +1061,6 @@
                     BData={BData}
                     config={config}
                     columns={columns}
-                    Tab={this.props.Tab}
                     data={this.state.data}
                     MenuID={this.props.MenuID}
                     loading={this.state.loading}
@@ -1076,7 +1076,6 @@
                     BID={BID}
                     plot={item}
                     config={config}
-                    Tab={this.props.Tab}
                     data={this.state.data}
                     loading={this.state.loading}
                   />
@@ -1093,7 +1092,6 @@
               setting={setting}
               actions={actions}
               columns={columns}
-              Tab={this.props.Tab}
               MenuID={this.props.MenuID}
               selectedData={selectedData}
               ContainerId={this.props.ContainerId}
diff --git a/src/tabviews/zshare/actionList/excelInbutton/index.jsx b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
index 0388670..0c497ea 100644
--- a/src/tabviews/zshare/actionList/excelInbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -19,7 +19,6 @@
     BID: PropTypes.string,            // 涓昏〃ID
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
     selectedData: PropTypes.any,      // 瀛愯〃涓�夋嫨鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
     btn: PropTypes.object,            // 鎸夐挳
     setting: PropTypes.any,           // 椤甸潰閫氱敤璁剧疆
     disabled: PropTypes.any,          // 琛屾寜閽鐢�
@@ -117,13 +116,13 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { setting, Tab, BID, btn, selectedData } = this.props
+    const { setting, BID, btn, selectedData } = this.props
     const { loading, disabled } = this.state
 
     if (loading || disabled) return
     if (triggerId && btn.uuid !== triggerId) return
 
-    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index 0450dce..80a9e9d 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -18,7 +18,6 @@
   static propTpyes = {
     BID: PropTypes.string,            // 涓昏〃ID
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
     btn: PropTypes.object,            // 鎸夐挳
     setting: PropTypes.any,           // 椤甸潰閫氱敤璁剧疆
     updateStatus: PropTypes.func,     // 鎸夐挳鐘舵�佹洿鏂�
@@ -113,13 +112,13 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { setting, Tab, BID, btn } = this.props
+    const { setting, BID, btn } = this.props
     const { loading, disabled } = this.state
 
     if (loading || disabled) return
     if (triggerId && btn.uuid !== triggerId) return
 
-    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
diff --git a/src/tabviews/zshare/actionList/funcMegvii/index.jsx b/src/tabviews/zshare/actionList/funcMegvii/index.jsx
index 246c2b5..7ff8bf6 100644
--- a/src/tabviews/zshare/actionList/funcMegvii/index.jsx
+++ b/src/tabviews/zshare/actionList/funcMegvii/index.jsx
@@ -94,13 +94,13 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { Tab, BID, btn, selectedData, setting } = this.props
+    const { BID, btn, selectedData, setting } = this.props
     const { loading, disabled } = this.state
 
     if (loading || disabled) return
     if (triggerId && btn.uuid !== triggerId) return
 
-    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
diff --git a/src/tabviews/zshare/actionList/funczip/index.jsx b/src/tabviews/zshare/actionList/funczip/index.jsx
index 2b4316f..9a5aed2 100644
--- a/src/tabviews/zshare/actionList/funczip/index.jsx
+++ b/src/tabviews/zshare/actionList/funczip/index.jsx
@@ -88,13 +88,13 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { Tab, BID, btn, selectedData, setting } = this.props
+    const { BID, btn, selectedData, setting } = this.props
     const { loading, disabled } = this.state
 
     if (loading || disabled) return
     if (triggerId && btn.uuid !== triggerId) return
 
-    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
diff --git a/src/tabviews/zshare/actionList/index.jsx b/src/tabviews/zshare/actionList/index.jsx
index addbbd0..6760ac3 100644
--- a/src/tabviews/zshare/actionList/index.jsx
+++ b/src/tabviews/zshare/actionList/index.jsx
@@ -23,7 +23,6 @@
     lock: PropTypes.any,              // 鍙紪杈戣〃涓寜閽攣瀹�
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
     selectedData: PropTypes.any,      // 瀛愯〃涓�夋嫨鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
     MenuID: PropTypes.string,         // 鑿滃崟ID
     actions: PropTypes.array,         // 鎸夐挳缁�
     columns: PropTypes.array,         // 鏄剧ず鍒�
@@ -38,7 +37,7 @@
   }
 
   getButtonList = (actions) => {
-    const { BID, BData, MenuID, Tab, columns, setting, ContainerId, selectedData, lock } = this.props
+    const { BID, BData, MenuID, columns, setting, ContainerId, selectedData, lock } = this.props
     return actions.map(item => {
       if (['exec', 'prompt', 'pop'].includes(item.OpenType)) {
         return (
@@ -47,7 +46,6 @@
             show={item.show || 'actionList'}
             disabled={lock || false}
             BID={BID}
-            Tab={Tab}
             btn={item}
             BData={BData}
             setting={setting}
@@ -63,7 +61,6 @@
             show={item.show || 'actionList'}
             disabled={lock || false}
             BID={BID}
-            Tab={Tab}
             btn={item}
             BData={BData}
             setting={setting}
@@ -77,7 +74,6 @@
             show={item.show || 'actionList'}
             disabled={lock || false}
             BID={BID}
-            Tab={Tab}
             btn={item}
             BData={BData}
             setting={setting}
@@ -90,7 +86,6 @@
             show={item.show || 'actionList'}
             disabled={lock || false}
             BID={BID}
-            Tab={Tab}
             btn={item}
             BData={BData}
             setting={setting}
@@ -106,7 +101,6 @@
             btn={item}
             BData={BData}
             MenuID={MenuID}
-            setting={setting}
             selectedData={selectedData}
           />
         )
@@ -118,7 +112,6 @@
             disabled={lock || false}
             btn={item}
             BData={BData}
-            setting={setting}
             selectedData={selectedData}
           />
         )
@@ -144,7 +137,6 @@
               show={item.show || 'actionList'}
               disabled={lock || false}
               BID={BID}
-              Tab={Tab}
               btn={item}
               BData={BData}
               setting={setting}
@@ -159,7 +151,6 @@
               show={item.show || 'actionList'}
               disabled={lock || false}
               BID={BID}
-              Tab={Tab}
               btn={item}
               setting={setting}
               selectedData={selectedData}
@@ -172,7 +163,6 @@
               show={item.show || 'actionList'}
               disabled={lock || false}
               BID={BID}
-              Tab={Tab}
               btn={item}
               setting={setting}
               selectedData={selectedData}
diff --git a/src/tabviews/zshare/actionList/newpagebutton/index.jsx b/src/tabviews/zshare/actionList/newpagebutton/index.jsx
index 1237a91..2ca6b55 100644
--- a/src/tabviews/zshare/actionList/newpagebutton/index.jsx
+++ b/src/tabviews/zshare/actionList/newpagebutton/index.jsx
@@ -16,7 +16,6 @@
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
     btn: PropTypes.object,            // 鎸夐挳
     selectedData: PropTypes.any,      // 瀛愯〃涓�夋嫨鏁版嵁
-    setting: PropTypes.any,           // 椤甸潰閫氱敤璁剧疆
     disabled: PropTypes.any,          // 琛屾寜閽鐢�
   }
 
@@ -110,7 +109,7 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { setting, btn, selectedData } = this.props
+    const { btn, selectedData } = this.props
     const { disabled } = this.state
 
     if (disabled) return
@@ -152,7 +151,7 @@
     let MenuNo = ''
     let Remark = ''
     if (btn.Ot === 'requiredSgl' && data[0]) {
-      Id = setting.primaryKey ? (data[0][setting.primaryKey] || '') : ''
+      Id = data[0].$$uuid || ''
       name = data[0].PrintTempName || ''
       MenuNo = data[0].PrintTempNO || ''
       Remark = data[0].Remark || ''
@@ -164,7 +163,7 @@
       _name = '鍗曟嵁鎵撳嵃'
       if (btn.Ot === 'required' && data && data.length > 0) {
         data.forEach((item, i) => {
-          let _id = setting.primaryKey ? (item[setting.primaryKey] || '') : ''
+          let _id = item.$$uuid || ''
           let url = '#/billprint/' + window.btoa(window.encodeURIComponent(JSON.stringify({ id: _id, tempId: btn.printTemp, dataM: sessionStorage.getItem('dataM') })))
           window.open(url)
         })
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index a4a4f03..ff1ef81 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -24,7 +24,6 @@
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
     style: PropTypes.any,             // 鎸夐挳鏍峰紡
     selectedData: PropTypes.any,      // 瀛愯〃涓�夋嫨鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
     btn: PropTypes.object,            // 鎸夐挳
     columns: PropTypes.any,           // 瀛楁鍒�
     setting: PropTypes.any,           // 椤甸潰閫氱敤璁剧疆
@@ -217,13 +216,13 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { Tab, BID, btn, selectedData, setting } = this.props
+    const { BID, btn, selectedData, setting } = this.props
     const { loading, disabled } = this.state
 
     if (loading || disabled) return
     if (triggerId && btn.uuid !== triggerId) return
 
-    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
@@ -422,11 +421,11 @@
         param.ID = primaryId
 
         if (retmsg) {
-          const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, data[0], columns, this.props.Tab, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+          const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, data[0], columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
           param.LText = sql
           param.$callbacksql = callbacksql
         } else {
-          param.LText = getSysDefaultSql(btn, setting, '', param, data[0], columns, this.props.Tab, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+          param.LText = getSysDefaultSql(btn, setting, '', param, data[0], columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
           if (btn.output) {
             param.key_back_type = 'Y'
           }
@@ -467,11 +466,11 @@
           param.ID = primaryId || Utils.getguid()
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, this.props.Tab, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, this.props.Tab, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
@@ -502,11 +501,11 @@
           param.ID = primaryId
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, this.props.Tab, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, this.props.Tab, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
@@ -575,11 +574,11 @@
           param.ID = primaryId
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, cell, columns, this.props.Tab, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, cell, columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, '', param, cell, columns, this.props.Tab, false, this.moduleParams, Utils.getAllSearchOptions, Utils.getAllSearchOptions) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, '', param, cell, columns, false, this.moduleParams, Utils.getAllSearchOptions, Utils.getAllSearchOptions) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
@@ -615,11 +614,11 @@
             param.ID = Utils.getguid()
 
             if (retmsg) {
-              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, this.props.Tab, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
               param.LText = sql
               param.$callbacksql = callbacksql
             } else {
-              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, this.props.Tab, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
               if (btn.output) {
                 param.key_back_type = 'Y'
               }
@@ -641,11 +640,11 @@
             param.ID = primaryId
 
             if (retmsg) {
-              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, this.props.Tab, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
               param.LText = sql
               param.$callbacksql = callbacksql
             } else {
-              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, this.props.Tab, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
+              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false, this.moduleParams, Utils.getAllSearchOptions) // 鏁版嵁婧�
               if (btn.output) {
                 param.key_back_type = 'Y'
               }
@@ -976,9 +975,9 @@
   }
 
   execRealSubmit = (data, _resolve, formdata) => {
-    const { setting, btn, Tab, BID } = this.props
+    const { setting, btn, BID } = this.props
 
-    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
diff --git a/src/tabviews/zshare/actionList/popupbutton/index.jsx b/src/tabviews/zshare/actionList/popupbutton/index.jsx
index 7a2ef97..6456eb3 100644
--- a/src/tabviews/zshare/actionList/popupbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -18,7 +18,6 @@
     BID: PropTypes.string,            // 涓昏〃ID
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
     selectedData: PropTypes.any,      // 瀛愯〃涓�夋嫨鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
     MenuID: PropTypes.string,         // 鑿滃崟ID
     btn: PropTypes.object,            // 鎸夐挳
     setting: PropTypes.any,           // 椤甸潰閫氱敤璁剧疆
@@ -152,13 +151,13 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { setting, Tab, BID, btn, selectedData } = this.props
+    const { setting, BID, btn, selectedData } = this.props
     const { loading, disabled } = this.state
 
     if (loading || disabled) return
     if (triggerId && btn.uuid !== triggerId) return
 
-    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
diff --git a/src/tabviews/zshare/actionList/printbutton/index.jsx b/src/tabviews/zshare/actionList/printbutton/index.jsx
index 776ede5..f9fc037 100644
--- a/src/tabviews/zshare/actionList/printbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -24,7 +24,6 @@
     BID: PropTypes.string,            // 涓昏〃ID
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
     selectedData: PropTypes.any,      // 瀛愯〃涓�夋嫨鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
     MenuID: PropTypes.string,         // 鑿滃崟ID
     btn: PropTypes.object,            // 鎸夐挳
     setting: PropTypes.any,           // 椤甸潰閫氱敤璁剧疆
@@ -143,13 +142,13 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { Tab, BID, btn, selectedData, setting } = this.props
+    const { BID, btn, selectedData, setting } = this.props
     const { loading, disabled } = this.state
 
     if (loading || disabled) return
     if (triggerId && btn.uuid !== triggerId) return
 
-    if (((Tab && Tab.supMenu) || setting.supModule) && !BID) {
+    if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
         message: '闇�瑕佷笂绾т富閿�硷紒',
diff --git a/src/tabviews/zshare/actionList/tabbutton/index.jsx b/src/tabviews/zshare/actionList/tabbutton/index.jsx
index 6158165..ba8c96a 100644
--- a/src/tabviews/zshare/actionList/tabbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/tabbutton/index.jsx
@@ -15,7 +15,6 @@
     MenuID: PropTypes.string,         // 鑿滃崟ID
     btn: PropTypes.object,            // 鎸夐挳
     selectedData: PropTypes.any,      // 瀛愯〃涓�夋嫨鏁版嵁
-    setting: PropTypes.any,           // 椤甸潰閫氱敤璁剧疆
     disabled: PropTypes.any,          // 琛屾寜閽鐢�
   }
 
@@ -109,7 +108,7 @@
    * @description 瑙﹀彂鎸夐挳鎿嶄綔
    */
   actionTrigger = (triggerId, record, type) => {
-    const { setting, btn, selectedData } = this.props
+    const { btn, selectedData } = this.props
     const { disabled } = this.state
 
     if (disabled) return
@@ -133,8 +132,10 @@
 
     let primaryId = ''
 
-    if (btn.Ot === 'requiredSgl' && setting.primaryKey) {
-      primaryId = data[0][setting.primaryKey] || ''
+    if (btn.Ot === 'requiredSgl') {
+      primaryId = data[0].$$uuid || ''
+    } else if (btn.Ot === 'notRequired' && data[0]) {
+      primaryId = data[0].$$BID || ''
     }
 
     let newtab = {}
diff --git a/src/tabviews/zshare/cardcomponent/index.jsx b/src/tabviews/zshare/cardcomponent/index.jsx
index f9eac6c..5fd8517 100644
--- a/src/tabviews/zshare/cardcomponent/index.jsx
+++ b/src/tabviews/zshare/cardcomponent/index.jsx
@@ -24,7 +24,6 @@
     type: PropTypes.any,              // 鍗$墖绫诲瀷锛屾坊鍔犳寜閽负 insert
     BID: PropTypes.any,               // 涓昏〃ID
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
     MenuID: PropTypes.string,         // 鑿滃崟ID
     setting: PropTypes.object,        // 椤甸潰璁惧畾
     columns: PropTypes.array,         // 鏄剧ず鍒�
@@ -147,7 +146,7 @@
    * @description 鑾峰彇鎸夐挳鍏冪礌
    */
   getActionList = (actions) => {
-    const { BData, Tab, setting, columns, ContainerId, data, MenuID } = this.props
+    const { BData, setting, columns, ContainerId, data, MenuID } = this.props
     
     return actions.map(item => {
       if (['exec', 'prompt', 'pop'].includes(item.OpenType)) {
@@ -155,7 +154,6 @@
           <NormalButton
             key={item.uuid}
             BID={data.$$BID}
-            Tab={Tab}
             btn={item}
             BData={BData}
             setting={setting}
@@ -169,7 +167,6 @@
           <PopupButton
             key={item.uuid}
             BID={data.$$BID}
-            Tab={Tab}
             btn={item}
             BData={BData}
             setting={setting}
@@ -182,7 +179,6 @@
             key={item.uuid}
             btn={item}
             MenuID={MenuID}
-            setting={setting}
             selectedData={[data]}
           />
         )
@@ -191,7 +187,6 @@
           <NewPageButton
             key={item.uuid}
             btn={item}
-            setting={setting}
             selectedData={[data]}
           />
         )
@@ -211,7 +206,6 @@
             <PrintButton
               key={item.uuid}
               BID={data.$$BID}
-              Tab={Tab}
               btn={item}
               BData={BData}
               setting={setting}
@@ -498,7 +492,6 @@
           <div className="mk-card-insert">
             <NormalButton
               BID={this.props.BID}
-              Tab={this.props.Tab}
               btn={{...card.insertAction, style}}
               BData={this.props.BData}
               setting={this.props.setting}
@@ -517,7 +510,6 @@
   static propTpyes = {
     BID: PropTypes.any,               // 涓昏〃ID
     BData: PropTypes.any,             // 涓昏〃鏁版嵁
-    Tab: PropTypes.any,               // 濡傛灉褰撳墠鍏冪礌涓烘爣绛炬椂锛宼ab涓烘爣绛句俊鎭�
     MenuID: PropTypes.string,         // 鑿滃崟ID
     config: PropTypes.object,         // 椤甸潰閰嶇疆淇℃伅
     columns: PropTypes.array,         // 鏄剧ず鍒�
@@ -757,7 +749,7 @@
   }
 
   render() {
-    const { plot, data, loading, BID, BData, Tab, MenuID, config, columns, ContainerId } = this.props
+    const { plot, data, loading, BID, BData, MenuID, config, columns, ContainerId } = this.props
     const { card, colMap, selectKey, actionList } = this.state
     
     return (
@@ -777,7 +769,6 @@
                   <ExcelInButton
                     key={action.uuid}
                     BID={BID}
-                    Tab={Tab}
                     btn={action}
                     setting={config.setting}
                   />
@@ -787,7 +778,6 @@
                   <ExcelOutButton
                     key={action.uuid}
                     BID={BID}
-                    Tab={Tab}
                     btn={action}
                     setting={config.setting}
                   />
@@ -802,7 +792,6 @@
             <CardCell
               key={i}
               BID={BID}
-              Tab={Tab}
               card={card}
               data={item}
               BData={BData}
@@ -821,7 +810,6 @@
             key="insert"
             type="insert"
             BID={BID}
-            Tab={Tab}
             card={card}
             data={{key: 'insert'}}
             BData={BData}
diff --git a/src/tabviews/zshare/chartcomponent/index.jsx b/src/tabviews/zshare/chartcomponent/index.jsx
index 058b831..8f2791a 100644
--- a/src/tabviews/zshare/chartcomponent/index.jsx
+++ b/src/tabviews/zshare/chartcomponent/index.jsx
@@ -15,7 +15,6 @@
 class LineChart extends Component {
   static propTpyes = {
     BID: PropTypes.any,              // 鐖剁骇Id
-    Tab: PropTypes.any,              // 鏍囩淇℃伅
     plot: PropTypes.object,          // 鍥炬爣璁剧疆淇℃伅
     data: PropTypes.array,           // 鍥捐〃浼犲叆鏁版嵁
     loading: PropTypes.bool,         // 鏁版嵁鍔犺浇涓�
@@ -1053,7 +1052,7 @@
   }
 
   render() {
-    const { plot, loading, config, BID, Tab } = this.props
+    const { plot, loading, config, BID } = this.props
     const { empty, chartFields, selectFields, actions } = this.state
 
     return (
@@ -1084,7 +1083,6 @@
                   <ExcelOutButton
                     key={item.uuid}
                     BID={BID}
-                    Tab={Tab}
                     btn={item}
                     show="icon"
                     setting={config.setting}
@@ -1095,7 +1093,6 @@
                   <ExcelInButton
                     key={item.uuid}
                     BID={BID}
-                    Tab={Tab}
                     btn={item}
                     show="icon"
                     setting={config.setting}
diff --git a/src/tabviews/zshare/normalTable/index.jsx b/src/tabviews/zshare/normalTable/index.jsx
index c3147cc..e01df0a 100644
--- a/src/tabviews/zshare/normalTable/index.jsx
+++ b/src/tabviews/zshare/normalTable/index.jsx
@@ -782,7 +782,6 @@
                   selectedData={[record]}
                   BData={this.props.BData}
                   MenuID={this.props.MenuID}
-                  setting={this.props.setting}
                 />
               )
             } else if (btn.OpenType === 'innerpage' || btn.OpenType === 'outerpage') {
@@ -793,7 +792,6 @@
                   disabled={record.$disabled}
                   selectedData={[record]}
                   BData={this.props.BData}
-                  setting={this.props.setting}
                 />
               )
             }
diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index e667b47..cbd1923 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -438,20 +438,10 @@
         item.subtabs.forEach(tab => {
           uuids[tab.uuid] = this.getuuid()
           tab.uuid = uuids[tab.uuid]
-          tab.parentId = item.uuid
-  
-          tab.components = tab.components.map(cell => {
-            cell.tabId = tab.uuid
-            cell.parentId = item.uuid
-            return cell
-          })
+
           tab.components = this.resetConfig(tab.components, uuids, clear)
         })
       } else if (item.type === 'group') {
-        item.components = item.components.map(cell => {
-          cell.parentId = item.uuid
-          return cell
-        })
         item.components = this.resetConfig(item.components, uuids, clear)
       } else if (item.type === 'menubar') {
         item.subMenus = item.subMenus.map(cell => {
@@ -668,35 +658,6 @@
   
       return item
     })
-  }
-
-  /**
-   * @description 閲嶇疆鑿滃崟閰嶇疆锛岄〉闈㈡暣浣撳鍒�
-   * @return {String}  components 閰嶇疆淇℃伅
-   */
-  static getFloor = (id) => {
-    let floor = 1
-    let finish = false
-
-    let reCheck = (components, f) => {
-      components.forEach(item => {
-        if (finish) return
-        if (item.type === 'tabs') {
-          if (item.uuid === id) {
-            floor = f
-            finish = true
-          } else {
-            item.subtabs.forEach(tab => {
-              reCheck(tab.components, f + 1)
-            })
-          }
-        }
-      })
-    }
-
-    reCheck(window.GLOB.customMenu.components, 1)
-
-    return floor
   }
 
   /**
diff --git a/src/utils/utils.js b/src/utils/utils.js
index 208c78a..293b254 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -1369,17 +1369,16 @@
  * @return {Object}  param     璇锋眰鍙傛暟
  * @return {Array}   data      鍒楄〃琛屾暟鎹�
  * @return {Array}   columns   鏄剧ず鍒�
- * @return {Object}  tab       鏍囩淇℃伅
  * @return {Boolean} retmsg    鏄惁闇�瑕佹暟鎹繑鍥�
  */
-export function getSysDefaultSql (btn, setting, formdata, param, data, columns, tab, retmsg = false, moduleParams, getOptions) {
+export function getSysDefaultSql (btn, setting, formdata, param, data, columns, retmsg = false, moduleParams, getOptions) {
   let primaryId = param.ID
   let BID = param.BID || ''
   let verify = btn.verify || {}
   let datavars = {}                 // 澹版槑鐨勫彉閲忥紝琛ㄥ崟鍙婃樉绀哄垪
   let _actionType = null
   let _callbacksql = ''
-  let foreignKey = tab && tab.foreignKey ? tab.foreignKey.toLowerCase() : ''
+  let foreignKey = setting.foreignKey ? setting.foreignKey.toLowerCase() : ''
 
   if (verify.default !== 'false') { // 鍒ゆ柇鏄惁浣跨敤榛樿sql
     _actionType = btn.sqlType
diff --git a/src/views/interface/history/index.jsx b/src/views/interface/history/index.jsx
index 5e882c2..a35551f 100644
--- a/src/views/interface/history/index.jsx
+++ b/src/views/interface/history/index.jsx
@@ -200,11 +200,15 @@
       createDate: '',
       formData: [],
       headers: [],
-      interface: window.GLOB.baseurl + 'webapi/logon',
+      interface: window.GLOB.baseurl + 'webapi/dologon',
       method: 'POST',
       params: [],
       raw: "{\n \"UserName\":\"******\",\n \"Password\":\"******\",\n \"systemType\":\"local\",\n \"Type\":\"鍏挜\",\n \"privatekey\":\"绉侀挜\",\n \"timestamp\":\"" + moment().format('YYYY-MM-DD HH:mm:ss') + "\",\n \"appkey\":\"" + window.GLOB.appkey + "\"\n}",
       uuid: 'dologon'
+    }
+
+    if (window.GLOB.mainSystemApi) {
+      m.raw = "{\n \"UserName\":\"******\",\n \"Password\":\"******\",\n \"systemType\":\"local\",\n \"Type\":\"鍏挜\",\n \"privatekey\":\"绉侀挜\",\n \"timestamp\":\"" + moment().format('YYYY-MM-DD HH:mm:ss') + "\",\n \"appkey\":\"" + window.GLOB.appkey + "\",\n \"rduri\":\"" + window.GLOB.mainSystemApi.replace(/\/webapi(.*)/, '/webapi/dologon') + "\"\n}"
     }
     MKEmitter.emit('useInterface', m)
   }
@@ -269,7 +273,7 @@
             <div className="line-title">绀轰緥</div>
               <div className="line-item" key="dologon">
                 <div className="method">POST</div>
-                <div className="inter" style={{lineHeight: '40px'}}>logon</div>
+                <div className="inter" style={{lineHeight: '40px'}}>dologon</div>
                 <div className="action" style={{paddingLeft: '40px'}}>
                   <RightOutlined onClick={this.uselogon} />
                 </div>
diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx
index 7e761fe..510bace 100644
--- a/src/views/menudesign/index.jsx
+++ b/src/views/menudesign/index.jsx
@@ -110,7 +110,6 @@
     MKEmitter.addListener('copyButtons', this.copyButtons)
     MKEmitter.addListener('changePopview', this.initPopview)
     MKEmitter.addListener('triggerMenuSave', this.triggerMenuSave)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
     MKEmitter.addListener('updateCustomComponent', this.updateCustomComponent)
     setTimeout(() => {
       if (sessionStorage.getItem('app_custom_components')) {
@@ -180,7 +179,6 @@
     MKEmitter.removeListener('copyButtons', this.copyButtons)
     MKEmitter.removeListener('changePopview', this.initPopview)
     MKEmitter.removeListener('triggerMenuSave', this.triggerMenuSave)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
     MKEmitter.removeListener('updateCustomComponent', this.updateCustomComponent)
   }
 
@@ -321,28 +319,6 @@
       })
     })
     this.setState({customComponents: coms})
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { config } = this.state
-
-    if (config.uuid !== parentId) return
-
-    let components = config.components.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({
-      config: {...config, components},
-      comloading: true
-    }, () => {
-      this.setState({
-        comloading: false
-      })
-    })
   }
 
   delButtons = (items) => {
diff --git a/src/views/mobdesign/index.jsx b/src/views/mobdesign/index.jsx
index 384ca4e..bbd3cdb 100644
--- a/src/views/mobdesign/index.jsx
+++ b/src/views/mobdesign/index.jsx
@@ -152,7 +152,6 @@
     MKEmitter.addListener('modalStatus', this.modalStatus)
     MKEmitter.addListener('triggerMenuSave', this.submitConfig)
     MKEmitter.addListener('changeEditMenu', this.changeEditMenu)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
     MKEmitter.addListener('updateCustomComponent', this.updateCustomComponent)
     setTimeout(() => {
       if (sessionStorage.getItem('app_custom_components')) {
@@ -220,7 +219,6 @@
     MKEmitter.removeListener('modalStatus', this.modalStatus)
     MKEmitter.removeListener('triggerMenuSave', this.submitConfig)
     MKEmitter.removeListener('changeEditMenu', this.changeEditMenu)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
     MKEmitter.removeListener('updateCustomComponent', this.updateCustomComponent)
   }
 
@@ -457,28 +455,6 @@
     this.setState({customComponents: coms})
   }
 
-  updateComponentStyle = (parentId, keys, style) => {
-    const { config } = this.state
-
-    if (config.uuid !== parentId) return
-
-    let components = config.components.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({
-      config: {...config, components},
-      comloading: true
-    }, () => {
-      this.setState({
-        comloading: false
-      })
-    })
-  }
-
   closeView = () => {
     const { oriConfig, config } = this.state
 
@@ -656,18 +632,16 @@
             backElements: []
           }
         ],
-        headerStyle: {}, parentId: '', width: 24, scripts: [], pageable: false,
+        headerStyle: {}, width: 24, scripts: [], pageable: false,
         wrap: {name: 'logo', width: 24, datatype: 'static', cardType: '', blacklist: []},
         name: 'logo', floor: 1, switchable: true,
-        setting:{interType: 'system'}, tabId: '', style:{paddingTop: '8vh', paddingBottom: '10vh'}, format: 'object', subtype: 'propcard', type: 'card', uuid: Utils.getuuid(), columns: []
+        setting:{interType: 'system'}, style:{paddingTop: '8vh', paddingBottom: '10vh'}, format: 'object', subtype: 'propcard', type: 'card', uuid: Utils.getuuid(), columns: []
       })
 
       config.components.push({
         uuid: Utils.getuuid(),
         type: 'login',
         floor: 1,
-        tabId: '',
-        parentId: '',
         width: 24,
         name: '鐢ㄦ埛缁戝畾',
         subtype: 'bindlogin',
@@ -687,10 +661,10 @@
             backElements: []
           }
         ],
-        headerStyle: {}, parentId: '', width: 24, scripts: [], pageable: false,
+        headerStyle: {}, width: 24, scripts: [], pageable: false,
         wrap: {name: 'Power', width: 24, datatype: 'static', cardType: '', blacklist: []},
         name: 'Power', floor: 1, switchable: true,
-        setting:{interType: 'system'}, tabId: '', style:{}, format: 'object', subtype: 'propcard', type: 'card', uuid: Utils.getuuid(), columns: []
+        setting:{interType: 'system'}, style:{}, format: 'object', subtype: 'propcard', type: 'card', uuid: Utils.getuuid(), columns: []
       })
     }
     
@@ -2030,12 +2004,12 @@
                 <SysInterface config={config} updateConfig={this.updateConfig}/>
                 <PictureController/>
                 <Quotecomponent config={config} updateConfig={this.updateConfig}/>
+                <StyleCombControlButton menu={config} />
                 <Button className="mk-border-green set-home" onClick={this.setHomeView}><HomeOutlined /> 璁句负棣栭〉</Button>
                 <Button className="mk-border-purple set-login" onClick={this.setLoginView}><LoginOutlined /> 璁句负鐧诲綍椤�</Button>
                 <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                 <Transfer MenuID={MenuId} />
                 <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''}/>
-                <StyleCombControlButton menu={config} />
                 <Button className="mk-border-danger" onClick={this.refreshView}><RedoOutlined /> 寮哄埗鍒锋柊</Button>
                 <Button type="default" onClick={this.closeView}>鍏抽棴</Button>
               </div>
diff --git a/src/views/pcdesign/index.jsx b/src/views/pcdesign/index.jsx
index 06059cb..f3a98e3 100644
--- a/src/views/pcdesign/index.jsx
+++ b/src/views/pcdesign/index.jsx
@@ -132,7 +132,6 @@
     MKEmitter.addListener('changePopview', this.initPopview)
     MKEmitter.addListener('changeEditMenu', this.changeEditMenu)
     MKEmitter.addListener('triggerMenuSave', this.triggerMenuSave)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
     MKEmitter.addListener('updateCustomComponent', this.updateCustomComponent)
     setTimeout(() => {
       if (sessionStorage.getItem('app_custom_components')) {
@@ -206,7 +205,6 @@
     MKEmitter.removeListener('changePopview', this.initPopview)
     MKEmitter.removeListener('changeEditMenu', this.changeEditMenu)
     MKEmitter.removeListener('triggerMenuSave', this.triggerMenuSave)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
     MKEmitter.removeListener('updateCustomComponent', this.updateCustomComponent)
   }
 
@@ -500,28 +498,6 @@
       })
     })
     this.setState({customComponents: coms})
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { config } = this.state
-
-    if (config.uuid !== parentId) return
-
-    let components = config.components.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({
-      config: {...config, components},
-      comloading: true
-    }, () => {
-      this.setState({
-        comloading: false
-      })
-    })
   }
 
   delButtons = (items) => {
@@ -1937,12 +1913,12 @@
                 <SysInterface config={config} updateConfig={this.updateConfig}/>
                 <PictureController/>
                 <Quotecomponent config={config} updateConfig={this.updateConfig}/>
+                <StyleCombControlButton menu={config} />
                 <Button className="mk-border-green" onClick={this.setHomeView}><HomeOutlined /> 璁句负棣栭〉</Button>
                 <Button className="mk-border-purple" onClick={this.setLoginView}><LoginOutlined/> 璁句负鐧诲綍椤�</Button>
                 <ReplaceField type="custom" config={config} updateConfig={this.resetConfig}/>
                 <Transfer MenuID={MenuId} />
                 <Versions MenuId={MenuId} open_edition={config ? config.open_edition : ''}/>
-                <StyleCombControlButton menu={config} />
                 <Button className="mk-border-danger" onClick={this.refreshView}><RedoOutlined /> 寮哄埗鍒锋柊</Button>
                 <Button type="default" onClick={this.closeView}>鍏抽棴</Button>
               </div>
diff --git a/src/views/popdesign/index.jsx b/src/views/popdesign/index.jsx
index d804815..ee36fc4 100644
--- a/src/views/popdesign/index.jsx
+++ b/src/views/popdesign/index.jsx
@@ -83,7 +83,6 @@
   componentDidMount () {
     MKEmitter.addListener('delButtons', this.delButtons)
     MKEmitter.addListener('triggerMenuSave', this.submitConfig)
-    MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
     MKEmitter.addListener('updateCustomComponent', this.updateCustomComponent)
     setTimeout(() => {
       if (sessionStorage.getItem('app_custom_components')) {
@@ -151,7 +150,6 @@
     }
     MKEmitter.removeListener('delButtons', this.delButtons)
     MKEmitter.removeListener('triggerMenuSave', this.submitConfig)
-    MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
     MKEmitter.removeListener('updateCustomComponent', this.updateCustomComponent)
   }
 
@@ -201,28 +199,6 @@
       })
     })
     this.setState({customComponents: coms})
-  }
-
-  updateComponentStyle = (parentId, keys, style) => {
-    const { config } = this.state
-
-    if (config.uuid !== parentId) return
-
-    let components = config.components.map(item => {
-      if (keys.includes(item.uuid)) {
-        item.style = {...item.style, ...style}
-      }
-      return item
-    })
-
-    this.setState({
-      config: {...config, components},
-      comloading: true
-    }, () => {
-      this.setState({
-        comloading: false
-      })
-    })
   }
 
   delButtons = (items) => {
diff --git a/src/views/tabledesign/index.jsx b/src/views/tabledesign/index.jsx
index 19d5c67..3ebbafb 100644
--- a/src/views/tabledesign/index.jsx
+++ b/src/views/tabledesign/index.jsx
@@ -721,10 +721,6 @@
 
   changeSetting = () => {
     this.setState({settingshow: !this.state.settingshow})
-
-    setTimeout(() => {
-      MKEmitter.emit('tabsChange', 'all')
-    }, 400)
   }
 
   render () {
diff --git a/src/views/tabledesign/source.jsx b/src/views/tabledesign/source.jsx
index 248418f..8d9b629 100644
--- a/src/views/tabledesign/source.jsx
+++ b/src/views/tabledesign/source.jsx
@@ -67,56 +67,65 @@
     {
       type: 'action',
       label: '寮圭獥锛堣〃鍗曪級',
-      subType: 'pop',
-      url: ''
+      text: '寮圭獥锛堣〃鍗曪級',
+      value: 'pop',
+      $init: true
     },
     {
       type: 'action',
       label: '鎻愮ず妗�',
-      subType: 'prompt',
-      url: ''
+      text: '鎻愮ず妗�',
+      value: 'prompt',
+      $init: true
     },
     {
       type: 'action',
       label: '鐩存帴鎵ц',
-      subType: 'exec',
-      url: ''
+      text: '鐩存帴鎵ц',
+      value: 'exec',
+      $init: true
     },
     {
       type: 'action',
       label: '瀵煎叆Excel',
-      subType: 'excelIn',
-      url: ''
+      text: '瀵煎叆Excel',
+      value: 'excelIn',
+      $init: true
     },
     {
       type: 'action',
       label: '瀵煎嚭Excel',
-      subType: 'excelOut',
-      url: ''
+      text: '瀵煎嚭Excel',
+      value: 'excelOut',
+      $init: true
     },
     {
       type: 'action',
       label: '寮圭獥锛堟爣绛撅級',
-      subType: 'popview',
-      url: ''
+      text: '寮圭獥锛堟爣绛撅級',
+      value: 'popview',
+      $init: true
     },
     {
       type: 'action',
       label: '鏍囩椤�',
-      subType: 'tab',
-      url: ''
+      text: '鏍囩椤�',
+      value: 'tab',
+      $init: true
     },
     {
       type: 'action',
       label: '鏂伴〉闈�',
-      subType: 'innerpage',
-      url: ''
+      text: '鏂伴〉闈�',
+      value: 'innerpage',
+      $init: true
     },
     {
       type: 'action',
       label: '鍔熻兘鎸夐挳',
-      subType: 'funcbutton',
-      url: ''
+      text: '鍔熻兘鎸夐挳',
+      value: 'funcbutton',
+      $init: true
     }
   ],
   columnItems: [

--
Gitblit v1.8.0