From f01086dc94827dbb15811760e5d13683977fcec9 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 10 十一月 2022 00:40:12 +0800
Subject: [PATCH] 2022-11-10

---
 src/components/tabview/index.jsx                                 |    5 
 src/components/encrypts/index.jsx                                |    2 
 src/menu/components/form/formaction/index.scss                   |    3 
 src/components/header/index.jsx                                  |    7 +
 src/menu/components/form/dragtitle/options.jsx                   |    4 
 src/menu/components/card/cardcellcomponent/index.scss            |    3 
 src/menu/components/form/formaction/actionform/index.jsx         |    5 
 src/menu/components/card/cardcellcomponent/dragaction/index.jsx  |    8 +
 src/menu/components/card/cardcellcomponent/elementform/index.jsx |    8 +
 src/templates/comtableconfig/updatetable/index.jsx               |   65 +++++---
 src/menu/transfer/index.jsx                                      |    9 
 src/menu/components/form/simple-form/options.jsx                 |   14 +
 src/menu/components/form/simple-form/index.jsx                   |    9 +
 src/tabviews/custom/popview/index.jsx                            |    1 
 src/views/tabledesign/index.jsx                                  |    5 
 src/tabviews/basetable/index.jsx                                 |    5 
 src/menu/components/form/formaction/index.jsx                    |   17 ++
 src/tabviews/custom/components/form/step-form/index.scss         |    4 
 src/api/index.js                                                 |   32 +++-
 src/menu/components/table/normal-table/columns/index.scss        |    5 
 src/tabviews/custom/components/form/simple-form/index.jsx        |   15 +
 src/tabviews/zshare/actionList/normalbutton/index.jsx            |    7 
 src/views/mobdesign/index.jsx                                    |    2 
 src/views/menudesign/index.jsx                                   |    6 
 src/menu/components/form/formaction/formconfig.jsx               |   17 ++
 src/tabviews/custom/components/form/tab-form/index.jsx           |    4 
 src/menu/components/table/base-table/columns/index.scss          |    5 
 src/views/pcdesign/index.jsx                                     |    2 
 src/tabviews/custom/components/table/normal-table/index.jsx      |    1 
 src/menu/components/table/edit-table/columns/index.scss          |    5 
 src/tabviews/custom/components/form/step-form/index.jsx          |   18 ++
 src/tabviews/custom/index.jsx                                    |   10 +
 src/menu/components/table/base-table/columns/index.jsx           |   21 ++
 src/menu/modalconfig/index.jsx                                   |    3 
 src/menu/components/table/normal-table/columns/index.jsx         |   22 ++
 src/views/systemfunc/sidemenu/config.jsx                         |   14 +-
 src/menu/components/table/edit-table/columns/index.jsx           |   14 +
 37 files changed, 279 insertions(+), 98 deletions(-)

diff --git a/src/api/index.js b/src/api/index.js
index 135d64a..3270525 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -398,7 +398,7 @@
             CacheUtils.updateWebSqlversion('1.00', curTime)
             resolve()
             return
-          } else if (!msg.createDate || reload) {
+          } else if (!msg.createDate || reload === true) {
             param.modifydate = curTime
             param.menuids = window.btoa(msg.menuids)
           } else if (msg.menuids) {
@@ -423,18 +423,25 @@
               list.push(...res.menu_del)
             }
 
+            list = list.map(mid => mid.menuid)
+
+            if (typeof(reload) === 'string' && !list.includes(reload)) {
+              list.push(reload)
+            }
+
             if (list.length > 0) {
               let clear = false
               list.forEach(mid => {
-                if (systemMenuKeys.indexOf(mid.menuid) > -1) {
+                if (systemMenuKeys.indexOf(mid) > -1) {
                   clear = true
                 }
               })
-              let keys = list.map(mid => `'${mid.menuid}'`).join(',')
               if (clear) {
-                keys = ''
+                list = ''
+              } else {
+                list = list.map(mid => `'${mid}'`).join(',')
               }
-              CacheUtils.delWebSqlConfig(keys)
+              CacheUtils.delWebSqlConfig(list)
             }
 
             CacheUtils.updateWebSqlversion(res.app_version || '1.00', curTime)
@@ -460,7 +467,7 @@
             CacheUtils.updateIndexDBversion({version: '1.00', createDate: curTime})
             resolve()
             return
-          } else if (!msg.createDate || reload) {
+          } else if (!msg.createDate || reload === true) {
             param.modifydate = curTime
             param.menuids = window.btoa(msg.menuids)
           } else if (msg.menuids) {
@@ -485,18 +492,23 @@
               list.push(...res.menu_del)
             }
 
+            list = list.map(mid => mid.menuid)
+
+            if (typeof(reload) === 'string' && !list.includes(reload)) {
+              list.push(reload)
+            }
+
             if (list.length > 0) {
               let clear = false
               list.forEach(mid => {
-                if (systemMenuKeys.indexOf(mid.menuid) > -1) {
+                if (systemMenuKeys.indexOf(mid) > -1) {
                   clear = true
                 }
               })
-              let keys = list.map(mid => mid.menuid)
               if (clear) {
-                keys = ''
+                list = ''
               }
-              CacheUtils.delIndexDBConfig(keys)
+              CacheUtils.delIndexDBConfig(list)
             }
 
             CacheUtils.updateIndexDBversion({version: res.app_version || '1.00', createDate: curTime})
diff --git a/src/components/encrypts/index.jsx b/src/components/encrypts/index.jsx
index 8d6617d..5a22673 100644
--- a/src/components/encrypts/index.jsx
+++ b/src/components/encrypts/index.jsx
@@ -44,7 +44,7 @@
     return (
       <>
         {eye ? value : this.getValue()}
-        {eye ? <EyeOutlined className="mk-open-eye" onClick={() => this.setState({eye: false})}/> : <EyeInvisibleOutlined className="mk-close-eye" onClick={() => this.setState({eye: true})}/>}
+        {eye ? <EyeOutlined className="mk-open-eye" onClick={(e) => {e.stopPropagation();this.setState({eye: false})}}/> : <EyeInvisibleOutlined className="mk-close-eye" onClick={(e) => {e.stopPropagation();this.setState({eye: true})}}/>}
       </>
     )
   }
diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index 48a84e0..b5f7700 100644
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -495,6 +495,13 @@
     window.addEventListener('storage', (e) => {
       if (e.key === 'getSessionStorage' && e.newValue === window.GLOB.appkey) {
         localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage))
+      } else if (e.key === 'menuUpdate') {
+        let menuId = e.newValue.split(',')[1]
+        if (menuId) {
+          Api.getAppVersion(menuId).then(() => {
+            MKEmitter.emit('reloadMenuView', menuId)
+          })
+        }
       }
     })
   }
