From 3b103caa6bfc9ed410e67156c3ca1785bf1cecc9 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 19 八月 2022 01:15:31 +0800
Subject: [PATCH] 2022-08-19

---
 src/templates/zshare/modalform/index.jsx                                           |    2 
 src/mob/components/navbar/normal-navbar/index.jsx                                  |   15 
 src/utils/utils-datamanage.js                                                      |   14 
 src/menu/components/timeline/normal-timeline/index.jsx                             |   16 
 src/menu/components/card/table-card/index.jsx                                      |   17 
 src/mob/components/tabs/antv-tabs/index.jsx                                        |   40 
 public/options.json                                                                |   10 
 src/menu/components/module/voucher/index.jsx                                       |   15 
 src/templates/sharecomponent/actioncomponent/verifyexcelout/utils.jsx              |    4 
 src/menu/components/chart/antv-scatter/index.jsx                                   |   12 
 src/tabviews/basetable/index.jsx                                                   | 1287 ++++++++++++++++++++++++++
 src/menu/components/form/formaction/index.jsx                                      |   20 
 src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx  |    2 
 src/menu/components/tree/antd-tree/index.jsx                                       |   15 
 src/views/billprint/index.jsx                                                      |    2 
 src/views/design/sidemenu/index.jsx                                                |    5 
 src/tabviews/zshare/actionList/normalbutton/index.jsx                              |    2 
 src/templates/modalconfig/dragelement/card.jsx                                     |    4 
 src/views/design/sidemenu/editthdmenu/index.jsx                                    |    5 
 src/views/tabledesign/index.scss                                                   |    7 
 src/views/tabledesign/menuform/index.scss                                          |    0 
 src/menu/components/table/edit-table/index.scss                                    |   27 
 src/menu/components/card/cardcellcomponent/index.jsx                               |   11 
 src/menu/components/form/dragtitle/index.scss                                      |    1 
 src/menu/components/form/tab-form/index.jsx                                        |   26 
 src/tabviews/basetable/index.scss                                                  |  140 ++
 src/templates/sharecomponent/columncomponent/index.scss                            |    2 
 src/mob/components/menubar/normal-menubar/index.jsx                                |   15 
 src/menu/components/carousel/prop-card/index.jsx                                   |   12 
 src/router/index.js                                                                |    2 
 src/menu/components/card/cardcomponent/index.jsx                                   |   13 
 src/menu/components/card/data-card/index.jsx                                       |   12 
 src/tabviews/custom/components/table/edit-table/normalTable/index.jsx              |    2 
 src/menu/components/chart/antv-pie/index.jsx                                       |   12 
 src/components/breadview/index.jsx                                                 |    3 
 src/tabviews/zshare/mutilform/index.jsx                                            |   26 
 src/menu/components/chart/antv-dashboard/index.jsx                                 |   12 
 src/mob/components/menubar/common-menubar/index.jsx                                |   15 
 src/views/appmanage/index.jsx                                                      |    2 
 src/templates/sharecomponent/treesettingcomponent/settingform/utils.jsx            |    4 
 src/menu/components/card/prop-card/index.jsx                                       |   12 
 src/menu/components/table/normal-table/index.jsx                                   |    8 
 src/menu/components/table/normal-table/columns/index.jsx                           |   11 
 src/menu/components/tabs/antv-tabs/index.jsx                                       |   12 
 src/menu/components/group/normal-group/index.jsx                                   |   12 
 src/templates/sharecomponent/searchcomponent/index.scss                            |    2 
 src/menu/components/table/edit-table/columns/index.jsx                             |   22 
 src/components/tabview/index.jsx                                                   |    3 
 src/pc/components/navbar/normal-navbar/index.jsx                                   |   28 
 src/menu/datasource/verifycard/utils.jsx                                           |    6 
 src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx |    2 
 src/tabviews/zshare/topSearch/index.jsx                                            |   31 
 src/templates/formtabconfig/index.jsx                                              |    8 
 src/menu/components/chart/chart-custom/index.jsx                                   |   12 
 src/tabviews/calendar/index.jsx                                                    |    2 
 src/templates/sharecomponent/searchcomponent/index.jsx                             |   22 
 src/views/appmanage/scriptform/index.jsx                                           |    9 
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx                            |    4 
 src/menu/components/form/simple-form/index.jsx                                     |   26 
 src/views/basedesign/index.jsx                                                     |   10 
 src/menu/components/chart/antv-bar/index.jsx                                       |   12 
 src/menu/components/code/sandbox/index.jsx                                         |   15 
 src/tabviews/zshare/mutilform/mkSelect/index.jsx                                   |    1 
 src/views/tabledesign/index.jsx                                                    |  206 ++++
 src/views/tabledesign/menuform/index.jsx                                           |  175 +++
 src/menu/components/table/normal-table/index.scss                                  |   20 
 src/templates/sharecomponent/columncomponent/index.jsx                             |   11 
 src/templates/modalconfig/dragelement/index.jsx                                    |    9 
 src/menu/components/table/edit-table/index.jsx                                     |   10 
 src/menu/sysinterface/settingform/utils.jsx                                        |    2 
 src/menu/components/carousel/data-card/index.jsx                                   |   17 
 src/templates/sharecomponent/settingcomponent/settingform/utils.jsx                |    8 
 src/utils/utils.js                                                                 |   10 
 src/mob/components/search/single-search/index.jsx                                  |   15 
 src/menu/components/card/balcony/index.jsx                                         |   15 
 src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx                 |    1 
 src/mob/components/menubar/normal-menubar/menucomponent/index.jsx                  |   13 
 src/views/appmanage/scriptform/index.scss                                          |    4 
 src/menu/components/form/step-form/index.jsx                                       |   26 
 src/menu/stylecontroller/index.jsx                                                 |   20 
 src/menu/components/share/normalheader/index.jsx                                   |   17 
 src/templates/zshare/verifycard/index.jsx                                          |    2 
 src/mob/components/formdragelement/index.jsx                                       |    9 
 src/templates/sharecomponent/settingcalcomponent/verifycard/utils.jsx              |    4 
 src/menu/components/share/actioncomponent/index.jsx                                |   12 
 src/menu/components/card/cardsimplecomponent/index.jsx                             |   12 
 src/menu/components/search/main-search/index.jsx                                   |   12 
 src/mob/components/formdragelement/card.jsx                                        |    4 
 src/pc/components/login/normal-login/index.jsx                                     |   15 
 src/mob/components/topbar/normal-navbar/index.jsx                                  |   38 
 src/templates/sharecomponent/actioncomponent/index.jsx                             |    6 
 src/menu/components/editor/braft-editor/index.jsx                                  |   20 
 src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx        |    2 
 src/utils/option.js                                                                |    7 
 94 files changed, 2,182 insertions(+), 641 deletions(-)

diff --git a/public/options.json b/public/options.json
index fbdb8bf..523da64 100644
--- a/public/options.json
+++ b/public/options.json
@@ -1,12 +1,12 @@
 {
-  "appId": "202108312122504607B107A83F55B40C98CCF",
-  "appkey": "20210831212235413F287EC3BF489424496C8",
+  "appId": "201912040924165801464FF1788654BC5AC73",
+  "appkey": "20191106103859640976D6E924E464D029CF0",
   "mainSystemApi": "http://sso.mk9h.cn/cloud/webapi/dostars",
   "systemType": "",
   "externalDatabase": "false",
   "lineColor": "",
   "filter": "false",
-  "defaultApp": "mkindustry",
+  "defaultApp": "mk",
   "defaultLang": "zh-CN",
   "WXAppID": "",
   "WXminiAppID": "",
@@ -15,6 +15,6 @@
   "probation": "",
   "keepPassword": "true",
   "platforms": ["H5", "wechat", "android", "ios", "wxMiniProgram"],
-  "host": "http://demo.mk9h.cn",
-  "service": "erp_new/"
+  "host": "http://qingqiumarket.cn",
+  "service": "MKWMS/"
 }
\ No newline at end of file
diff --git a/src/components/breadview/index.jsx b/src/components/breadview/index.jsx
index 9f1a97d..fe00251 100644
--- a/src/components/breadview/index.jsx
+++ b/src/components/breadview/index.jsx
@@ -16,6 +16,7 @@
 const Home = asyncComponent(() => import('@/tabviews/home'))
 const CustomPage = asyncComponent(() => import('@/tabviews/custom'))
 const CommonTable = asyncComponent(() => import('@/tabviews/commontable'))
+// const BaseTable = asyncComponent(() => import('@/tabviews/basetable'))
 const CalendarPage = asyncComponent(() => import('@/tabviews/calendar'))
 const TreePage = asyncComponent(() => import('@/tabviews/treepage'))
 const Iframe = asyncComponent(() => import('@/tabviews/iframe'))
@@ -94,6 +95,8 @@
       return (<Home MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
     } else if (view.type === 'CommonTable' || view.type === 'ManageTable') {
       return (<CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
+    // } else if (view.type === 'BaseTable') {
+    //   return (<BaseTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
     } else if (view.type === 'CustomPage') {
       return (<CustomPage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
     } else if (view.type === 'TreePage') {
diff --git a/src/components/tabview/index.jsx b/src/components/tabview/index.jsx
index d5320f5..1f95394 100644
--- a/src/components/tabview/index.jsx
+++ b/src/components/tabview/index.jsx
@@ -18,6 +18,7 @@
 const Home = asyncComponent(() => import('@/tabviews/home'))
 const CustomPage = asyncComponent(() => import('@/tabviews/custom'))
 const CommonTable = asyncComponent(() => import('@/tabviews/commontable'))
+// const BaseTable = asyncComponent(() => import('@/tabviews/basetable'))
 const CalendarPage = asyncComponent(() => import('@/tabviews/calendar'))
 const TreePage = asyncComponent(() => import('@/tabviews/treepage'))
 const VerupTable = asyncComponent(() => import('@/tabviews/verupmanage'))
@@ -201,6 +202,8 @@
       return (<Home MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
     } else if (view.type === 'CommonTable' || view.type === 'ManageTable') {
       return (<CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
+    // } else if (view.type === 'BaseTable') {
+    //   return (<BaseTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
     } else if (view.type === 'CustomPage') {
       return (<CustomPage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
     } else if (view.type === 'TreePage') {
diff --git a/src/menu/components/card/balcony/index.jsx b/src/menu/components/card/balcony/index.jsx
index 459d294..263b648 100644
--- a/src/menu/components/card/balcony/index.jsx
+++ b/src/menu/components/card/balcony/index.jsx
@@ -81,10 +81,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -96,7 +92,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -193,15 +188,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx
index cd73458..efcc4af 100644
--- a/src/menu/components/card/cardcellcomponent/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/index.jsx
@@ -66,7 +66,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitModal', this.handleSave)
     MKEmitter.addListener('cardAddElement', this.cardAddElement)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
@@ -95,7 +94,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitModal', this.handleSave)
     MKEmitter.removeListener('cardAddElement', this.cardAddElement)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
@@ -141,8 +139,6 @@
   }
 
   handleStyle = (element) => {
-    const { cards, cardCell } = this.props
-
     let _style = element.style ? fromJS(element.style).toJS() : {}
     let options = ['font', 'border', 'padding', 'margin', 'background']
 
@@ -169,14 +165,11 @@
       card: element
     })
 
-    MKEmitter.emit('changeStyle', [cards.uuid, cardCell.uuid, element.uuid], options, _style)
+    MKEmitter.emit('changeStyle', options, _style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { cards, cardCell } = this.props
+  getStyle = (style) => {
     const { card, elements } = this.state
-
-    if (comIds.length !== 3 || comIds[0] !== cards.uuid || comIds[1] !== cardCell.uuid || !card) return
 
     // if (card.eleType === 'button') {
     //   if ((style.paddingLeft || style.paddingRight) && !style.width) {
diff --git a/src/menu/components/card/cardcomponent/index.jsx b/src/menu/components/card/cardcomponent/index.jsx
index 5554b8f..624eb32 100644
--- a/src/menu/components/card/cardcomponent/index.jsx
+++ b/src/menu/components/card/cardcomponent/index.jsx
@@ -47,10 +47,6 @@
     })
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     const { cards } = this.props
     
@@ -64,14 +60,10 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { cards } = this.props
+  getStyle = (style) => {
     const { card, side } = this.state
-
-    if (comIds.length !== 2 || comIds[0] !== cards.uuid || comIds[1] !== card.uuid) return
 
     let _card = fromJS(card).toJS()
     if (side === 'back') {
@@ -155,7 +147,6 @@
   }
 
   changeStyle = () => {
-    const { cards } = this.props
     const { card, side } = this.state
 
     let _style = null
@@ -167,7 +158,7 @@
       options = ['background', 'padding']
     }
 
-    MKEmitter.emit('changeStyle', [cards.uuid, card.uuid], options, _style)
+    MKEmitter.emit('changeStyle', options, _style, this.getStyle)
   }
 
   getSettingForms = () => {
diff --git a/src/menu/components/card/cardsimplecomponent/index.jsx b/src/menu/components/card/cardsimplecomponent/index.jsx
index eea36ff..54f44b0 100644
--- a/src/menu/components/card/cardsimplecomponent/index.jsx
+++ b/src/menu/components/card/cardsimplecomponent/index.jsx
@@ -43,10 +43,6 @@
     })
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.props.cards), fromJS(nextProps.cards)) || !is(fromJS(this.state), fromJS(nextState))
   }
@@ -58,14 +54,10 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { cards } = this.props
+  getStyle = (style) => {
     const { card } = this.state
-
-    if (comIds.length !== 2 || comIds[0] !== cards.uuid || comIds[1] !== card.uuid) return
 
     let _card = fromJS(card).toJS()
     _card.style = style
@@ -134,7 +126,7 @@
       options = ['background', 'border', 'padding', 'margin', 'shadow']
     }
 
-    MKEmitter.emit('changeStyle', [cards.uuid, card.uuid], options, _style)
+    MKEmitter.emit('changeStyle', options, _style, this.getStyle)
   }
 
   getSettingForms = () => {
diff --git a/src/menu/components/card/data-card/index.jsx b/src/menu/components/card/data-card/index.jsx
index 5220e69..c3dfe4e 100644
--- a/src/menu/components/card/data-card/index.jsx
+++ b/src/menu/components/card/data-card/index.jsx
@@ -145,7 +145,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitModal', this.handleSave)
     // MKEmitter.addListener('logButton', this.logButton)
   }
@@ -161,7 +160,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitModal', this.handleSave)
     // MKEmitter.removeListener('logButton', this.logButton)
   }
@@ -375,15 +373,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'height', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'height', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/card/prop-card/index.jsx b/src/menu/components/card/prop-card/index.jsx
index c2ad186..daf0cb9 100644
--- a/src/menu/components/card/prop-card/index.jsx
+++ b/src/menu/components/card/prop-card/index.jsx
@@ -109,7 +109,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     // MKEmitter.addListener('logButton', this.logButton)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
   }
@@ -125,7 +124,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     // MKEmitter.removeListener('logButton', this.logButton)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
   }
@@ -379,15 +377,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/card/table-card/index.jsx b/src/menu/components/card/table-card/index.jsx
index d71c70b..1c498ad 100644
--- a/src/menu/components/card/table-card/index.jsx
+++ b/src/menu/components/card/table-card/index.jsx
@@ -136,11 +136,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-    // MKEmitter.addListener('logButton', this.logButton)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -152,8 +147,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
-    // MKEmitter.removeListener('logButton', this.logButton)
   }
 
   // logButton = (id, item) => {
@@ -300,15 +293,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length > 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/carousel/data-card/index.jsx b/src/menu/components/carousel/data-card/index.jsx
index 0dc3779..4440080 100644
--- a/src/menu/components/carousel/data-card/index.jsx
+++ b/src/menu/components/carousel/data-card/index.jsx
@@ -95,11 +95,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-    // MKEmitter.addListener('logButton', this.logButton)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -111,8 +106,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
-    // MKEmitter.removeListener('logButton', this.logButton)
   }
 
   // logButton = (id, item) => {
@@ -248,15 +241,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/carousel/prop-card/index.jsx b/src/menu/components/carousel/prop-card/index.jsx
index 8fc46c6..641330c 100644
--- a/src/menu/components/carousel/prop-card/index.jsx
+++ b/src/menu/components/carousel/prop-card/index.jsx
@@ -95,7 +95,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     // MKEmitter.addListener('logButton', this.logButton)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
   }
@@ -111,7 +110,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     // MKEmitter.removeListener('logButton', this.logButton)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
   }
