From 977e6195d7d6a48769563cf90bfc307fb2ef6f2d Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期二, 14 十一月 2023 22:29:32 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/templates/zshare/modalform/index.jsx                                           |    6 
 src/menu/components/table/edit-table/columns/tableIn/index.jsx                     |    2 
 src/tabviews/custom/components/editor/braft-editor/index.jsx                       |    6 
 src/tabviews/zshare/actionList/popupbutton/index.jsx                               |    8 
 src/menu/components/form/dragtitle/options.jsx                                     |    2 
 src/utils/utils-custom.js                                                          |   65 ++++
 src/menu/components/card/cardcellcomponent/dragaction/action.jsx                   |    2 
 src/tabviews/custom/components/share/normalTable/index.scss                        |    8 
 src/tabviews/zshare/actionList/excelInbutton/index.jsx                             |    8 
 src/menu/components/form/formaction/index.jsx                                      |    2 
 src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx  |    6 
 src/tabviews/zshare/mutilform/mkInput/index.jsx                                    |    2 
 src/tabviews/zshare/mutilform/mkVercode/index.jsx                                  |    4 
 src/tabviews/zshare/mutilform/mkNumberInput/index.jsx                              |    4 
 src/tabviews/zshare/actionList/normalbutton/index.jsx                              |   12 
 src/tabviews/custom/components/table/normal-table/index.scss                       |   13 
 src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx               |    2 
 src/tabviews/custom/components/card/data-card/index.jsx                            |   10 
 src/assets/css/main.scss                                                           |    4 
 src/templates/zshare/verifycard/fullScripts/index.scss                             |    1 
 src/menu/components/form/formaction/formconfig.jsx                                 |   22 +
 src/tabviews/custom/components/card/prop-card/index.jsx                            |    6 
 src/menu/components/card/double-data-card/options.jsx                              |   13 
 src/menu/components/card/cardcellcomponent/index.jsx                               |   43 ++-
 src/menu/components/card/data-card/options.jsx                                     |   13 
 src/menu/components/share/actioncomponent/formconfig.jsx                           |    6 
 src/tabviews/custom/components/table/normal-table/index.jsx                        |   36 +-
 src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx   |    2 
 src/tabviews/zshare/mutilform/mkPopSelect/index.jsx                                |    5 
 src/tabviews/zshare/mutilform/index.jsx                                            |   83 +++++
 src/tabviews/custom/index.jsx                                                      |    4 
 src/templates/sharecomponent/searchcomponent/searchform/index.jsx                  |    4 
 src/tabviews/custom/components/chart/antv-bar-line/index.jsx                       |   12 
 src/tabviews/custom/components/table/base-table/index.jsx                          |   30 +-
 src/tabviews/custom/components/card/double-data-card/index.scss                    |   17 +
 src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx |   11 
 src/templates/sharecomponent/actioncomponent/verifyexcelin/columnform/index.jsx    |    2 
 src/tabviews/custom/components/card/double-data-card/index.jsx                     |   10 
 src/templates/zshare/verifycard/callbackcustomscript/index.jsx                     |   61 ++-
 src/menu/components/form/formaction/actionform/index.jsx                           |   10 
 src/templates/sharecomponent/actioncomponent/verifyexcelin/uniqueform/index.jsx    |    3 
 src/menu/datasource/verifycard/customscript/index.jsx                              |    9 
 src/templates/zshare/verifycard/fullScripts/index.jsx                              |    8 
 src/menu/components/form/simple-form/options.jsx                                   |   10 
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx                            |    8 
 src/menu/components/chart/antv-bar/index.jsx                                       |   11 
 src/tabviews/zshare/mutilform/mkSelect/index.jsx                                   |    5 
 src/tabviews/custom/components/form/simple-form/index.jsx                          |   65 +++
 src/tabviews/custom/components/card/data-card/index.scss                           |   17 +
 src/utils/utils.js                                                                 |   62 ++-
 src/tabviews/custom/components/form/tab-form/index.jsx                             |    6 
 src/tabviews/custom/components/table/base-table/index.scss                         |   13 
 src/templates/zshare/verifycard/index.jsx                                          |   20 +
 src/menu/components/share/actioncomponent/index.jsx                                |    2 
 src/tabviews/custom/components/form/step-form/index.jsx                            |    6 
 src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx        |    8 
 src/utils/option.js                                                                |    7 
 57 files changed, 595 insertions(+), 222 deletions(-)

diff --git a/src/assets/css/main.scss b/src/assets/css/main.scss
index 0bab428..f18da84 100644
--- a/src/assets/css/main.scss
+++ b/src/assets/css/main.scss
@@ -737,6 +737,10 @@
 .ant-col.ant-col-0 {
   display: inline-block;
 }
+.mk-cell-btn.ant-col-0 {
+  width: auto;
+  float: left;
+}
 
 .ant-dropdown {
   .ant-dropdown-menu-item:hover, .ant-dropdown-menu-submenu-title:hover {
diff --git a/src/menu/components/card/cardcellcomponent/dragaction/action.jsx b/src/menu/components/card/cardcellcomponent/dragaction/action.jsx
index 14b00e5..47cdb5d 100644
--- a/src/menu/components/card/cardcellcomponent/dragaction/action.jsx
+++ b/src/menu/components/card/cardcellcomponent/dragaction/action.jsx
@@ -79,7 +79,7 @@
     _style_ = {float: 'right'}
   }
 
-  let className = card.width || ''
+  let className = card.width || 0
   if (card.hidden === 'true') {
     className += ' mk-hidden'
   }
diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx
index 3495c10..aeb7c5c 100644
--- a/src/menu/components/card/cardcellcomponent/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/index.jsx
@@ -311,7 +311,7 @@
       }
     }
 
-    let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, cards.uuid, supId)
+    let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, cards.uuid, supId, true)
 
     if (cards.subtype === 'basetable') {
       this.setState({
@@ -449,21 +449,36 @@
               res.style = {}
             }
           } else if (res.class !== cell.class || res.show !== cell.show || !res.style) {
-            let cl = res.class.replace('border-', '')
-            let style = {}
-            if (res.class === 'default') {
-              style.color = 'rgba(0, 0, 0, 0.65)'
-              style.backgroundColor = '#fff'
-              style.borderColor = '#d9d9d9'
-            } else if (res.class.indexOf('border') > -1) {
-              style.color = color[cl]
-              style.backgroundColor = '#fff'
-              style.borderColor = color[cl]
+            if (res.class) {
+              let cl = res.class.replace('border-', '')
+              let style = {}
+              if (res.class === 'default') {
+                style.color = 'rgba(0, 0, 0, 0.65)'
+                style.backgroundColor = '#fff'
+                style.borderColor = '#d9d9d9'
+              } else if (res.class.indexOf('border') > -1) {
+                style.color = color[cl]
+                style.backgroundColor = '#fff'
+                style.borderColor = color[cl]
+              } else {
+                style.color = '#ffffff'
+                style.backgroundColor = color[cl]
+              }
+              res.style = {...res.style, ...style}
             } else {
-              style.color = '#ffffff'
-              style.backgroundColor = color[cl]
+              res.style = res.style || {}
             }
-            res.style = {...res.style, ...style}
+          }
+
+          if (res.width === 0 && cell.width !== 0) {
+            res.style = res.style || {}
+
+            res.style.paddingLeft = '15px'
+            res.style.paddingRight = '15px'
+            res.style.marginRight = '15px'
+            res.style.width = 'auto'
+
+            delete res.style.marginLeft
           }
 
           res.updateTime = moment().format('YYYY-MM-DD HH:mm')
diff --git a/src/menu/components/card/data-card/options.jsx b/src/menu/components/card/data-card/options.jsx
index 818913d..0c0bf4f 100644
--- a/src/menu/components/card/data-card/options.jsx
+++ b/src/menu/components/card/data-card/options.jsx
@@ -607,6 +607,19 @@
       forbid: !!appType || isprint
     },
     {
+      type: 'radio',
+      field: 'shifting',
+      label: '鎸夐挳鍋忕Щ',
+      initval: wrap.shifting || 'false',
+      tooltip: '鍚敤鏃讹紝宸ュ叿鏍忔寜閽皢鏄剧ず鍦ㄦ爣棰樻爮鍙充笂瑙掋��',
+      required: false,
+      options: [
+        {value: 'true', label: '鍚敤'},
+        {value: 'false', label: '绂佺敤'},
+      ],
+      forbid: !!appType || subtype !== 'datacard' || isprint
+    },
+    {
       type: 'multiselect',
       field: 'blacklist',
       label: '榛戝悕鍗�',
diff --git a/src/menu/components/card/double-data-card/options.jsx b/src/menu/components/card/double-data-card/options.jsx
index 1941d17..942b421 100644
--- a/src/menu/components/card/double-data-card/options.jsx
+++ b/src/menu/components/card/double-data-card/options.jsx
@@ -251,6 +251,19 @@
       forbid: !!appType || isprint
     },
     {
+      type: 'radio',
+      field: 'shifting',
+      label: '鎸夐挳鍋忕Щ',
+      initval: wrap.shifting || 'false',
+      tooltip: '鍚敤鏃讹紝宸ュ叿鏍忔寜閽皢鏄剧ず鍦ㄦ爣棰樻爮鍙充笂瑙掋��',
+      required: false,
+      options: [
+        {value: 'true', label: '鍚敤'},
+        {value: 'false', label: '绂佺敤'},
+      ],
+      forbid: !!appType || isprint
+    },
+    {
       type: 'multiselect',
       field: 'blacklist',
       label: '榛戝悕鍗�',
diff --git a/src/menu/components/chart/antv-bar/index.jsx b/src/menu/components/chart/antv-bar/index.jsx
index 332e3ab..ad556b3 100644
--- a/src/menu/components/chart/antv-bar/index.jsx
+++ b/src/menu/components/chart/antv-bar/index.jsx
@@ -550,7 +550,8 @@
       })
     }
 