diff --git a/src/components/tabview/index.jsx b/src/components/tabview/index.jsx
index 9f65393..ed050db 100644
--- a/src/components/tabview/index.jsx
+++ b/src/components/tabview/index.jsx
@@ -23,6 +23,7 @@
 const Iframe = asyncComponent(() => import('@/tabviews/iframe'))
 const RoleManage = asyncComponent(() => import('@/tabviews/rolemanage'))
 const FormTab = asyncComponent(() => import('@/tabviews/formtab'))
+const TabManage = asyncComponent(() => import('@/tabviews/tabmanage'))
 
 class TabViews extends Component {
   static propTpyes = {
@@ -108,7 +109,7 @@
   
       // 鑾峰彇涓昏彍鍗曞弬鏁�
       let menudefer = new Promise(resolve => {
-        Api.getAppVersion().then(() => {
+        Api.getAppVersion(menu.MenuID).then(() => {
           resolve()
         }, () => {
           resolve()
@@ -215,6 +216,8 @@
       return (<RoleManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
     } else if (view.type === 'FormTab') {
       return (<FormTab MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
+    } else if (view.type === 'TabManage') {
+      return (<TabManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
     } else if (view.type === 'iframe') {
       return (<Iframe key={view.MenuID} MenuID={view.MenuID} MenuNo={view.MenuNo} title={view.MenuName} MenuName={view.MenuName} url={window.GLOB.baseurl + 'zh-CN/' + view.LinkUrl}/>)
     } else {
diff --git a/src/menu/components/card/cardcellcomponent/dragaction/index.jsx b/src/menu/components/card/cardcellcomponent/dragaction/index.jsx
index 683cd5f..d2d89ac 100644
--- a/src/menu/components/card/cardcellcomponent/dragaction/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/dragaction/index.jsx
@@ -130,6 +130,14 @@
           newcard.eleType = item.value
           newcard.datatype = 'dynamic'
           newcard.height = 1
+
+          if (item.value === 'splitline') {
+            newcard.width = 24
+            newcard.color = '#EBE9E9'
+          } else if (item.value === 'slider') {
+            newcard.width = 24
+            newcard.color = '#1890ff'
+          }
         } else {
           newcard.eleType = 'button'
           newcard.label = 'button'
diff --git a/src/menu/components/card/cardcellcomponent/elementform/index.jsx b/src/menu/components/card/cardcellcomponent/elementform/index.jsx
index ab2b5f7..a85f253 100644
--- a/src/menu/components/card/cardcellcomponent/elementform/index.jsx
+++ b/src/menu/components/card/cardcellcomponent/elementform/index.jsx
@@ -215,6 +215,10 @@
           item.initVal = posterType
         } else if (item.key === 'fixStyle') {
           item.initVal = fixStyle
+        } else if (item.key === 'color') {
+          if (value === 'splitline') {
+            item.initVal = '#EBE9E9'
+          }
         }
 
         return item
@@ -226,7 +230,9 @@
         showType: card.showType || 'line',
         formlist: _formlist
       }, () => {
-        if (value === 'slider') {
+        if (value === 'splitline') {
+          this.props.form.setFieldsValue({width: 24, color: '#EBE9E9'})
+        } else if (value === 'slider') {
           this.props.form.setFieldsValue({width: 24, color: '#1890ff'})
         } else if (value === 'qrcode') {
           this.props.form.setFieldsValue({color: '#000000'})
diff --git a/src/menu/components/card/cardcellcomponent/index.scss b/src/menu/components/card/cardcellcomponent/index.scss
index e97d0e2..e82bfb9 100644
--- a/src/menu/components/card/cardcellcomponent/index.scss
+++ b/src/menu/components/card/cardcellcomponent/index.scss
@@ -9,6 +9,9 @@
 
   .card-button-cell {
     float: left;
+    button {
+      box-shadow: none;
+    }
     button:not(.ant-switch) {
       width: 100%;
       background-size: cover;
diff --git a/src/menu/components/form/dragtitle/options.jsx b/src/menu/components/form/dragtitle/options.jsx
index b367eab..8f424aa 100644
--- a/src/menu/components/form/dragtitle/options.jsx
+++ b/src/menu/components/form/dragtitle/options.jsx
@@ -87,7 +87,7 @@
       field: 'prevEnable',
       label: '涓婁竴姝�',
       initval: group.prevButton ? group.prevButton.enable || 'false' : 'false',
-      tooltip: '绗竴缁勪笉鏄剧ず銆�',
+      tooltip: '绗竴缁勪笉鏄剧ず銆傛敞锛氶櫎鍏抽棴鍔熻兘澶栥��',
       required: false,
       options: [
         {value: 'true', label: '鏄剧ず'},
@@ -111,7 +111,7 @@
       field: 'nextEnable',
       label: '璺宠繃',
       initval: group.nextButton ? group.nextButton.enable || 'false' : 'false',
-      tooltip: '鏈�鍚庝竴缁勪笉鏄剧ず銆�',
+      tooltip: '鏈�鍚庝竴缁勪笉鏄剧ず銆傛敞锛氶櫎鍏抽棴鍔熻兘澶栥��',
       required: false,
       options: [
         {value: 'true', label: '鏄剧ず'},
diff --git a/src/menu/components/form/formaction/actionform/index.jsx b/src/menu/components/form/formaction/actionform/index.jsx
index b67cad8..7f5eae5 100644
--- a/src/menu/components/form/formaction/actionform/index.jsx
+++ b/src/menu/components/form/formaction/actionform/index.jsx
@@ -54,10 +54,13 @@
     const { card } = this.props
 
     if (card.type === 'prev') {
-      return ['type', 'label', 'enable']
+      return ['type', 'label', 'enable', 'actionType']
     } else if (card.type === 'next') {
+      return ['type', 'label', 'enable', 'actionType']
+    } else if (card.type === 'close') {
       return ['type', 'label', 'enable']
     }
+    
     let _options = ['type', 'label', 'intertype', 'Ot', 'execSuccess', 'syncComponent', 'anchors', 'linkmenu', 'enable', 'output', 'reload'] // 閫夐」鍒楄〃
     
     if (_intertype === 'custom') {
diff --git a/src/menu/components/form/formaction/formconfig.jsx b/src/menu/components/form/formaction/formconfig.jsx
index 87bfb60..163739f 100644
--- a/src/menu/components/form/formaction/formconfig.jsx
+++ b/src/menu/components/form/formaction/formconfig.jsx
@@ -11,6 +11,8 @@
     _type = '涓婁竴姝�'
   } else if (card.type === 'next') {
     _type = '涓嬩竴姝�'
+  } else if (card.type === 'close') {
+    _type = '鍏抽棴'
   }
 
   let menulist = []
@@ -57,6 +59,21 @@
     },
     {
       type: 'radio',
+      key: 'actionType',
+      label: '鎵ц鎿嶄綔',
+      initVal: card.actionType || 'default',
+      tooltip: '鍏抽棴鍔熻兘锛氱鐞嗙郴缁熶腑浼氬叧闂綋鍓嶆爣绛撅紝瀛愬簲鐢ㄤ腑涓鸿繑鍥炰笂涓�椤点��',
+      required: true,
+      options: [{
+        value: 'default',
+        text: '榛樿'
+      }, {
+        value: 'close',
+        text: '鍏抽棴'
+      }]
+    },
+    {
+      type: 'radio',
       key: 'intertype',
       label: '鎺ュ彛绫诲瀷',
       initVal: card.intertype || 'system',
diff --git a/src/menu/components/form/formaction/index.jsx b/src/menu/components/form/formaction/index.jsx
index c76bdcc..57d9865 100644
--- a/src/menu/components/form/formaction/index.jsx
+++ b/src/menu/components/form/formaction/index.jsx
@@ -136,11 +136,16 @@
       let group = fromJS(this.props.group).toJS()
 
       if (res.type === 'prev') {
+        res.enable = group.prevButton.enable || 'true'
         group.prevButton = res
       } else if (res.type === 'submit') {
         group.subButton = res
       } else if (res.type === 'next') {
+        res.enable = group.nextButton.enable || 'true'
         group.nextButton = res
+      } else if (res.type === 'close') {
+        res.enable = group.closeButton.enable || 'true'
+        group.closeButton = res
       }
 
       this.setState({
@@ -196,7 +201,7 @@
 
     return (
       <div className="mk-form-action">
-        {group.prevButton && group.prevButton.enable !== 'false' && group.sort !== 1 ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
+        {group.prevButton && group.prevButton.enable === 'true' ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             <EditOutlined className="edit" title="缂栬緫" onClick={() => this.handleAction(group.prevButton)} />
             <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={() => this.handleStyle(group.prevButton)}/>
@@ -213,7 +218,15 @@
         } trigger="hover">
           <Button type="link" className="submit mk-primary" onDoubleClick={this.changeMenu} style={resetStyle(group.subButton.style)}>{group.subButton.label}</Button>
         </Popover>
-        {group.nextButton && group.nextButton.enable !== 'false' && group.sort !== config.subcards.length ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
+        {group.closeButton && group.closeButton.enable === 'true' ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
+          <div className="mk-popover-control">
+            <EditOutlined className="edit" title="缂栬緫" onClick={() => this.handleAction(group.closeButton)} />
+            <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={() => this.handleStyle(group.closeButton)}/>
+          </div>
+        } trigger="hover">
+          <Button type="link" style={resetStyle(group.closeButton.style)}>{group.closeButton.label}</Button>
+        </Popover> : null}
+        {group.nextButton && group.nextButton.enable === 'true' ? <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control">
             <EditOutlined className="edit" title="缂栬緫" onClick={() => this.handleAction(group.nextButton)} />
             <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={() => this.handleStyle(group.nextButton)}/>
diff --git a/src/menu/components/form/formaction/index.scss b/src/menu/components/form/formaction/index.scss
index d58f09a..79055ca 100644
--- a/src/menu/components/form/formaction/index.scss
+++ b/src/menu/components/form/formaction/index.scss
@@ -13,7 +13,8 @@
   }
   .skip {
     color: rgba(0, 0, 0, 0.85);
-    float: right;
+    position: absolute;
     height: auto;
+    right: 0px;
   }
 }
diff --git a/src/menu/components/form/simple-form/index.jsx b/src/menu/components/form/simple-form/index.jsx
index ac0ecf3..30ea2af 100644
--- a/src/menu/components/form/simple-form/index.jsx
+++ b/src/menu/components/form/simple-form/index.jsx
@@ -584,7 +584,8 @@
   }
 
   updateWrap = (res) => {
-    let _card = {...this.state.card, wrap: res}
+    let _card = fromJS(this.state.card).toJS()
+    _card.wrap = res
 
     if (res.datatype === 'static') {
       if (res.supModule && res.supModule.length > 0) {
@@ -600,6 +601,12 @@
     _card.subcards[0].setting.enable = _card.wrap.enable
     _card.subcards[0].setting.verticalSpace = _card.wrap.verticalSpace
 
+    if (_card.wrap.closeEnable === 'true' && !_card.subcards[0].closeButton) {
+      _card.subcards[0].closeButton = {label: '鍏抽棴', enable: 'true', type: 'close', style: {backgroundColor: '#ffffff', color: 'rgba(0,0,0,0.65)', borderColor: '#d9d9d9', borderWidth: '1px', paddingLeft: '25px', paddingRight: '25px', paddingTop: '5px', paddingBottom: '5px', marginLeft: '10px'}}
+    } else if (_card.subcards[0].closeButton) {
+      _card.subcards[0].closeButton.enable = _card.wrap.closeEnable
+    }
+
     this.updateComponent(_card)
   }
 
diff --git a/src/menu/components/form/simple-form/options.jsx b/src/menu/components/form/simple-form/options.jsx
index c9182cf..e0936b9 100644
--- a/src/menu/components/form/simple-form/options.jsx
+++ b/src/menu/components/form/simple-form/options.jsx
@@ -135,7 +135,7 @@
     },
     {
       type: 'radio',
-      field: 'subEnable',
+      field: 'enable',
       label: '鎻愪氦',
       initval: wrap.enable || 'true',
       required: false,
@@ -146,6 +146,18 @@
     },
     {
       type: 'radio',
+      field: 'closeEnable',
+      label: '鍏抽棴',
+      initval: wrap.closeEnable || 'false',
+      tooltip: '绠$悊绯荤粺涓細鍏抽棴褰撳墠鏍囩锛屽瓙搴旂敤涓负杩斿洖涓婁竴椤点��',
+      required: false,
+      options: [
+        {value: 'true', label: '鏄剧ず'},
+        {value: 'false', label: '闅愯棌'},
+      ]
+    },
+    {
+      type: 'radio',
       field: 'goback',
       label: '绌哄�艰繑鍥�',
       initval: wrap.goback || 'false',
diff --git a/src/menu/components/table/base-table/columns/index.jsx b/src/menu/components/table/base-table/columns/index.jsx
index cea83cd..a5f8102 100644
--- a/src/menu/components/table/base-table/columns/index.jsx
+++ b/src/menu/components/table/base-table/columns/index.jsx
@@ -53,8 +53,14 @@
     const { connectDragSource, connectDropTarget, moveCol, addElement, dropCol, updateCol, editColumn, pasteCell, changeStyle, deleteCol, index, column, align, fields, children, ...restProps } = this.props
 
     if (index !== undefined) {
+      let style = {cursor: 'move', textAlign: align}
+      if (column.Width) {
+        style.width = column.Width
+        style.minWidth = column.Width
+      }
+
       return connectDragSource(
-        connectDropTarget(<th {...restProps} index={index} style={{ cursor: 'move', textAlign: align }} onDoubleClick={() => column && this.props.editColumn(column)}>
+        connectDropTarget(<th {...restProps} index={index} style={style} onDoubleClick={() => column && this.props.editColumn(column)}>
           <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
             <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}>
               {column && ['custom', 'colspan', 'action'].includes(column.type) ?
@@ -72,8 +78,13 @@
         </th>),
       )
     } else if (column) {
+      let style = {textAlign: align}
+      if (column.Width) {
+        style.width = column.Width
+        style.minWidth = column.Width
+      }
       return (
-        <th {...restProps} key={column.uuid} onDoubleClick={() => this.props.editColumn(column)}>
+        <th {...restProps} style={style} key={column.uuid} onDoubleClick={() => this.props.editColumn(column)}>
           <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
             <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}>
               {column && ['custom', 'colspan'].includes(column.type) ?
@@ -150,13 +161,13 @@
 
     if (column && column.type === 'custom') {
       return (
-        <td style={{padding: 0, minWidth: (column.Width || 100) / 2, ...(column.style || {})}} className={className}>
+        <td style={{padding: 0, ...(column.style || {})}} className={className}>
           <CardCellComponent cards={config} cardCell={column} elements={column.elements} updateElement={this.updateCard}/>
         </td>
       )
     } else if (column && column.type === 'action') {
       return (
-        <td style={{padding: '0 5px', textAlign: column.Align, minWidth: (column.Width || 100) / 2}} className={'action-column ' + className}>
+        <td style={{padding: '0 5px', textAlign: column.Align}} className={'action-column ' + className}>
           <CardCellComponent cards={config} cardCell={column} elements={column.elements} updateElement={this.updateCard}/>
         </td>
       )
@@ -172,7 +183,7 @@
         }
       }
       return (
-        <td style={{...style, minWidth: (column.Width || 100) / 2}} className={className}>
+        <td style={{...style}} className={className}>
           {val}
           {column.Hide === 'true' ? <CloseCircleOutlined style={{marginLeft: '5px', color: 'orange', fontSize: '12px'}}/> : null}
           {column.marks && column.marks.length ? <AntDesignOutlined className="profile"/> : null}
diff --git a/src/menu/components/table/base-table/columns/index.scss b/src/menu/components/table/base-table/columns/index.scss
index 8e6ee37..8f8cf70 100644
--- a/src/menu/components/table/base-table/columns/index.scss
+++ b/src/menu/components/table/base-table/columns/index.scss
@@ -13,6 +13,11 @@
     font-size: inherit;
     font-weight: inherit;
   }
+  .ant-table-selection-column {
+    width: 60px;
+    min-width: 60px;
+    max-width: 60px;
+  }
   .ant-table-body {
     overflow-x: auto;
     tr {
diff --git a/src/menu/components/table/edit-table/columns/index.jsx b/src/menu/components/table/edit-table/columns/index.jsx
index bbe4bf2..25bd842 100644
--- a/src/menu/components/table/edit-table/columns/index.jsx
+++ b/src/menu/components/table/edit-table/columns/index.jsx
@@ -59,8 +59,14 @@
       </th>
     )
 
+    let style = {cursor: 'move', textAlign: align}
+    if (column.Width) {
+      style.width = column.Width
+      style.minWidth = column.Width
+    }
+
     return connectDragSource(
-      connectDropTarget(<th {...restProps} index={index} style={{ cursor: 'move', textAlign: align }} onDoubleClick={() => this.props.editColumn(column)}>
+      connectDropTarget(<th {...restProps} index={index} style={style} onDoubleClick={() => this.props.editColumn(column)}>
         <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
           <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}>
             {['custom', 'action'].includes(column.type) ?
@@ -136,13 +142,13 @@
 
     if (column && column.type === 'custom') {
       return (
-        <td style={{padding: 0, minWidth: column.Width || 100, ...(column.style || {})}} className={className}>
+        <td style={{padding: 0, ...(column.style || {})}} className={className}>
           <CardCellComponent cards={config} cardCell={column} elements={column.elements} updateElement={this.updateCard}/>
         </td>
       )
     } else if (column && column.type === 'action') {
       return (
-        <td style={{padding: '0 5px', textAlign: column.Align, minWidth: column.Width || 100}} className={'action-column ' + className}>
+        <td style={{padding: '0 5px', textAlign: column.Align}} className={'action-column ' + className}>
           <CardCellComponent cards={config} cardCell={column} elements={column.elements} updateElement={this.updateCard}/>
         </td>
       )
@@ -158,7 +164,7 @@
         }
       }
       return (
-        <td style={{...style, minWidth: column.Width || 100}} className={className}>
+        <td style={style} className={className}>
           {column.field ? <Paragraph className="col-copy" copyable={{ text: column.field }}>{val}</Paragraph> : val}
           {column.marks && column.marks.length ? <AntDesignOutlined className="profile"/> : null}
           {column.Hide === 'true' ? <CloseCircleOutlined className="close-col"/> : null}
diff --git a/src/menu/components/table/edit-table/columns/index.scss b/src/menu/components/table/edit-table/columns/index.scss
index 6ca33c7..699ad86 100644
--- a/src/menu/components/table/edit-table/columns/index.scss
+++ b/src/menu/components/table/edit-table/columns/index.scss
@@ -9,6 +9,11 @@
     color: inherit;
     font-size: inherit;
   }
+  .ant-table-selection-column {
+    width: 60px;
+    min-width: 60px;
+    max-width: 60px;
+  }
   .submit-btn {
     min-height: 24px;
     height: auto;
diff --git a/src/menu/components/table/normal-table/columns/index.jsx b/src/menu/components/table/normal-table/columns/index.jsx
index cd313c3..e976c72 100644
--- a/src/menu/components/table/normal-table/columns/index.jsx
+++ b/src/menu/components/table/normal-table/columns/index.jsx
@@ -54,8 +54,14 @@
     const { connectDragSource, connectDropTarget, moveCol, dropCol, addElement, updateCol, editColumn, pasteCell, changeStyle, deleteCol, index, column, align, fields, children, ...restProps } = this.props
 
     if (index !== undefined) {
+      let style = {cursor: 'move', textAlign: align}
+      if (column.Width) {
+        style.width = column.Width
+        style.minWidth = column.Width
+      }
+
       return connectDragSource(
-        connectDropTarget(<th {...restProps} index={index} style={{ cursor: 'move', textAlign: align }} onDoubleClick={() => column && this.props.editColumn(column)}>
+        connectDropTarget(<th {...restProps} index={index} style={style} onDoubleClick={() => column && this.props.editColumn(column)}>
           <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
             <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}>
               {column && ['custom', 'colspan', 'action'].includes(column.type) ?
@@ -74,8 +80,14 @@
         </th>),
       )
     } else if (column) {
+      let style = {textAlign: align}
+      if (column.Width) {
+        style.width = column.Width
+        style.minWidth = column.Width
+      }
+
       return (
-        <th {...restProps} key={column.uuid} onDoubleClick={() => this.props.editColumn(column)}>
+        <th {...restProps} style={style} key={column.uuid} onDoubleClick={() => this.props.editColumn(column)}>
           <Popover overlayClassName="mk-popover-control-wrap" mouseLeaveDelay={0.2} mouseEnterDelay={0.2} content={
             <div className="mk-popover-control" onDoubleClick={(e) => e.stopPropagation()}>
               {column && ['custom', 'colspan'].includes(column.type) ?
@@ -152,13 +164,13 @@
 
     if (column && column.type === 'custom') {
       return (
-        <td style={{padding: 0, minWidth: column.Width || 100, ...(column.style || {})}} className={className}>
+        <td style={{padding: 0, ...(column.style || {})}} className={className}>
           <CardCellComponent cards={config} cardCell={column} elements={column.elements} updateElement={this.updateCard}/>
         </td>
       )
     } else if (column && column.type === 'action') {
       return (
-        <td style={{padding: '0 5px', textAlign: column.Align, minWidth: column.Width || 100}} className={'action-column ' + className}>
+        <td style={{padding: '0 5px', textAlign: column.Align}} className={'action-column ' + className}>
           <CardCellComponent cards={config} cardCell={column} elements={column.elements} updateElement={this.updateCard}/>
         </td>
       )
@@ -174,7 +186,7 @@
         }
       }
       return (
-        <td style={{...style, minWidth: column.Width || 100}} className={className}>
+        <td style={{...style}} className={className}>
           {column.field ? <Paragraph className="col-copy" copyable={{ text: column.field }}>{val}</Paragraph> : val}
           {column.marks && column.marks.length ? <AntDesignOutlined className="profile"/> : null}
           {column.Hide === 'true' ? <CloseCircleOutlined className="close-col"/> : null}
diff --git a/src/menu/components/table/normal-table/columns/index.scss b/src/menu/components/table/normal-table/columns/index.scss
index db07412..7c8baaa 100644
--- a/src/menu/components/table/normal-table/columns/index.scss
+++ b/src/menu/components/table/normal-table/columns/index.scss
@@ -10,6 +10,11 @@
     font-size: inherit;
     font-weight: inherit;
   }
+  .ant-table-selection-column {
+    width: 60px;
+    min-width: 60px;
+    max-width: 60px;
+  }
   .ant-table-body {
     overflow-x: auto;
     tr {
diff --git a/src/menu/modalconfig/index.jsx b/src/menu/modalconfig/index.jsx
index f834236..916fe45 100644
--- a/src/menu/modalconfig/index.jsx
+++ b/src/menu/modalconfig/index.jsx
@@ -479,6 +479,7 @@
   }
 
   render () {
+    const { btn } = this.props
     const { config, saving } = this.state
 
     return (
@@ -508,7 +509,7 @@
               <SettingOutlined onClick={this.changeSetting} />
               <div className="ant-modal-content" style={{width: config.setting.width > 100 ? config.setting.width : config.setting.width + '%'}}>
                 <div className="ant-modal-header">
-                  <div className="ant-modal-title">{config.setting.title}</div>
+                  <div className="ant-modal-title">{btn.label}</div>
                   <Button className="mk-cols-change" onClick={() => this.changecols(1)}>1鍒�</Button>
                   <Button className="mk-cols-change" onClick={() => this.changecols(2)}>2鍒�</Button>
                   <Button className="mk-cols-change" onClick={() => this.changecols(3)}>3鍒�</Button>
diff --git a/src/menu/transfer/index.jsx b/src/menu/transfer/index.jsx
index b766970..15b6805 100644
--- a/src/menu/transfer/index.jsx
+++ b/src/menu/transfer/index.jsx
@@ -225,15 +225,14 @@
     Api.getSystemConfig(param).then(res => {
       _resolve()
       if (!res.status) {
-        notification.warning({
-          top: 92,
-          message: res.message,
-          duration: 5
+        Modal.warning({
+          title: res.message,
+          okText: '鐭ラ亾浜�'
         })
         return
       }
 
-      localStorage.setItem('menuUpdate', new Date().getTime())
+      localStorage.setItem('menuUpdate', new Date().getTime() + ',' + _config.uuid)
       notification.success({
         top: 92,
         message: '鍒囨崲鎴愬姛銆�',
diff --git a/src/tabviews/basetable/index.jsx b/src/tabviews/basetable/index.jsx
index 7ec750a..09c2024 100644
--- a/src/tabviews/basetable/index.jsx
+++ b/src/tabviews/basetable/index.jsx
@@ -564,6 +564,11 @@
   }
 
   reloadview = () => {
+    window.GLOB.CacheData.delete(this.props.MenuID)
+    if (this.state.config) {
+      this.deleteCache(this.state.config.components)
+    }
+    
     this.setState({
       BID: '',              // 椤甸潰璺宠浆鏃舵惡甯D
       loadingview: true,    // 椤甸潰鍔犺浇涓�
diff --git a/src/tabviews/custom/components/form/simple-form/index.jsx b/src/tabviews/custom/components/form/simple-form/index.jsx
index 31331d5..cecadd1 100644
--- a/src/tabviews/custom/components/form/simple-form/index.jsx
+++ b/src/tabviews/custom/components/form/simple-form/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Spin, notification, Modal } from 'antd'
+import { Spin, notification, Modal, Button } from 'antd'
 
 import Api from '@/api'
 import UtilsDM from '@/utils/utils-datamanage.js'
@@ -57,8 +57,8 @@
     if (config.wrap.datatype !== 'static') {
       _sync = config.setting.sync === 'true'
 
-      if (_sync && data && data[config.dataName]) {
-        _data = data[config.dataName]
+      if (_sync && data) {
+        _data = data[config.dataName] || {$$empty: true}
         if (Array.isArray(_data)) {
           _data = _data[0] || {$$empty: true}
         }
@@ -70,7 +70,7 @@
 
     let _group = config.subcards[0]
 
-    if (_group.subButton.enable === 'false') {
+    if (_group.subButton.enable === 'false' && (!_group.closeButton || _group.closeButton.enable !== 'true')) {
       _group.subButton.style.display = 'none'
       _group.$button = 'no-button'
     }
@@ -283,6 +283,12 @@
     })
   }
 
+  closeTab = () => {
+    const { group } = this.state
+
+    MKEmitter.emit('closeTabView', group.subButton.$MenuID)
+  }
+
   render() {
     const { config, loading, BID, BData, data, group, dict } = this.state
 
@@ -312,6 +318,7 @@
             columns={config.columns}
             selectedData={data.$$empty ? [] : [data]}
           />
+          {group.closeButton && group.closeButton.enable === 'true' ? <Button type="link" onClick={this.closeTab} style={group.closeButton.style}>{group.closeButton.label}</Button> : null}
         </div> : null}
       </div>
     )
diff --git a/src/tabviews/custom/components/form/step-form/index.jsx b/src/tabviews/custom/components/form/step-form/index.jsx
index 7287b76..c9c0773 100644
--- a/src/tabviews/custom/components/form/step-form/index.jsx
+++ b/src/tabviews/custom/components/form/step-form/index.jsx
@@ -56,8 +56,8 @@
     if (config.wrap.datatype !== 'static') {
       _sync = config.setting.sync === 'true'
 
-      if (_sync && data && data[config.dataName]) {
-        _data = data[config.dataName]
+      if (_sync && data) {
+        _data = data[config.dataName] || {$$empty: true}
         if (Array.isArray(_data)) {
           _data = _data[0] || {$$empty: true}
         }
@@ -77,10 +77,10 @@
 
     config.subcards = config.subcards.map((group, i) => {
       group.sort = i + 1
-      if (i === 0) {
+      if (i === 0 && group.prevButton.actionType !== 'close') {
         group.prevButton.enable = 'false'
       }
-      if (i + 1 === config.subcards.length) {
+      if (i + 1 === config.subcards.length && group.nextButton.actionType !== 'close') {
         group.nextButton.enable = 'false'
       }
 
@@ -354,6 +354,11 @@
   prevStep = () => {
     const { config, group } = this.state
 
+    if (group.prevButton.actionType === 'close') {
+      MKEmitter.emit('closeTabView', group.subButton.$MenuID)
+      return
+    }
+
     let _group = config.subcards.filter(item => item.sort === (group.sort - 1))[0]
 
     this.setState({group: null, step: group.sort - 2}, () => {
@@ -364,6 +369,11 @@
   nextStep = () => {
     const { config, group } = this.state
 
+    if (group.nextButton.actionType === 'close') {
+      MKEmitter.emit('closeTabView', group.subButton.$MenuID)
+      return
+    }
+
     let _group = config.subcards.filter(item => item.sort === (group.sort + 1))[0]
 
     this.setState({group: null, step: group.sort}, () => {
diff --git a/src/tabviews/custom/components/form/step-form/index.scss b/src/tabviews/custom/components/form/step-form/index.scss
index 77767fb..06b56f4 100644
--- a/src/tabviews/custom/components/form/step-form/index.scss
+++ b/src/tabviews/custom/components/form/step-form/index.scss
@@ -71,8 +71,10 @@
       border: none;
     }
     .skip {
-      float: right;
+      color: rgba(0, 0, 0, 0.85);
+      position: absolute;
       height: auto;
+      right: 0px;
     }
   }
   .mk-form-action.no-button {
diff --git a/src/tabviews/custom/components/form/tab-form/index.jsx b/src/tabviews/custom/components/form/tab-form/index.jsx
index 013e6ad..18716aa 100644
--- a/src/tabviews/custom/components/form/tab-form/index.jsx
+++ b/src/tabviews/custom/components/form/tab-form/index.jsx
@@ -55,8 +55,8 @@
     if (config.wrap.datatype !== 'static') {
       _sync = config.setting.sync === 'true'
 
-      if (_sync && data && data[config.dataName]) {
-        _data = data[config.dataName]
+      if (_sync && data) {
+        _data = data[config.dataName] || {$$empty: true}
         if (Array.isArray(_data)) {
           _data = _data[0] || {$$empty: true}
         }
diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx
index 1c9b88a..d95478b 100644
--- a/src/tabviews/custom/components/table/normal-table/index.jsx
+++ b/src/tabviews/custom/components/table/normal-table/index.jsx
@@ -561,6 +561,7 @@
     const { setting } = this.state
 
     if (!setting.supModule || setting.supModule !== MenuID) return
+
     if (id !== this.state.BID || id !== '') {
       this.setState({
         pageIndex: 1,
diff --git a/src/tabviews/custom/index.jsx b/src/tabviews/custom/index.jsx
index 0e4ec35..1d68ce3 100644
--- a/src/tabviews/custom/index.jsx
+++ b/src/tabviews/custom/index.jsx
@@ -707,6 +707,7 @@
         item.subcards = item.subcards.map(group => {
           group.subButton.uuid = group.uuid
           group.subButton.$menuId = group.uuid
+          group.subButton.$MenuID = this.props.MenuID
           // group.subButton.$forbid = true // 涓嶅0鏄庢暟鎹簮鍙橀噺
           group.subButton.OpenType = 'formSubmit'
           group.subButton.execError = 'never'
@@ -1080,6 +1081,15 @@
   }
 
   reloadview = () => {
+    window.GLOB.CacheData.delete(this.props.MenuID)
+    
+    if (this.state.config) {
+      this.deleteCache(this.state.config.components)
+      this.state.config.interfaces.forEach(m => {
+        window.GLOB.CacheData.delete(m.uuid)
+      })
+    }
+
     this.setState({
       BID: '',              // 椤甸潰璺宠浆鏃舵惡甯D
       loadingview: true,    // 椤甸潰鍔犺浇涓�
diff --git a/src/tabviews/custom/popview/index.jsx b/src/tabviews/custom/popview/index.jsx
index 04863e0..4a0a7e9 100644
--- a/src/tabviews/custom/popview/index.jsx
+++ b/src/tabviews/custom/popview/index.jsx
@@ -534,6 +534,7 @@
         item.subcards = item.subcards.map(group => {
           group.subButton.uuid = group.uuid
           group.subButton.$menuId = group.uuid
+          group.subButton.$MenuID = Tab.$MenuID
           group.subButton.OpenType = 'formSubmit'
           group.subButton.execError = 'never'
           group.subButton.logLabel = item.$menuname + '-' + group.subButton.label
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index b1d4898..f95e1ef 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -1913,15 +1913,14 @@
           MenuID: btn.MenuID,
           MenuName: btn.MenuName,
           MenuNo: btn.MenuNo,
-          type: btn.tabType,
-          param: {
-            $BID: id
-          }
+          type: btn.tabType
         }
       } else if (!newtab) {
         return
       }
 
+      newtab = {...newtab, param: { $BID: id }}
+
       if (['linkage_navigation', 'linkage', 'menu_board'].includes(window.GLOB.navBar)) {
         MKEmitter.emit('modifyTabs', newtab, 'replace')
       } else {
diff --git a/src/templates/comtableconfig/updatetable/index.jsx b/src/templates/comtableconfig/updatetable/index.jsx
index 39b7c6c..54e8072 100644
--- a/src/templates/comtableconfig/updatetable/index.jsx
+++ b/src/templates/comtableconfig/updatetable/index.jsx
@@ -77,24 +77,22 @@
       style: { backgroundColor: '#ffffff', paddingTop: '16px', paddingBottom: '80px', paddingLeft: '16px', paddingRight: '16px'},
     }
 
-    let uuids = {}
     let formActions = []
     let popActions = []
     let errors = []
-    let mainTb = {name: '涓昏〃', uuid: Utils.getuuid(), useMSearch: 'false'}
+    let mainTb = {name: '涓昏〃', uuid: Utils.getuuid(), useMSearch: 'false', isMain: true}
 
     let oldtabs = {
       mainTable: mainTb.uuid
     }
 
-    let tbl = this.getTable(config, mainTb, uuids, errors, formActions, popActions, oldtabs)
+    let tbl = this.getTable(config, mainTb, errors, formActions, popActions, oldtabs)
 
-    if (config.autoMatic && config.autoMatic.enable === 'true' && uuids[config.autoMatic.action]) {
-      _config.autoMatic = {...config.autoMatic}
-      _config.autoMatic.action = uuids[config.autoMatic.action]
-
-      if (tbl.action.filter(item => item.uuid === _config.autoMatic.action && (['pop', 'prompt', 'exec'].includes(item.OpenType) || (item.OpenType === 'funcbutton' && item.funcType === 'print'))).length === 0) {
+    if (config.autoMatic && config.autoMatic.enable === 'true') {
+      if (tbl.action.filter(item => item.uuid === config.autoMatic.action && (['pop', 'prompt', 'exec'].includes(item.OpenType) || (item.OpenType === 'funcbutton' && item.funcType === 'print'))).length === 0) {
         _config.autoMatic = {enable: 'false'}
+      } else {
+        _config.autoMatic = {...config.autoMatic}
       }
     } else {
       _config.autoMatic = {enable: 'false'}
@@ -185,7 +183,7 @@
         _config.components = _config.components.map(item => {
           if (item.type === 'tabs') {
             item.subtabs = item.subtabs.map(tab => {
-              tab.components[0] = this.getTable(menus[tab.components[0].linkTab], tab.components[0], uuids, errors, formActions, popActions, oldtabs)
+              tab.components[0] = this.getTable(menus[tab.components[0].linkTab], tab.components[0], errors, formActions, popActions, oldtabs)
 
               return tab
             })
@@ -262,7 +260,7 @@
                       MenuName: btn.label,
                       tables: _config.tables || [],
                       Template: 'BaseTable',
-                      components: [this.getTable(menus[btn.uuid], mainTb, {}, errors, formActions)],
+                      components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
                       viewType: 'popview',
                       style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
                     }
@@ -286,7 +284,7 @@
                         MenuName: btn.label,
                         tables: _config.tables || [],
                         Template: 'BaseTable',
-                        components: [this.getTable(menus[btn.uuid], mainTb, {}, errors, formActions)],
+                        components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
                         viewType: 'popview',
                         style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
                       }
@@ -311,7 +309,7 @@
                     MenuName: btn.label,
                     tables: _config.tables || [],
                     Template: 'BaseTable',
-                    components: [this.getTable(menus[btn.uuid], mainTb, {}, errors, formActions)],
+                    components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
                     viewType: 'popview',
                     style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
                   }
@@ -335,7 +333,7 @@
                       MenuName: btn.label,
                       tables: _config.tables || [],
                       Template: 'BaseTable',
-                      components: [this.getTable(menus[btn.uuid], mainTb, {}, errors, formActions)],
+                      components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
                       viewType: 'popview',
                       style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
                     }
@@ -682,6 +680,8 @@
     param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
     param.secretkey = Utils.encrypt(param.LText, param.timestamp)
 
+    let save = false
+
     new Promise(resolve => {
       Api.getSystemConfig(param).then(res => {
         resolve(res)
@@ -689,10 +689,14 @@
     }).then(res => { // 鍒犻櫎鍘熻彍鍗�
       if (!res || !res.status) return res
 
+      save = true
+      localStorage.setItem('menuUpdate', new Date().getTime() + ',' + config.uuid)
+
       if (this.delButtons.length === 0) return res
 
       return Api.getSystemConfig({
         func: 'sPC_MainMenu_Del',
+        up_type: 'Y',
         MenuID: this.delButtons.join(',')
       })
     }).then(res => {
@@ -701,8 +705,6 @@
       _resolve()
 
       if (res.status) {
-        localStorage.setItem('menuUpdate', new Date().getTime())
-
         notification.success({
           top: 92,
           message: '鍗囩骇鎴愬姛',
@@ -719,16 +721,28 @@
           window.location.reload()
         }, 2000)
       } else {
-        notification.warning({
-          top: 92,
-          message: res.message,
-          duration: 5
+        Modal.warning({
+          title: res.message,
+          okText: '鐭ラ亾浜�',
+          onOk: () => {
+            if (save) {
+              delete urlparam.type
+              delete urlparam.MenuType
+
+              let _param = window.btoa(window.encodeURIComponent(JSON.stringify(urlparam)))
+
+              window.history.replaceState(null, null, window.location.href.split('#')[0] + `#/tabledesign/${_param}`)
+              window.location.reload()
+            } else {
+              window.location.reload()
+            }
+          }
         })
       }
     })
   }
 
-  getTable = (config, newCon, uuids, errors, formActions, popActions, oldtabs) => { 
+  getTable = (config, newCon, errors, formActions, popActions, oldtabs) => { 
     let _card = {
       uuid: newCon.uuid,
       type: 'table',
@@ -961,11 +975,12 @@
     let colbtns = []
     let colors = { primary: '#1890ff', yellow: '#c49f47', orange: 'orange', danger: '#ff4d4f', green: '#26C281', dgreen: '#32c5d2', purple: '#8E44AD', cyan: '#13c2c2', gray: '#666666', default: 'rgba(0, 0, 0, 0.65)' }
 
+    let uuids = {}
     config.action.forEach(btn => {
       let _c = btn.class ? btn.class.replace('border-', '') : ''
       let color = colors[_c] || '#1890ff'
       let _btn = fromJS(btn).toJS()
-      _btn.uuid = Utils.getuuid()
+      // _btn.uuid = Utils.getuuid()
       delete _btn.position
       delete _btn.linkTab
 
@@ -1001,8 +1016,6 @@
         _btn.popClose = 'mainline'
       }
 
-      uuids[btn.uuid] = _btn.uuid
-
       if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.funcType === 'print' && btn.execMode === 'pop')) {
 
         formActions.push({origin: btn.uuid, uuid: _btn.uuid, name: newCon.name, label: btn.label})
@@ -1017,6 +1030,8 @@
           return
         }
       }
+
+      uuids[btn.uuid] = true
 
       if (_btn.tabType === 'CommonTable' || _btn.tabType === 'SubTable') {
         _btn.tabType = 'BaseTable'
@@ -1075,9 +1090,7 @@
       }
     })
 
-    if (config.setting.doubleClick && uuids[config.setting.doubleClick]) {
-      _card.wrap.doubleClick = uuids[config.setting.doubleClick]
-    } else {
+    if (config.setting.doubleClick && !uuids[config.setting.doubleClick]) {
       _card.wrap.doubleClick = ''
     }
 
diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx
index 56b75f7..314bb5d 100644
--- a/src/views/menudesign/index.jsx
+++ b/src/views/menudesign/index.jsx
@@ -847,7 +847,6 @@
       btnParam.LText = Utils.formatOptions(btnParam.LText)
       btnParam.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
       btnParam.secretkey = Utils.encrypt(btnParam.LText, btnParam.timestamp)
-      
 
       new Promise(resolve => {
         if (MenuType === 'billPrint') { // 鎵撳嵃鐢熸垚椤甸潰鏁堟灉鍥�
@@ -889,10 +888,7 @@
         if (!res || !res.status) return res
 
         if (MenuType !== 'billPrint') { // 鍩烘湰淇℃伅鏀瑰彉鏃讹紝閫氱煡鑿滃崟鍒楄〃鏇存柊
-          let ori = this.state.oriConfig
-          if (config.MenuName !== ori.MenuName || config.MenuNo !== ori.MenuNo || config.parentId !== ori.parentId) {
-            localStorage.setItem('menuUpdate', new Date().getTime())
-          }
+          localStorage.setItem('menuUpdate', new Date().getTime() + ',' + config.uuid)
         }
         config.open_edition = res.open_edition || ''
         this.setState({
diff --git a/src/views/mobdesign/index.jsx b/src/views/mobdesign/index.jsx
index 811a739..1eed346 100644
--- a/src/views/mobdesign/index.jsx
+++ b/src/views/mobdesign/index.jsx
@@ -1474,6 +1474,8 @@
             needUpdate: false
           })
 
+          localStorage.setItem('mobUpdate', new Date().getTime() + ',' + config.uuid)
+
           notification.success({
             top: 92,
             message: '淇濆瓨鎴愬姛',
diff --git a/src/views/pcdesign/index.jsx b/src/views/pcdesign/index.jsx
index c1ad96f..fa764b8 100644
--- a/src/views/pcdesign/index.jsx
+++ b/src/views/pcdesign/index.jsx
@@ -1399,6 +1399,8 @@
             needUpdate: false
           })
 
+          localStorage.setItem('pcUpdate', new Date().getTime() + ',' + config.uuid)
+
           notification.success({
             top: 92,
             message: '淇濆瓨鎴愬姛',
diff --git a/src/views/systemfunc/sidemenu/config.jsx b/src/views/systemfunc/sidemenu/config.jsx
index 437e65b..f98e20f 100644
--- a/src/views/systemfunc/sidemenu/config.jsx
+++ b/src/views/systemfunc/sidemenu/config.jsx
@@ -32,13 +32,13 @@
     MenuID: '1583979633842550imkchl4qt4qppsiv',
     MenuNo: 'sVersionMUpgrade',
     MenuName: '鐗堟湰鍗囩骇',
-  // }, {
-  //   src: '',
-  //   PageParam: {OpenType: 'newtab', Template: 'TabManage'},
-  //   type: 'TabManage',
-  //   MenuID: 'TabManageView',
-  //   MenuNo: 'TabManage',
-  //   MenuName: '鏍囩椤电鐞�',
+  }, {
+    src: '',
+    PageParam: {OpenType: 'newtab', Template: 'TabManage'},
+    type: 'TabManage',
+    MenuID: 'TabManageView',
+    MenuNo: 'TabManage',
+    MenuName: '鏍囩椤电鐞�',
   }, {
     src: '',
     PageParam: {OpenType: 'newtab', Template: 'CommonTable'},
diff --git a/src/views/tabledesign/index.jsx b/src/views/tabledesign/index.jsx
index b68db34..d368f6b 100644
--- a/src/views/tabledesign/index.jsx
+++ b/src/views/tabledesign/index.jsx
@@ -585,10 +585,7 @@
       }).then(res => {
         if (!res || !res.status) return res
 
-        let ori = this.state.oriConfig
-        if (config.MenuName !== ori.MenuName || config.MenuNo !== ori.MenuNo || config.parentId !== ori.parentId) {
-          localStorage.setItem('menuUpdate', new Date().getTime())
-        }
+        localStorage.setItem('menuUpdate', new Date().getTime() + ',' + config.uuid)
         config.open_edition = res.open_edition || ''
 
         this.setState({

--
Gitblit v1.8.0