@@ -291,15 +289,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/chart/antv-bar/index.jsx b/src/menu/components/chart/antv-bar/index.jsx
index c7f587b..90c340e 100644
--- a/src/menu/components/chart/antv-bar/index.jsx
+++ b/src/menu/components/chart/antv-bar/index.jsx
@@ -124,7 +124,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('plusSearch', this.plusSearch)
     MKEmitter.addListener('tabsChange', this.handleTabsChange)
     setTimeout(() => {
@@ -143,7 +142,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('plusSearch', this.plusSearch)
     MKEmitter.removeListener('tabsChange', this.handleTabsChange)
   }
@@ -1338,15 +1336,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length > 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, 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 a950a8f..6434bd4 100644
--- a/src/menu/components/chart/antv-dashboard/index.jsx
+++ b/src/menu/components/chart/antv-dashboard/index.jsx
@@ -158,7 +158,6 @@
 
   componentDidMount () {
     MKEmitter.addListener('tabsChange', this.handleTabsChange)
-    MKEmitter.addListener('submitStyle', this.getStyle)
 
     setTimeout(() => {
       this.viewrender()
@@ -177,7 +176,6 @@
       return
     }
     MKEmitter.removeListener('tabsChange', this.handleTabsChange)
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   handleTabsChange = (parentId) => {
@@ -512,15 +510,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length > 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, 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 793dfd6..1fdd69b 100644
--- a/src/menu/components/chart/antv-pie/index.jsx
+++ b/src/menu/components/chart/antv-pie/index.jsx
@@ -116,7 +116,6 @@
 
   componentDidMount () {
     MKEmitter.addListener('tabsChange', this.handleTabsChange)
-    MKEmitter.addListener('submitStyle', this.getStyle)
 
     setTimeout(() => {
       this.viewrender()
@@ -135,7 +134,6 @@
       return
     }
     MKEmitter.removeListener('tabsChange', this.handleTabsChange)
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   handleTabsChange = (parentId) => {
@@ -670,15 +668,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length > 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, 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 334f7ca..5b5d93a 100644
--- a/src/menu/components/chart/antv-scatter/index.jsx
+++ b/src/menu/components/chart/antv-scatter/index.jsx
@@ -112,7 +112,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('plusSearch', this.plusSearch)
     MKEmitter.addListener('tabsChange', this.handleTabsChange)
     setTimeout(() => {
@@ -131,7 +130,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('plusSearch', this.plusSearch)
     MKEmitter.removeListener('tabsChange', this.handleTabsChange)
   }
@@ -356,15 +354,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length > 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, 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 d82d9bf..8de9dd0 100644
--- a/src/menu/components/chart/chart-custom/index.jsx
+++ b/src/menu/components/chart/chart-custom/index.jsx
@@ -100,7 +100,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('tabsChange', this.handleTabsChange)
     setTimeout(() => {
       this.viewrender()
@@ -118,7 +117,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('tabsChange', this.handleTabsChange)
   }
 
@@ -236,15 +234,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length > 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/code/sandbox/index.jsx b/src/menu/components/code/sandbox/index.jsx
index 3c13f57..4e713af 100644
--- a/src/menu/components/code/sandbox/index.jsx
+++ b/src/menu/components/code/sandbox/index.jsx
@@ -83,10 +83,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -98,7 +94,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -136,15 +131,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length !== 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/editor/braft-editor/index.jsx b/src/menu/components/editor/braft-editor/index.jsx
index 479ad2a..6d7e1d7 100644
--- a/src/menu/components/editor/braft-editor/index.jsx
+++ b/src/menu/components/editor/braft-editor/index.jsx
@@ -78,10 +78,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -93,7 +89,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -131,20 +126,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid) return
-
-    let _card = {}
-    if (comIds.length === 1) {
-      _card = {...card, style}
-    } else {
-      return
-    }
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/form/dragtitle/index.scss b/src/menu/components/form/dragtitle/index.scss
index f4413f1..9921c52 100644
--- a/src/menu/components/form/dragtitle/index.scss
+++ b/src/menu/components/form/dragtitle/index.scss
@@ -6,6 +6,7 @@
     position: relative;
     flex: 1;
     text-align: center;
+    background: transparent;
     cursor: move;
     .form-sort {
       background: #d8d8d8;
diff --git a/src/menu/components/form/formaction/index.jsx b/src/menu/components/form/formaction/index.jsx
index 2227f2a..10b6797 100644
--- a/src/menu/components/form/formaction/index.jsx
+++ b/src/menu/components/form/formaction/index.jsx
@@ -32,10 +32,6 @@
     profVisible: false,  // 楠岃瘉淇℃伅缂栬緫
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.props.group), fromJS(nextProps.group)) || !is(fromJS(this.state), fromJS(nextState))
   }
@@ -47,12 +43,9 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   handleStyle = (element) => {
-    const { group } = this.props
-
     let _style = element.style ? fromJS(element.style).toJS() : {}
     let options = ['font', 'border', 'padding', 'margin', 'backgroundColor', 'width']
 
@@ -60,19 +53,18 @@
       card: element
     })
 
-    MKEmitter.emit('changeStyle', [group.uuid, element.type], options, _style)
+    MKEmitter.emit('changeStyle', options, _style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
+  getStyle = (style) => {
+    const { card } = this.state
     let group = fromJS(this.props.group).toJS()
 
-    if (comIds.length !== 2 || comIds[0] !== group.uuid) return
-
-    if (comIds[1] === 'prev') {
+    if (card.type === 'prev') {
       group.prevButton.style = style
-    } else if (comIds[1] === 'submit') {
+    } else if (card.type === 'submit') {
       group.subButton.style = style
-    } else if (comIds[1] === 'next') {
+    } else if (card.type === 'next') {
       group.nextButton.style = style
     }
 
diff --git a/src/menu/components/form/simple-form/index.jsx b/src/menu/components/form/simple-form/index.jsx
index f09614f..e1c5299 100644
--- a/src/menu/components/form/simple-form/index.jsx
+++ b/src/menu/components/form/simple-form/index.jsx
@@ -112,7 +112,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
   }
 
@@ -127,7 +126,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
   }
 
@@ -221,29 +219,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] === 'form') {
-      let Index = card.subcards[0].fields.findIndex(n => n.uuid === comIds[1])
-
-      if (Index === -1) return
-      
-      let _card = fromJS(card).toJS()
-
-      _card.subcards[0].fields[Index].style = style
-
-      this.updateComponent(_card)
-
-      return
-    }
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/form/step-form/index.jsx b/src/menu/components/form/step-form/index.jsx
index f153e7a..230b51d 100644
--- a/src/menu/components/form/step-form/index.jsx
+++ b/src/menu/components/form/step-form/index.jsx
@@ -119,7 +119,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
   }
 
@@ -134,7 +133,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
   }
 
@@ -228,29 +226,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card, group } = this.state
-
-    if (comIds[0] === 'form') {
-      let Index = group.fields.findIndex(n => n.uuid === comIds[1])
-
-      if (Index === -1) return
-      
-      let _group = fromJS(group).toJS()
-
-      _group.fields[Index].style = style
-
-      this.updateGroup(_group)
-
-      return
-    }
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/form/tab-form/index.jsx b/src/menu/components/form/tab-form/index.jsx
index ad47dea..ff6e32b 100644
--- a/src/menu/components/form/tab-form/index.jsx
+++ b/src/menu/components/form/tab-form/index.jsx
@@ -131,7 +131,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
   }
 
@@ -146,7 +145,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
   }
 
@@ -240,29 +238,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card, group } = this.state
-
-    if (comIds[0] === 'form') {
-      let Index = group.fields.findIndex(n => n.uuid === comIds[1])
-
-      if (Index === -1) return
-      
-      let _group = fromJS(group).toJS()
-
-      _group.fields[Index].style = style
-
-      this.updateGroup(_group)
-
-      return
-    }
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/group/normal-group/index.jsx b/src/menu/components/group/normal-group/index.jsx
index 509829e..08229ed 100644
--- a/src/menu/components/group/normal-group/index.jsx
+++ b/src/menu/components/group/normal-group/index.jsx
@@ -60,7 +60,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('tabsChange', this.handleTabsChange)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
   }
@@ -72,7 +71,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('tabsChange', this.handleTabsChange)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
   }