-    if (!plot.legend || plot.legend === 'hidden') {
+    let noLegend = !plot.legend || plot.legend === 'hidden'
+    if (noLegend) {
       chart.legend(false)
     } else {
       chart.legend({
@@ -643,7 +644,9 @@
       }
       view1.axis('value', yc)
   
-      // view1.legend(false)
+      if (!noLegend) {
+        view1.legend(false)
+      }
   
       if (plot.mutilBar !== 'stack') {
         let _chart = view1
@@ -770,7 +773,9 @@
 
     view2.data(dv.rows)
 
-    // view2.legend(false)
+    if (!noLegend) {
+      view2.legend(false)
+    }
 
     fields.forEach(item => {
       if (item.chartType === 'bar' && !Bar_axis.length) {
diff --git a/src/menu/components/form/dragtitle/options.jsx b/src/menu/components/form/dragtitle/options.jsx
index 5ffecf1..485faea 100644
--- a/src/menu/components/form/dragtitle/options.jsx
+++ b/src/menu/components/form/dragtitle/options.jsx
@@ -51,7 +51,7 @@
     {
       type: 'select',
       field: 'focus',
-      label: '鐒︾偣',
+      label: '鍒濆鐒︾偣',
       initval: group.setting.focus || '',
       required: false,
       options: fields
diff --git a/src/menu/components/form/formaction/actionform/index.jsx b/src/menu/components/form/formaction/actionform/index.jsx
index 41ed2a2..69ca082 100644
--- a/src/menu/components/form/formaction/actionform/index.jsx
+++ b/src/menu/components/form/formaction/actionform/index.jsx
@@ -58,9 +58,11 @@
       shows = ['typeName', 'label']
     } else {
       shows = ['typeName', 'label', 'intertype', 'Ot', 'execSuccess', 'syncComponent', 'anchors', 'linkmenu', 'output', 'reload', 'preButton'] // 閫夐」鍒楄〃
-      
+
+      if (this.record.execSuccess === 'never') {
+        shows.push('resetForms')
+      }
       if (this.record.intertype === 'custom') {
-        shows.pop()
         shows.push('procMode', 'interface', 'callbackType', 'proInterface', 'method', 'cross', 'stringify', 'ContentType', 'outerBlacklist')
         if (this.record.procMode === 'system') {
           shows.push('sql', 'sqlType')
@@ -282,6 +284,7 @@
               })(
                 <Select
                   showSearch
+                  mode={item.mode || ''}
                   filterOption={(input, option) => option.props.children.toLowerCase().indexOf(input.toLowerCase()) >= 0}
                   onChange={(value) => {this.optionChange(item.key, value)}}
                   getPopupContainer={() => document.getElementById('winter')}
@@ -380,6 +383,9 @@
           if (values.outerBlacklist) {
             values.outerBlacklist = values.outerBlacklist.replace(/\s/ig, '')
           }
+          if (values.resetForms && values.resetForms.length === 0) {
+            values.resetForms = null
+          }
           resolve(values)
         } else {
           reject(err)
diff --git a/src/menu/components/form/formaction/formconfig.jsx b/src/menu/components/form/formaction/formconfig.jsx
index 978be6e..f6800ae 100644
--- a/src/menu/components/form/formaction/formconfig.jsx
+++ b/src/menu/components/form/formaction/formconfig.jsx
@@ -4,7 +4,7 @@
  * @param {*} type           鎸夐挳绫诲瀷锛岀敤浜庡尯鍒嗗彲閫夌殑鎵撳紑鏂瑰紡
  */
 
-export function getActionForm (card, functip, tableName, usefulFields, modules, anchors, uuid) {
+export function getActionForm (card, functip, tableName, usefulFields, modules, anchors, uuid, fields) {
   const appType = sessionStorage.getItem('appType')
   let viewType = sessionStorage.getItem('editMenuType') // 寮圭獥 popview
   let _type = '鎻愪氦'
@@ -122,6 +122,16 @@
       text: '鍒锋柊婧愮粍浠�'
     })
   }
+
+  let resets = []
+  fields.forEach(item => {
+    if (item.type !== 'text' && item.type !== 'number') return
+
+    resets.push({
+      value: item.field,
+      text: item.label
+    })
+  })
 
   return [
     {
@@ -476,6 +486,16 @@
       options: linkButtons
     },
     {
+      type: 'select',
+      key: 'resetForms',
+      label: '閲嶇疆琛ㄥ崟',
+      tooltip: '鎸夐挳鎵ц鎴愬姛鍚庨渶瑕侀噸缃殑琛ㄥ崟锛岃〃鍗曚細鎭㈠榛樿鍊煎苟鑱氱劍銆�',
+      initVal: card.resetForms || [],
+      required: false,
+      mode: 'multiple',
+      options: resets
+    },
+    {
       type: 'radio',
       key: 'reload',
       label: '涓婁竴椤�',
diff --git a/src/menu/components/form/formaction/index.jsx b/src/menu/components/form/formaction/index.jsx
index f1f8127..dc697e0 100644
--- a/src/menu/components/form/formaction/index.jsx
+++ b/src/menu/components/form/formaction/index.jsx
@@ -110,7 +110,7 @@
     this.setState({
       visible: true,
       card: card,
-      formlist: getActionForm(card, functip, config.setting.tableName, usefulFields, modules, anchors, group.uuid)
+      formlist: getActionForm(card, functip, config.setting.tableName, usefulFields, modules, anchors, group.uuid, group.fields)
     })
   }
 
diff --git a/src/menu/components/form/simple-form/options.jsx b/src/menu/components/form/simple-form/options.jsx
index 04b22fb..b9108ff 100644
--- a/src/menu/components/form/simple-form/options.jsx
+++ b/src/menu/components/form/simple-form/options.jsx
@@ -125,12 +125,20 @@
     {
       type: 'select',
       field: 'focus',
-      label: '鐒︾偣',
+      label: '鍒濆鐒︾偣',
       initval: wrap.focus || '',
       required: false,
       options: fields
     },
     {
+      type: 'select',
+      field: 'refocus',
+      label: '鍒锋柊鐒︾偣',
+      initval: wrap.refocus || '',
+      required: false,
+      options: fields
+    },
+    {
       type: 'radio',
       field: 'cache',
       label: '閫夐」鏌ヨ',
diff --git a/src/menu/components/share/actioncomponent/formconfig.jsx b/src/menu/components/share/actioncomponent/formconfig.jsx
index 7456bc4..a785c1e 100644
--- a/src/menu/components/share/actioncomponent/formconfig.jsx
+++ b/src/menu/components/share/actioncomponent/formconfig.jsx
@@ -753,12 +753,12 @@
     {
       type: 'number',
       key: 'width',
-      min: 1,
+      min: 0,
       max: 24,
       precision: 0,
       label: '瀹藉害',
-      initVal: card.width || 12,
-      tooltip: '鏍呮牸甯冨眬锛屾瘡琛岀瓑鍒嗕负24鍒椼��',
+      initVal: card.width || (card.width === 0 ? 0 : 12),
+      tooltip: '鏍呮牸甯冨眬锛屾瘡琛岀瓑鍒嗕负24鍒椼�備负 0 鏃跺搴﹁嚜閫傚簲銆�',
       forbid: type !== 'card',
       required: true
     },
diff --git a/src/menu/components/share/actioncomponent/index.jsx b/src/menu/components/share/actioncomponent/index.jsx
index e33d65e..0109542 100644
--- a/src/menu/components/share/actioncomponent/index.jsx
+++ b/src/menu/components/share/actioncomponent/index.jsx
@@ -207,7 +207,7 @@
       }
     }
     
-    let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, config.uuid, supId)
+    let modules = MenuUtils.getSubModules(window.GLOB.customMenu.components, config.uuid, supId, config.subtype !== 'basetable')
 
     if (config.subtype === 'basetable') {
       delete card.eleType // 鍖哄垎鎸夐挳浣嶇疆
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 ed62fd1..acfbe1f 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
@@ -6,7 +6,7 @@
 import Api from '@/api'
 import { checkSQL } from '@/utils/utils-custom.js'
 import CodeMirror from '@/templates/zshare/codemirror'
-import './index.scss'
+// import './index.scss'
 
 class CustomForm extends Component {
   static propTpyes = {
@@ -316,7 +316,7 @@
               </Select>
             </Form.Item>
           </Col> : null}
-          <Col span={5} style={{paddingTop: '3px', whiteSpace: 'nowrap'}}>
+          <Col span={5} className="add" style={{paddingTop: '3px', whiteSpace: 'nowrap'}}>
             <Button onClick={this.handleConfirm} loading={this.state.loading} className="mk-green" style={{marginBottom: 15, marginLeft: 15}}>
               {type === 'fullscreen' && !editItem ? '娣诲姞' : '淇濆瓨'}
             </Button>
@@ -324,10 +324,10 @@
               鍙栨秷
             </Button>
           </Col>
-          <Col span={3} style={{paddingTop: '12px', fontSize: '12px', whiteSpace: 'nowrap'}}>
+          {!type ? <Col span={3} style={{paddingTop: '12px', fontSize: '12px', whiteSpace: 'nowrap'}}>
             寮哄埗淇濆瓨锛�
             <Switch checked={skip} size="small" onChange={() => this.setState({skip: !skip})}/>
-          </Col>
+          </Col> : null}
           <Col span={24} className="sql">
             <Form.Item label="sql">
               {getFieldDecorator('sql', {
diff --git a/src/menu/components/table/edit-table/columns/tableIn/index.jsx b/src/menu/components/table/edit-table/columns/tableIn/index.jsx
index ff8d86f..5908fa2 100644
--- a/src/menu/components/table/edit-table/columns/tableIn/index.jsx
+++ b/src/menu/components/table/edit-table/columns/tableIn/index.jsx
@@ -616,7 +616,7 @@
             </span>
           } key="scripts">
             <FullScripts
-              verify={verify}
+              scripts={verify.scripts}
               getScriptsFullForm={() => this.scriptsFullForm}
               getScriptsForm={() => this.scriptsForm}
               handleStatus={this.handleStatus}
diff --git a/src/menu/datasource/verifycard/customscript/index.jsx b/src/menu/datasource/verifycard/customscript/index.jsx
index e1f4766..a9c6aef 100644
--- a/src/menu/datasource/verifycard/customscript/index.jsx
+++ b/src/menu/datasource/verifycard/customscript/index.jsx
@@ -45,9 +45,16 @@
   getSearchField = (searches) => {
     let _usefulFields = []
     searches.forEach(item => {
-      if (['dateweek', 'datemonth'].includes(item.type)) {
+      if (item.type === 'dateweek') {
         _usefulFields.push(item.key)
         _usefulFields.push(item.key + '1')
+      } else if (item.type === 'datemonth') {
+        if (item.match === '=') {
+          _usefulFields.push(item.key)
+        } else {
+          _usefulFields.push(item.key)
+          _usefulFields.push(item.key + '1')
+        }
       } else if (item.type === 'daterange') {
         let _skey = item.key
         let _ekey = item.key + '1'
diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx
index 55ada26..1e3d074 100644
--- a/src/tabviews/custom/components/card/data-card/index.jsx
+++ b/src/tabviews/custom/components/card/data-card/index.jsx
@@ -38,7 +38,7 @@
     loading: false,
     card: null,
     data: [],
-    total: null,
+    total: 0,
     precards: [],
     nextcards: [],
     selected: 'false',
@@ -135,6 +135,12 @@
     _config.wrap.layout = (_config.wrap.layout || 'grid') + '-layout float-' + (_config.wrap.cardFloat || 'left')
 
     _config.wrap.wrapClass = `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${_config.wrap.scale}`
+
+    if (_config.wrap.shifting === 'true') {
+      _config.wrap.shifting = 'shifting'
+    } else {
+      _config.wrap.shifting = ''
+    }
 
     let pageOptions = ['10', '25', '50', '100', '500', '1000']
 
@@ -1178,7 +1184,7 @@
     }
 
     return (
-      <div className="custom-data-card-box" id={'anchor' + config.uuid} style={config.style}>
+      <div className={'custom-data-card-box ' + config.wrap.shifting} id={'anchor' + config.uuid} style={config.style}>
         {loading ?
           <div className="loading-mask">
             {data.length ? <div className="ant-spin-blur"></div> : null}
diff --git a/src/tabviews/custom/components/card/data-card/index.scss b/src/tabviews/custom/components/card/data-card/index.scss
index e56de99..b2def5d 100644
--- a/src/tabviews/custom/components/card/data-card/index.scss
+++ b/src/tabviews/custom/components/card/data-card/index.scss
@@ -251,6 +251,23 @@
     }
   }
 }
+.custom-data-card-box.shifting {
+  .normal-header:not(.header-search) + .toolbar-button {
+    position: absolute;
+    top: 0px;
+    right: 0px;
+    z-index: 1;
+    button {
+      margin-bottom: 0px!important;
+    }
+  }
+  .normal-header:not(.header-search) + .toolbar-button + .pickup-wrap{
+    position: relative;
+    button {
+      position: relative;
+    }
+  }
+}
 .custom-data-card-box::-webkit-scrollbar {
   width: 7px;
   height: 7px;
diff --git a/src/tabviews/custom/components/card/double-data-card/index.jsx b/src/tabviews/custom/components/card/double-data-card/index.jsx
index a7f73d6..e65fe19 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.jsx
+++ b/src/tabviews/custom/components/card/double-data-card/index.jsx
@@ -36,7 +36,7 @@
     loading: false,            // 鏁版嵁鍔犺浇鐘舵��
     card: null,                // 鍗$墖璁剧疆
     data: [],                // 鏁版嵁
-    total: null,
+    total: 0,
     precards: [],
     nextcards: [],
     selected: 'false',
@@ -129,6 +129,12 @@
 
     _config.wrap.wrapClass =  `${_config.wrap.selStyle} ${_config.wrap.cardType || ''}`
 
+    if (_config.wrap.shifting === 'true') {
+      _config.wrap.shifting = 'shifting'
+    } else {
+      _config.wrap.shifting = ''
+    }
+    
     let wrapStyle = null
     let subcard = fromJS(_card).toJS()
     let subconfig = fromJS(_config).toJS()
@@ -1135,7 +1141,7 @@
     }
 
     return (
-      <div className="double-data-card-box" id={'anchor' + config.uuid} style={config.style}>
+      <div className={'double-data-card-box ' + config.wrap.shifting} id={'anchor' + config.uuid} style={config.style}>
         {loading ?
           <div className="loading-mask">
             {data.length ? <div className="ant-spin-blur"></div> : null}
diff --git a/src/tabviews/custom/components/card/double-data-card/index.scss b/src/tabviews/custom/components/card/double-data-card/index.scss
index bb3872a..4d27218 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.scss
+++ b/src/tabviews/custom/components/card/double-data-card/index.scss
@@ -305,6 +305,23 @@
     background: rgba(0, 0, 0, 0);
   }
 }
+.double-data-card-box.shifting {
+  .normal-header:not(.header-search) + .toolbar-button {
+    position: absolute;
+    top: 0px;
+    right: 0px;
+    z-index: 1;
+    button {
+      margin-bottom: 0px!important;
+    }
+  }
+  .normal-header:not(.header-search) + .toolbar-button + .pickup-wrap{
+    position: relative;
+    button {
+      position: relative;
+    }
+  }
+}
 .double-data-card-box::-webkit-scrollbar {
   width: 7px;
   height: 7px;
diff --git a/src/tabviews/custom/components/card/prop-card/index.jsx b/src/tabviews/custom/components/card/prop-card/index.jsx
index c4d2b1c..93ab97e 100644
--- a/src/tabviews/custom/components/card/prop-card/index.jsx
+++ b/src/tabviews/custom/components/card/prop-card/index.jsx
@@ -131,16 +131,14 @@
     MKEmitter.addListener('queryModuleParam', this.queryModuleParam)
     MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
 
-    if (config.setting.useMSearch) {
-      MKEmitter.addListener('searchRefresh', this.searchRefresh)
-    }
-
     if (config.setting.sync === 'true') {
       MKEmitter.addListener('transferSyncData', this.transferSyncData)
     }
 
     if (config.wrap.datatype === 'public') {
       MKEmitter.addListener('mkPublicData', this.mkPublicData)
+    } else if (config.setting.useMSearch) {
+      MKEmitter.addListener('searchRefresh', this.searchRefresh)
     }
 
     if (config.timer && config.wrap.datatype === 'dynamic') {
diff --git a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
index 46c4260..cfe93bc 100644
--- a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
@@ -1187,7 +1187,8 @@
       })
     }
 
-    if (!plot.legend || plot.legend === 'hidden') {
+    let noLegend = !plot.legend || plot.legend === 'hidden'
+    if (noLegend) {
       chart.legend(false)
     } else {
       chart.legend({
@@ -1273,7 +1274,9 @@
       view1.scale('value', c)
       view1.axis('value', plot.$yc)
   
-      // view1.legend(false)
+      if (!noLegend) {
+        view1.legend(false)
+      }
 
       let colorIndex = 0
   
@@ -1407,7 +1410,10 @@
     }
 
     view2.data(dv.rows)
-    // view2.legend(false)
+
+    if (!noLegend) {
+      view2.legend(false)
+    }
 
     plot.customs.forEach(item => {
       if (item.chartType === 'bar' && !plot.Bar_axis) {
diff --git a/src/tabviews/custom/components/editor/braft-editor/index.jsx b/src/tabviews/custom/components/editor/braft-editor/index.jsx
index 163424a..ccb80cd 100644
--- a/src/tabviews/custom/components/editor/braft-editor/index.jsx
+++ b/src/tabviews/custom/components/editor/braft-editor/index.jsx
@@ -72,16 +72,14 @@
     MKEmitter.addListener('reloadData', this.reloadData)
     MKEmitter.addListener('resetSelectLine', this.resetParentParam)
 
-    if (config.setting.useMSearch) {
-      MKEmitter.addListener('searchRefresh', this.searchRefresh)
-    }
-
     if (config.setting.sync === 'true') {
       MKEmitter.addListener('transferSyncData', this.transferSyncData)
     }
 
     if (config.wrap.datatype === 'public') {
       MKEmitter.addListener('mkPublicData', this.mkPublicData)
+    } else if (config.setting.useMSearch) {
+      MKEmitter.addListener('searchRefresh', this.searchRefresh)
     }
 
     this.initExec()
diff --git a/src/tabviews/custom/components/form/simple-form/index.jsx b/src/tabviews/custom/components/form/simple-form/index.jsx
index 3a87da3..ebb2f97 100644
--- a/src/tabviews/custom/components/form/simple-form/index.jsx
+++ b/src/tabviews/custom/components/form/simple-form/index.jsx
@@ -92,16 +92,14 @@
     MKEmitter.addListener('resetSelectLine', this.resetParentParam)
     MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
 
-    if (config.setting.useMSearch) {
-      MKEmitter.addListener('searchRefresh', this.searchRefresh)
-    }
-
     if (config.setting.sync === 'true') {
       MKEmitter.addListener('transferSyncData', this.transferSyncData)
     }
 
     if (config.wrap.datatype === 'public') {
       MKEmitter.addListener('mkPublicData', this.mkPublicData)
+    } else if (config.setting.useMSearch) {
+      MKEmitter.addListener('searchRefresh', this.searchRefresh)
     }
 
     this.initExec()
@@ -178,11 +176,39 @@
   }
 
   reloadData = (menuId, id) => {
-    const { config } = this.state
+    const { config, group } = this.state
 
     if (config.uuid !== menuId) return
 
-    this.loadData()
+    if (id === 'focus-refresh' && config.wrap.refocus) {
+      let _group = fromJS(group).toJS()
+      _group.setting.focus = config.wrap.refocus
+
+      if (config.wrap.datatype === 'static') {
+        this.setState({
+          data: null,
+          group: _group
+        }, () => {
+          this.setState({data: {$$empty: true}})
+        })
+      } else {
+        this.setState({
+          group: _group
+        }, () => {
+          this.loadData(true)
+        })
+      }
+    } else if (id === 'focus-nofresh' && config.wrap.refocus) {
+      let formId = ''
+      group.fields.forEach(item => {
+        if (item.field === config.wrap.refocus) {
+          formId = item.uuid
+        }
+      })
+      MKEmitter.emit('mkFC', 'focus', formId)
+    } else {
+      this.loadData()
+    }
   }
 
   /**
@@ -199,6 +225,14 @@
     if ((position === 'mainline' || position === 'popclose') && config.setting.supModule && BID) {
       MKEmitter.emit('reloadData', config.setting.supModule, BID)
     } else if (position === 'grid' && config.wrap.datatype === 'static') {
+      if (config.wrap.refocus && group.setting.focus === config.wrap.refocus) {
+        let _group = fromJS(group).toJS()
+        _group.setting.focus = config.wrap.focus
+  
+        this.setState({
+          group: _group
+        })
+      }
       this.setState({
         data: null
       }, () => {
@@ -255,8 +289,17 @@
     }
   }
 
-  async loadData () {
-    const { config, BID } = this.state
+  async loadData (refocus) {
+    const { config, BID, group } = this.state
+
+    if (config.wrap.refocus && !refocus && group.setting.focus === config.wrap.refocus) {
+      let _group = fromJS(group).toJS()
+      _group.setting.focus = config.wrap.focus
+
+      this.setState({
+        group: _group
+      })
+    }
 
     if (config.wrap.datatype === 'public') {
       MKEmitter.emit('reloadData', config.wrap.publicId)
@@ -340,12 +383,12 @@
     }
   }
 
-  mkFormSubmit = (btnId, callback) => {
+  mkFormSubmit = (btnId, callback, formId) => {
     const { group } = this.state
 
     if (group.uuid !== btnId) return
 
-    this.formRef.handleConfirm().then(res => {
+    this.formRef.handleConfirm(formId).then(res => {
       MKEmitter.emit('triggerFormSubmit', {menuId: btnId, form: res})
     }, () => {
       callback && callback()
@@ -389,7 +432,7 @@
           data={data}
           action={group}
           unload={config.setting.supModule && !BID}
-          inputSubmit={() => this.mkFormSubmit(group.uuid)}
+          inputSubmit={(id) => this.mkFormSubmit(group.uuid, null, id)}
           wrappedComponentRef={(inst) => this.formRef = inst}
         /> : null}
         {data ? <div className={'mk-form-action ' + (group.$button || '')}>
diff --git a/src/tabviews/custom/components/form/step-form/index.jsx b/src/tabviews/custom/components/form/step-form/index.jsx
index dca74c9..442829d 100644
--- a/src/tabviews/custom/components/form/step-form/index.jsx
+++ b/src/tabviews/custom/components/form/step-form/index.jsx
@@ -133,16 +133,14 @@
     MKEmitter.addListener('resetSelectLine', this.resetParentParam)
     MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
 
-    if (config.setting.useMSearch) {
-      MKEmitter.addListener('searchRefresh', this.searchRefresh)
-    }
-
     if (config.setting.sync === 'true') {
       MKEmitter.addListener('transferSyncData', this.transferSyncData)
     }
 
     if (config.wrap.datatype === 'public') {
       MKEmitter.addListener('mkPublicData', this.mkPublicData)
+    } else if (config.setting.useMSearch) {
+      MKEmitter.addListener('searchRefresh', this.searchRefresh)
     }
 
     this.initExec()
diff --git a/src/tabviews/custom/components/form/tab-form/index.jsx b/src/tabviews/custom/components/form/tab-form/index.jsx
index 6e921bb..7dd140a 100644
--- a/src/tabviews/custom/components/form/tab-form/index.jsx
+++ b/src/tabviews/custom/components/form/tab-form/index.jsx
@@ -107,16 +107,14 @@
     MKEmitter.addListener('resetSelectLine', this.resetParentParam)
     MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
 
-    if (config.setting.useMSearch) {
-      MKEmitter.addListener('searchRefresh', this.searchRefresh)
-    }
-
     if (config.setting.sync === 'true') {
       MKEmitter.addListener('transferSyncData', this.transferSyncData)
     }
 
     if (config.wrap.datatype === 'public') {
       MKEmitter.addListener('mkPublicData', this.mkPublicData)
+    } else if (config.setting.useMSearch) {
+      MKEmitter.addListener('searchRefresh', this.searchRefresh)
     }
 
     this.initExec()
diff --git a/src/tabviews/custom/components/share/normalTable/index.scss b/src/tabviews/custom/components/share/normalTable/index.scss
index 12ad8fd..3bf6756 100644
--- a/src/tabviews/custom/components/share/normalTable/index.scss
+++ b/src/tabviews/custom/components/share/normalTable/index.scss
@@ -1,11 +1,19 @@
 .normal-custom-table {
   position: relative;
   padding: 0px;
+  min-height: 40px;
   --mk-table-border-color: #e8e8e8;
   --mk-table-color: rgba(0, 0, 0, 0.65);
   --mk-table-font-size: 14px;
   --mk-table-font-weight: normal;
 
+  .main-pickup {
+    position: absolute;
+    right: 5px;
+    top: -22px;
+    z-index: 2;
+  }
+  
   .normal-table-footer {
     padding: 10px 0px;
     color: rgba(0, 0, 0, 0.65);
diff --git a/src/tabviews/custom/components/table/base-table/index.jsx b/src/tabviews/custom/components/table/base-table/index.jsx
index 538a792..0693483 100644
--- a/src/tabviews/custom/components/table/base-table/index.jsx
+++ b/src/tabviews/custom/components/table/base-table/index.jsx
@@ -653,22 +653,20 @@
           columns={config.columns}
           selectedData={selectedData}
         /> : <div style={{height: '25px'}}></div>}
-        <div className="main-table-box">
-          <MainTable
-            data={data}
-            setting={setting}
-            columns={columns}
-            MenuID={config.uuid}
-            fields={config.columns}
-            total={this.state.total}
-            autoMatic={config.autoMatic}
-            lineMarks={config.lineMarks}
-            loading={this.state.loading}
-            refreshdata={this.refreshbytable}
-            statFValue={this.state.statFValue}
-            chgSelectData={(selects) => this.setState({selectedData: selects})}
-          />
-        </div>
+        <MainTable
+          data={data}
+          setting={setting}
+          columns={columns}
+          MenuID={config.uuid}
+          fields={config.columns}
+          total={this.state.total}
+          autoMatic={config.autoMatic}
+          lineMarks={config.lineMarks}
+          loading={this.state.loading}
+          refreshdata={this.refreshbytable}
+          statFValue={this.state.statFValue}
+          chgSelectData={(selects) => this.setState({selectedData: selects})}
+        />
       </div>
     )
   }
diff --git a/src/tabviews/custom/components/table/base-table/index.scss b/src/tabviews/custom/components/table/base-table/index.scss
index bc4f7bc..b04c6bc 100644
--- a/src/tabviews/custom/components/table/base-table/index.scss
+++ b/src/tabviews/custom/components/table/base-table/index.scss
@@ -12,17 +12,4 @@
   .button-list.toolbar-button {
     padding-right: 60px;
   }
-  .main-table-box {
-    position: relative;
-    min-height: 40px;
-    .main-pickup {
-      position: absolute;
-      right: 5px;
-      top: -22px;
-      z-index: 2;
-    }
-    >.async-spin {
-      line-height: 150px!important;
-    }
-  }
 }
\ No newline at end of file
diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx
index 136a42c..a1492a3 100644
--- a/src/tabviews/custom/components/table/normal-table/index.jsx
+++ b/src/tabviews/custom/components/table/normal-table/index.jsx
@@ -835,7 +835,7 @@
     }
 
     let content = <>
-      {config.search && config.search.length ?
+      {config.search.length ?
         <MainSearch BID={BID} config={config} refreshdata={this.refreshbysearch}/> : null
       }
       {actions.length > 0 ? <MainAction
@@ -845,24 +845,22 @@
         BData={BData}
         columns={config.columns}
         selectedData={selectedData}
-      /> : <div className="mk-action-space" style={{height: '25px'}}></div>}
-      <div className={'main-table-box ' + (!actions || actions.length === 0 ? 'no-action' : '')}>
-        <MainTable
-          setting={setting}
-          columns={columns}
-          MenuID={config.uuid}
-          allSearch={allSearch}
-          data={this.state.data}
-          fields={config.columns}
-          total={this.state.total}
-          colsCtrls={config.colsCtrls}
-          lineMarks={config.lineMarks}
-          loading={this.state.loading}
-          refreshdata={this.refreshbytable}
-          statFValue={this.state.statFValue}
-          chgSelectData={(selects) => this.setState({selectedData: selects})}
-        />
-      </div>
+      /> : (setting.tableType || config.search.length > 0 ? <div className="mk-action-space" style={{height: '25px'}}></div> : null)}
+      <MainTable
+        setting={setting}
+        columns={columns}
+        MenuID={config.uuid}
+        allSearch={allSearch}
+        data={this.state.data}
+        fields={config.columns}
+        total={this.state.total}
+        colsCtrls={config.colsCtrls}
+        lineMarks={config.lineMarks}
+        loading={this.state.loading}
+        refreshdata={this.refreshbytable}
+        statFValue={this.state.statFValue}
+        chgSelectData={(selects) => this.setState({selectedData: selects})}
+      />
     </>
 
     return (
diff --git a/src/tabviews/custom/components/table/normal-table/index.scss b/src/tabviews/custom/components/table/normal-table/index.scss
index 5f5f0da..30ecedf 100644
--- a/src/tabviews/custom/components/table/normal-table/index.scss
+++ b/src/tabviews/custom/components/table/normal-table/index.scss
@@ -12,19 +12,6 @@
   .button-list.toolbar-button {
     padding-right: 60px;
   }
-  .main-table-box {
-    position: relative;
-    min-height: 40px;
-    .main-pickup {
-      position: absolute;
-      right: 5px;
-      top: -22px;
-      z-index: 2;
-    }
-    >.async-spin {
-      line-height: 150px!important;
-    }
-  }
   .ant-collapse {
     background-color: transparent;
     border-radius: 0px;
diff --git a/src/tabviews/custom/index.jsx b/src/tabviews/custom/index.jsx
index 0bfd2d0..6e6ddab 100644
--- a/src/tabviews/custom/index.jsx
+++ b/src/tabviews/custom/index.jsx
@@ -554,6 +554,7 @@
             item.wrap.datatype = 'static'
           } else {
             item.setting = {...inter.setting}
+            item.$searchId = inter.$searchId
           }
         }
       }
@@ -1050,9 +1051,6 @@
         component.components = this.formatSetting(component.components, params, null, regs, balMap)
         return component
       } else if (component.wrap && component.wrap.datatype === 'public') {
-        component.setting.useMSearch = false
-        component.setting.sync = 'false'
-
         return component
       } else if (component.wrap && component.wrap.datatype === 'static') {
         component.format = ''
diff --git a/src/tabviews/zshare/actionList/excelInbutton/index.jsx b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
index 02b4f08..df4b7d4 100644
--- a/src/tabviews/zshare/actionList/excelInbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -199,9 +199,15 @@
       if (btn.syncComponentId === 'multiComponent') {
         btn.syncComponentIds.forEach((id, i) => {
           setTimeout(() => {
-            MKEmitter.emit('reloadData', id)
+            if (/\$focus/.test(id)) {
+              MKEmitter.emit('reloadData', id.split('$')[0], id.split('$')[1])
+            } else {
+              MKEmitter.emit('reloadData', id)
+            }
           }, 20 * i)
         })
+      } else if (/\$focus/.test(btn.syncComponentId)) {
+        MKEmitter.emit('reloadData', btn.syncComponentId.split('$')[0], btn.syncComponentId.split('$')[1])
       } else {
         MKEmitter.emit('reloadData', btn.syncComponentId)
       }
diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index 7e032ca..1667d62 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -891,9 +891,15 @@
       if (btn.syncComponentId === 'multiComponent') {
         btn.syncComponentIds.forEach((id, i) => {
           setTimeout(() => {
-            MKEmitter.emit('reloadData', id)
+            if (/\$focus/.test(id)) {
+              MKEmitter.emit('reloadData', id.split('$')[0], id.split('$')[1])
+            } else {
+              MKEmitter.emit('reloadData', id)
+            }
           }, 20 * i)
         })
+      } else if (/\$focus/.test(btn.syncComponentId)) {
+        MKEmitter.emit('reloadData', btn.syncComponentId.split('$')[0], btn.syncComponentId.split('$')[1])
       } else {
         MKEmitter.emit('reloadData', btn.syncComponentId)
       }
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index 9de05d4..d6c0450 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -2176,6 +2176,10 @@
     const { btn } = this.props
     const { autoMatic } = this.state
 
+    if (btn.resetForms) {
+      MKEmitter.emit('resetForms', btn.uuid)
+    }
+
     if (this.preCallback) {
       this.setState({
         loading: false,
@@ -2294,9 +2298,15 @@
       if (btn.syncComponentId === 'multiComponent') {
         btn.syncComponentIds.forEach((id, i) => {
           setTimeout(() => {
-            MKEmitter.emit('reloadData', id)
+            if (/\$focus/.test(id)) {
+              MKEmitter.emit('reloadData', id.split('$')[0], id.split('$')[1])
+            } else {
+              MKEmitter.emit('reloadData', id)
+            }
           }, 20 * i)
         })
+      } else if (/\$focus/.test(btn.syncComponentId)) {
+        MKEmitter.emit('reloadData', btn.syncComponentId.split('$')[0], btn.syncComponentId.split('$')[1])
       } else {
         MKEmitter.emit('reloadData', btn.syncComponentId)
       }
diff --git a/src/tabviews/zshare/actionList/popupbutton/index.jsx b/src/tabviews/zshare/actionList/popupbutton/index.jsx
index 5153d82..a92a711 100644
--- a/src/tabviews/zshare/actionList/popupbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -215,9 +215,15 @@
       if (btn.syncComponentId === 'multiComponent') {
         btn.syncComponentIds.forEach((id, i) => {
           setTimeout(() => {
-            MKEmitter.emit('reloadData', id)
+            if (/\$focus/.test(id)) {
+              MKEmitter.emit('reloadData', id.split('$')[0], id.split('$')[1])
+            } else {
+              MKEmitter.emit('reloadData', id)
+            }
           }, 20 * i)
         })
+      } else if (/\$focus/.test(btn.syncComponentId)) {
+        MKEmitter.emit('reloadData', btn.syncComponentId.split('$')[0], btn.syncComponentId.split('$')[1])
       } else {
         MKEmitter.emit('reloadData', btn.syncComponentId)
       }
diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx
index 6c41ab4..7902af2 100644
--- a/src/tabviews/zshare/mutilform/index.jsx
+++ b/src/tabviews/zshare/mutilform/index.jsx
@@ -46,10 +46,12 @@
     ID: '',
     send_type: '',
     timestamp: '',
-    n_id: ''
+    n_id: '',
+    focusId: ''
   }
 
   record = {}
+  submitId = ''
 
   componentDidMount () {
     const { action, unload } = this.props
@@ -279,7 +281,7 @@
       }
 
       if (item.type === 'number') {
-        if (isNaN(item.initval)) {
+        if (isNaN(item.initval) || item.initval === '') {
           item.initval = 0
         }
       } else if (['select', 'link', 'radio', 'checkbox', 'checkcard', 'multiselect', 'cascader'].includes(item.type) && item.resourceType === '1') {
@@ -634,17 +636,19 @@
       }
 
       record[item.field] = item.initval
+      item.orgval = item.initval
 
       if (linkFields[item.field]) {
         item.linkFields = linkFields[item.field]
       }
       
       if (item.enter === 'tab' || item.enter === 'sub') {
-        if (fieldMap.has(item.tabField)) {
+        item.tabUuid = ''
+        if (item.tabField && fieldMap.has(item.tabField)) {
           item.tabUuid = fieldMap.get(item.tabField).uuid
         } else if (item.enter === 'tab') {
           item.enter = 'false'
-        } else if (item.enter === 'sub') {
+        } else if (item.enter === 'sub' && ['text', 'number'].includes(item.type)) {
           item.tabUuid = item.uuid
         }
       }
@@ -681,13 +685,16 @@
 
     this.record = record
     let ID = this.props.data ? this.props.data.$$uuid || '' : ''
+    let focusItem = null
 
-    this.setState({ formlist, ID }, () => {
+    if (action.setting.focus && fieldMap.has(action.setting.focus)) {
+      focusItem = fieldMap.get(action.setting.focus)
+    }
+
+    this.setState({ formlist, ID, focusId: focusItem ? focusItem.uuid : '' }, () => {
       if (unload) return
       
-      if (action.setting && action.setting.focus && fieldMap.has(action.setting.focus)) {
-        let focusItem = fieldMap.get(action.setting.focus)
-
+      if (focusItem) {
         if (focusItem.type === 'text' || focusItem.type === 'number') {
           setTimeout(() => {
             MKEmitter.emit('mkFC', 'focus', focusItem.uuid)
@@ -713,6 +720,62 @@
         }
       }
     })
+
+    if (action.subButton && action.subButton.resetForms) {
+      MKEmitter.addListener('resetForms', this.resetForms)
+    }
+  }
+
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+    MKEmitter.removeListener('resetForms', this.resetForms)
+  }
+
+  resetForms = (id) => {
+    const { action } = this.props
+    const { focusId } = this.state
+
+    if (id !== action.uuid) return
+
+    let formlist = fromJS(this.state.formlist).toJS()
+    let resetForms = action.subButton.resetForms || []
+
+    formlist = formlist.map(item => {
+      if (item.type !== 'text' && item.type !== 'number') return item
+
+      if (resetForms.includes(item.field)) {
+        item.initval = item.orgval
+        this.record[item.field] = item.orgval
+      }
+
+      return item
+    })
+
+    let _list = fromJS(formlist).toJS().map(item => {
+      if (item.type !== 'text' && item.type !== 'number') return item
+
+      if (resetForms.includes(item.field) && !item.hidden) {
+        item.hidden = true
+      }
+
+      return item
+    })
+
+    this.setState({
+      formlist: _list
+    }, () => {
+      this.setState({
+        formlist
+      })
+    })
+
+    if (focusId || this.submitId) {
+      setTimeout(() => {
+        MKEmitter.emit('mkFC', 'focus', this.submitId || focusId)
+      }, 50)
+    }
   }
 
   getFormData = (deForms) => {
@@ -1229,7 +1292,7 @@
     return fields
   }
 
-  handleConfirm = () => {
+  handleConfirm = (formId) => {
     const { formlist, send_type, timestamp, n_id } = this.state
 
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
@@ -1327,6 +1390,8 @@
           forms.push(_item)
         })
 
+        this.submitId = formId || ''
+
         resolve(forms)
       })
     })
diff --git a/src/tabviews/zshare/mutilform/mkInput/index.jsx b/src/tabviews/zshare/mutilform/mkInput/index.jsx
index 2092679..cad739c 100644
--- a/src/tabviews/zshare/mutilform/mkInput/index.jsx
+++ b/src/tabviews/zshare/mutilform/mkInput/index.jsx
@@ -123,7 +123,7 @@
       MKEmitter.emit('mkFC', 'focus', config.tabUuid)
     } else {
       MKEmitter.emit('mkFC', 'focus', config.tabUuid)
-      this.props.onSubmit()
+      this.props.onSubmit(config.tabUuid)
     }
   }
 
diff --git a/src/tabviews/zshare/mutilform/mkNumberInput/index.jsx b/src/tabviews/zshare/mutilform/mkNumberInput/index.jsx
index 47a1840..9e80af9 100644
--- a/src/tabviews/zshare/mutilform/mkNumberInput/index.jsx
+++ b/src/tabviews/zshare/mutilform/mkNumberInput/index.jsx
@@ -40,7 +40,7 @@
 
     if (type === 'focus') {
       let node = document.getElementById(uuid)
-      node.select()
+      node && node.select()
     } else if (type === 'input') {
       this.setState({value})
       this.props.onChange(value, true)
@@ -71,7 +71,7 @@
       MKEmitter.emit('mkFC', 'focus', config.tabUuid)
     } else {
       MKEmitter.emit('mkFC', 'focus', config.tabUuid)
-      this.props.onSubmit()
+      this.props.onSubmit(config.tabUuid)
     }
   }
 
diff --git a/src/tabviews/zshare/mutilform/mkPopSelect/index.jsx b/src/tabviews/zshare/mutilform/mkPopSelect/index.jsx
index 320dceb..c9bc1d6 100644
--- a/src/tabviews/zshare/mutilform/mkPopSelect/index.jsx
+++ b/src/tabviews/zshare/mutilform/mkPopSelect/index.jsx
@@ -265,12 +265,13 @@
       if (config.enter === 'tab') {
         MKEmitter.emit('mkFC', 'focus', config.tabUuid)
       } else if (config.enter === 'sub') {
+        config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
         if (config.subFields) {
           setTimeout(() => {
-            this.props.onSubmit()
+            this.props.onSubmit(config.tabUuid)
           }, 1000)
         } else {
-          this.props.onSubmit()
+          this.props.onSubmit(config.tabUuid)
         }
       }
     })
diff --git a/src/tabviews/zshare/mutilform/mkSelect/index.jsx b/src/tabviews/zshare/mutilform/mkSelect/index.jsx
index c8af8d3..6f94b5d 100644
--- a/src/tabviews/zshare/mutilform/mkSelect/index.jsx
+++ b/src/tabviews/zshare/mutilform/mkSelect/index.jsx
@@ -149,12 +149,13 @@
       if (config.enter === 'tab') {
         MKEmitter.emit('mkFC', 'focus', config.tabUuid)
       } else if (config.enter === 'sub') {
+        config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
         if (config.linkFields || config.subFields || config.controlFields) {
           setTimeout(() => {
-            this.props.onSubmit()
+            this.props.onSubmit(config.tabUuid)
           }, 1000)
         } else {
-          this.props.onSubmit()
+          this.props.onSubmit(config.tabUuid)
         }
       }
     })
diff --git a/src/tabviews/zshare/mutilform/mkVercode/index.jsx b/src/tabviews/zshare/mutilform/mkVercode/index.jsx
index c0569d0..7f6eff9 100644
--- a/src/tabviews/zshare/mutilform/mkVercode/index.jsx
+++ b/src/tabviews/zshare/mutilform/mkVercode/index.jsx
@@ -55,8 +55,8 @@
     if (config.enter === 'tab') {
       MKEmitter.emit('mkFC', 'focus', config.tabUuid)
     } else {
-      MKEmitter.emit('mkFC', 'focus', config.tabUuid)
-      this.props.onSubmit()
+      config.tabUuid && MKEmitter.emit('mkFC', 'focus', config.tabUuid)
+      this.props.onSubmit(config.tabUuid)
     }
   }
 
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/columnform/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/columnform/index.jsx
index c9bbe28..afb9c56 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/columnform/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/columnform/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { Form, Row, Col, Select, Button, Input, InputNumber, Radio } from 'antd'
-import './index.scss'
+// import './index.scss'
 
 class ExcelInColumn extends Component {
   static propTpyes = {
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
index ab0f6ad..97b1812 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
@@ -7,7 +7,7 @@
 import Api from '@/api'
 import { checkSQL } from '@/utils/utils-custom.js'
 import CodeMirror from '@/templates/zshare/codemirror'
-import './index.scss'
+// import './index.scss'
 
 class CustomForm extends Component {
   static propTpyes = {
@@ -341,10 +341,10 @@
               鍙栨秷
             </Button>
           </Col>
-          <Col span={3} style={{paddingTop: '15px', fontSize: '12px', whiteSpace: 'nowrap'}}>
+          {!type ? <Col span={3} style={{paddingTop: '15px', fontSize: '12px', whiteSpace: 'nowrap'}}>
             寮哄埗淇濆瓨锛�
             <Switch checked={skip} size="small" onChange={() => this.setState({skip: !skip})}/>
-          </Col>
+          </Col> : null}
           <Col span={24} className="sql">
             <Form.Item label="sql">
               {getFieldDecorator('sql', {
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx
index c4708cd..180710c 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx
@@ -925,7 +925,7 @@
             </span>
           } key="scripts" id="mk-exin-script">
             <FullScripts
-              verify={verify}
+              scripts={verify.scripts}
               getScriptsFullForm={() => this.scriptsFullForm}
               getScriptsForm={() => this.scriptsForm}
               handleStatus={this.handleStatus}
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/uniqueform/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/uniqueform/index.jsx
index 365f6b0..485f8b1 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/uniqueform/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/uniqueform/index.jsx
@@ -1,8 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { Form, Row, Col, Select, Button } from 'antd'
-import './index.scss'
-
+// import './index.scss'
 
 class UniqueForm extends Component {
   static propTpyes = {
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx
index 76d36ee..9d9f0e3 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { Form, Row, Col, Button, Input, InputNumber, Radio } from 'antd'
-import './index.scss'
+// import './index.scss'
 
 class ExcelOutColumn extends Component {
   static propTpyes = {
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
index 2ac2c12..adf4197 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
@@ -9,7 +9,7 @@
 import Utils from '@/utils/utils.js'
 import { checkSQL } from '@/utils/utils-custom.js'
 import CodeMirror from '@/templates/zshare/codemirror'
-import './index.scss'
+// import './index.scss'
 
 class CustomForm extends Component {
   static propTpyes = {
@@ -96,9 +96,16 @@
         _usefulFields.push(item.field)
         _usefulFields.push(item.datefield)
         _usefulFields.push(item.datefield + '1')
-      } else if (['dateweek', 'datemonth'].includes(item.type)) {
+      } else if (item.type === 'dateweek') {
         _usefulFields.push(item.field)
         _usefulFields.push(item.field + '1')
+      } else if (item.type === 'datemonth') {
+        if (item.match === '=') {
+          _usefulFields.push(item.field)
+        } else {
+          _usefulFields.push(item.field)
+          _usefulFields.push(item.field + '1')
+        }
       } else if (item.type === 'daterange') {
         let _skey = item.field
         let _ekey = item.field + '1'
diff --git a/src/templates/sharecomponent/searchcomponent/searchform/index.jsx b/src/templates/sharecomponent/searchcomponent/searchform/index.jsx
index 5dbb18b..6bfcbce 100644
--- a/src/templates/sharecomponent/searchcomponent/searchform/index.jsx
+++ b/src/templates/sharecomponent/searchcomponent/searchform/index.jsx
@@ -252,6 +252,7 @@
       reTypes.initval = 'text'
     }
 
+    reTooltip.match = ''
     if (type === 'text') {
       reOptions.match = matchReg.class1
     } else if (type === 'multiselect') {
@@ -263,7 +264,8 @@
     } else if (type === 'date') {
       reOptions.match = matchReg.class4
     } else if (type === 'datemonth') {
-      reOptions.match = matchReg.class5
+      reTooltip.match = '鍖归厤妯″紡涓� between 鏃讹紝鎼滅储鏉′欢涓哄ぇ浜庢湀鍒濆皬浜庢湀鏈紝鍖归厤妯″紡涓� = 鏃讹紝鎼滅储鏉′欢涓虹瓑浜庡綋鍓嶆湀锛圷YYY-MM锛夈��'
+      reOptions.match = matchReg.class6
     } else if (type === 'dateweek' || type === 'daterange' || type === 'range') {
       reOptions.match = matchReg.class5
     } else if (type === 'checkcard') {
diff --git a/src/templates/zshare/modalform/index.jsx b/src/templates/zshare/modalform/index.jsx
index 7ae6d40..ffe236a 100644
--- a/src/templates/zshare/modalform/index.jsx
+++ b/src/templates/zshare/modalform/index.jsx
@@ -289,6 +289,10 @@
       if (this.record.interception === 'func') {
         shows.push('func')
       }
+    } else if (type === 'popSelect') {
+      if (this.record.enter === 'tab' || this.record.enter === 'sub') {
+        shows.push('tabField')
+      }
     }
 
     if (['multiselect', 'select', 'link', 'radio', 'checkbox', 'checkcard', 'cascader'].includes(type)) {
@@ -383,7 +387,7 @@
       if (value === 'text' || value === 'number') {
         this.record.enter = 'sub'
         _fieldval.enter = 'sub'
-      } else if (value === 'select' || value === 'link') {
+      } else if (['select', 'link', 'popSelect', 'vercode'].includes(value)) {
         _fieldval.enter = 'false'
       }
 
diff --git a/src/templates/zshare/verifycard/callbackcustomscript/index.jsx b/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
index 347e92c..abf3307 100644
--- a/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
+++ b/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
@@ -1,6 +1,6 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
-import { Form, Row, Col, Button, Modal, Tooltip, Radio, Select, Switch } from 'antd'
+import { Form, Row, Col, Button, Modal, Tooltip, Radio, Select, Switch, notification } from 'antd'
 import { QuestionCircleOutlined } from '@ant-design/icons'
 
 import Api from '@/api'
@@ -29,18 +29,39 @@
       editItem: record
     })
 
-    this.props.form.setFieldsValue({
-      sql: record.sql,
-      position: record.position || 'back'
-    })
+    if (this.props.type) {
+      this.props.form.setFieldsValue({
+        sql: record.sql
+      })
+    } else {
+      this.props.form.setFieldsValue({
+        sql: record.sql,
+        position: record.position || 'back'
+      })
+    }
   }
 
   handleConfirm = () => {
+    const { type } = this.props
     const { editItem, skip } = this.state
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
     this.props.form.validateFieldsAndScroll((err, values) => {
+      if (type === 'fullscreen' && err) {
+        notification.warning({
+          top: 92,
+          message: '璇疯緭鍏ql!',
+          duration: 5
+        })
+        return
+      }
+
       if (!err) {
         values.uuid = editItem ? editItem.uuid : ''
+        values.position = values.position || (editItem ? editItem.position : 'front')
+
+        if (type === 'fullscreen' && editItem) {
+          values.status = editItem.status || 'true'
+        }
 
         let pass = checkSQL(values.sql, 'customscript')
 
@@ -166,9 +187,9 @@
   }
 
   render() {
-    const { usefulfields, systemScripts, btn } = this.props
+    const { usefulfields, systemScripts, btn, type } = this.props
     const { getFieldDecorator } = this.props.form
-    const { skip } = this.state
+    const { editItem, skip } = this.state
     const formItemLayout = {
       labelCol: {
         xs: { span: 24 },
@@ -185,25 +206,25 @@
     return (
       <Form {...formItemLayout} className="verify-form verify-custom-callback-scripts" id="verify-custom-callback-scripts">
         <Row gutter={24}>
-          <Col span={8}>
+          {!type ? <Col span={8}>
             <Form.Item label={'琛ㄥ悕'} style={{whiteSpace: 'nowrap', margin: 0}}>
               {btn.cbTable}
             </Form.Item>
-          </Col>
-          <Col span={10}>
+          </Col> : null}
+          {!type ? <Col span={10}>
             <Form.Item label={'鎶ラ敊瀛楁'} style={{margin: 0, whiteSpace: 'nowrap'}}>
               ErrorCode锛堝鍔犲悗缂�NT琛ㄧず鏁版嵁涓嶅洖婊氾紝濡侲NT銆丯NT銆丗NT銆丯MNT銆丆NT銆�-2NT锛�, retmsg
             </Form.Item>
-          </Col>
-          <Col span={24} className="sqlfield">
+          </Col> : null}
+          {!type ? <Col span={24} className="sqlfield">
             <Form.Item label={'鍙敤瀛楁'}>
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'鍏叡鍊硷紝璇锋寜鐓xxx@鏍煎紡浣跨敤銆�'}><span style={{color: '#1890ff'}}>BID, ID, LoginUID, SessionUid, UserID, Appkey, time_id, typename</span></Tooltip>,&nbsp;
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'绯荤粺鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞惰祴鍊笺��'}><span style={{color: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address, mk_deleted</span></Tooltip>,&nbsp;
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'绯荤粺鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞跺湪鍗曞彿鐢熸垚鎴栧垱寤哄嚟璇佹椂浣跨敤銆�'}><span style={{color: '#13c2c2'}}>BillCode, BVoucher, FIBVoucherDate, FiYear, ModularDetailCode</span></Tooltip>
               {usefulfields ? <span>, {usefulfields}</span> : ''}
             </Form.Item>
-          </Col>
-          <Col span={8} style={{whiteSpace: 'nowrap'}}>
+          </Col> : null}
+          {!type ? <Col span={8} style={{whiteSpace: 'nowrap'}}>
             <Form.Item style={{marginBottom: 0}} label={
               <Tooltip placement="bottomLeft" title={'鑷畾涔夎剼鏈笌榛樿sql浣嶇疆鍏崇郴銆�'}>
                 <QuestionCircleOutlined className="mk-form-tip" />
@@ -219,8 +240,8 @@
                 </Radio.Group>
               )}
             </Form.Item>
-          </Col>
-          <Col span={8}>
+          </Col> : null}
+          {!type ? <Col span={8}>
             <Form.Item label={'蹇嵎娣诲姞'} style={{marginBottom: 0}}>
               <Select
                 allowClear
@@ -235,19 +256,19 @@
                 )}
               </Select>
             </Form.Item>
-          </Col>
+          </Col> : null}
           <Col span={5} className="add" style={{whiteSpace: 'nowrap'}}>
             <Button onClick={this.handleConfirm} loading={this.state.loading} className="mk-green" style={{marginBottom: 15, marginLeft: 40}}>
-              淇濆瓨
+              {type === 'fullscreen' && !editItem ? '娣诲姞' : '淇濆瓨'}
             </Button>
             <Button onClick={this.handleCancel} style={{marginBottom: 15, marginLeft: 10}}>
               鍙栨秷
             </Button>
           </Col>
-          <Col span={3} style={{paddingTop: '15px', fontSize: '12px', whiteSpace: 'nowrap'}}>
+          {!type ? <Col span={3} style={{paddingTop: '15px', fontSize: '12px', whiteSpace: 'nowrap'}}>
             寮哄埗淇濆瓨锛�
             <Switch checked={skip} size="small" onChange={() => this.setState({skip: !skip})}/>
-          </Col>
+          </Col> : null}
           <Col span={24} className="sql">
             <Form.Item label="sql">
               {getFieldDecorator('sql', {
diff --git a/src/templates/zshare/verifycard/fullScripts/index.jsx b/src/templates/zshare/verifycard/fullScripts/index.jsx
index 116fdbb..0fee3ee 100644
--- a/src/templates/zshare/verifycard/fullScripts/index.jsx
+++ b/src/templates/zshare/verifycard/fullScripts/index.jsx
@@ -10,7 +10,7 @@
 
 class fullScripts extends Component {
   static propTpyes = {
-    verify: PropTypes.object,
+    scripts: PropTypes.array,
     getScriptsForm: PropTypes.func
   }
 
@@ -41,9 +41,11 @@
   }
 
   render() {
-    const { verify, children } = this.props
+    const { scripts, children } = this.props
     const { visible, scriptId } = this.state
 
+    if (scripts.length === 0) return null
+    
     return (
       <>
         <BorderOutlined className="full-scripts" onClick={this.trigger}/>
@@ -57,7 +59,7 @@
         >
           <img className="unfull-scripts" src={MinView} onClick={() => this.setState({visible: false, scriptId: ''})} alt=""/>
           <div className="script-table-wrap">
-            {verify.scripts.map(item => {
+            {scripts.map(item => {
               let title = item.sql.match(/^\s*\/\*.+\*\//)
               title = title && title[0] ? title[0] : ''
               let _text = title ? item.sql.replace(title, '') : item.sql
diff --git a/src/templates/zshare/verifycard/fullScripts/index.scss b/src/templates/zshare/verifycard/fullScripts/index.scss
index 4cdba1c..03122a1 100644
--- a/src/templates/zshare/verifycard/fullScripts/index.scss
+++ b/src/templates/zshare/verifycard/fullScripts/index.scss
@@ -116,6 +116,7 @@
           position: absolute;
           top: 10px;
           z-index: 1;
+          padding-top: 0px!important;
           .ant-btn {
             height: 28px;
           }
diff --git a/src/templates/zshare/verifycard/index.jsx b/src/templates/zshare/verifycard/index.jsx
index 6949347..2dcdd58 100644
--- a/src/templates/zshare/verifycard/index.jsx
+++ b/src/templates/zshare/verifycard/index.jsx
@@ -1660,7 +1660,7 @@
             </span>
           } key="scripts" id="mk-normal-script">
             <FullScripts
-              verify={verify}
+              scripts={verify.scripts}
               getScriptsFullForm={() => this.scriptsFullForm}
               getScriptsForm={() => this.scriptsForm}
               handleStatus={this.handleStatus}
@@ -1698,6 +1698,24 @@
               {verify.cbScripts.length ? <span className="count-tip">{verify.cbScripts.length}</span> : null}
             </span>
           } key="cbScripts" id="mk-callback-script">
+            <FullScripts
+              scripts={verify.cbScripts}
+              getScriptsFullForm={() => this.cbscriptsFullForm}
+              getScriptsForm={() => this.cbscriptsForm}
+              handleStatus={(item) => this.handleStatus(item, 'cbscripts')}
+              handleDelete={(item) => this.handleDelete(item, 'cbscripts')}
+            >
+              <CallBackCustomScript
+                type="fullscreen"
+                btn={this.props.card}
+                initsql={this.state.initsql}
+                customScripts={verify.cbScripts}
+                usefulfields={this.state.usefulfields}
+                systemScripts={this.state.systemScripts}
+                scriptsChange={this.cbScriptsChange}
+                wrappedComponentRef={(inst) => this.cbscriptsFullForm = inst}
+              />
+            </FullScripts>
             <CallBackCustomScript
               btn={this.props.card}
               initsql={this.state.initsql}
diff --git a/src/utils/option.js b/src/utils/option.js
index 1652359..6d71ffd 100644
--- a/src/utils/option.js
+++ b/src/utils/option.js
@@ -242,6 +242,13 @@
   class5: [{
     value: 'between',
     text: 'between'
+  }],
+  class6: [{
+    value: 'between',
+    text: 'between'
+  }, {
+    value: '=',
+    text: '='
   }]
 }
 
diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 350ccc7..44a9750 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -6,7 +6,7 @@
    * @description 鑾峰彇涓嬬骇妯″潡
    * @return {String}  selfId  褰撳墠缁勪欢id
    */
-  static getSubModules (components, selfId, supId) {
+  static getSubModules (components, selfId, supId, has) {
     let modules = []
     components.forEach(item => {
       if (item.uuid === selfId || item.type === 'navbar') {
@@ -17,6 +17,17 @@
           label: item.name,
           disabled: supId === item.uuid
         })
+
+        if (item.type === 'form' && item.subtype === 'simpleform' && item.wrap.refocus && supId !== item.uuid) {
+          modules.push({
+            value: item.uuid + '$focus-refresh',
+            label: item.name + '锛堝埛鏂�-鑱氱劍锛�',
+          })
+          modules.push({
+            value: item.uuid + '$focus-nofresh',
+            label: item.name + '锛堜笉鍒锋柊-鑱氱劍锛�',
+          })
+        }
       } else if (item.type === 'tabs') {
         if (item.subtype === 'tabletabs') {
           item.subtabs.forEach(tab => {
@@ -38,7 +49,7 @@
                 type: 'tab',
                 value: f_tab.uuid,
                 label: f_tab.label,
-                children: this.getSubModules(f_tab.components, selfId, supId)
+                children: this.getSubModules(f_tab.components, selfId, supId, has)
               }
   
               if (subItem.children.length === 0) {
@@ -672,11 +683,23 @@
     }
     if (btn.syncComponent && btn.syncComponent[0] === 'multiComponent' && btn.syncComponents) {
       btn.syncComponents = btn.syncComponents.map(m => {
-        m.syncComId = m.syncComId.map(n => md5(commonId + n))
+        m.syncComId = m.syncComId.map(n => {
+          if (/\$focus/.test(n)) {
+            return md5(commonId + n.split('$')[0]) + '$' + n.split('$')[1]
+          }
+
+          return md5(commonId + n)
+        })
         return m
       })
     } else if (btn.syncComponent && btn.syncComponent.length > 0) {
-      btn.syncComponent = btn.syncComponent.map(m => md5(commonId + m))
+      btn.syncComponent = btn.syncComponent.map(m => {
+        if (/\$focus/.test(m)) {
+          return md5(commonId + m.split('$')[0]) + '$' + m.split('$')[1]
+        }
+
+        return md5(commonId + m)
+      })
     }
   }
 
@@ -984,7 +1007,11 @@
       if (item.type === 'date') {
         value = '1949-10-01 00:00:00.000'
       } else if (item.type === 'datemonth') {
-        value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
+        if (item.match === '=') {
+          value = '1949-10'
+        } else {
+          value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
+        }
       } else if (item.type === 'dateweek') {
         value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000'
       } else if (item.type === 'daterange') {
@@ -1036,9 +1063,16 @@
       searchText.push(`('${item.value}' ${item.match} '%'+${item.key}+'%')`)
     } else if (item.type === 'date') {
       searchText.push('(' + item.key + ' ' + item.match + ' \'' + item.value + '\')')
-    } else if (item.type === 'datemonth' || item.type === 'dateweek' || item.type === 'range') {
+    } else if (item.type === 'dateweek' || item.type === 'range') {
       let val = item.value.split(',')
       searchText.push('(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')')
+    } else if (item.type === 'datemonth') {
+      if (item.match === '=') {
+        searchText.push('(' + item.key + ' = \'' + item.value + '\')')
+      } else {
+        let val = item.value.split(',')
+        searchText.push('(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')')
+      }
     } else if (item.type === 'daterange') {
       let val = item.value.split(',')
 
@@ -1081,7 +1115,8 @@
           value: `'${item.value}'`
         })
       }
-    } else if (['dateweek', 'datemonth', 'range'].includes(item.type)) {
+      
+    } else if (['dateweek', 'range'].includes(item.type)) {
       let val = item.value.split(',')
       options.push({
         reg: new RegExp('@' + item.key + '@', 'ig'),
@@ -1090,6 +1125,22 @@
         reg: new RegExp('@' + item.key + '1@', 'ig'),
         value: `'${val[1]}'`
       })
+    } else if (item.type === 'datemonth') {
+      if (item.match === '=') {
+        options.push({
+          reg: new RegExp('@' + item.key + '@', 'ig'),
+          value: `'${item.value}'`
+        })
+      } else {
+        let val = item.value.split(',')
+        options.push({
+          reg: new RegExp('@' + item.key + '@', 'ig'),
+          value: `'${val[0]}'`
+        }, {
+          reg: new RegExp('@' + item.key + '1@', 'ig'),
+          value: `'${val[1]}'`
+        })
+      }
     } else if (item.type === 'daterange') {
       let val = item.value.split(',')
       let _skey = item.key
diff --git a/src/utils/utils.js b/src/utils/utils.js
index f2d3e00..7c45ab0 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -469,17 +469,21 @@
           newsearches[item.key] = _val
         }
       } else if (item.type === 'datemonth') {
-        // 鏈�-杩囨护鏉′欢锛屼粠鏈堝紑濮嬭嚦缁撴潫
-        let _startval = ''
-        let _endval = ''
-
-        if (item.value) {
-          _startval = moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000'
-          _endval = moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
+        if (item.match === '=') {
+          newsearches[item.key] = item.value
+        } else {
+          // 鏈�-杩囨护鏉′欢锛屼粠鏈堝紑濮嬭嚦缁撴潫
+          let _startval = ''
+          let _endval = ''
+  
+          if (item.value) {
+            _startval = moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000'
+            _endval = moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
+          }
+          
+          newsearches[item.key] = _startval
+          newsearches[item.key + '1'] = _endval
         }
-        
-        newsearches[item.key] = _startval
-        newsearches[item.key + '1'] = _endval
       } else if (item.type === 'dateweek') {
         let _startval = ''
         let _endval = ''
@@ -583,10 +587,14 @@
 
         searchText.push('(' + item.key + ' ' + _match + ' \'' + _val + timetail + '\')')
       } else if (item.type === 'datemonth') { // 鏈�-杩囨护鏉′欢锛屼粠鏈堝紑濮嬭嚦缁撴潫锛岀粨鏉熸椂闂翠负鏈堟湯鍔犱竴澶╃殑0鐐癸紝鏂瑰紡涓�<
-        let _startval = moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000'
-        let _endval = moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
-
-        searchText.push('(' + item.key + ' >= \'' + _startval + '\' AND ' + item.key + ' < \'' + _endval + '\')')
+        if (item.match === '=') {
+          searchText.push('(' + item.key + ' = \'' + item.value + '\')')
+        } else {
+          let _startval = moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000'
+          let _endval = moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
+  
+          searchText.push('(' + item.key + ' >= \'' + _startval + '\' AND ' + item.key + ' < \'' + _endval + '\')')
+        }
       } else if (item.type === 'dateweek') { // 鍛�-杩囨护鏉′欢
         let _startval = moment(item.value, 'YYYY-MM-DD' ).startOf('week').format('YYYY-MM-DD') + ' 00:00:00.000'
         let _endval = moment(item.value, 'YYYY-MM-DD').endOf('week').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000'
@@ -679,17 +687,21 @@
 
         options.push(item)
       } else if (item.type === 'datemonth') {
-        let _startval = item.value ? moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000' : '1970-01-01 00:00:00.000'
-        let _endval = item.value ? moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2050-01-01 00:00:00.000'
-
-        let copy = JSON.parse(JSON.stringify(item))
-        copy.key = copy.key + '1'
-        copy.value = _endval
-        
-        item.value = _startval
-
-        options.push(item)
-        options.push(copy)
+        if (item.match === '=') {
+          options.push(item)
+        } else {
+          let _startval = item.value ? moment(item.value, 'YYYY-MM').startOf('month').format('YYYY-MM-DD') + ' 00:00:00.000' : '1970-01-01 00:00:00.000'
+          let _endval = item.value ? moment(item.value, 'YYYY-MM').endOf('month').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2050-01-01 00:00:00.000'
+  
+          let copy = JSON.parse(JSON.stringify(item))
+          copy.key = copy.key + '1'
+          copy.value = _endval
+          
+          item.value = _startval
+  
+          options.push(item)
+          options.push(copy)
+        }
       } else if (item.type === 'dateweek') {
         let _startval = item.value ? moment(item.value, 'YYYY-MM-DD').startOf('week').format('YYYY-MM-DD') + ' 00:00:00.000' : '1970-01-01 00:00:00.000'
         let _endval = item.value ? moment(item.value, 'YYYY-MM-DD').endOf('week').add(1, 'days').format('YYYY-MM-DD') + ' 00:00:00.000' : '2050-01-01 00:00:00.000'

--
Gitblit v1.8.0