@@ -99,15 +97,11 @@
   changeStyle = () => {
     const { group } = this.state
 
-    MKEmitter.emit('changeStyle', [group.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], group.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], group.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { group } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== group.uuid) return
-
-    let _card = {...group, style}
+  getStyle = (style) => {
+    let _card = {...this.state.group, style}
 
     this.setState({
       group: _card
diff --git a/src/menu/components/module/voucher/index.jsx b/src/menu/components/module/voucher/index.jsx
index c3167d2..ccc29e7 100644
--- a/src/menu/components/module/voucher/index.jsx
+++ b/src/menu/components/module/voucher/index.jsx
@@ -58,10 +58,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -73,7 +69,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -93,15 +88,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length !== 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/search/main-search/index.jsx b/src/menu/components/search/main-search/index.jsx
index 0010681..8f67966 100644
--- a/src/menu/components/search/main-search/index.jsx
+++ b/src/menu/components/search/main-search/index.jsx
@@ -76,7 +76,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('plusSearch', this.plusSearch)
   }
 
@@ -87,7 +86,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('plusSearch', this.plusSearch)
   }
 
@@ -95,12 +93,8 @@
     return !is(fromJS(this.state), fromJS(nextState))
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.setState({
       card: _card
@@ -112,7 +106,7 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
   /**
diff --git a/src/menu/components/share/actioncomponent/index.jsx b/src/menu/components/share/actioncomponent/index.jsx
index f7e1175..f64746e 100644
--- a/src/menu/components/share/actioncomponent/index.jsx
+++ b/src/menu/components/share/actioncomponent/index.jsx
@@ -65,7 +65,6 @@
 
   componentDidMount () {
     MKEmitter.addListener('addButton', this.addButton)
-    MKEmitter.addListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -90,14 +89,11 @@
       return
     }
     MKEmitter.removeListener('addButton', this.addButton)
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
+  getStyle = (style) => {
     const { config } = this.props
     const { card, actionlist } = this.state
-
-    if (comIds[0] !== config.uuid || comIds[1] !== 'actionlist') return
 
     let _card = fromJS(card).toJS()
     _card.style = style
@@ -115,8 +111,6 @@
   }
 
   changeBtnStyle = (element) => {
-    const { config } = this.props
-
     let _style = element.style ? fromJS(element.style).toJS() : {}
     let options = ['font', 'border', 'background', 'margin', 'padding']
 
@@ -124,7 +118,7 @@
       card: element
     })
 
-    MKEmitter.emit('changeStyle', [config.uuid, 'actionlist', element.uuid], options, _style)
+    MKEmitter.emit('changeStyle', options, _style, this.getStyle)
   }
 
   addButton = (cardId, element) => {
@@ -517,7 +511,7 @@
     const { actionlist, visible, appType, card, dict, profVisible, record } = this.state
 
     return (
-      <div className={'model-menu-action-list'}>
+      <div className={'model-menu-action-list length' + actionlist.length}>
         <DragElement
           list={actionlist}
           type={appType === 'mob' ? (type || '') : ''}
diff --git a/src/menu/components/share/normalheader/index.jsx b/src/menu/components/share/normalheader/index.jsx
index e5345f5..2f552fd 100644
--- a/src/menu/components/share/normalheader/index.jsx
+++ b/src/menu/components/share/normalheader/index.jsx
@@ -22,10 +22,6 @@
     appType: sessionStorage.getItem('appType')
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.props.config), fromJS(nextProps.config))
   }
@@ -37,15 +33,14 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { config } = this.props
+  getStyle = (style) => {
+    if (!style.borderBottomWidth) {
+      style.borderBottomWidth = '0px'
+    }
 
-    if (comIds[0] !== config.uuid || comIds[1] !== 'header') return
-
-    let _config = {...config, headerStyle: style}
+    let _config = {...this.props.config, headerStyle: style}
     
     this.props.updateComponent(_config)
   }
@@ -58,7 +53,7 @@
       options.push('padding')
     }
 
-    MKEmitter.emit('changeStyle', [config.uuid, 'header'], options, config.headerStyle)
+    MKEmitter.emit('changeStyle', options, config.headerStyle, this.getStyle)
   }
 
   render() {
diff --git a/src/menu/components/table/edit-table/columns/index.jsx b/src/menu/components/table/edit-table/columns/index.jsx
index 67057c7..3479806 100644
--- a/src/menu/components/table/edit-table/columns/index.jsx
+++ b/src/menu/components/table/edit-table/columns/index.jsx
@@ -340,27 +340,25 @@
       editStyleCard: fromJS(col).toJS()
     })
 
-    MKEmitter.emit('changeStyle', [col.uuid], ['font', 'padding'], col.style || {})
+    MKEmitter.emit('changeStyle', ['font', 'padding'], col.style || {}, this.getStyle)
   }
 
   changeSubmitStyle = () => {
     const { config } = this.props
 
-    MKEmitter.emit('changeStyle', [config.uuid, 'submit'], ['font', 'background', 'border', 'margin', 'padding'], config.submit.style || {})
+    MKEmitter.emit('changeStyle', ['font', 'background', 'border', 'margin', 'padding'], config.submit.style || {}, this.getSubmitStyle)
   }
 
-  getStyle = (comIds, style) => {
+  getSubmitStyle = (style) => {
     const { config } = this.props
+
+    let submit = {...config.submit, style}
+
+    this.props.updatecolumn({...config, submit: submit})
+  }
+
+  getStyle = (style) => {
     const { editStyleCard } = this.state
-
-    if (comIds.length === 2 && comIds[0] === config.uuid && comIds[1] === 'submit') {
-      let submit = {...config.submit, style}
-
-      this.props.updatecolumn({...config, submit: submit})
-
-      return
-    }
-    if (comIds.length !== 1 || !editStyleCard || comIds[0] !== editStyleCard.uuid) return
 
     let _card = {...editStyleCard, style}
     
diff --git a/src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx b/src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx
index 03bcb2d..cbd84c7 100644
--- a/src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx
+++ b/src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx
@@ -37,7 +37,7 @@
     fields.push('jskey')
 
     let _sql = `Declare @${btn.sheet} table (${usefulfields.map(item => item.field + ' ' + item.type).join(',')},jskey nvarchar(50),data_type nvarchar(50),BID nvarchar(50))
-      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50), @retmsg nvarchar(4000),@tbid Nvarchar(512)
+      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50), @retmsg nvarchar(4000),@tbid Nvarchar(512)
       Select @ErrorCode='', @retmsg=''
     `
     
diff --git a/src/menu/components/table/edit-table/index.jsx b/src/menu/components/table/edit-table/index.jsx
index 36085ce..26803be 100644
--- a/src/menu/components/table/edit-table/index.jsx
+++ b/src/menu/components/table/edit-table/index.jsx
@@ -126,7 +126,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitModal', this.handleSave)
     MKEmitter.addListener('completeSave', this.completeSave)
   }
@@ -142,7 +141,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitModal', this.handleSave)
     MKEmitter.removeListener('completeSave', this.completeSave)
   }
@@ -257,13 +255,11 @@
     style.fontSize = card.wrap.fontSize || 14
     style.fontWeight = card.wrap.fontWeight || 'normal'
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['font1', 'background', 'border', 'padding', 'margin', 'shadow'], style)
+    MKEmitter.emit('changeStyle', ['font1', 'background', 'border', 'padding', 'margin', 'shadow'], style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
+  getStyle = (style) => {
     const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length !== 1) return
 
     let _card = fromJS(card).toJS()
     let _style = fromJS(style).toJS()
@@ -406,7 +402,7 @@
     let _style = resetStyle(card.style)
 
     return (
-      <div className="menu-normal-table-edit-box" style={_style} onClick={this.clickComponent} id={card.uuid}>
+      <div className="menu-editable-table-edit-box" style={_style} onClick={this.clickComponent} id={card.uuid}>
         <NormalHeader hideSearch="true" config={card} updateComponent={this.updateComponent}/>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
diff --git a/src/menu/components/table/edit-table/index.scss b/src/menu/components/table/edit-table/index.scss
index f933a19..0991fb4 100644
--- a/src/menu/components/table/edit-table/index.scss
+++ b/src/menu/components/table/edit-table/index.scss
@@ -1,4 +1,4 @@
-.menu-normal-table-edit-box {
+.menu-editable-table-edit-box {
   position: relative;
   box-sizing: border-box;
   background: #ffffff;
@@ -11,9 +11,6 @@
     padding: 10px 0px 15px;
     min-height: 65px;
     border-bottom: 1px solid #f0f0f0;
-    >.anticon-question-circle {
-      display: none;
-    }
     .page-card {
       background: transparent;
     }
@@ -34,7 +31,22 @@
     }
   }
   .model-table-search-list.length0 {
-    display: none;
+    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;
@@ -49,7 +61,6 @@
   .model-menu-action-list {
     line-height: 55px;
     padding: 0px;
-    min-height: 55px;
     >.ant-row {
       min-height: 30px;
     }
@@ -69,12 +80,12 @@
     padding: 0;
   }
 }
-.menu-normal-table-edit-box::after {
+.menu-editable-table-edit-box::after {
   display: block;
   content: ' ';
   clear: both;
 }
-.menu-normal-table-edit-box:hover {
+.menu-editable-table-edit-box:hover {
   z-index: 1;
   box-shadow: 0px 0px 4px #1890ff;
 }
diff --git a/src/menu/components/table/normal-table/columns/index.jsx b/src/menu/components/table/normal-table/columns/index.jsx
index d22150a..f22548c 100644
--- a/src/menu/components/table/normal-table/columns/index.jsx
+++ b/src/menu/components/table/normal-table/columns/index.jsx
@@ -377,13 +377,11 @@
       editStyleCard: fromJS(col).toJS()
     })
 
-    MKEmitter.emit('changeStyle', [col.uuid], ['font', 'padding'], col.style || {})
+    MKEmitter.emit('changeStyle', ['font', 'padding'], col.style || {}, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
+  getStyle = (style) => {
     const { editStyleCard } = this.state
-
-    if (!editStyleCard || comIds[0] !== editStyleCard.uuid || comIds.length !== 1) return
 
     let _card = {...editStyleCard, style}
     
@@ -559,10 +557,6 @@
     })
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   /**
    * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆
    */
@@ -570,7 +564,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   render() {
diff --git a/src/menu/components/table/normal-table/index.jsx b/src/menu/components/table/normal-table/index.jsx
index 5e1a558..480a7db 100644
--- a/src/menu/components/table/normal-table/index.jsx
+++ b/src/menu/components/table/normal-table/index.jsx
@@ -143,7 +143,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitModal', this.handleSave)
     // MKEmitter.addListener('logButton', this.logButton)
     MKEmitter.addListener('completeSave', this.completeSave)
@@ -160,7 +159,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitModal', this.handleSave)
     // MKEmitter.removeListener('logButton', this.logButton)
     MKEmitter.removeListener('completeSave', this.completeSave)
@@ -319,13 +317,11 @@
     style.fontSize = card.wrap.fontSize || 14
     style.fontWeight = card.wrap.fontWeight || 'normal'
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['font1', 'background', 'border', 'padding', 'margin', 'shadow'], style)
+    MKEmitter.emit('changeStyle', ['font1', 'background', 'border', 'padding', 'margin', 'shadow'], style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
+  getStyle = (style) => {
     const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length !== 1) return
 
     let _card = fromJS(card).toJS()
     let _style = fromJS(style).toJS()
diff --git a/src/menu/components/table/normal-table/index.scss b/src/menu/components/table/normal-table/index.scss
index f933a19..b558c2a 100644
--- a/src/menu/components/table/normal-table/index.scss
+++ b/src/menu/components/table/normal-table/index.scss
@@ -11,9 +11,6 @@
     padding: 10px 0px 15px;
     min-height: 65px;
     border-bottom: 1px solid #f0f0f0;
-    >.anticon-question-circle {
-      display: none;
-    }
     .page-card {
       background: transparent;
     }
@@ -34,7 +31,22 @@
     }
   }
   .model-table-search-list.length0 {
-    display: none;
+    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;
diff --git a/src/menu/components/tabs/antv-tabs/index.jsx b/src/menu/components/tabs/antv-tabs/index.jsx
index fbcfe24..a272815 100644
--- a/src/menu/components/tabs/antv-tabs/index.jsx
+++ b/src/menu/components/tabs/antv-tabs/index.jsx
@@ -75,7 +75,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitSearch', this.getSearch)
     MKEmitter.addListener('tabsChange', this.handleTabsChange)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
@@ -88,7 +87,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitSearch', this.getSearch)
     MKEmitter.removeListener('tabsChange', this.handleTabsChange)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
@@ -130,15 +128,11 @@
   changeStyle = () => {
     const { tabs } = this.state
 
-    MKEmitter.emit('changeStyle', [tabs.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], tabs.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], tabs.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { tabs } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== tabs.uuid) return
-
-    let _card = {...tabs, style}
+  getStyle = (style) => {
+    let _card = {...this.state.tabs, style}
 
     this.setState({
       tabs: _card
diff --git a/src/menu/components/timeline/normal-timeline/index.jsx b/src/menu/components/timeline/normal-timeline/index.jsx
index 2dbf0ab..87c2fe4 100644
--- a/src/menu/components/timeline/normal-timeline/index.jsx
+++ b/src/menu/components/timeline/normal-timeline/index.jsx
@@ -50,6 +50,7 @@
         setting: { interType: 'system' },
         wrap: { title: '', name: card.name, direction: 'vertical', width: card.width || 24, color: '#1890ff', mode: 'left' },
         style: { marginLeft: '0px', marginRight: '0px', marginTop: '0px', marginBottom: '0px' },
+        headerStyle: { fontSize: '16px', borderBottomWidth: '1px', borderBottomColor: '#e8e8e8' },
         subcards: [{
           uuid: Utils.getuuid(),
           setting: { width: 24, type: 'simple'},
@@ -91,10 +92,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -106,7 +103,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -181,15 +177,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/menu/components/tree/antd-tree/index.jsx b/src/menu/components/tree/antd-tree/index.jsx
index 0619ac9..0c5d16e 100644
--- a/src/menu/components/tree/antd-tree/index.jsx
+++ b/src/menu/components/tree/antd-tree/index.jsx
@@ -78,10 +78,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -93,7 +89,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -133,15 +128,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['height', 'background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid || comIds.length !== 1) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.updateComponent(_card)
   }
diff --git a/src/menu/datasource/verifycard/utils.jsx b/src/menu/datasource/verifycard/utils.jsx
index 7dc431d..23890a5 100644
--- a/src/menu/datasource/verifycard/utils.jsx
+++ b/src/menu/datasource/verifycard/utils.jsx
@@ -54,7 +54,7 @@
     _dataresource = _dataresource.replace(/@sum\$/ig, '@sum$*/')
 
     if (_customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_customScript}
       `
     }
@@ -174,7 +174,7 @@
         `
       } else {
         sumSql = `/* sql sum楠岃瘉 */
-          declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+          declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
           ${_sql}`
       }
     }
@@ -202,7 +202,7 @@
       `
     } else {
       sql = `/* sql 楠岃瘉 */
-        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_dataresource}`
     }
     sql = sql.replace(/\n\s{8}/ig, '\n')
diff --git a/src/menu/stylecontroller/index.jsx b/src/menu/stylecontroller/index.jsx
index a98c24b..b2bb476 100644
--- a/src/menu/stylecontroller/index.jsx
+++ b/src/menu/stylecontroller/index.jsx
@@ -51,11 +51,12 @@
   state = {
     card: null,
     fonts: null,
-    comIds: [],
     backgroundImage: '',
     options: [],
     borposition: 'outer'
   }
+
+  callback = null
 
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
@@ -75,7 +76,7 @@
     MKEmitter.removeListener('changeStyle', this.initStyle)
   }
 
-  initStyle = (comIds, options, style = {}) => {
+  initStyle = (options, style = {}, callback) => {
     let backgroundImage = ''
     if (style.backgroundImage && /^url/ig.test(style.backgroundImage)) {
       backgroundImage = style.backgroundImage.replace(/^url\(/ig, '').replace(/\)$/ig, '')
@@ -95,10 +96,11 @@
       }
     }
 
+    this.callback = callback
+
     this.setState({
       visible: true,
       fonts: fonts,
-      comIds: comIds,
       card: fromJS(style).toJS(),
       options: options,
       borposition: 'outer',
@@ -134,21 +136,21 @@
     }
 
     if (check) {
-      MKEmitter.emit('submitStyle', this.state.comIds, card)
+      this.callback && this.callback(card)
     }
 
     this.setState({
       visible: false,
-      comIds: [],
       card: null,
       options: [],
       backgroundImage: ''
     })
     window.GLOB.styling = false
+    this.callback = null
   }
 
   updateStyle = (style) => {
-    const { comIds, card } = this.state
+    const { card } = this.state
 
     let _style = {
       ...card,
@@ -159,7 +161,7 @@
       card: _style,
     })
 
-    MKEmitter.emit('submitStyle', comIds, _style)
+    this.callback && this.callback(_style)
   }
 
   /**
@@ -262,7 +264,7 @@
   }
 
   changeBackground = (val) => {
-    const { comIds, card } = this.state
+    const { card } = this.state
 
     let _style = { ...card }
 
@@ -280,7 +282,7 @@
     })
 
     if (!val || /(^linear-gradient|^radial-gradient)\(.*\)$/.test(val)) {
-      MKEmitter.emit('submitStyle', comIds, _style)
+      this.callback && this.callback(_style)
     }
   }
 
diff --git a/src/menu/sysinterface/settingform/utils.jsx b/src/menu/sysinterface/settingform/utils.jsx
index 60d5574..c532c3f 100644
--- a/src/menu/sysinterface/settingform/utils.jsx
+++ b/src/menu/sysinterface/settingform/utils.jsx
@@ -17,7 +17,7 @@
     })
 
     if (_customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_customScript}
       `
     }
diff --git a/src/mob/components/formdragelement/card.jsx b/src/mob/components/formdragelement/card.jsx
index d248a84..2fc4c8f 100644
--- a/src/mob/components/formdragelement/card.jsx
+++ b/src/mob/components/formdragelement/card.jsx
@@ -12,7 +12,7 @@
 
 const CheckCard = asyncComponent(() => import('@/templates/modalconfig/checkCard'))
 
-const Card = ({ id, card, moveCard, findCard, editCard, closeCard, copyCard, showField }) => {
+const Card = ({ id, card, moveCard, findCard, editCard, closeCard, copyCard, showField, setStyle }) => {
   const originalIndex = findCard(id).index
   const [{ isDragging }, drag] = useDrag({
     item: { type: 'form', id, originalIndex },
@@ -59,7 +59,7 @@
       style.marginBottom = card.marginBottom
     }
 
-    MKEmitter.emit('changeStyle', ['form', card.uuid], options, style)
+    MKEmitter.emit('changeStyle', options, style, (s) => {setStyle(s, id)})
   }
 
   let selectval = ''
diff --git a/src/mob/components/formdragelement/index.jsx b/src/mob/components/formdragelement/index.jsx
index 7ff6d39..2494505 100644
--- a/src/mob/components/formdragelement/index.jsx
+++ b/src/mob/components/formdragelement/index.jsx
@@ -42,6 +42,14 @@
     closeForm(card)
   }
 
+  const setStyle = (style, id) => {
+    const { card, index } = findCard(id)
+    
+    const _cards = update(cards, { $splice: [[index, 1, {...card, style}]] })
+
+    handleList(_cards)
+  }
+
   const copyCard = id => {
     const { card, index: overIndex } = findCard(id)
 
@@ -138,6 +146,7 @@
             showField={showField}
             moveCard={moveCard}
             editCard={editCard}
+            setStyle={setStyle}
             closeCard={closeCard}
             copyCard={copyCard}
             findCard={findCard}
diff --git a/src/mob/components/menubar/common-menubar/index.jsx b/src/mob/components/menubar/common-menubar/index.jsx
index d3db159..0c8e7d0 100644
--- a/src/mob/components/menubar/common-menubar/index.jsx
+++ b/src/mob/components/menubar/common-menubar/index.jsx
@@ -71,10 +71,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -86,7 +82,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -106,15 +101,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.setState({
       card: _card
diff --git a/src/mob/components/menubar/normal-menubar/index.jsx b/src/mob/components/menubar/normal-menubar/index.jsx
index 53d4e1f..796d173 100644
--- a/src/mob/components/menubar/normal-menubar/index.jsx
+++ b/src/mob/components/menubar/normal-menubar/index.jsx
@@ -88,10 +88,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -103,7 +99,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -170,15 +165,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.setState({
       card: _card
diff --git a/src/mob/components/menubar/normal-menubar/menucomponent/index.jsx b/src/mob/components/menubar/normal-menubar/menucomponent/index.jsx
index 3c28d9f..53aa073 100644
--- a/src/mob/components/menubar/normal-menubar/menucomponent/index.jsx
+++ b/src/mob/components/menubar/normal-menubar/menucomponent/index.jsx
@@ -36,10 +36,6 @@
     })
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -51,14 +47,10 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { cards } = this.props
+  getStyle = (style) => {
     const { card } = this.state
-
-    if (comIds.length !== 2 || comIds[0] !== cards.uuid || comIds[1] !== card.uuid) return
 
     let _card = fromJS(card).toJS()
     _card.style = style
@@ -71,13 +63,12 @@
   }
 
   changeStyle = () => {
-    const { cards } = this.props
     const { card } = this.state
 
     let _style = card.style ? fromJS(card.style).toJS() : {}
     let options = ['font', 'border', 'padding', 'margin', 'background']
 
-    MKEmitter.emit('changeStyle', [cards.uuid, card.uuid], options, _style)
+    MKEmitter.emit('changeStyle', options, _style, this.getStyle)
   }
 
   getSettingForms = () => {
diff --git a/src/mob/components/navbar/normal-navbar/index.jsx b/src/mob/components/navbar/normal-navbar/index.jsx
index 8244a70..ab69d33 100644
--- a/src/mob/components/navbar/normal-navbar/index.jsx
+++ b/src/mob/components/navbar/normal-navbar/index.jsx
@@ -65,10 +65,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -80,7 +76,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
   
   /**
@@ -96,12 +91,8 @@
     this.props.updateConfig(component)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.setState({
       card: _card
@@ -113,7 +104,7 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['font', 'background', 'border', 'padding', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['font', 'background', 'border', 'padding', 'shadow'], card.style, this.getStyle)
   }
 
   getWrapForms = () => {
diff --git a/src/mob/components/search/single-search/index.jsx b/src/mob/components/search/single-search/index.jsx
index bccac3f..11a0f10 100644
--- a/src/mob/components/search/single-search/index.jsx
+++ b/src/mob/components/search/single-search/index.jsx
@@ -61,10 +61,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   /**
    * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊
    */
@@ -72,19 +68,14 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
     this.setState({
       card: _card
@@ -96,7 +87,7 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], card.style, this.getStyle)
   }
 
   /**
diff --git a/src/mob/components/tabs/antv-tabs/index.jsx b/src/mob/components/tabs/antv-tabs/index.jsx
index 1ddf66c..3800c62 100644
--- a/src/mob/components/tabs/antv-tabs/index.jsx
+++ b/src/mob/components/tabs/antv-tabs/index.jsx
@@ -80,7 +80,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitSearch', this.getSearch)
     MKEmitter.addListener('tabsChange', this.handleTabsChange)
     MKEmitter.addListener('submitComponentStyle', this.updateComponentStyle)
@@ -93,7 +92,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitSearch', this.getSearch)
     MKEmitter.removeListener('tabsChange', this.handleTabsChange)
     MKEmitter.removeListener('submitComponentStyle', this.updateComponentStyle)
@@ -135,37 +133,33 @@
   changeStyle = () => {
     const { tabs } = this.state
 
-    MKEmitter.emit('changeStyle', [tabs.uuid], ['background', 'border', 'padding', 'margin', 'shadow'], tabs.style)
+    MKEmitter.emit('changeStyle', ['background', 'border', 'padding', 'margin', 'shadow'], tabs.style, this.getStyle)
   }
 
   changeTabStyle = () => {
     const { tabs } = this.state
 
-    MKEmitter.emit('changeStyle', [tabs.uuid, 'tab'], ['font', 'padding'], tabs.tabStyle || {})
+    MKEmitter.emit('changeStyle', ['font', 'padding'], tabs.tabStyle || {}, this.getTabStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { tabs } = this.state
+  getStyle = (style) => {
+    let _card = {...this.state.tabs, style}
 
-    if (comIds[0] !== tabs.uuid) return
+    this.setState({
+      tabs: _card
+    })
+    
+    this.props.updateConfig(_card)
+  }
 
-    if (comIds.length === 1) {
-      let _card = {...tabs, style}
+  getTabStyle = (style) => {
+    let _card = {...this.state.tabs, tabStyle: style}
 
-      this.setState({
-        tabs: _card
-      })
-      
-      this.props.updateConfig(_card)
-    } else if (comIds[1] === 'tab') {
-      let _card = {...tabs, tabStyle: style}
-
-      this.setState({
-        tabs: _card
-      })
-      
-      this.props.updateConfig(_card)
-    }
+    this.setState({
+      tabs: _card
+    })
+    
+    this.props.updateConfig(_card)
   }
 
   handleTabsChange = (parentId) => {
diff --git a/src/mob/components/topbar/normal-navbar/index.jsx b/src/mob/components/topbar/normal-navbar/index.jsx
index 9579b7e..123fa23 100644
--- a/src/mob/components/topbar/normal-navbar/index.jsx
+++ b/src/mob/components/topbar/normal-navbar/index.jsx
@@ -64,7 +64,6 @@
   }
 
   componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
     MKEmitter.addListener('submitSearch', this.getSearch)
   }
 
@@ -79,7 +78,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
     MKEmitter.removeListener('submitSearch', this.getSearch)
   }
   
@@ -94,20 +92,28 @@
     this.props.updateConfig(component)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
-    if (comIds[0] !== card.uuid) return
+    this.setState({
+      card: _card
+    })
+    
+    this.props.updateConfig(_card)
+  }
 
-    let _card = fromJS(card).toJS()
+  getSearchStyle = (style) => {
+    let _card = {...this.state.card, searchStyle: style}
 
-    if (comIds[1] === 'search') {
-      _card.searchStyle = style
-    } else if (comIds[1] === 'title') {
-      _card.titleStyle = style
-    } else {
-      _card.style = style
-    }
+    this.setState({
+      card: _card
+    })
+    
+    this.props.updateConfig(_card)
+  }
+
+  getTitleStyle = (style) => {
+    let _card = {...this.state.card, titleStyle: style}
 
     this.setState({
       card: _card
@@ -119,19 +125,19 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['font', 'background', 'border', 'padding', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['font', 'background', 'border', 'padding', 'shadow'], card.style, this.getStyle)
   }
 
   changeTitleStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid, 'title'], ['font'], card.titleStyle || {})
+    MKEmitter.emit('changeStyle', ['font'], card.titleStyle || {}, this.getTitleStyle)
   }
 
   changeSearchStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid, 'search'], ['font', 'background', 'border'], card.searchStyle || {})
+    MKEmitter.emit('changeStyle', ['font', 'background', 'border'], card.searchStyle || {}, this.getSearchStyle)
   }
 
   clickComponent = (e) => {
diff --git a/src/pc/components/login/normal-login/index.jsx b/src/pc/components/login/normal-login/index.jsx
index 226531c..cbcc124 100644
--- a/src/pc/components/login/normal-login/index.jsx
+++ b/src/pc/components/login/normal-login/index.jsx
@@ -81,10 +81,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -96,7 +92,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
 
   /**
@@ -122,15 +117,11 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['width', 'background', 'border', 'padding', 'margin'], card.style)
+    MKEmitter.emit('changeStyle', ['width', 'background', 'border', 'padding', 'margin'], card.style, this.getStyle)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
-
-    if (comIds.length !== 1 || comIds[0] !== card.uuid) return
-
-    let _card = {...card, style}
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
     
     this.updateComponent(_card)
   }
diff --git a/src/pc/components/navbar/normal-navbar/index.jsx b/src/pc/components/navbar/normal-navbar/index.jsx
index 7a3868e..18f8e48 100644
--- a/src/pc/components/navbar/normal-navbar/index.jsx
+++ b/src/pc/components/navbar/normal-navbar/index.jsx
@@ -63,10 +63,6 @@
     }
   }
 
-  componentDidMount () {
-    MKEmitter.addListener('submitStyle', this.getStyle)
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
   }
@@ -78,7 +74,6 @@
     this.setState = () => {
       return
     }
-    MKEmitter.removeListener('submitStyle', this.getStyle)
   }
   
   /**
@@ -94,17 +89,18 @@
     this.props.updateConfig(component)
   }
 
-  getStyle = (comIds, style) => {
-    const { card } = this.state
+  getStyle = (style) => {
+    let _card = {...this.state.card, style}
 
-    if (comIds[0] !== card.uuid) return
+    this.setState({
+      card: _card
+    })
+    
+    this.props.updateConfig(_card)
+  }
 
-    let _card = {...card}
-    if (comIds.length === 1) {
-      _card = {...card, style}
-    } else if (comIds[1] === 'logo') {
-      _card = {...card, logoStyle: style}
-    }
+  getLogoStyle = (style) => {
+    let _card = {...this.state.card, logoStyle: style}
 
     this.setState({
       card: _card
@@ -116,13 +112,13 @@
   changeStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid], ['font', 'background', 'shadow'], card.style)
+    MKEmitter.emit('changeStyle', ['font', 'background', 'shadow'], card.style, this.getStyle)
   }
 
   changeLogoStyle = () => {
     const { card } = this.state
 
-    MKEmitter.emit('changeStyle', [card.uuid, 'logo'], ['width', 'margin'], card.logoStyle)
+    MKEmitter.emit('changeStyle', ['width', 'margin'], card.logoStyle, this.getLogoStyle)
   }
 
   clickComponent = (e) => {
diff --git a/src/router/index.js b/src/router/index.js
index 2f4d669..0d98df5 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -20,6 +20,7 @@
 const ImDesign = asyncLoadComponent(() => import('@/views/imdesign'))
 const MenuDesign = asyncLoadComponent(() => import('@/views/menudesign'))
 const BaseDesign = asyncLoadComponent(() => import('@/views/basedesign'))
+const TableDesign = asyncLoadComponent(() => import('@/views/tabledesign'))
 const BillPrint = asyncLoadComponent(() => import('@/views/billprint'))
 const PrintT = asyncLoadComponent(() => import('@/views/printTemplate'))
 const Interface = asyncLoadComponent(() => import('@/views/interface'))
@@ -40,6 +41,7 @@
   {path: '/imdesign/:param', name: 'imdesign', component: ImDesign, auth: true},
   {path: '/menudesign/:param', name: 'menudesign', component: MenuDesign, auth: true},
   {path: '/basedesign/:param', name: 'basedesign', component: BaseDesign, auth: true},
+  {path: '/tabledesign/:param', name: 'tabledesign', component: TableDesign, auth: true},
   {path: '/popdesign/:param', name: 'popdesign', component: PopDesign, auth: true},
   {path: '/billprint/:param', name: 'billprint', component: BillPrint, auth: true},
   {path: '/docprint/:menuId', name: 'docprint', component: BillPrint, auth: false},
diff --git a/src/tabviews/basetable/index.jsx b/src/tabviews/basetable/index.jsx
new file mode 100644
index 0000000..99900ea
--- /dev/null
+++ b/src/tabviews/basetable/index.jsx
@@ -0,0 +1,1287 @@
+import React, {Component} from 'react'
+import PropTypes from 'prop-types'
+import {connect} from 'react-redux'
+import { is, fromJS } from 'immutable'
+import { notification, Spin, Tabs, Switch, Row, Col } from 'antd'
+
+import Api from '@/api'
+import zhCN from '@/locales/zh-CN/main.js'
+import enUS from '@/locales/en-US/main.js'
+import Utils from '@/utils/utils.js'
+import options from '@/store/options.js'
+import UtilsDM from '@/utils/utils-datamanage.js'
+import { updateCommonTable } from '@/utils/utils-update.js'
+import asyncComponent from '@/utils/asyncComponent'
+import asyncSpinComponent from '@/utils/asyncSpinComponent'
+import MkIcon from '@/components/mk-icon'
+import MKEmitter from '@/utils/events.js'
+import NotFount from '@/components/404'
+import './index.scss'
+
+// 閫氱敤缁勪欢
+const MainSearch = asyncComponent(() => import('@/tabviews/zshare/topSearch'))
+const MainAction = asyncSpinComponent(() => import('@/tabviews/zshare/actionList'))
+const MainTable = asyncSpinComponent(() => import('@/tabviews/zshare/normalTable'))
+const SettingComponent = asyncComponent(() => import('@/tabviews/zshare/settingcomponent'))
+const SubTable = asyncSpinComponent(() => import('@/tabviews/subtable'))
+const CardComponent = asyncSpinComponent(() => import('@/tabviews/zshare/cardcomponent'))
+const ChartComponent = asyncSpinComponent(() => import('@/tabviews/zshare/chartcomponent'))
+const PagemsgComponent = asyncComponent(() => import('@/tabviews/zshare/pageMessage'))
+const AutoMatic = asyncComponent(() => import('@/tabviews/zshare/automatic'))
+
+const { TabPane } = Tabs
+
+class NormalTable extends Component {
+  static propTpyes = {
+    param: PropTypes.any,        // 鍏朵粬椤甸潰浼犻�掔殑鎼滅储鏉′欢绛夊弬鏁�
+    MenuID: PropTypes.string,    // 鑿滃崟Id
+    MenuNo: PropTypes.string,    // 鑿滃崟鍙傛暟
+    MenuName: PropTypes.string   // 鑿滃崟鍚嶇О
+  }
+
+  state = {
+    dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
+    ContainerId: Utils.getuuid(), // 鑿滃崟澶栧眰html Id
+    BID: null,            // 椤甸潰璺宠浆鏃舵惡甯D
+    loadingview: true,    // 椤甸潰鍔犺浇涓�
+    viewlost: false,      // 椤甸潰涓㈠け锛�1銆佹湭鑾峰彇鍒伴厤缃�-椤甸潰涓㈠け锛�2銆侀〉闈㈡湭鍚敤
+    lostmsg: '',          // 椤甸潰涓㈠け鏃剁殑鎻愮ず淇℃伅
+    config: {},           // 椤甸潰閰嶇疆淇℃伅锛屽寘鎷寜閽�佹悳绱€�佹樉绀哄垪銆佹爣绛剧瓑
+    shortcuts: null,      // 蹇嵎閿�
+    searchlist: null,     // 鎼滅储鏉′欢
+    actions: null,        // 鎸夐挳闆�
+    columns: null,        // 鏄剧ず鍒�
+    arr_field: '',        // 鏌ヨ瀛楁闆�
+    setting: null,        // 椤甸潰鍏ㄥ眬璁剧疆锛氭暟鎹簮銆佹寜閽強鏄剧ず鍒楀浐瀹氥�佷富閿瓑
+    data: [],             // 鍒楄〃鏁版嵁闆�
+    selectedData: [],     // 宸查�夎〃鏍兼暟鎹�
+    total: 0,             // 鎬绘暟
+    loading: false,       // 鍒楄〃鏁版嵁鍔犺浇涓�
+    pageIndex: 1,         // 椤电爜
+    pageSize: 10,         // 姣忛〉鏁版嵁鏉℃暟
+    orderBy: '',          // 鎺掑簭
+    search: '',           // 鎼滅储鏉′欢鏁扮粍锛屼娇鐢ㄦ椂闇�鍒嗗満鏅鐞�
+    BIDs: {},             // 涓婄骇琛╥d
+    pickup: false,        // 涓昏〃鏁版嵁闅愯棌鏄剧ず鍒囨崲
+    chartId: '',          // 灞曞紑鍥捐〃ID
+    statFields: [],       // 鍚堣瀛楁
+    statFValue: [],       // 鍚堣鍊�
+    absFields: [],        // 缁濆鍊煎瓧娈�
+    loadCustomApi: true,  // 鍔犺浇澶栭儴璧勬簮
+    hasReqFields: false,
+    autoMatic: null
+  }
+
+  /**
+   * @description 鑾峰彇椤甸潰閰嶇疆淇℃伅
+   */
+  async loadconfig () {
+    const { permAction, permMenus, param, MenuName, MenuID } = this.props
+
+    let _param = {
+      func: 'sPC_Get_LongParam',
+      MenuID: MenuID
+    }
+    let result = await Api.getCacheConfig(_param)
+
+    if (result.status) {
+      let config = ''
+      let shortcuts = []
+
+      try { // 閰嶇疆淇℃伅瑙f瀽
+        config = JSON.parse(window.decodeURIComponent(window.atob(result.LongParam)))
+        config.MenuID = MenuID
+        config.MenuName = MenuName
+        config.setting.MenuName = MenuName
+        config.setting.$name = MenuName
+      } catch (e) {
+        console.warn('Parse Failure')
+        config = ''
+      }
+      
+      // HS涓嶄娇鐢ㄨ嚜瀹氫箟璁剧疆
+      if (result.LongParamUser && !window.GLOB.mkHS) {
+        try { // 閰嶇疆淇℃伅瑙f瀽
+          let userConfig = JSON.parse(window.decodeURIComponent(window.atob(result.LongParamUser)))
+          if (userConfig && !userConfig.version) {
+            Object.keys(userConfig).forEach(key => {
+              let component = userConfig[key]
+
+              if (!component.action) return
+
+              Object.keys(component.action).forEach(uuid => {
+                let item = {uuid: uuid, parentId: key, shortcut: component.action[uuid].shortcut}
+                let printer = component.action[uuid].printer
+
+                if (item.shortcut) {
+                  item.$shortcut = item.shortcut.join('+')
+                  shortcuts.push(item)
+                }
+                if (printer) {
+                  item.printer = printer.defaultPrinter || ''
+                  item.printerList = printer.printerList || ''
+                  window.GLOB.UserCacheMap.set(key + uuid, item)
+                }
+              })
+            })
+          } else if (userConfig) {
+            shortcuts = userConfig.action
+            userConfig.printers.forEach(item => {
+              window.GLOB.UserCacheMap.set(item.parentId + item.uuid, item)
+            })
+          }
+        } catch (e) {
+          console.warn('Parse Failure')
+        }
+      }
+
+      // 椤甸潰閰嶇疆瑙f瀽閿欒鏃舵彁绀�
+      if (!config) {
+        this.setState({
+          loadingview: false,
+          viewlost: true
+        })
+        return
+      }
+
+      // 椤甸潰鏈惎鐢ㄦ椂锛屾樉绀烘湭鍚敤椤甸潰
+      if (!config.enabled) {
+        this.setState({
+          loadingview: false,
+          viewlost: true,
+          lostmsg: this.state.dict['main.view.unenabled']
+        })
+        return
+      }
+
+      // 鐗堟湰鍏煎
+      config = updateCommonTable(config)
+
+      // 鏉冮檺杩囨护
+      if (!window.GLOB.mkHS) {
+        config.action = config.action.filter(item => item.hidden !== 'true' && permAction[item.uuid])
+        config.tabgroups.forEach(group => {
+          group.sublist = group.sublist.filter(tab => {
+            if (tab.supMenu === 'mainTable') {
+              tab.supMenu = MenuID
+            }
+            return permAction[tab.linkTab]
+          })
+        })
+      } else {
+        config.action = config.action.filter(item => item.hidden !== 'true')
+        config.tabgroups.forEach(group => {
+          group.sublist = group.sublist.map(tab => {
+            if (tab.supMenu === 'mainTable') {
+              tab.supMenu = MenuID
+            }
+            return tab
+          })
+        })
+      }
+      // 鍘婚櫎绌鸿鏍囩
+      config.tabgroups = config.tabgroups.filter(group => group.sublist.length > 0)
+
+      let roleId = sessionStorage.getItem('role_id') || '' // 瑙掕壊ID
+
+      let chartId = ''
+
+      if (config.charts) {
+        // 瑙嗗浘鏉冮檺
+        config.charts = config.charts.filter(item => {
+          if (item.Hide === 'true') return false
+          if (!item.blacklist || item.blacklist.length === 0) return true
+          return item.blacklist.filter(v => roleId.indexOf(v) > -1).length === 0
+        })
+  
+        if (config.charts.length <= 1) {
+          config.expand = true
+        }
+        chartId = config.charts[0] ? config.charts[0].uuid : ''
+      }
+
+      config.search = Utils.initSearchVal(config.search)
+
+      // 瀛楁閫忚鍙婂繀濉爣蹇�
+      let hasReqFields = false
+      config.search = config.search.map(item => {
+        if (['text', 'select', 'link'].includes(item.type) && param && param.$searchkey === item.field) {
+          item.initval = param.$searchval
+        }
+
+        if (item.required) {
+          hasReqFields = true
+        }
+
+        return item
+      })
+
+      config.columns = config.columns.map(col => {
+        if (!col.field || !col.blacklist || col.blacklist.length === 0) return col
+        if (col.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
+          col.Hide = 'true'
+        }
+
+        return col
+      })
+
+      // 鏍囪涓婚〉闈紝鐢ㄤ簬鎸夐挳鍥哄畾鍙婅〃鍗曟寕杞借缃�
+      config.setting.tabType = 'main'
+
+      // 鏁版嵁婧愪俊鎭澶勭悊
+      config.setting.laypage = config.setting.laypage !== 'false'     // 鏄惁鍒嗛〉锛岃浆涓篵oolean 缁熶竴鏍煎紡
+      config.setting.execute = config.setting.default !== 'false'     // 榛樿sql鏄惁鎵ц锛岃浆涓篵oolean 缁熶竴鏍煎紡
+      config.setting.customScript = ''                                // 鑷畾涔夎剼鏈�
+      config.setting.dataresource = config.setting.dataresource || ''
+
+      if (config.setting.interType === 'system' || (config.setting.interType === 'custom' && config.setting.requestMode === 'system')) {
+        if (config.setting.scripts && config.setting.scripts.length > 0) {
+          let _customScript = ''
+          config.setting.scripts.forEach(item => {
+            if (item.status === 'false') return
+            _customScript += `
+              ${item.sql}
+            `
+          })
+          config.setting.customScript = _customScript
+        }
+  
+        if (!config.setting.execute) { // 榛樿sql 涓嶆墽琛屾椂 缃┖
+          config.setting.dataresource = ''
+        } else if (/\s/.test(config.setting.dataresource)) {
+          config.setting.dataresource = '(' + config.setting.dataresource + ') tb'
+        }
+  
+        if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
+          config.setting.dataresource = config.setting.dataresource.replace(/\$@/ig, '/*')
+          config.setting.dataresource = config.setting.dataresource.replace(/@\$/ig, '*/')
+          config.setting.customScript = config.setting.customScript.replace(/\$@/ig, '/*')
+          config.setting.customScript = config.setting.customScript.replace(/@\$/ig, '*/')
+        } else {
+          config.setting.dataresource = config.setting.dataresource.replace(/@\$|\$@/ig, '')
+          config.setting.customScript = config.setting.customScript.replace(/@\$|\$@/ig, '')
+        }
+
+        let userName = sessionStorage.getItem('User_Name') || ''
+        let fullName = sessionStorage.getItem('Full_Name') || ''
+
+        if (sessionStorage.getItem('isEditState') === 'true') {
+          userName = sessionStorage.getItem('CloudUserName') || ''
+          fullName = sessionStorage.getItem('CloudFullName') || ''
+        }
+
+        let regs = [
+          { reg: /@userName@/ig, value: `'${userName}'` },
+          { reg: /@fullName@/ig, value: `'${fullName}'` }
+        ]
+
+        regs.forEach(cell => {
+          config.setting.dataresource = config.setting.dataresource.replace(cell.reg, cell.value)
+          config.setting.customScript = config.setting.customScript.replace(cell.reg, cell.value)
+        })
+
+        if (config.urlFields) {
+          let _param = param || {}
+          config.urlFields.forEach(field => {
+            let reg = new RegExp('@' + field + '@', 'ig')
+            let val = `'${_param[field] || ''}'`
+            config.setting.dataresource = config.setting.dataresource.replace(reg, val)
+            config.setting.customScript = config.setting.customScript.replace(reg, val)
+          })
+        }
+      }
+
+      let _arrField = []     // 瀛楁闆�
+      let _columns = []      // 鏄剧ず鍒�
+      let _hideCol = []      // 闅愯棌鍙婂悎骞跺垪涓瓧娈电殑uuid闆�
+      let colMap = new Map() // 鐢ㄤ簬瀛楁杩囨护
+      let statFields = []    // 鍚堣瀛楁淇℃伅
+      let absFields = []     // 缁濆鍊煎瓧娈�
+
+      let _actions = []      // 宸ュ叿鏍忔寜閽�
+      let _operations = []   // 鎿嶄綔鍒楁寜閽紙瀛樺湪鏃讹級
+
+      config.action.forEach(item => {
+        item.logLabel = MenuName + '-' + item.label // 鐢ㄤ簬sPC_TableData_InUpDe璁板綍鎿嶄綔鎸夐挳
+        item.$menuId = this.props.MenuID
+
+        if (item.OpenType === 'funcbutton' && item.funcType === 'print' && item.verify) { // 鎵撳嵃鏈鸿缃�
+          let _item = window.GLOB.UserCacheMap.get(this.props.MenuID + item.uuid)
+
+          if (_item) {
+            item.printer = _item.printer || ''
+            item.verify.defaultPrinter = _item.printer || ''
+            if (item.verify.printerTypeList && _item.printerList) {
+              item.verify.printerTypeList = item.verify.printerTypeList.map(cell => {
+                cell.printer = _item.printerList[cell.Value] || ''
+  
+                return cell
+              })
+            }
+          }
+        }
+        
+        if (item.position === 'toolbar') {
+          item.$toolbtn = true
+          _actions.push(item)
+        } else if (item.position === 'grid') {
+          _operations.push(item)
+        }
+      })
+
+      // 1銆佺瓫閫夊瓧娈甸泦锛�2銆佽繃婊ら殣钘忓垪鍙婂悎骞跺垪涓殑瀛楁uuid
+      config.columns.forEach(col => {
+        if (col.field) {
+          _arrField.push(col.field)
+
+          if (col.linkmenu && col.linkmenu.length > 0) {
+            let menu_id = col.linkmenu.slice(-1)[0]
+            col.linkThdMenu = permMenus.filter(m => m.MenuID === menu_id)[0] || ''
+          } else {
+            col.linkThdMenu = ''
+          }
+
+          col.nameField && _arrField.push(col.nameField) // 閾炬帴鍚嶅瓧娈�
+          if (col.Hide !== 'true' && col.type === 'number' && col.sum === 'true') {
+            statFields.push(col)
+          }
+          if (col.format === 'abs') {
+            absFields.push(col.field)
+          }
+        }
+        if (col.type === 'colspan' && col.sublist) { // 绛涢�夐殣钘忓垪
+          _hideCol = _hideCol.concat(col.sublist)
+        }
+        colMap.set(col.uuid, col)
+      })
+
+      // 鐢熸垚鏄剧ず鍒楋紝澶勭悊鍚堝苟鍒椾腑鐨勫瓧娈�
+      config.columns.forEach((col, index) => {
+        if (_hideCol.includes(col.uuid)) return
+
+        col.sort = index
+
+        if (col.type === 'colspan') {
+          if (col.unfold !== 'true') { // 涓嶅睍寮�涓烘棫鐗堝悎骞跺垪
+            col.type = 'old_colspan'
+          }
+
+          let _col = fromJS(col).toJS()
+          let subcols = []
+          _col.sublist && _col.sublist.forEach(sub => {
+            if (colMap.has(sub)) {
+              subcols.push(colMap.get(sub))
+            }
+          })
+          if (subcols.length > 0) {
+            _col.subcols = subcols
+            _columns.push(_col)
+          }
+        } else {
+          _columns.push(col)
+        }
+      })
+      
+      if (config.gridBtn && config.gridBtn.display && _operations.length > 0) {
+        config.gridBtn.operations = _operations
+        _columns.push(config.gridBtn)
+      }
+
+      if (config.setting.selected !== 'init' && config.setting.selected !== 'always') {
+        config.setting.selected = 'false'
+      } else if (config.setting.selected === 'init' && config.setting.onload === 'false') {
+        config.setting.selected = 'false'
+      } else {
+        config.setting.orisel = true
+      }
+
+      let autoMatic = null
+      if (config.autoMatic && config.autoMatic.enable === 'true') {
+        _actions.forEach(item => {
+          if (item.uuid === config.autoMatic.action && (['pop', 'prompt', 'exec'].includes(item.OpenType) || (item.OpenType === 'funcbutton' && item.funcType === 'print'))) {
+            autoMatic = config.autoMatic
+            autoMatic.OpenType = item.execMode || item.OpenType
+            config.setting.selected = 'false'
+            item.autoMatic = true
+          }
+        })
+      }
+
+      if (config.setting.controlField) {
+        if (config.setting.controlVal) {
+          config.setting.controlVal = config.setting.controlVal.split(',')
+        } else {
+          config.setting.controlVal = ['']
+        }
+      }
+
+      this.setState({
+        pageSize: config.setting.pageSize || 10,
+        loadingview: false,
+        absFields,
+        autoMatic,
+        chartId,
+        config,
+        statFields,
+        shortcuts,
+        setting: config.setting,
+        searchlist: config.search,
+        actions: _actions,
+        columns: _columns,
+        arr_field: _arrField.join(','),
+        BID: param && param.$BID ? param.$BID : '',
+        search: Utils.initMainSearch(config.search),
+        hasReqFields
+      }, () => {
+        if (config.setting.onload !== 'false') { // 鍒濆鍖栧彲鍔犺浇
+          this.loadData()
+        }
+        this.setShortcut()
+      })
+    } else {
+      this.setState({
+        loadingview: false,
+        viewlost: true
+      })
+      notification.warning({
+        top: 92,
+        message: result.message,
+        duration: 5
+      })
+    }
+  }
+
+  setShortcut = () => {
+    const { shortcuts } = this.state
+
+    if (!shortcuts || shortcuts.length === 0) {
+      document.onkeydown = () => {}
+      return
+    }
+
+    document.onkeydown = (event) => {
+      let e = event || window.event
+      let keyCode = e.keyCode || e.which || e.charCode
+      let preKey = ''
+
+      if (e.ctrlKey) {
+        preKey = 'ctrl'
+      } else if (e.shiftKey) {
+        preKey = 'shift'
+      } else if (e.altKey) {
+        preKey = 'alt'
+      }
+
+      if (!preKey || !keyCode) return
+
+      let _shortcut = `${preKey}+${keyCode}`
+
+      shortcuts.some(item => {
+        if (item.$shortcut === _shortcut) {
+          MKEmitter.emit('triggerBtnId', item.uuid)
+
+          let element = item.parentId && item.parentId !== this.props.MenuID ? document.getElementById(item.parentId) : '' // 鏍囩鍒囨崲
+          if (element && element.click) {
+            element.click()
+          }
+
+          return true
+        }
+        return false
+      })
+    }
+  }
+
+  loadData = (id) => {
+    const { MenuID } = this.props
+    const { setting, search, loadCustomApi, hasReqFields, ContainerId } = this.state
+
+    this.setState({
+      selectedData: []
+    })
+    MKEmitter.emit('changeTableLine', ContainerId, MenuID, '', '')
+
+    if (hasReqFields) {
+      let requireFields = search.filter(item => item.required && item.value === '')
+
+      if (requireFields.length > 0) {
+        this.setState({
+          loading: false
+        })
+        return
+      }
+    }
+
+    if (window.GLOB.systemType === 'production' && setting.interType === 'custom' && !setting.proInterface) {
+      notification.warning({
+        top: 92,
+        message: '鏈缃寮忕郴缁熷湴鍧�!',
+        duration: 3
+      })
+      return
+    }
+
+    if (setting.interType === 'custom' && loadCustomApi) {
+      if (setting.execTime === 'once') {
+        this.setState({loadCustomApi: false})
+      }
+
+      this.loadOutResource()
+      if (setting.execType === 'async') {
+        this.loadmaindata(id)
+      }
+    } else {
+      this.loadmaindata(id)
+    }
+  }
+
+  loadOutResource = () => {
+    const { setting, search, BID } = this.state
+
+    let param = UtilsDM.getPrevQueryParams(setting, search, BID)
+
+    if (setting.execType === 'sync') {
+      this.setState({
+        loading: true
+      })
+    }
+
+    Api.genericInterface(param).then(res => {
+      if (res.status) {
+        if (res.mk_ex_invoke === 'false' || res.mk_ex_invoke === false) {
+          this.loadmaindata()
+        } else {
+          this.customOuterRequest(res)
+        }
+      } else {
+        this.setState({
+          loading: false
+        })
+        notification.error({
+          top: 92,
+          message: res.message,
+          duration: 10
+        })
+      }
+    }, () => {
+      this.setState({
+        loading: false
+      })
+    })
+  }
+
+  customOuterRequest = (result) => {
+    const { setting } = this.state
+    let url = ''
+
+    if (window.GLOB.systemType === 'production') {
+      url = setting.proInterface
+    } else {
+      url = setting.interface
+    }
+
+    let mkey = result.mk_api_key || ''
+
+    delete result.mk_ex_invoke // 鏄惁缁х画鎵ц
+    delete result.status
+    delete result.message
+    delete result.ErrCode
+    delete result.ErrMesg
+    delete result.mk_api_key   // 褰撳墠璇锋眰鐨刱ey鍊硷紝鐢ㄤ簬鍥炶皟
+
+    let param = {}
+
+    Object.keys(result).forEach(key => {
+      key = key.replace(/^mk_/ig, '')
+      param[key] = result[key]
+    })
+
+    Api.directRequest(url, setting.method, param, setting.cross).then(res => {
+      if (typeof(res) !== 'object') {
+        let error = '鏈煡鐨勮繑鍥炵粨鏋滐紒'
+
+        if (typeof(res) === 'string') {
+          error = res.replace(/'/ig, '"')
+        }
+
+        let _result = {
+          mk_api_key: mkey,
+          $ErrCode: 'E',
+          $ErrMesg: error
+        }
+
+        this.customCallbackRequest(_result)
+      } else {
+        if (Array.isArray(res)) {
+          res = { data: res }
+        }
+        res.mk_api_key = mkey
+        this.customCallbackRequest(res)
+      }
+    }, (e) => {
+      let _result = {
+        mk_api_key: mkey,
+        $ErrCode: 'E',
+        $ErrMesg: e && e.statusText ? e.statusText : ''
+      }
+
+      this.customCallbackRequest(_result)
+    })
+  }
+
+  customCallbackRequest = (result) => {
+    const { setting, BID } = this.state
+    let errSql = ''
+    if (result.$ErrCode === 'E') {
+      errSql = `
+        set @ErrorCode='E'
+        set @retmsg='${result.$ErrMesg}'
+      `
+      delete result.$ErrCode
+      delete result.$ErrMesg
+    }
+
+    let lines = UtilsDM.getCallBackSql(setting, result)
+    let param = {}
+
+    if (setting.callbackType === 'script') { // 浣跨敤鑷畾涔夎剼鏈�
+      let sql = lines.map(item => (`
+        ${item.insert}
+        ${item.selects.join(` union all
+        `)}
+      `))
+      sql = sql.join('')
+      
+      param = UtilsDM.getCallBackQueryParams(setting, sql, errSql, BID)
+    } else {
+      param.func = 's_ex_result_back'
+      param.s_ex_result = lines.map((item, index) => ({
+        MenuID: this.state.config.MenuID,
+        MenuName: this.state.config.MenuName,
+        TableName: item.table,
+        LongText: window.btoa(window.encodeURIComponent(`${item.insert}  ${item.selects.join(` union all `)}`)),
+        Sort: index + 1
+      }))
+
+      if (window.GLOB.debugger === true || (window.debugger === true && options.sysType !== 'cloud')) {
+        let sql = lines.map(item => (`
+          ${item.insert}
+          ${item.selects.join(` union all
+          `)}
+        `))
+        sql = sql.join('')
+        console.info(sql.replace(/\n\s{10}/ig, '\n'))
+      }
+    }
+
+    Api.genericInterface(param).then(res => {
+      if (res.status) {
+        this.loadmaindata()
+      } else {
+        this.setState({
+          loading: false
+        })
+        notification.error({
+          top: 92,
+          message: res.message,
+          duration: 10
+        })
+      }
+    }, () => {
+      this.setState({
+        loading: false
+      })
+    })
+  }
+
+  /**
+   * @description 涓昏〃鏁版嵁鍔犺浇
+   */ 
+  async loadmaindata (id) {
+    const { setting, arr_field, search, orderBy, BID, pageIndex, pageSize, absFields, autoMatic } = this.state
+
+    this.setState({
+      loading: true
+    })
+
+    let _orderBy = orderBy || setting.order
+    let param = UtilsDM.getQueryDataParams(setting, arr_field, search, _orderBy, pageIndex, pageSize, BID)
+
+    let result = await Api.genericInterface(param)
+
+    this.getStatFieldsValue()
+
+    if (result.status) {
+      let start = 1
+      if (setting.laypage) {
+        start = pageSize * (pageIndex - 1) + 1
+      }
+
+      if (setting.selected !== 'false' || (setting.orisel && id)) {
+        setTimeout(() => {
+          MKEmitter.emit('mkTableCheckTopLine', this.props.MenuID, id)
+        }, 200)
+        if (setting.selected === 'init') {
+          this.setState({setting: {...setting, selected: 'false'}})
+        }
+      }
+
+      this.setState({
+        data: result.data.map((item, index) => {
+          if (absFields.length) {
+            absFields.forEach(field => {
+              if (!item[field]) return
+              if (isNaN(Math.abs(item[field]))) return
+
+              item[field] = Math.abs(item[field])
+            })
+          }
+
+          item.key = index
+          item.$$uuid = item[setting.primaryKey] || ''
+          item.$$key = '' + item.key + item.$$uuid
+          item.$$BID = BID || ''
+          item.$Index = start + index + ''
+
+          if (setting.controlField) {
+            if (setting.controlVal.includes(item[setting.controlField])) {
+              item.$disabled = true
+            }
+          }
+
+          return item
+        }),
+        total: result.total,
+        loading: false,
+        pickup: false
+      })
+
+      if (autoMatic) {
+        if (result.data && result.data.length > 0) {
+          MKEmitter.emit('autoGetData', this.props.MenuID)
+        } else {
+          MKEmitter.emit('autoMaticOver', this.props.MenuID)
+        }
+      }
+    } else {
+      this.setState({
+        loading: false
+      })
+      if (autoMatic) {
+        MKEmitter.emit('autoMaticError', this.props.MenuID)
+      }
+      notification.error({
+        top: 92,
+        message: result.message,
+        duration: 10
+      })
+    }
+  }
+
+  /**
+   * @description 鑾峰彇鍗曡鏁版嵁
+   */ 
+  async loadmainLinedata (id) {
+    const { setting, arr_field, search, orderBy, BID, pageIndex, pageSize, absFields } = this.state
+
+    this.setState({
+      loading: true
+    })
+
+    let _orderBy = orderBy || setting.order
+    let param = UtilsDM.getQueryDataParams(setting, arr_field, search, _orderBy, pageIndex, pageSize, BID, id)
+
+    let result = await Api.genericInterface(param)
+    if (result.status) {
+      let data = fromJS(this.state.data).toJS()
+      let selectedData = fromJS(this.state.selectedData).toJS()
+      if (result.data && result.data[0]) {
+        let _data = result.data[0] || {}
+
+        if (absFields.length) {
+          absFields.forEach(field => {
+            if (!_data[field]) return
+            if (isNaN(Math.abs(_data[field]))) return
+            
+            _data[field] = Math.abs(_data[field])
+          })
+        }
+        _data.$$uuid = _data[setting.primaryKey] || ''
+        _data.$$BID = BID || ''
+
+        try {
+          data = data.map(item => {
+            if (item.$$uuid === _data.$$uuid) {
+              _data.key = item.key
+              _data.$$key = '' + item.key + item.$$uuid
+              _data.$Index = item.$Index
+              return _data
+            } else {
+              return item
+            }
+          })
+          selectedData = selectedData.map(item => {
+            if (_data.$$uuid === item.$$uuid) {
+              return _data
+            }
+            return item
+          })
+        } catch (e) {
+          console.warn('鏁版嵁鏌ヨ閿欒')
+        }
+      }
+
+      this.setState({
+        data,
+        selectedData,
+        loading: false
+      })
+    } else {
+      this.setState({
+        loading: false
+      })
+      notification.error({
+        top: 92,
+        message: result.message,
+        duration: 10
+      })
+    }
+  }
+
+  /**
+   * @description 鑾峰彇鍚堣瀛楁鍊�
+   */
+  getStatFieldsValue = () => {
+    const { setting, search, BID, orderBy, statFields } = this.state
+
+    if (statFields.length === 0 || !(setting.interType === 'system' || (setting.interType === 'custom' && setting.requestMode === 'system')) || !setting.dataresource) return
+
+    let _orderBy = orderBy || setting.order
+    let param = UtilsDM.getStatQueryDataParams(setting, statFields, search, _orderBy, BID)
+
+    Api.genericInterface(param).then(res => {
+      if (res.status) {
+        let _data = res.data[0]
+        let values = []
+
+        if (_data) {
+          statFields.forEach(item => {
+            if (_data[item.field] || _data[item.field] === 0) {
+              let val = +_data[item.field]
+              if (isNaN(val)) {
+                val = 0
+              }
+              val = val.toFixed(item.decimal)
+              values.push({label: item.label, value: val})
+            }
+          })
+        }
+        this.setState({
+          statFValue: values
+        })
+      } else {
+        this.setState({
+          statFValue: []
+        })
+        notification.error({
+          top: 92,
+          message: res.message,
+          duration: 10
+        })
+      }
+    })
+  }
+
+  /**
+   * @description 鎼滅储鏉′欢鏀瑰彉鏃讹紝閲嶇疆琛ㄦ牸鏁版嵁
+   * 鍚湁鍒濆涓嶅姞杞界殑椤甸潰锛屼慨鏀硅缃�
+   */
+  refreshbysearch = (searches) => {
+    const { setting } = this.state
+
+    if (setting.onload === 'false') {
+      this.setState({
+        pageIndex: 1,
+        search: searches,
+        setting: {...setting, onload: 'true'}
+      }, () => {
+        this.loadData()
+      })
+    } else {
+      MKEmitter.emit('resetTable', this.props.MenuID) // 鍒楄〃閲嶇疆
+      this.setState({
+        pageIndex: 1,
+        search: searches
+      }, () => {
+        this.loadData()
+      })
+    }
+  }
+
+  /**
+   * @description 琛ㄦ牸鏉′欢鏀瑰彉鏃堕噸缃暟鎹紙鍒嗛〉鎴栨帓搴忥級
+   */
+  refreshbytable = (pagination, filters, sorter) => {
+    if (!sorter) {
+      this.setState({
+        pageIndex: pagination.pageIndex
+      }, () => {
+        this.loadData()
+      })
+      return
+    }
+
+    if (sorter.order) {
+      let _chg = {
+        ascend: 'asc',
+        descend: 'desc'
+      }
+      sorter.order = _chg[sorter.order]
+    }
+
+    this.setState({
+      pageIndex: pagination.current,
+      pageSize: pagination.pageSize,
+      orderBy: (sorter.field && sorter.order) ? `${sorter.field} ${sorter.order}` : ''
+    }, () => {
+      this.loadData()
+    })
+  }
+
+  /**
+   * @description 琛ㄦ牸鍒锋柊
+   */
+  reloadtable = (btn, id = '') => {
+    if (!btn || btn.resetPageIndex !== 'false') {
+      MKEmitter.emit('resetTable', this.props.MenuID) // 鍒楄〃閲嶇疆
+      this.setState({
+        pageIndex: 1
+      }, () => {
+        this.loadData(id)
+      })
+    } else {
+      MKEmitter.emit('resetTable', this.props.MenuID, 'false') // 鍒楄〃閲嶇疆
+      this.loadData(id)
+    }
+  }
+
+  /**
+   * @description 椤甸潰鍒锋柊锛岄噸鏂拌幏鍙栭厤缃�
+   */
+  reloadview = () => {
+    this.setState({ loadingview: true, viewlost: false, config: {}, setting: null,
+      data: null, total: 0, loading: false, pageIndex: 1, shortcuts: null,
+      pageSize: 10, orderBy: '', search: '', BIDs: {}, pickup: false, searchlist: null
+    }, () => {
+      this.loadconfig()
+    })
+  }
+
+  /**
+   * @description 瀵煎嚭Excel鏃讹紝鑾峰彇椤甸潰鎼滅储鎺掑簭绛夊弬鏁�
+   */
+  queryModuleParam = (menuId, btnId) => {
+    const { MenuName, MenuID } = this.props
+    const { arr_field, orderBy, search, setting} = this.state
+
+    if (MenuID !== menuId) return
+
+    MKEmitter.emit('returnModuleParam', MenuID, btnId, {
+      arr_field: arr_field,
+      orderBy: orderBy || setting.order,
+      search: search,
+      menuName: MenuName
+    })
+  }
+
+  /**
+   * @description 琛ㄦ牸閫夋嫨椤瑰垏鎹�
+   */
+  changeSelectedData = (selectedData) => {
+    this.setState({selectedData})
+  }
+  
+  /**
+   * @description 鏁版嵁灞曞紑鍚堝苟鍒囨崲
+   */
+  pickupChange = () => {
+    const { pickup } = this.state
+    this.setState({
+      pickup: !pickup
+    })
+  }
+
+  /**
+   * @description 鍥捐〃瑙嗗浘鍒囨崲
+   */
+  changeChart = (uuid) => {
+    this.setState({chartId: uuid})
+  }
+
+  reloadData = (menuId, id, btn) => {
+    const { MenuID } = this.props
+
+    if (MenuID !== menuId) return
+
+    if (id === 'formtab') { // 琛ㄥ崟鏍囩椤靛埛鏂�
+      this.reloadtable(btn)
+      return
+    }
+    
+    if (!id) {
+      this.reloadtable()
+    } else {
+      this.loadmainLinedata(id)
+    }
+  }
+
+  reloadMenuView = (menuId, position) => {
+    const { MenuID } = this.props
+
+    if (MenuID !== menuId) return
+
+    if (position === 'table') {
+      this.reloadtable()
+    } else {
+      this.reloadview()
+    }
+  }
+
+  resetActiveMenu = (menuId) => {
+    const { MenuID } = this.props
+
+    if (MenuID !== menuId) return
+
+    this.setShortcut()
+  }
+
+  changeTableLine = (ContainerId, tableId, id, data) => {
+    if (this.state.ContainerId !== ContainerId) return
+
+    this.setState({
+      BIDs: {...this.state.BIDs, [tableId]: id, [tableId + 'data']: data}
+    })
+  }
+
+  /**
+   * @description 鎸夐挳鎵ц瀹屾垚鍚庨〉闈㈠埛鏂�
+   * @param {*} menuId     // 鑿滃崟Id
+   * @param {*} position   // 鍒锋柊浣嶇疆
+   * @param {*} btn        // 鎵ц鐨勬寜閽�
+   */
+  refreshByButtonResult = (menuId, position, btn, id, lines) => {
+    const { MenuID } = this.props
+
+    if (MenuID !== menuId) return
+
+    if (position === 'line' && lines && lines.length === 1) {
+      this.loadmainLinedata(lines[0].$$uuid)
+    } else {
+      this.reloadtable(btn, id)
+    }
+  }
+
+  UNSAFE_componentWillMount () {
+    // 缁勪欢鍔犺浇鏃讹紝鑾峰彇鑿滃崟鏁版嵁
+    this.loadconfig()
+  }
+
+  shouldComponentUpdate (nextProps, nextState) {
+    return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
+  }
+
+  componentDidMount () {
+    MKEmitter.addListener('reloadData', this.reloadData)
+    MKEmitter.addListener('reloadMenuView', this.reloadMenuView)
+    MKEmitter.addListener('changeTableLine', this.changeTableLine)
+    MKEmitter.addListener('resetActiveMenu', this.resetActiveMenu)
+    MKEmitter.addListener('queryModuleParam', this.queryModuleParam)
+    MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
+  }
+
+  /**
+   * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊锛屾竻闄ゅ揩鎹烽敭璁剧疆
+   */
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+    document.onkeydown = () => {}
+    MKEmitter.removeListener('reloadData', this.reloadData)
+    MKEmitter.removeListener('reloadMenuView', this.reloadMenuView)
+    MKEmitter.removeListener('changeTableLine', this.changeTableLine)
+    MKEmitter.removeListener('resetActiveMenu', this.resetActiveMenu)
+    MKEmitter.removeListener('queryModuleParam', this.queryModuleParam)
+    MKEmitter.removeListener('refreshByButtonResult', this.refreshByButtonResult)
+  }
+
+  render() {
+    const { MenuID } = this.props
+    const { BID, setting, searchlist, pageSize, actions, columns, loadingview, viewlost, pickup, config, chartId, search, selectedData, shortcuts, autoMatic } = this.state
+
+    return (
+      <div className="commontable" id={this.state.ContainerId}>
+        {loadingview ? <Spin size="large" /> : null}
+        {searchlist && searchlist.length ?
+          <MainSearch BID={BID} searchlist={searchlist} setting={setting} refreshdata={this.refreshbysearch}/> : null
+        }
+        {setting && config.charts ? <Row className="chart-view" gutter={16}>
+          {/* 瑙嗗浘缁� */}
+          {!config.expand ? <Tabs activeKey={chartId} onChange={this.changeChart}>
+            {config.charts.map(item => (
+              <TabPane tab={<MkIcon type={item.icon} />} key={item.uuid}></TabPane>
+            ))}
+          </Tabs> : null}
+          {config.charts.map(item => {
+            if (!config.expand && chartId !== item.uuid) return null
+
+            if (item.chartType === 'table') {
+              return (
+                <Col span={item.width || 24} key={item.uuid}>
+                  {config.charts.length > 1 && item.title ? <p className="chart-table chart-title">{item.title}</p> : null}
+                  <div className="commontable-main-action">
+                    <MainAction
+                      BID={BID}
+                      setting={setting}
+                      actions={actions}
+                      columns={columns}
+                      dict={this.state.dict}
+                      MenuID={MenuID}
+                      selectedData={selectedData}
+                      ContainerId={this.state.ContainerId}
+                    />
+                  </div>
+                  <div className="main-table-box">
+                    {(setting.tableType === 'radio' || setting.tableType === 'checkbox') && this.state.data && this.state.data.length > 0 ?
+                      <Switch title="鏀惰捣" className="main-pickup" checkedChildren="寮�" unCheckedChildren="鍏�" checked={pickup} onChange={this.pickupChange} /> : null
+                    }
+                    <MainTable
+                      MenuID={MenuID}
+                      tableId={MenuID}
+                      pickup={pickup}
+                      setting={setting}
+                      columns={columns}
+                      pageSize={pageSize}
+                      dict={this.state.dict}
+                      data={this.state.data}
+                      total={this.state.total}
+                      loading={this.state.loading}
+                      statFValue={this.state.statFValue}
+                      ContainerId={this.state.ContainerId}
+                      refreshdata={this.refreshbytable}
+                      chgSelectData={this.changeSelectedData}
+                    />
+                  </div>
+                </Col>
+              )
+            } else if (item.chartType === 'card') {
+              return (
+                <Col className="card-view" span={item.width} key={item.uuid}>
+                  <CardComponent
+                    BID={BID}
+                    plot={item}
+                    MenuID={MenuID}
+                    config={config}
+                    tableId={MenuID}
+                    columns={columns}
+                    data={this.state.data}
+                    loading={this.state.loading}
+                    ContainerId={this.state.ContainerId}
+                  />
+                </Col>
+              )
+            } else {
+              return (
+                <Col span={item.width} key={item.uuid}>
+                  <ChartComponent
+                    BID={BID}
+                    plot={item}
+                    config={config}
+                    data={this.state.data}
+                    loading={this.state.loading}
+                  />
+                </Col>
+              )
+            }
+          })}
+        </Row> : null }
+        {setting && !config.charts ? <div className="chart-view">
+          <div className="commontable-main-action">
+            <MainAction
+              BID={BID}
+              setting={setting}
+              actions={actions}
+              columns={columns}
+              dict={this.state.dict}
+              MenuID={MenuID}
+              selectedData={selectedData}
+              ContainerId={this.state.ContainerId}
+            />
+          </div>
+          <div className="main-table-box">
+            {(setting.tableType === 'radio' || setting.tableType === 'checkbox') && this.state.data && this.state.data.length > 0 ?
+              <Switch title="鏀惰捣" className="main-pickup" checkedChildren="寮�" unCheckedChildren="鍏�" checked={pickup} onChange={this.pickupChange} /> : null
+            }
+            <MainTable
+              MenuID={MenuID}
+              tableId={MenuID}
+              pickup={pickup}
+              setting={setting}
+              columns={columns}
+              pageSize={pageSize}
+              dict={this.state.dict}
+              data={this.state.data}
+              total={this.state.total}
+              loading={this.state.loading}
+              statFValue={this.state.statFValue}
+              ContainerId={this.state.ContainerId}
+              refreshdata={this.refreshbytable}
+              chgSelectData={this.changeSelectedData}
+            />
+          </div>
+        </div> : null }
+        {setting && config.tabgroups.map(group => (
+          <Tabs key={group.uuid}>
+            {group.sublist.map(_tab => {
+              return (
+                <TabPane tab={
+                  <span id={_tab.uuid}>
+                    {_tab.icon ? <MkIcon type={_tab.icon} /> : null}
+                    {_tab.label}
+                  </span>
+                } key={_tab.uuid}>
+                  <SubTable
+                    Tab={_tab}
+                    SupMenuID={MenuID}
+                    MenuID={_tab.linkTab}
+                    mainSearch={_tab.searchPass === 'true' ? search : null}
+                    ContainerId={this.state.ContainerId}
+                    BID={this.state.BIDs[_tab.supMenu] || ''}
+                    BData={this.state.BIDs[_tab.supMenu + 'data'] || ''}
+                  />
+                </TabPane>
+              )
+            })}
+          </Tabs>))
+        }
+        {!window.GLOB.mkHS && autoMatic ? <AutoMatic autoMatic={autoMatic} config={config} /> : null}
+        {!window.GLOB.mkHS && window.GLOB.systemType !== 'production' ? <PagemsgComponent menu={{MenuName: this.props.MenuName, MenuNo: this.props.MenuNo}} config={config} dict={this.state.dict} /> : null}
+        {!window.GLOB.mkHS && shortcuts ? <SettingComponent config={config} dict={this.state.dict} shortcuts={shortcuts} permAction={this.props.permAction}/> : null}
+        {viewlost ? <NotFount msg={this.state.lostmsg} /> : null}
+      </div>
+    )
+  }
+}
+
+const mapStateToProps = (state) => {
+  return {
+    permAction: state.permAction,
+    permMenus: state.permMenus
+  }
+}
+
+const mapDispatchToProps = () => {
+  return {}
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(NormalTable)
\ No newline at end of file
diff --git a/src/tabviews/basetable/index.scss b/src/tabviews/basetable/index.scss
new file mode 100644
index 0000000..242cdf2
--- /dev/null
+++ b/src/tabviews/basetable/index.scss
@@ -0,0 +1,140 @@
+.commontable {
+  position: relative;
+  min-height: calc(100vh - 94px);
+  padding-top: 16px;
+  padding-bottom: 0px;
+  .box404 {
+    padding-top: 30px;
+  }
+  >.top-search {
+    padding: 0px 24px 5px;
+    border-bottom: 1px solid #efefef;
+  }
+  .commontable-main-action {
+    min-height: 25px;
+    .button-list {
+      padding-right: 60px;
+    }
+  }
+  .ant-modal-mask {
+    position: absolute;
+  }
+  .ant-modal-wrap {
+    position: absolute;
+  }
+  .action-modal .ant-modal {
+    top: 40px;
+    max-width: 95%;
+    .ant-modal-body {
+      max-height: calc(100vh - 265px);
+    }
+  }
+  > .ant-spin {
+    position: absolute;
+    z-index: 10;
+    left: calc(50% - 22px);
+    top: calc(50vh - 70px);
+  }
+  > .ant-card {
+    margin: 0 20px 20px;
+    > .ant-card-head {
+      border: 0;
+      padding: 0;
+      min-height: 30px;
+      .ant-card-head-title {
+        padding: 10px 0 0;
+        span {
+          color: #1890ff;
+          display: inline-block;
+          padding: 0 10px;
+          font-size: 15px;
+          border-bottom: 1px solid #1890ff;
+          .anticon {
+            margin-right: 10px;
+          }
+        }
+      }
+    }
+    > .ant-card-body {
+      padding: 0;
+    }
+  }
+  .main-table-box {
+    position: relative;
+    .main-pickup {
+      position: absolute;
+      right: 0px;
+      top: -22px;
+      z-index: 1;
+    }
+    >.async-spin {
+      line-height: 150px!important;
+    }
+  }
+  > .ant-tabs {
+    width: 100%;
+    padding: 0px 20px;
+    margin-bottom: 20px;
+    .ant-tabs-tab:not(.ant-tabs-tab-active) {
+      cursor: pointer;
+    }
+    .ant-tabs-tab.ant-tabs-tab-active {
+      cursor: default;
+    }
+  }
+  .ant-table-fixed-left, .ant-table-fixed-right {
+    z-index: 1;
+  }
+  > .chart-view {
+    position: relative;
+    padding: 0 20px;
+    >.ant-tabs {
+      .ant-tabs-bar {
+        position: relative;
+        z-index: 1;
+        margin: 0;
+        border: 0;
+        .ant-tabs-nav-scroll {
+          text-align: right;
+          padding-right: 20px;
+          .ant-tabs-ink-bar {
+            display: none!important;
+          }
+          .ant-tabs-tab {
+            padding: 6px 5px;
+            margin-right: 5px;
+          }
+        }
+      }
+    }
+    >.ant-col {
+      min-height: 100px;
+    }
+    >.card-view.ant-col-24 {
+      padding: 0!important;
+      .card-row-box {
+        padding: 0;
+      }
+    }
+    .chart-title {
+      position: relative;
+      color: rgba(0, 0, 0, 0.65);
+      font-weight: 400;
+      font-size: 16px;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      overflow: hidden;
+      margin: 0px;
+      padding: 5px 10px;
+      float: left;
+      max-width: 50%;
+    }
+    .chart-table.chart-title {
+      position: absolute;
+      top: 0px;
+    }
+    .canvas {
+      clear: both;
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/tabviews/calendar/index.jsx b/src/tabviews/calendar/index.jsx
index 735d55a..a769ee8 100644
--- a/src/tabviews/calendar/index.jsx
+++ b/src/tabviews/calendar/index.jsx
@@ -403,7 +403,7 @@
         param.custom_script = param.custom_script.replace(item.reg, item.value)
       })
       
-      param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+      param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
         Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${param.custom_script}
       `
diff --git a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
index 556364e..f2461f4 100644
--- a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
+++ b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -1199,7 +1199,7 @@
           if (!_cell.label && _cell.label !== 0) return
 
           if (_map.has(_cell.value)) return
-          _map.set(_cell.value, true)
+          _map.set(_cell.value, 0)
 
           if (item.linkSubField) {
             item.linkSubField.forEach(m => {
diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index 5c7df9c..c2f7668 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -842,7 +842,7 @@
     }
 
     if (param.custom_script) {
-      param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
+      param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${param.custom_script}
       `
       regoptions.forEach(item => {
@@ -863,7 +863,7 @@
         `
       }
     } else if (LText) {
-      LText = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
+      LText = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${LText}
       `
     }
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index 087de55..9b7e837 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -911,7 +911,7 @@
       _declarefields = ',' + _declarefields
     }
     _sql = `/* 绯荤粺鐢熸垚 */
-        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@bid nvarchar(50)${_declarefields}
+        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@bid nvarchar(50)${_declarefields}
       `
   
     let userName = sessionStorage.getItem('User_Name') || ''
diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx
index c2b9648..6792251 100644
--- a/src/tabviews/zshare/mutilform/index.jsx
+++ b/src/tabviews/zshare/mutilform/index.jsx
@@ -650,6 +650,10 @@
   
       param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
       param.secretkey = Utils.encrypt(param.LText, param.timestamp)
+
+      if (form.database === 'sso' && window.GLOB.mainSystemApi) {
+        param.rduri = window.GLOB.mainSystemApi
+      }
   
       return (
         new Promise(resolve => {
@@ -689,21 +693,29 @@
     let _formlist = fromJS(this.state.formlist).toJS().map(item => {
       if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
         let options = []
+        let map = new Map()
         result[item.field].forEach(cell => {
-          let _cell = { key: Utils.getuuid() }
+          let _cell = { key: Utils.getuuid() , ParentID: ''}
+
+          if (item.linkField && cell[item.linkField] !== undefined) {
+            _cell.ParentID = cell[item.linkField]
+          }
 
           if (item.type !== 'checkcard') {
             _cell.value = cell[item.valueField]
-            _cell.label = cell[item.valueText]
-            if (!_cell.label && _cell.label !== 0) return
+            _cell.label = cell[item.valueText] + ''
+            if (!_cell.label || map.has(_cell.ParentID + _cell.value)) return
+            
+            map.set(_cell.ParentID + _cell.value, 0)
           } else {
             _cell.$value = cell[item.cardValField]
             _cell = {..._cell, ...cell}
+
+            if (map.has(_cell.ParentID + _cell.$value)) return
+            
+            map.set(_cell.ParentID + _cell.$value, 0)
           }
-  
-          if (item.linkField) {
-            _cell.ParentID = cell[item.linkField] === undefined ? '' : cell[item.linkField]
-          }
+          
           if (item.subFields) {
             item.subFields.forEach(m => {
               _cell[m.field] = cell[m.field] === undefined ? '' : cell[m.field]
diff --git a/src/tabviews/zshare/mutilform/mkSelect/index.jsx b/src/tabviews/zshare/mutilform/mkSelect/index.jsx
index 54c46f4..821fb89 100644
--- a/src/tabviews/zshare/mutilform/mkSelect/index.jsx
+++ b/src/tabviews/zshare/mutilform/mkSelect/index.jsx
@@ -196,6 +196,7 @@
         id={config.uuid}
         mode="multiple"
         defaultValue={value}
+        dropdownMatchSelectWidth={config.dropdown !== 'false'}
         filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
         onChange={this.mutilselectChange}
         disabled={config.readonly}
diff --git a/src/tabviews/zshare/topSearch/index.jsx b/src/tabviews/zshare/topSearch/index.jsx
index 421f356..829e546 100644
--- a/src/tabviews/zshare/topSearch/index.jsx
+++ b/src/tabviews/zshare/topSearch/index.jsx
@@ -398,26 +398,33 @@
     let _searchlist = fromJS(this.state.searchlist).toJS().map(item => {
       if (['select', 'link', 'multiselect', 'checkcard'].includes(item.type) && result[item.field] && result[item.field].length > 0) {
         let options = []
+        let map = new Map()
         result[item.field].forEach(cell => {
           let _item = {
-            key: Utils.getuuid()
-          }
-
-          if (item.type !== 'checkcard') {
-            _item.Value = cell[item.valueField]
-            _item.Text = cell[item.valueText]
-            if (!_item.Text && _item.Text !== 0) {
-              return
-            }
-          } else {
-            _item.$value = cell[item.cardValField]
-            _item = {..._item, ...cell}
+            key: Utils.getuuid(),
+            ParentID: ''
           }
 
           if (item.linkField) {
             _item.ParentID = cell[item.linkField]
           }
 
+          if (item.type !== 'checkcard') {
+            _item.Value = cell[item.valueField]
+            _item.Text = cell[item.valueText] + ''
+            
+            if (!_item.Text || map.has(_item.ParentID + _item.Value)) return
+            
+            map.set(_item.ParentID + _item.Value, 0)
+          } else {
+            _item.$value = cell[item.cardValField]
+            _item = {..._item, ...cell}
+
+            if (map.has(_item.ParentID + _item.$value)) return
+            
+            map.set(_item.ParentID + _item.$value, 0)
+          }
+
           options.push(_item)
         })
 
diff --git a/src/templates/formtabconfig/index.jsx b/src/templates/formtabconfig/index.jsx
index aef7eda..1ca9259 100644
--- a/src/templates/formtabconfig/index.jsx
+++ b/src/templates/formtabconfig/index.jsx
@@ -1877,9 +1877,9 @@
               </div>
             } style={{ width: '100%' }}>
               <SettingOutlined onClick={this.changeSetting} />
-              <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃悳绱€�嬩腑锛岄�夋嫨瀵瑰簲鎼滅储妗嗘嫋鑷虫澶勬坊鍔狅紱鎴栫偣鍑绘寜閽�婃坊鍔犳悳绱㈡潯浠躲�嬫壒閲忔坊鍔狅紝閫夋嫨鎵归噺娣诲姞鏃讹紝闇�鎻愬墠閫夋嫨浣跨敤琛ㄣ��">
+              {/* <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃悳绱€�嬩腑锛岄�夋嫨瀵瑰簲鎼滅储妗嗘嫋鑷虫澶勬坊鍔狅紱鎴栫偣鍑绘寜閽�婃坊鍔犳悳绱㈡潯浠躲�嬫壒閲忔坊鍔狅紝閫夋嫨鎵归噺娣诲姞鏃讹紝闇�鎻愬墠閫夋嫨浣跨敤琛ㄣ��">
                 <QuestionCircleOutlined style={{position: 'relative', color: '#c49f47', left: '5px', top: '20px'}} />
-              </Tooltip>
+              </Tooltip> */}
               <Collapse
                 activeKey={config.groups.map(group => group.uuid)}
                 expandIconPosition={'right'}
@@ -1910,9 +1910,9 @@
                 ))}
               </Collapse>
               <div className="action-list">
-                <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃寜閽�嬩腑锛岄�夋嫨瀵瑰簲绫诲瀷鐨勬寜閽嫋鑷虫澶勬坊鍔狅紝濡傞�夋嫨鎸夐挳绫诲瀷涓鸿〃鍗曘�佹柊鏍囩椤电瓑鍚湁閰嶇疆椤甸潰鐨勬寜閽紝鍙湪宸︿晶宸ュ叿鏍�-鎸夐挳-鍙厤缃寜閽锛岀偣鍑绘寜閽畬鎴愮浉鍏抽厤缃�傛敞锛氬綋璁剧疆鎸夐挳鏄剧ず浣嶇疆涓鸿〃鏍兼椂锛屾樉绀哄垪浼氬鍔犳搷浣滃垪銆�">
+                {/* <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃寜閽�嬩腑锛岄�夋嫨瀵瑰簲绫诲瀷鐨勬寜閽嫋鑷虫澶勬坊鍔狅紝濡傞�夋嫨鎸夐挳绫诲瀷涓鸿〃鍗曘�佹柊鏍囩椤电瓑鍚湁閰嶇疆椤甸潰鐨勬寜閽紝鍙湪宸︿晶宸ュ叿鏍�-鎸夐挳-鍙厤缃寜閽锛岀偣鍑绘寜閽畬鎴愮浉鍏抽厤缃�傛敞锛氬綋璁剧疆鎸夐挳鏄剧ず浣嶇疆涓鸿〃鏍兼椂锛屾樉绀哄垪浼氬鍔犳搷浣滃垪銆�">
                   <QuestionCircleOutlined style={{position: 'absolute', color: '#c49f47', left: '5px', top: '5px'}} />
-                </Tooltip>
+                </Tooltip> */}
                 <DragElement
                   type="action"
                   list={this.state.config.action}
diff --git a/src/templates/modalconfig/dragelement/card.jsx b/src/templates/modalconfig/dragelement/card.jsx
index 3b2f64f..d4dc506 100644
--- a/src/templates/modalconfig/dragelement/card.jsx
+++ b/src/templates/modalconfig/dragelement/card.jsx
@@ -16,7 +16,7 @@
 const ColorSketch = asyncComponent(() => import('@/mob/colorsketch'))
 const CheckCard = asyncComponent(() => import('../checkCard'))
 
-const Card = ({ id, card, moveCard, findCard, editCard, closeCard, copyCard, showField }) => {
+const Card = ({ id, card, moveCard, findCard, editCard, closeCard, copyCard, showField, setStyle }) => {
   const originalIndex = findCard(id).index
   const [{ isDragging }, drag] = useDrag({
     item: { type: 'form', id, originalIndex },
@@ -55,7 +55,7 @@
   const changeStyle = () => {
     let options = ['font1']
 
-    MKEmitter.emit('changeStyle', ['form', card.uuid], options, card.style || {})
+    MKEmitter.emit('changeStyle', options, card.style || {}, (s) => {setStyle(s, id)})
   }
 
   let selectval = ''
diff --git a/src/templates/modalconfig/dragelement/index.jsx b/src/templates/modalconfig/dragelement/index.jsx
index a0f19a3..4db46b0 100644
--- a/src/templates/modalconfig/dragelement/index.jsx
+++ b/src/templates/modalconfig/dragelement/index.jsx
@@ -37,6 +37,14 @@
     handleForm(card)
   }
 
+  const setStyle = (style, id) => {
+    const { card, index } = findCard(id)
+    
+    const _cards = update(cards, { $splice: [[index, 1, {...card, style}]] })
+
+    handleList(_cards)
+  }
+
   const closeCard = id => {
     const { card } = findCard(id)
     closeForm(card)
@@ -124,6 +132,7 @@
             card={card}
             showField={showField}
             moveCard={moveCard}
+            setStyle={setStyle}
             editCard={editCard}
             closeCard={closeCard}
             copyCard={copyCard}
diff --git a/src/templates/sharecomponent/actioncomponent/index.jsx b/src/templates/sharecomponent/actioncomponent/index.jsx
index 2e82251..d520cdf 100644
--- a/src/templates/sharecomponent/actioncomponent/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/index.jsx
@@ -1,8 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Tooltip, Modal, notification, Button } from 'antd'
-import { QuestionCircleOutlined } from '@ant-design/icons'
+import { Modal, notification, Button } from 'antd'
 import moment from 'moment'
 
 import Api from '@/api'
@@ -915,9 +914,6 @@
 
     return (
       <div className="model-table-action-list" style={config.charts && config.charts.length > 1 ? {paddingTop: 25} : null}>
-        <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃寜閽�嬩腑锛岄�夋嫨瀵瑰簲绫诲瀷鐨勬寜閽嫋鑷虫澶勬坊鍔狅紝濡傞�夋嫨鎸夐挳绫诲瀷涓鸿〃鍗曘�佹柊鏍囩椤电瓑鍚湁閰嶇疆椤甸潰鐨勬寜閽紝鍙湪宸︿晶宸ュ叿鏍�-鎸夐挳-鍙厤缃寜閽锛岀偣鍑绘寜閽畬鎴愮浉鍏抽厤缃�傛敞锛氬綋璁剧疆鎸夐挳鏄剧ず浣嶇疆涓鸿〃鏍兼椂锛屾樉绀哄垪浼氬鍔犳搷浣滃垪銆�">
-          <QuestionCircleOutlined style={{color: '#c49f47', position: 'absolute', left: '5px', top: '5px'}} />
-        </Tooltip>
         <DragElement
           list={actionlist}
           setting={this.props.config.setting}
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
index 586de39..4b8738a 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
@@ -50,7 +50,7 @@
     }
 
     let _sql = `Declare @${btn.sheet} table (${_dec}jskey nvarchar(50) )
-      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50), @retmsg nvarchar(4000),@tbid Nvarchar(512)
+      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50), @retmsg nvarchar(4000),@tbid Nvarchar(512)
       Select @ErrorCode='', @retmsg=''
     `
     
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
index eb41078..320eaca 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
@@ -39,7 +39,7 @@
     columns = columns.filter(item => item.Column !== '$Index')
     let fields = columns.map(item => item.Column)
 
-    let _sql = `Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50), @retmsg nvarchar(4000)
+    let _sql = `Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50), @retmsg nvarchar(4000)
     `
     
     this.setState({
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/utils.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/utils.jsx
index c8fa24e..f1d391d 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/utils.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/utils.jsx
@@ -32,7 +32,7 @@
     })
 
     if (_customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_customScript}
       `
     }
@@ -127,7 +127,7 @@
       `
     } else {
       sql = `/* sql 楠岃瘉 */
-        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_dataresource}`
     }
     sql = sql.replace(/\n\s{8}/ig, '\n')
diff --git a/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx
index e39bcca..7732d2a 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyprint/index.jsx
@@ -359,6 +359,7 @@
             </Form>
           </TabPane>
           <TabPane tab="淇℃伅鎻愮ず" key="7">
+            <div style={{textAlign: 'center', fontSize: '13px', marginBottom: '10px'}}>鎵撳嵃淇℃伅涓鏋滃瓨鍦ㄧ綉缁滆祫婧愶紙鍥剧墖锛夛紝璇风‘淇濊祫婧愬彲浠ユ甯歌闂紝璧勬簮涓嶅瓨鍦ㄦ椂浼氭姤鏁版嵁寮傚父銆�</div>
             <Form {...formItemLayout}>
               <Row gutter={24}>
                 <Col offset={6} span={6}>
diff --git a/src/templates/sharecomponent/columncomponent/index.jsx b/src/templates/sharecomponent/columncomponent/index.jsx
index 4d1dd74..78e60bf 100644
--- a/src/templates/sharecomponent/columncomponent/index.jsx
+++ b/src/templates/sharecomponent/columncomponent/index.jsx
@@ -1,8 +1,8 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Tooltip, Modal, notification, Switch, message } from 'antd'
-import { QuestionCircleOutlined, CopyOutlined } from '@ant-design/icons'
+import { Modal, notification, Switch, message } from 'antd'
+import { CopyOutlined } from '@ant-design/icons'
 
 import zhCN from '@/locales/zh-CN/model.js'
 import enUS from '@/locales/en-US/model.js'
@@ -506,12 +506,7 @@
 
     return (
       <div className="model-table-column-list">
-        <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃樉绀哄垪銆嬩腑锛岄�夋嫨瀵瑰簲绫诲瀷鐨勬樉绀哄垪鎷栬嚦姝ゅ娣诲姞锛涙垨鐐瑰嚮銆婃坊鍔犳樉绀哄垪銆嬫寜閽壒閲忔坊鍔狅紝閫夋嫨鎵归噺娣诲姞鏃讹紝闇�鎻愬墠閫夋嫨浣跨敤琛ㄣ�傛敞锛氭坊鍔犲悎骞跺垪鏃讹紝闇�璁剧疆鍙�夊垪銆�">
-          <QuestionCircleOutlined style={{color: '#c49f47', position: 'relative', left: '-15px', top: '5px'}} />
-        </Tooltip>
-        {columnlist && columnlist.length > 0 ?
-          <CopyOutlined className="column-copy" title="copy" onClick={this.copycolumn} /> : null
-        }
+        {columnlist && columnlist.length > 0 ? <CopyOutlined className="column-copy" title="copy" onClick={this.copycolumn} /> : null}
         <Switch checkedChildren={dict['model.switch.open']} unCheckedChildren={dict['model.switch.close']} defaultChecked={this.state.showField} onChange={this.onFieldChange} />
         <DragElement
           list={columnlist}
diff --git a/src/templates/sharecomponent/columncomponent/index.scss b/src/templates/sharecomponent/columncomponent/index.scss
index d2ea50c..6d09190 100644
--- a/src/templates/sharecomponent/columncomponent/index.scss
+++ b/src/templates/sharecomponent/columncomponent/index.scss
@@ -1,6 +1,6 @@
 .model-table-column-list {
   position: relative;
-  padding: 0px 20px 100px;
+  padding: 16px 20px 100px;
 
   .ant-switch {
     position: absolute;
diff --git a/src/templates/sharecomponent/searchcomponent/index.jsx b/src/templates/sharecomponent/searchcomponent/index.jsx
index 9be4910..2f848fc 100644
--- a/src/templates/sharecomponent/searchcomponent/index.jsx
+++ b/src/templates/sharecomponent/searchcomponent/index.jsx
@@ -1,8 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Tooltip, Modal, notification, Switch } from 'antd'
-import { QuestionCircleOutlined } from '@ant-design/icons'
+import { Modal, notification, Switch } from 'antd'
 import moment from 'moment'
 
 import Api from '@/api'
@@ -45,22 +44,6 @@
       searchlist: fromJS(this.props.config.search).toJS()
     })
   }
-
-  // /**
-  //  * @description 鐩戝惉鍒版悳绱㈡潯浠跺鍒舵椂锛岃Е鍙戞悳绱㈡潯浠剁紪杈�
-  //  */
-  // UNSAFE_componentWillReceiveProps (nextProps) {
-  //   const { searchlist } = this.state
-
-  //   if (!is(fromJS(nextProps.config.search), fromJS(this.props.config.search)) && !is(fromJS(nextProps.config.search), fromJS(searchlist))) {
-  //     let len = nextProps.config.search.length
-  //     let item = nextProps.config.search[len - 1]
-  //     if (item && item.focus) {
-  //       this.handleSearch(item)
-  //     }
-  //     this.setState({searchlist: fromJS(nextProps.config.search).toJS()})
-  //   }
-  // }
 
   componentDidMount () {
     MKEmitter.addListener('plusSearch', this.plusSearch)
@@ -371,9 +354,6 @@
 
     return (
       <div className={'model-table-search-list length' + searchlist.length + (showField ? ' show-field' : '')}>
-        <Tooltip placement="bottomLeft" overlayClassName="middle" title="鍦ㄥ乏渚у伐鍏锋爮銆婃悳绱€�嬩腑锛岄�夋嫨瀵瑰簲鎼滅储妗嗘嫋鑷虫澶勬坊鍔狅紱鎴栫偣鍑绘寜閽�婃坊鍔犳悳绱㈡潯浠躲�嬫壒閲忔坊鍔狅紝閫夋嫨鎵归噺娣诲姞鏃讹紝闇�鎻愬墠閫夋嫨浣跨敤琛ㄣ��">
-          <QuestionCircleOutlined style={{color: '#c49f47', position: 'relative', left: '-15px', top: '5px'}} />
-        </Tooltip>
         <FieldsComponent config={{uuid: config.uuid, search: searchlist}} type="search" />
         <Switch className="switch-field-show" checkedChildren={dict['model.switch.open']} unCheckedChildren={dict['model.switch.close']} defaultChecked={showField} onChange={this.onFieldChange} />
         <DragElement
diff --git a/src/templates/sharecomponent/searchcomponent/index.scss b/src/templates/sharecomponent/searchcomponent/index.scss
index 29bbb21..4a4a374 100644
--- a/src/templates/sharecomponent/searchcomponent/index.scss
+++ b/src/templates/sharecomponent/searchcomponent/index.scss
@@ -1,5 +1,5 @@
 .model-table-search-list {
-  padding: 1px 24px 20px;
+  padding: 16px 24px 20px;
   min-height: 87px;
   position: relative;
   border-bottom: 1px solid #d9d9d9;
diff --git a/src/templates/sharecomponent/settingcalcomponent/verifycard/utils.jsx b/src/templates/sharecomponent/settingcalcomponent/verifycard/utils.jsx
index 478739f..3b15e0e 100644
--- a/src/templates/sharecomponent/settingcalcomponent/verifycard/utils.jsx
+++ b/src/templates/sharecomponent/settingcalcomponent/verifycard/utils.jsx
@@ -22,7 +22,7 @@
     }
 
     if (_customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_customScript}
       `
     }
@@ -133,7 +133,7 @@
       `
     } else {
       sql = `/* sql 楠岃瘉 */
-        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_dataresource}`
     }
     sql = sql.replace(/\n\s{8}/ig, '\n')
diff --git a/src/templates/sharecomponent/settingcomponent/settingform/utils.jsx b/src/templates/sharecomponent/settingcomponent/settingform/utils.jsx
index a9f3e69..a786dfa 100644
--- a/src/templates/sharecomponent/settingcomponent/settingform/utils.jsx
+++ b/src/templates/sharecomponent/settingcomponent/settingform/utils.jsx
@@ -18,7 +18,7 @@
     })
 
     if (_customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_customScript}
       `
     }
@@ -114,7 +114,7 @@
         `
       } else {
         sumSql = `/* sql sum楠岃瘉 */
-          declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+          declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
           ${_sql}`
       }
     }
@@ -138,7 +138,7 @@
       `
     } else {
       sql = `/* sql 楠岃瘉 */
-        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_dataresource}`
     }
     sql = sql.replace(/\n\s{8}/ig, '\n')
@@ -170,7 +170,7 @@
     })
 
     if (_customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_customScript}
       `
     }
diff --git a/src/templates/sharecomponent/treesettingcomponent/settingform/utils.jsx b/src/templates/sharecomponent/treesettingcomponent/settingform/utils.jsx
index 4a49e77..0444260 100644
--- a/src/templates/sharecomponent/treesettingcomponent/settingform/utils.jsx
+++ b/src/templates/sharecomponent/treesettingcomponent/settingform/utils.jsx
@@ -18,7 +18,7 @@
     })
 
     if (_customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_customScript}
       `
     }
@@ -77,7 +77,7 @@
       `
     } else {
       sql = `/* sql 楠岃瘉 */
-        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
+        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100) select @ErrorCode='',@retmsg =''
         ${_dataresource}`
     }
     sql = sql.replace(/\n\s{8}/ig, '\n')
diff --git a/src/templates/zshare/modalform/index.jsx b/src/templates/zshare/modalform/index.jsx
index 08bcdb9..c033f37 100644
--- a/src/templates/zshare/modalform/index.jsx
+++ b/src/templates/zshare/modalform/index.jsx
@@ -25,7 +25,7 @@
   checkbox: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'fieldlength', 'span', 'labelwidth', 'tooltip', 'extra', 'splitline', 'arrange', 'marginTop', 'marginBottom'],
   radio: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'declare', 'linkSubField', 'span', 'labelwidth', 'tooltip', 'extra', 'setAll', 'emptyText', 'splitline', 'arrange', 'marginTop', 'marginBottom'],
   checkcard: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'span', 'labelwidth', 'display', 'tooltip', 'extra', 'width', 'multiple', 'splitline', 'marginTop', 'marginBottom'],
-  multiselect: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'fieldlength', 'span', 'labelwidth', 'tooltip', 'extra', 'marginTop', 'marginBottom'],
+  multiselect: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'fieldlength', 'span', 'labelwidth', 'tooltip', 'extra', 'marginTop', 'marginBottom', 'dropdown'],
   link: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'declare', 'setAll', 'linkField', 'linkSubField', 'span', 'labelwidth', 'tooltip', 'extra', 'emptyText', 'enter', 'splitline', 'dropdown', 'marginTop', 'marginBottom'],
   fileupload: ['readonly', 'required', 'readin', 'fieldlength', 'maxfile', 'fileType', 'span', 'labelwidth', 'tooltip', 'extra', 'compress', 'miniSet', 'splitline', 'marginTop', 'marginBottom'],
   switch: ['initval', 'openVal', 'closeVal', 'openText', 'closeText', 'readonly', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'splitline', 'marginTop', 'marginBottom'],
diff --git a/src/templates/zshare/verifycard/index.jsx b/src/templates/zshare/verifycard/index.jsx
index 9b40df1..a5a49eb 100644
--- a/src/templates/zshare/verifycard/index.jsx
+++ b/src/templates/zshare/verifycard/index.jsx
@@ -666,7 +666,7 @@
       }
     }).then(_fields => {
       let _usefulfields = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode']
-      let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@RoleID nvarchar(512)', '@mk_departmentcode nvarchar(50)', '@mk_organization nvarchar(50)', '@mk_user_type nvarchar(20)', '@mk_nation nvarchar(50)', '@mk_province nvarchar(50)', '@mk_city nvarchar(50)', '@mk_district nvarchar(50)', '@mk_address nvarchar(100)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)', '@bid nvarchar(50)']
+      let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@RoleID nvarchar(512)', '@mk_departmentcode nvarchar(512)', '@mk_organization nvarchar(512)', '@mk_user_type nvarchar(20)', '@mk_nation nvarchar(50)', '@mk_province nvarchar(50)', '@mk_city nvarchar(50)', '@mk_district nvarchar(50)', '@mk_address nvarchar(100)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)', '@bid nvarchar(50)']
       let _select = ['@UserName=\'\'', '@FullName=\'\'', '@RoleID=\'\'', '@mk_departmentcode=\'\'', '@mk_organization=\'\'', '@mk_user_type=\'\'', '@mk_nation=\'\'', '@mk_province=\'\'', '@mk_city=\'\'', '@mk_district=\'\'', '@mk_address=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'', '@bid=\'\'']
       let fieldArr = _usefulfields.map(_f => _f.toLowerCase())
       let hasBid = false
diff --git a/src/utils/option.js b/src/utils/option.js
index 6e6bb25..2183750 100644
--- a/src/utils/option.js
+++ b/src/utils/option.js
@@ -57,6 +57,13 @@
     isSystem: true
   },
   // {
+  //   title: '鍩虹琛ㄦ牸锛堟柊锛�',
+  //   type: 'BaseTable',
+  //   url: nortable,
+  //   baseconfig: '',
+  //   isSystem: true
+  // },
+  // {
   //   title: '涓诲瓙琛ㄨ〃鏍�',
   //   type: 'CommonTable',
   //   url: mainsubtable,
diff --git a/src/utils/utils-datamanage.js b/src/utils/utils-datamanage.js
index 0b94159..8e02550 100644
--- a/src/utils/utils-datamanage.js
+++ b/src/utils/utils-datamanage.js
@@ -114,7 +114,7 @@
     let _customScript = ''
     
     if (setting.customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
         Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${setting.customScript}
       `
@@ -215,7 +215,7 @@
         `
       }
     } else {
-      LText = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+      LText = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
         Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${LText}
       `
@@ -302,7 +302,7 @@
     }
     
     if (setting.customScript) {
-      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+      _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
         Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${setting.customScript}
       `
@@ -377,7 +377,7 @@
           insert into tmp_err_retmsg (ID, ErrorCode, retmsg, CreateUserID) select @time_id@,@ErrorCode, @retmsg,@UserID@ 
       `
     } else {
-      LText = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+      LText = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
         Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${LText}
       `
@@ -480,7 +480,7 @@
 
     if (sql) {
       sql = `/*鍓嶇疆鑴氭湰*/
-        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+        declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
         Select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${sql}
         aaa:
@@ -555,7 +555,7 @@
       fullName = sessionStorage.getItem('CloudFullName') || ''
     }
 
-    let _prevCustomScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+    let _prevCustomScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
         Select @ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
         ${errSql}
     `
@@ -755,7 +755,7 @@
       userName = sessionStorage.getItem('CloudUserName') || ''
       fullName = sessionStorage.getItem('CloudFullName') || ''
     }
-    _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+    _customScript = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
       select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
       ${_customScript}
     `
diff --git a/src/utils/utils.js b/src/utils/utils.js
index 3ceef58..06f55ca 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -1096,7 +1096,7 @@
     _sql = `
       /* 绯荤粺鐢熸垚 */
       declare @${sheet} table (${declarefields.join(',')},jskey nvarchar(50),BID nvarchar(50) )
-      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
+      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
       
       Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
       ${_initCustomScript}
@@ -1131,7 +1131,7 @@
     _sql = `
       /* 绯荤粺鐢熸垚 */
       declare @${sheet} table (jskey nvarchar(50))
-      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
+      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
       
       Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
       `
@@ -1314,7 +1314,7 @@
     _sql = `
       /* 绯荤粺鐢熸垚 */
       declare @${sheet} table (${declarefields.join(',')},jskey nvarchar(50),data_type nvarchar(50),BID nvarchar(50) )
-      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
+      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
       
       Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
       ${_initCustomScript}
@@ -1349,7 +1349,7 @@
     _sql = `
       /* 绯荤粺鐢熸垚 */
       declare @${sheet} table (jskey nvarchar(50))
-      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
+      Declare @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@tbid Nvarchar(512)
       
       Select  @ErrorCode='', @retmsg='', @UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
       `
@@ -1544,7 +1544,7 @@
     _declarefields = ',' + _declarefields
   }
   _sql = `/* 绯荤粺鐢熸垚 */
-      Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@bid nvarchar(50)${_declarefields}
+      Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@bid nvarchar(50)${_declarefields}
     `
 
   let userName = sessionStorage.getItem('User_Name') || ''
diff --git a/src/views/appmanage/index.jsx b/src/views/appmanage/index.jsx
index 7e3734a..a39380c 100644
--- a/src/views/appmanage/index.jsx
+++ b/src/views/appmanage/index.jsx
@@ -1225,7 +1225,7 @@
           </Modal>
           <Modal
             title={'娣诲姞鑴氭湰'}
-            width={750}
+            width={900}
             maskClosable={false}
             visible={scriptVisible}
             onCancel={() => this.setState({scriptVisible: false, confirmloading: false})}
diff --git a/src/views/appmanage/scriptform/index.jsx b/src/views/appmanage/scriptform/index.jsx
index 67c6224..5bc53d2 100644
--- a/src/views/appmanage/scriptform/index.jsx
+++ b/src/views/appmanage/scriptform/index.jsx
@@ -151,11 +151,11 @@
     const formItemLayout = {
       labelCol: {
         xs: { span: 24 },
-        sm: { span: 8 }
+        sm: { span: 6 }
       },
       wrapperCol: {
         xs: { span: 24 },
-        sm: { span: 16 }
+        sm: { span: 18 }
       }
     }
     return (
@@ -226,10 +226,9 @@
                   message: '璇烽�夋嫨椤甸潰!'
                 }]
               })(
-                <Select showSearch filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0 || 
-                  option.props.extra.toLowerCase().indexOf(input.toLowerCase()) >= 0}>
+                <Select showSearch dropdownMatchSelectWidth={false} filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}>
                   {views.map(item => {
-                    return <Select.Option key={item.MenuID} extra={item.MenuNo || ''} value={item.MenuID}>{item.MenuName}</Select.Option>
+                    return <Select.Option key={item.MenuID} value={item.MenuID}>{item.MenuName + ' ' + item.MenuNo}</Select.Option>
                   })}
                 </Select>
               )}
diff --git a/src/views/appmanage/scriptform/index.scss b/src/views/appmanage/scriptform/index.scss
index 74e8f0b..4520a20 100644
--- a/src/views/appmanage/scriptform/index.scss
+++ b/src/views/appmanage/scriptform/index.scss
@@ -3,10 +3,10 @@
 
   .remark {
     .ant-form-item-label {
-      width: 16%;
+      width: 12%;
     }
     .ant-form-item-control-wrapper {
-      width: 84%;
+      width: 88%;
     }
   }
 }
\ No newline at end of file
diff --git a/src/views/basedesign/index.jsx b/src/views/basedesign/index.jsx
index b742a63..41172b4 100644
--- a/src/views/basedesign/index.jsx
+++ b/src/views/basedesign/index.jsx
@@ -1,5 +1,4 @@
 import React, {Component} from 'react'
-import PropTypes from 'prop-types'
 import { notification, Spin, ConfigProvider } from 'antd'
 import enUS from 'antd/es/locale/en_US'
 import zhCN from 'antd/es/locale/zh_CN'
@@ -22,17 +21,8 @@
 sessionStorage.setItem('isEditState', 'true')
 
 class BaseDesign extends Component {
-  static propTpyes = {
-    menulist: PropTypes.any,     // 涓夌骇鑿滃崟鍒楄〃
-    exitEdit: PropTypes.func,    // 閫�鍑虹紪杈戠姸鎬�
-    supMenu: PropTypes.object,   // 瀵瑰簲鐨勪笂绾ц彍鍗�
-    supMenuList: PropTypes.array // 涓婄骇鑿滃崟鍒楄〃锛岀敤浜庝笁绾ц彍鍗曞垏鎹笂绾ц彍鍗�
-  }
-
   state = {
     loading: false,         // 缂栬緫鑿滃崟鎴栦娇鐢ㄥ凡浣跨敤妯℃澘鏃讹紝鑾峰彇閰嶇疆淇℃伅
-    btnParam: null,         // 缂栬緫鎸夐挳鐨勯厤缃俊鎭�
-    menulist: null,         // 缂栬緫涓殑鑿滃崟
     tabview: '',            // 閫夋嫨妯℃澘绐楀彛锛坱emplate锛夈�佸熀纭�琛ㄦ牸閰嶇疆锛圕ommonTable锛夈�佽〃鍗曪紙Modal锛夈�佸瓙琛紙SubTable锛�
     editMenu: null,         // 缂栬緫鑿滃崟
     editAction: null,       // 缂栬緫鎸夐挳
diff --git a/src/views/billprint/index.jsx b/src/views/billprint/index.jsx
index a571e21..650c02f 100644
--- a/src/views/billprint/index.jsx
+++ b/src/views/billprint/index.jsx
@@ -457,7 +457,7 @@
       let _script = item.script
 
       if (index === 0) {
-        _script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(50),@mk_organization nvarchar(50),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
+        _script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100)
           select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}'
           ${_script}
         `
diff --git a/src/views/design/sidemenu/editthdmenu/index.jsx b/src/views/design/sidemenu/editthdmenu/index.jsx
index 82c9b25..8d12124 100644
--- a/src/views/design/sidemenu/editthdmenu/index.jsx
+++ b/src/views/design/sidemenu/editthdmenu/index.jsx
@@ -114,6 +114,11 @@
         let _param = window.btoa(window.encodeURIComponent(JSON.stringify(_menu)))
 
         window.open(`#/basedesign/${_param}`)
+      } else if (_menu.PageParam.Template === 'BaseTable') {
+        sessionStorage.setItem('menuTree', JSON.stringify(this.props.menuTree))
+        let _param = window.btoa(window.encodeURIComponent(JSON.stringify(_menu)))
+  
+        window.open(`#/tabledesign/${_param}`)
       } else if (_menu.PageParam.Template === 'CustomPage') {
         let _param = {
           MenuType: 'custom',
diff --git a/src/views/design/sidemenu/index.jsx b/src/views/design/sidemenu/index.jsx
index 4c68f48..0de019a 100644
--- a/src/views/design/sidemenu/index.jsx
+++ b/src/views/design/sidemenu/index.jsx
@@ -117,6 +117,11 @@
       let _param = window.btoa(window.encodeURIComponent(JSON.stringify(cell)))
 
       window.open(`#/basedesign/${_param}`)
+    } else if (cell.type === 'BaseTable') {
+      sessionStorage.setItem('menuTree', JSON.stringify(this.props.menuTree))
+      let _param = window.btoa(window.encodeURIComponent(JSON.stringify(cell)))
+
+      window.open(`#/tabledesign/${_param}`)
     } else if (['RolePermission', 'NewPage'].includes(cell.type)) {
       let _cell = fromJS(cell).toJS()
       _cell.Template = _cell.PageParam.Template
diff --git a/src/views/tabledesign/index.jsx b/src/views/tabledesign/index.jsx
new file mode 100644
index 0000000..27dffe6
--- /dev/null
+++ b/src/views/tabledesign/index.jsx
@@ -0,0 +1,206 @@
+import React, {Component} from 'react'
+import { notification, Spin, ConfigProvider } from 'antd'
+import enUS from 'antd/es/locale/en_US'
+import zhCN from 'antd/es/locale/zh_CN'
+
+import Api from '@/api'
+import asyncComponent from '@/utils/asyncComponent'
+import asyncLoadComponent from '@/utils/asyncLoadComponent'
+import './index.scss'
+
+const _locale = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
+const Header = asyncComponent(() => import('@/menu/header'))
+const ComTableConfig = asyncLoadComponent(() => import('@/templates/comtableconfig'))
+const ModalConfig = asyncLoadComponent(() => import('@/templates/modalconfig'))
+
+document.body.className = ''
+sessionStorage.setItem('isEditState', 'true')
+
+class TableDesign extends Component {
+  state = {
+    loading: false,         // 缂栬緫鑿滃崟鎴栦娇鐢ㄥ凡浣跨敤妯℃澘鏃讹紝鑾峰彇閰嶇疆淇℃伅
+    btnParam: null,         // 缂栬緫鎸夐挳鐨勯厤缃俊鎭�
+    menulist: null,         // 缂栬緫涓殑鑿滃崟
+    tabview: '',            // 閫夋嫨妯℃澘绐楀彛锛坱emplate锛夈�佸熀纭�琛ㄦ牸閰嶇疆锛圕ommonTable锛夈�佽〃鍗曪紙Modal锛夈�佸瓙琛紙SubTable锛�
+    editMenu: null,         // 缂栬緫鑿滃崟
+    editAction: null,       // 缂栬緫鎸夐挳
+    editTab: null,          // 缂栬緫鏍囩
+    tabConfig: null,        // 鏍囩閰嶇疆淇℃伅
+    editSubTab: null,       // 缂栬緫瀛愭爣绛撅紙鏍囩涓殑鏍囩锛�
+    subTabConfig: null,     // 瀛愭爣绛鹃厤缃俊鎭�
+    subConfig: null,        // 瀛愰厤缃俊鎭�
+    btnTab: null,           // 鎵撳紑鏂版爣绛炬垨褰撳墠椤甸潰鍒锋柊鐨勬寜閽�
+    btnTabConfig: null,     // 鎵撳紑鏂版爣绛炬寜閽厤缃�
+    handleMVisible: false,  // 娣诲姞鎴栦慨鏀硅彍鍗曟ā鎬佹锛堣鑹叉潈闄愬垎閰嶇瓑锛�
+    sysMenu: null,          // 娣诲姞鎴栫紪杈戣彍鍗曪紙瑙掕壊鏉冮檺鍒嗛厤绛夛級
+    change: false
+  }
+
+  UNSAFE_componentWillMount() {
+    try {
+      let param = JSON.parse(window.decodeURIComponent(window.atob(this.props.match.params.param)))
+
+      this.getMenuParam(param)
+    } catch (e) {
+      notification.warning({
+        top: 92,
+        message: '鑿滃崟淇℃伅瑙f瀽閿欒锛�',
+        duration: 5
+      })
+    }
+  }
+
+  getMenuParam = (editMenu) => {
+    editMenu.fstMenuId = editMenu.FstId
+    editMenu.supMenuList = []
+    editMenu.fstMenuList = []
+
+    let tree = sessionStorage.getItem('menuTree')
+    if (tree) {
+      tree = JSON.parse(tree)
+      editMenu.fstMenuList = tree
+
+      tree.forEach(item => {
+        if (item.MenuID === editMenu.FstId) {
+          editMenu.supMenuList = item.children
+        }
+      })
+    }
+
+    let param = {
+      func: 'sPC_Get_LongParam',
+      MenuID: editMenu.MenuID
+    }
+
+    this.setState({
+      loading: true
+    })
+
+    Api.getSystemConfig(param).then(res => {
+      if (res.status) {
+        editMenu.open_edition = res.open_edition || ''
+        editMenu.LongParam = ''
+
+        if (res.LongParam) {
+          let _LongParam = ''
+          try {
+            _LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
+          } catch (e) {
+            console.warn('Parse Failure')
+            _LongParam = ''
+          }
+          editMenu.LongParam = _LongParam
+        } else if (editMenu.PageParam.copyMenuId) {
+          let _param = {
+            func: 'sPC_Get_LongParam',
+            MenuID: editMenu.PageParam.copyMenuId
+          }
+      
+          Api.getSystemConfig(_param).then(res => {
+            if (res.status) {
+              if (res.LongParam) {
+                let _LongParam = ''
+                try {
+                  _LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
+                  _LongParam.type = 'user'
+                } catch (e) {
+                  console.warn('Parse Failure')
+                  _LongParam = ''
+                }
+                editMenu.LongParam = _LongParam
+              }
+              
+              this.setState({
+                editMenu: editMenu,
+                loading: false,
+                tabview: editMenu.type
+              })
+            } else {
+              this.setState({
+                loading: false
+              })
+              notification.warning({
+                top: 92,
+                message: res.message,
+                duration: 5
+              })
+            }
+          })
+          return
+        }
+        
+        this.setState({
+          editMenu: editMenu,
+          loading: false,
+          tabview: editMenu.type
+        })
+      } else {
+        this.setState({
+          loading: false
+        })
+        notification.warning({
+          top: 92,
+          message: res.message,
+          duration: 5
+        })
+      }
+    })
+  }
+
+  /**
+   * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊
+   */
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+  }
+
+  handleView = (param) => {
+    this.setState({
+      tabview: ''
+    }, () => {
+      if (param) {
+        this.setState(param)
+      } else {
+        window.close()
+      }
+    })
+  }
+
+  render () {
+    const { loading } = this.state
+
+    return (
+      <div className="mk-base-design-wrap">
+        <ConfigProvider locale={_locale}>
+          <Header/>
+          {this.state.tabview === 'CommonTable' ?
+            <ComTableConfig
+              menu={this.state.editMenu}
+              reloadmenu={() => {localStorage.setItem('menuUpdate', new Date().getTime())}}
+              handleView={this.handleView}
+            /> : null
+          }
+          {this.state.tabview === 'Modal' ?
+            <ModalConfig
+              menu={this.state.editMenu}
+              editTab={this.state.editTab}
+              tabConfig={this.state.tabConfig}
+              editSubTab={this.state.editSubTab}
+              subTabConfig={this.state.subTabConfig}
+              btnTab={this.state.btnTab}
+              btnTabConfig={this.state.btnTabConfig}
+              editAction={this.state.editAction}
+              subConfig={this.state.subConfig}
+              handleView={this.handleView}
+            /> : null
+          }
+          {loading ? <Spin className="loading-view" size="large"/> : null}
+        </ConfigProvider>
+      </div>
+    )
+  }
+}
+
+export default TableDesign
\ No newline at end of file
diff --git a/src/views/tabledesign/index.scss b/src/views/tabledesign/index.scss
new file mode 100644
index 0000000..e6d64bb
--- /dev/null
+++ b/src/views/tabledesign/index.scss
@@ -0,0 +1,7 @@
+.mk-base-design-wrap {
+  .loading-view {
+    position: absolute;
+    left: calc(50vw - 22px);
+    top: calc(30vh + 48px);
+  }
+}
diff --git a/src/views/tabledesign/menuform/index.jsx b/src/views/tabledesign/menuform/index.jsx
new file mode 100644
index 0000000..5e09244
--- /dev/null
+++ b/src/views/tabledesign/menuform/index.jsx
@@ -0,0 +1,175 @@
+import React, {Component} from 'react'
+import PropTypes from 'prop-types'
+import { Form, Row, Col, Input, Select } from 'antd'
+import './index.scss'
+
+const { TextArea } = Input
+
+class MainSearch extends Component {
+  static propTpyes = {
+    menu: PropTypes.object,      // 鑿滃崟淇℃伅
+    inputSubmit: PropTypes.func  // 鍥炶溅鎻愪氦
+  }
+
+  state = {
+    supMenuList: []
+  }
+
+  UNSAFE_componentWillMount () {
+    this.setState({
+      supMenuList: this.props.menu.supMenuList
+    })
+  }
+
+  changeMenu = (val) => {
+    const { menu } = this.state
+
+    let submenu = menu.fstMenuList.filter(item => item.MenuID === val)[0]
+
+    if (submenu) {
+      this.setState({
+        supMenuList: submenu.children
+      }, () => {
+        this.props.form.setFieldsValue({ParentID: submenu.children[0] ? submenu.children[0].MenuID : ''})
+      })
+    } else {
+      this.setState({
+        supMenuList: []
+      }, () => {
+        this.props.form.setFieldsValue({ParentID: ''})
+      })
+    }
+  }
+
+  handleConfirm = () => {
+    // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
+    return new Promise((resolve, reject) => {
+      this.props.form.validateFieldsAndScroll((err, values) => {
+        if (!err) {
+          resolve(values)
+        } else {
+          reject(err)
+        }
+      })
+    })
+  }
+
+  onEnterSubmit = (e) => {
+    // 琛ㄥ崟鍥炶溅鎻愪氦
+    if (e.key !== 'Enter') return
+    
+    this.props.inputSubmit && this.props.inputSubmit()
+  }
+
+  render() {
+    const { getFieldDecorator } = this.props.form
+    const { menu } = this.state
+    const formItemLayout = {
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 8 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      }
+    }
+
+    return (
+      <Form {...formItemLayout} style={{paddingRight: '20px'}} onKeyDown={this.onEnterSubmit}>
+        <Row gutter={24}>
+          <Col span={22}>
+            <Form.Item label={'涓�绾ц彍鍗�'}>
+              {getFieldDecorator('fstMenuId', {
+                initialValue: menu.fstMenuId,
+                rules: [
+                  {
+                    required: true,
+                    message: '璇烽�夋嫨涓婄骇鑿滃崟!'
+                  }
+                ]
+              })(
+                <Select
+                  showSearch
+                  filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
+                  onChange={this.changeMenu}
+                >
+                  {menu.fstMenuList.map(option =>
+                    <Select.Option key={option.MenuID} value={option.MenuID}>{option.text || option.MenuName}</Select.Option>
+                  )}
+                </Select>
+              )}
+            </Form.Item>
+          </Col>
+          <Col span={22}>
+            <Form.Item label={'浜岀骇鑿滃崟'}>
+              {getFieldDecorator('ParentID', {
+                initialValue: menu.ParentId,
+                rules: [
+                  {
+                    required: true,
+                    message: '璇烽�夋嫨涓婄骇鑿滃崟!'
+                  }
+                ]
+              })(
+                <Select
+                  showSearch
+                  filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
+                >
+                  {menu.supMenuList.map(option =>
+                    <Select.Option key={option.MenuID} value={option.MenuID}>{option.text || option.MenuName}</Select.Option>
+                  )}
+                </Select>
+              )}
+            </Form.Item>
+          </Col>
+          <Col span={22}>
+            <Form.Item label={'鑿滃崟鍚嶇О'}>
+              {getFieldDecorator('MenuName', {
+                initialValue: menu.MenuName || '',
+                rules: [
+                  {
+                    required: true,
+                    message: '璇疯緭鍏ヨ彍鍗曞悕绉�!'
+                  }
+                ]
+              })(<Input placeholder="" autoFocus autoComplete="off" />)}
+            </Form.Item>
+          </Col>
+          <Col span={22}>
+            <Form.Item label={'鑿滃崟鍙傛暟'}>
+              {getFieldDecorator('MenuNo', {
+                initialValue: menu.MenuNo || '',
+                rules: [
+                  {
+                    required: true,
+                    message: '璇疯緭鍏ヨ彍鍗曞弬鏁�!'
+                  }
+                ]
+              })(<Input placeholder="" autoComplete="off" />)}
+            </Form.Item>
+          </Col>
+          {menu.Template === 'NewPage' ? <Col span={22}>
+            <Form.Item label={'閾炬帴鍦板潃'}>
+              {getFieldDecorator('url', {
+                initialValue: menu.url || '',
+                rules: [
+                  {
+                    required: true,
+                    message: '璇疯緭鍏ラ〉闈㈠湴鍧�!'
+                  },
+                  {
+                    max: 1024,
+                    message: '鍦板潃鏈�闀夸负1024涓瓧绗�!'
+                  }
+                ]
+              })(<TextArea rows={2} />)}
+            </Form.Item>
+          </Col> : null}
+        </Row>
+      </Form>
+    )
+  }
+}
+
+export default Form.create()(MainSearch)
\ No newline at end of file
diff --git a/src/views/tabledesign/menuform/index.scss b/src/views/tabledesign/menuform/index.scss
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/views/tabledesign/menuform/index.scss

--
Gitblit v1.8.0