From a99caad99c3c19e85edd03f2fe425a0630033ac5 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 20 十一月 2024 16:09:11 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/menu/components/editor/braft-editor/options.jsx                   |    8 
 src/tabviews/custom/components/editor/braft-editor/index.jsx          |    4 
 src/views/appmanage/transmenu/index.jsx                               |    2 
 src/utils/utils-custom.js                                             |  129 +++--
 src/templates/zshare/verifycard/customscript/index.jsx                |    2 
 src/components/header/sysmessage/icon.jsx                             |   86 +++
 src/menu/components/table/edit-table/options.jsx                      |   15 
 src/views/design/sidemenu/index.jsx                                   |    2 
 src/tabviews/zshare/actionList/normalbutton/index.jsx                 |   83 ++-
 src/views/mobdesign/index.jsx                                         |    4 
 src/assets/img/mkpublic.jpg                                           |    0 
 src/tabviews/custom/components/card/data-card/index.jsx               |    2 
 src/assets/css/main.scss                                              |    9 
 src/components/header/sysmessage/index.jsx                            |   31 +
 src/mob/components/navbar/normal-navbar/menus/menuform/index.jsx      |    1 
 src/components/header/index.scss                                      |   42 ++
 src/tabviews/custom/components/card/prop-card/index.jsx               |    4 
 src/menu/components/card/double-data-card/options.jsx                 |   15 
 src/menu/components/card/data-card/options.jsx                        |   16 
 src/menu/components/share/actioncomponent/formconfig.jsx              |  146 +++++-
 src/mob/components/menubar/normal-menubar/menucomponent/options.jsx   |    1 
 src/menu/components/card/cardcomponent/index.jsx                      |   32 -
 src/tabviews/custom/components/table/edit-table/normalTable/index.jsx |    2 
 src/tabviews/custom/components/editor/braft-editor/index.scss         |   18 
 src/tabviews/zshare/mutilform/index.jsx                               |    8 
 src/menu/components/share/actioncomponent/actionform/index.jsx        |   28 
 src/views/appmanage/index.jsx                                         |    7 
 src/menu/debug/index.jsx                                              |    6 
 src/menu/components/card/cardcomponent/options.jsx                    |   10 
 src/templates/sharecomponent/searchcomponent/searchform/index.jsx     |    4 
 src/tabviews/custom/components/card/double-data-card/index.scss       |    4 
 src/menu/components/table/normal-table/options.jsx                    |   15 
 src/components/header/index.jsx                                       |   18 
 src/tabviews/zshare/actionList/normalbutton/index.scss                |   72 +++
 src/tabviews/custom/components/card/double-data-card/index.jsx        |    2 
 src/templates/zshare/verifycard/callbackcustomscript/index.jsx        |    2 
 src/views/rolemanage/index.jsx                                        |   20 
 src/templates/zshare/verifycard/customform/index.jsx                  |    2 
 src/api/index.js                                                      |    7 
 src/tabviews/custom/components/share/normalTable/index.jsx            |    2 
 src/components/normalform/modalform/mkTable/index.jsx                 |   15 
 src/tabviews/custom/components/form/simple-form/index.jsx             |    4 
 src/tabviews/custom/components/card/data-card/index.scss              |    4 
 src/utils/utils.js                                                    |    8 
 src/tabviews/custom/components/card/table-card/index.scss             |    4 
 src/index.js                                                          |   13 
 src/tabviews/custom/components/form/tab-form/index.jsx                |    4 
 src/tabviews/custom/components/card/table-card/index.jsx              |    2 
 src/components/header/sysmessage/index.scss                           |  108 +++-
 src/templates/zshare/verifycard/index.jsx                             |    6 
 src/tabviews/custom/components/interfaces/interItem/index.jsx         |    6 
 src/menu/components/card/cardcellcomponent/formconfig.jsx             |    3 
 src/menu/modalconfig/index.scss                                       |   74 +++
 src/tabviews/custom/components/form/step-form/index.jsx               |    4 
 src/menu/components/editor/braft-editor/index.jsx                     |    3 
 src/menu/modalconfig/index.jsx                                        |   14 
 src/tabviews/custom/components/card/balcony/index.jsx                 |    4 
 src/components/header/sysmessage/msg.png                              |    0 
 src/utils/option.js                                                   |   39 +
 59 files changed, 876 insertions(+), 300 deletions(-)

diff --git a/src/api/index.js b/src/api/index.js
index b18ae3e..531e7b7 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -175,12 +175,7 @@
    * @description 娓稿鐧诲綍
    */
   getTouristMsg (binding_type, appid, openid, memberid, scanId) {
-    let _SessionUid = localStorage.getItem('SessionUid')
-
-    if (!_SessionUid) { // 鎵嬪姩娓呴櫎SessionUid鏃讹紝瀹炴椂鐢熸垚
-      _SessionUid = Utils.getuuid()
-      localStorage.setItem('SessionUid', _SessionUid)
-    }
+    let _SessionUid = localStorage.getItem('SessionUid') || ''
 
     let param = {
       func: 's_visitor_login',
diff --git a/src/assets/css/main.scss b/src/assets/css/main.scss
index 7f4eea2..68bd082 100644
--- a/src/assets/css/main.scss
+++ b/src/assets/css/main.scss
@@ -817,4 +817,13 @@
 // 榧犳爣鎮诞澧炲姞涓嬪垝绾�
 .mk-hover-underline:hover {
   text-decoration: underline!important;
+}
+// 闅愯棌绌哄�兼椂鐨勫浘鏍�
+body .mk-empty-hide .ant-empty, body .mk-empty-hide + .ant-empty {
+  min-height: 50px;
+  padding-top: 0px;
+  margin: 0px;
+  .ant-empty-image, .ant-empty-description {
+    display: none;
+  }
 }
\ No newline at end of file
diff --git a/src/assets/img/mkpublic.jpg b/src/assets/img/mkpublic.jpg
new file mode 100644
index 0000000..5100efb
--- /dev/null
+++ b/src/assets/img/mkpublic.jpg
Binary files differ
diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index 4dd6942..ac0967d 100644
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -11,6 +11,7 @@
 import Utils from '@/utils/utils.js'
 import avatar from '@/assets/img/avatar.jpg'
 import wxicon from '@/assets/img/wx-icon.png'
+import mkpublic from '@/assets/img/mkpublic.jpg'
 import './index.scss'
 
 const { confirm } = Modal
@@ -27,6 +28,7 @@
     fullName: '',
     logourl: window.GLOB.mainlogo,
     wxVisible: false,
+    wxStep: 1,
     loginVisible: false,
     loginLoading: false,
     avatar: Utils.getrealurl(sessionStorage.getItem('avatar')),
@@ -638,7 +640,7 @@
         <Menu.Item key="verup" onClick={this.verup}>
           {dict['page_upd'] || '椤甸潰鏇存柊'}
         </Menu.Item>
-        {window.GLOB.WXNotice ? <Menu.Item key="wxnotice" onClick={() => this.setState({wxVisible: true})}>
+        {window.GLOB.WXNotice ? <Menu.Item key="wxnotice" onClick={() => this.setState({wxVisible: true, wxStep: 1})}>
           寰俊娑堟伅
         </Menu.Item> : null}
         {window.GLOB.appVersion ? <Menu.Item key="version" onClick={this.about}>
@@ -823,14 +825,22 @@
           footer={null}
           destroyOnClose
         >
-          <div className="wx-sms-wrap">
+          {this.state.wxStep !== 2 ? <div className="wx-sms-wrap">
+            <img className="mk-img" src={mkpublic} alt=""/>
+            <div className="mk-tip">
+              <span>寰俊鎵爜</span>
+              <span>鍏虫敞鍏紬鍙�</span>
+              <span>鍏虫敞鍏紬鍙蜂笖鎺堟潈鍚庢柟鍙帴鏀舵秷鎭��</span>
+              <span onClick={() => this.setState({wxStep: 2})}>涓嬩竴姝�</span>
+            </div>
+          </div> : <div className="wx-sms-wrap">
             <QrCode card={{qrWidth: 200, color: '#000000'}} value={window.GLOB.baseurl + 'mob/wxnotice.html?userid=' + sessionStorage.getItem('UserID') + '&loginuid=' + sessionStorage.getItem('LoginUID')}/>
             <div className="tip">
               <img src={wxicon} alt=""/>
               <span>寰俊鎵爜</span>
-              <span>鍏虫敞鍏紬鍙�</span>
+              <span>鑾峰彇鐢ㄦ埛鎺堟潈</span>
             </div>
-          </div>
+          </div>}
         </Modal>
       </header>
     )
diff --git a/src/components/header/index.scss b/src/components/header/index.scss
index 7ba7cf0..914e967 100644
--- a/src/components/header/index.scss
+++ b/src/components/header/index.scss
@@ -287,6 +287,7 @@
   }
   .wx-sms-wrap {
     text-align: center;
+    position: relative;
 
     .tip {
       margin: 215px 15px 15px;
@@ -305,6 +306,47 @@
         font-weight: bold;
       }
     }
+
+    .mk-img {
+      width: 258px;
+      height: 258px;
+      position: relative;
+      top: -15px;
+    }
+    .mk-tip {
+      margin: 0px 15px 15px;
+      position: relative;
+      top: -20px;
+      span {
+        font-size: 16px;
+        letter-spacing: 2px;
+        font-weight: 500;
+        color: #333;
+      }
+      span:nth-child(2) {
+        color: #45B449;
+        font-weight: bold;
+      }
+      span:nth-child(3) {
+        display: block;
+        font-size: 13px;
+      }
+      span:nth-child(4) {
+        display: block;
+        position: absolute;
+        right: -10px;
+        bottom: -25px;
+        padding: 0 5px;
+        font-size: 14px;
+        font-weight: 600;
+        cursor: pointer;
+        color: rgba(0, 0, 0, 0.65);
+        transition: color 0.2s;
+      }
+      span:nth-child(4):hover {
+        color: rgba(0, 0, 0, 0.85);
+      }
+    }
     .qrcode-box + .tip {
       margin-top: 15px;
     }
diff --git a/src/components/header/sysmessage/icon.jsx b/src/components/header/sysmessage/icon.jsx
index a60199f..fd813a8 100644
--- a/src/components/header/sysmessage/icon.jsx
+++ b/src/components/header/sysmessage/icon.jsx
@@ -1,13 +1,14 @@
 import React, { Component } from 'react'
 import { notification } from 'antd'
-import { MessageFilled } from '@ant-design/icons'
+import moment from 'moment'
 
 import Api from '@/api'
 import MKEmitter from '@/utils/events.js'
+import url from './msg.png'
 
 class SysIcon extends Component {
   state = {
-    notices: []
+    notices: null
   }
 
   componentDidMount () {
@@ -18,15 +19,60 @@
 
   getMsgList = () => {
     let param = {
-      func: 's_get_kei'
+      func: 's_get_unread_oa_mail_v1'
     }
 
-    Api.getSystemConfig(param).then(result => {
+    Api.genericInterface(param).then(result => {
       if (result.status) {
         let notices = result.data || []
+        notices.forEach(item => {
+          let time = new Date(item.submitdate).getTime()
+          let _val = item.submitdate
+          if (!isNaN(time)) {
+            time = parseInt(time / 60000)                                     // 鏃堕棿鍊�
+            let now = parseInt(new Date().getTime() / 60000)                  // 褰撳墠鏃堕棿鍊�
+            let start = new Date(new Date().toDateString()).getTime() / 60000 // 浠婂ぉ闆剁偣鏃堕棿鍊�
+            let split = now - time
+
+            if (split < 0) { // 鏃堕棿鍊煎湪褰撳墠鏃堕棿涔嬪悗
+              _val = moment(_val).format('MM鏈圖D鏃� HH:mm')
+            } else if (split < 3) {
+              _val = '鍒氬垰'
+            } else if (split < 5) {
+              _val = '3鍒嗛挓鍓�'
+            } else if (split < 10) {
+              _val = '5鍒嗛挓鍓�'
+            } else if (split < 20) {
+              _val = '10鍒嗛挓鍓�'
+            } else if (split < 30) {
+              _val = '20鍒嗛挓鍓�'
+            } else if (split < 60) {
+              _val = '30鍒嗛挓鍓�'
+            } else if (split < 420 || time > start) { // 7灏忔椂鍐呮垨鏃堕棿鍊煎湪浠婂ぉ闆剁偣鍚�
+              _val = parseInt(split / 60) + '灏忔椂鍓�'
+            } else {                                  // 鏃堕棿鍊煎湪浠婂ぉ闆剁偣涔嬪墠
+              let _day = parseInt((start - time) / (24 * 60)) + 1
+              if (_day === 1) {
+                _val = '鏄ㄥぉ'
+              } else if (_day <= 30) {
+                _val = _day + '澶╁墠'
+              } else {
+                _val = moment(_val).format('MM鏈圖D鏃� HH:mm')
+              }
+            }
+          }
+          item.time = _val
+        })
 
         this.setState({ notices })
-        MKEmitter.emit('sysMessageChange', notices)
+
+        MKEmitter.emit('sysMessageChange', notices.slice(0, 5))
+
+        if (notices.length > 0) {
+          setTimeout(() => {
+            MKEmitter.emit('sysMessageOpen')
+          }, 50)
+        }
 
         setTimeout(() => {
           this.getMsgList()
@@ -42,14 +88,40 @@
   }
 
   open = () => {
-    MKEmitter.emit('sysMessageOpen')
+    const { notices } = this.state
+
+    if (notices.length === 0) {
+      this.toMenu()
+    } else {
+      MKEmitter.emit('sysMessageOpen')
+    }
+  }
+
+  toMenu = () => {
+    let menu = {
+      MenuID: '1731250110643ivgpv9gdgiif5lggh4e',
+      MenuName: '鍐呴儴閭',
+      type: 'CustomPage',
+      param: {$BID: ''}
+    }
+
+    if (window.GLOB.mkThdMenus.has(menu.MenuID)) {
+      menu.MenuName = window.GLOB.mkThdMenus.get(menu.MenuID).MenuName
+    }
+
+    MKEmitter.emit('modifyTabs', menu)
   }
 
   render() {
     const { notices } = this.state
 
+    if (!notices) return null
+    
     return (
-      <MessageFilled className="mk-msg-icon" data-title={notices.length ? notices.length : ''} onClick={this.open} />
+      <span className="mk-msg-icon" onClick={this.open}>
+        <img src={url} alt=""/>
+        <span>{notices.length ? notices.length : ''}</span>
+      </span>
     )
   }
 }
diff --git a/src/components/header/sysmessage/index.jsx b/src/components/header/sysmessage/index.jsx
index 2e444ab..8c52e0a 100644
--- a/src/components/header/sysmessage/index.jsx
+++ b/src/components/header/sysmessage/index.jsx
@@ -1,5 +1,5 @@
 import React, { Component } from 'react'
-import { CloseOutlined } from '@ant-design/icons'
+import { CloseOutlined, SoundOutlined } from '@ant-design/icons'
 
 import MKEmitter from '@/utils/events.js'
 
@@ -26,6 +26,10 @@
 
   sysMessageChange = (notices) => {
     this.setState({ notices })
+
+    if (notices.length === 0) {
+      this.setState({ visible: false })
+    }
   }
 
   sysMessageOpen = () => {
@@ -36,20 +40,39 @@
     this.setState({ visible: false })
   }
 
+  toMenu = () => {
+    let menu = {
+      MenuID: '1731250110643ivgpv9gdgiif5lggh4e',
+      MenuName: '鍐呴儴閭',
+      type: 'CustomPage',
+      param: {$BID: ''}
+    }
+
+    if (window.GLOB.mkThdMenus.has(menu.MenuID)) {
+      menu.MenuName = window.GLOB.mkThdMenus.get(menu.MenuID).MenuName
+    }
+
+    MKEmitter.emit('modifyTabs', menu)
+
+    this.setState({ visible: false })
+  }
+
   render() {
     const { visible, notices } = this.state
 
     return (
       <div className={'mk-msg-wrap' + (visible ? ' visible' : '')}>
         <div className="title">
-          绯荤粺娑堟伅
+          <SoundOutlined />
           <CloseOutlined onClick={this.close}/>
         </div>
         <div className="msg-list">{notices.map((item, index) => {
-          return <div className="msg-item" key={index}>
-            {item.remark}
+          return <div className={'msg-item ' + (item.urgent_type === 'Y' ? 'red' : '')} key={index} onClick={this.toMenu}>
+            <span>{item.createstaff}</span><span className="time">{item.time}</span>
+            <span>{item.title}</span>
           </div>
         })}</div>
+        <span className="jump" onClick={this.toMenu}>璇︽儏&nbsp;&nbsp;&gt;</span>
       </div>
     )
   }
diff --git a/src/components/header/sysmessage/index.scss b/src/components/header/sysmessage/index.scss
index 997c78e..8936f09 100644
--- a/src/components/header/sysmessage/index.scss
+++ b/src/components/header/sysmessage/index.scss
@@ -1,48 +1,52 @@
 .mk-msg-icon {
+  display: inline-block;
+  position: relative;
   font-size: 16px;
-  margin-top: 17px;
+  margin-top: 12px;
   margin-right: 20px;
   margin-left: 0px;
   color: #1CD66C;
   cursor: pointer;
-}
-.mk-msg-icon[data-title] {
-  position: relative;
 
-  &::before {
-    content: " ";
-    position: absolute;
-    top: 6px;
-    left: 2px;
-    z-index: -1;
-    width: 12px;
-    height: 3px;
-    display: block;
-    background: #fff;
+  img {
+    width: 22px;
+    height: 22px;
   }
-  &::after {
+  span {
     position: absolute;
-    top: -10px;
-    left: 15px;
+    top: -6px;
+    left: 19px;
     color: #f5222d;
     font-size: 12px;
-    line-height: 16px;
     white-space: nowrap;
     font-weight: 600;
-    content: attr(data-title);
   }
 }
+// .mk-msg-icon[data-title] {
+//   position: relative;
+
+//   &::after {
+//     position: absolute;
+//     top: -10px;
+//     left: 15px;
+//     color: #f5222d;
+//     font-size: 12px;
+//     line-height: 16px;
+//     white-space: nowrap;
+//     font-weight: 600;
+//     content: attr(data-title);
+//   }
+// }
 .mk-msg-wrap {
   position: fixed;
-  width: 200px;
-  height: 400px;
-  top: 92px;
-  right: 15px;
+  width: 300px;
+  top: 50px;
+  right: 120px;
   z-index: -1;
   opacity: 0;
-  padding: 10px;
+  padding: 7px 10px 24px;
   font-size: 13px;
-  background-color: #fff;
+  background-color: var(--mk-sys-color1);
   background-clip: padding-box;
   color: rgba(0, 0, 0, 0.85);
   border: 0;
@@ -53,27 +57,61 @@
   transition: all 0.2s;
 
   .title {
-    text-align: center;
+    position: relative;
+    text-align: left;
+    font-size: 14px;
 
     .anticon-close {
       position: absolute;
-      right: 10px;
-      color: rgba(0, 0, 0, 0.45);
+      right: 5px;
+      top: 1px;
       cursor: pointer;
       transition: color 0.2s;
-    }
-    .anticon-close:hover {
-      color: rgba(0, 0, 0, 0.85);
     }
   }
   .msg-list {
     .msg-item {
-      height: 80px;
-      background: rgba(0, 0, 0, 0.05);
+      position: relative;
+      height: 55px;
+      background: #ffffff;
       margin: 10px 0px;
-      padding: 5px;
-      border-radius: 2px;
+      padding: 8px;
+      border-radius: 4px;
+      font-size: 14px;
+      cursor: pointer;
+      span {
+        display: block;
+        overflow: hidden;
+        word-break: break-word;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+      }
     }
+    .msg-item:first-child {
+      margin-top: 7px;
+    }
+    .msg-item.red {
+      color: #C32539;
+    }
+    .time {
+      position: absolute;
+      top: 5px;
+      right: 8px;
+      font-size: 13px;
+    }
+  }
+
+  .jump {
+    position: absolute;
+    right: 15px;
+    bottom: 7px;
+    font-size: 14px;
+    cursor: pointer;
+    color: #1890ff;
+    transition: color 0.2s;
+  }
+  .jump:hover {
+    color: #ffffff;
   }
 }
 .mk-msg-wrap.visible {
diff --git a/src/components/header/sysmessage/msg.png b/src/components/header/sysmessage/msg.png
new file mode 100644
index 0000000..1f1b658
--- /dev/null
+++ b/src/components/header/sysmessage/msg.png
Binary files differ
diff --git a/src/components/normalform/modalform/mkTable/index.jsx b/src/components/normalform/modalform/mkTable/index.jsx
index 0ae8cfa..6c9d01f 100644
--- a/src/components/normalform/modalform/mkTable/index.jsx
+++ b/src/components/normalform/modalform/mkTable/index.jsx
@@ -220,21 +220,8 @@
 
   changeMenu = (record) => {
     let MenuId = record.menu
-    if (MenuId === 'IM') {
-      if (!sessionStorage.getItem('instantMessage')) return
 
-      let param = {
-        MenuID: sessionStorage.getItem('instantMessage'),
-        copyMenuId: '',
-        type: 'view'
-      }
-  
-      param = window.btoa(window.encodeURIComponent(JSON.stringify(param)))
-  
-      MKEmitter.emit('changeEditMenu', {routerUrl: '/imdesign/' + param})
-    } else {
-      MKEmitter.emit('changeEditMenu', { ...record, MenuID: MenuId})
-    }
+    MKEmitter.emit('changeEditMenu', { ...record, MenuID: MenuId})
   }
 
   isEditing = record => record.uuid === this.state.editingKey
diff --git a/src/index.js b/src/index.js
index 9a8e788..c6888a5 100644
--- a/src/index.js
+++ b/src/index.js
@@ -12,14 +12,23 @@
 import '@/assets/css/viewstyle.scss'
 
 if (!localStorage.getItem('SessionUid')) {
-  localStorage.setItem('SessionUid', (() => {
+  let sid = (() => {
     let uuid = []
     let _options = '0123456789abcdefghigklmnopqrstuv'
     for (let i = 0; i < 32; i++) {
       uuid.push(_options.substr(Math.floor(Math.random() * 0x20), 1))
     }
     return uuid.join('')
-  })())
+  })()
+
+  if (/_mk_sid=[0-9a-z]{32}/.test(document.cookie)) {
+    sid = document.cookie.match(/_mk_sid=[0-9a-z]{32}/)[0].split('=')[1]
+  } else {
+    document.cookie = '_mk_sid=' + sid
+  }
+
+  localStorage.setItem('SessionUid', sid)
+
 }
 
 fetch('../options.json')
diff --git a/src/menu/components/card/cardcellcomponent/formconfig.jsx b/src/menu/components/card/cardcellcomponent/formconfig.jsx
index 99d6305..55eb030 100644
--- a/src/menu/components/card/cardcellcomponent/formconfig.jsx
+++ b/src/menu/components/card/cardcellcomponent/formconfig.jsx
@@ -124,6 +124,9 @@
     } else {
       appMenus = []
     }
+    // if (appType === 'mob') {
+    //   appMenus.push({value: 'sign', text: '绛惧悕锛堢郴缁熼〉锛�'})
+    // }
     appMenus.push({value: 'goback', text: '杩斿洖锛堜笂涓�椤碉級'})
   }
 
diff --git a/src/menu/components/card/cardcomponent/index.jsx b/src/menu/components/card/cardcomponent/index.jsx
index 823a4b6..ce42f87 100644
--- a/src/menu/components/card/cardcomponent/index.jsx
+++ b/src/menu/components/card/cardcomponent/index.jsx
@@ -417,42 +417,14 @@
     const { card, appType } = this.state
 
     if (card.setting.click === 'menu' && card.setting.menu) {
-      if (['IM'].includes(card.setting.menu)) {
-        if (!sessionStorage.getItem('instantMessage')) return
-        
-        let param = {
-          MenuID: sessionStorage.getItem('instantMessage'),
-          copyMenuId: '',
-          type: 'view'
-        }
-    
-        param = window.btoa(window.encodeURIComponent(JSON.stringify(param)))
-    
-        MKEmitter.emit('changeEditMenu', {routerUrl: '/imdesign/' + param})
-      } else {
-        MKEmitter.emit('changeEditMenu', {MenuID: card.setting.menu})
-      }
+      MKEmitter.emit('changeEditMenu', {MenuID: card.setting.menu})
     } else if (card.setting.click === 'menus' && card.menus && card.menus.length > 0 && cards.subtype === 'datacard' && appType) {
       this.setState({visible: true})
     }
   }
 
   changeMenu = (MenuId) => {
-    if (MenuId === 'IM') {
-      if (!sessionStorage.getItem('instantMessage')) return
-
-      let param = {
-        MenuID: sessionStorage.getItem('instantMessage'),
-        copyMenuId: '',
-        type: 'view'
-      }
-  
-      param = window.btoa(window.encodeURIComponent(JSON.stringify(param)))
-  
-      MKEmitter.emit('changeEditMenu', {routerUrl: '/imdesign/' + param})
-    } else {
-      MKEmitter.emit('changeEditMenu', {MenuID: MenuId})
-    }
+    MKEmitter.emit('changeEditMenu', {MenuID: MenuId})
   }
 
   render() {
diff --git a/src/menu/components/card/cardcomponent/options.jsx b/src/menu/components/card/cardcomponent/options.jsx
index 28d5b82..5e985e1 100644
--- a/src/menu/components/card/cardcomponent/options.jsx
+++ b/src/menu/components/card/cardcomponent/options.jsx
@@ -18,11 +18,11 @@
     } else {
       menulist = []
     }
-    if (appType === 'mob' && (subtype === 'datacard' || subtype === 'propcard') && cardType !== 'extendCard') { // 鏁版嵁鍗″彲鎵撳紑鍗虫椂閫氫俊
-      menulist.push({
-        value: 'IM', label: '鍗虫椂閫氫俊锛堢郴缁熼〉锛�'
-      })
-    }
+    // if (appType === 'mob' && (subtype === 'datacard' || subtype === 'propcard') && cardType !== 'extendCard') { // 鏁版嵁鍗″彲鎵撳紑鍗虫椂閫氫俊
+    //   menulist.push({
+    //     value: 'IM', label: '鍗虫椂閫氫俊锛堢郴缁熼〉锛�'
+    //   })
+    // }
   } else {
     menulist = sessionStorage.getItem('fstMenuList')
     if (menulist) {
diff --git a/src/menu/components/card/data-card/options.jsx b/src/menu/components/card/data-card/options.jsx
index ad0ad59..8618072 100644
--- a/src/menu/components/card/data-card/options.jsx
+++ b/src/menu/components/card/data-card/options.jsx
@@ -456,6 +456,22 @@
         {value: 'show', label: '鍚�'},
         {value: 'hidden', label: '鏄�'},
       ],
+      controlFields: [
+        {field: 'empSign', values: ['show']},
+      ]
+    },
+    {
+      type: 'radio',
+      field: 'empSign',
+      label: '绌哄�煎浘鏍�',
+      initval: wrap.empSign || 'show',
+      tooltip: '褰撴煡璇㈡暟鎹负绌烘椂锛屾槸鍚︽樉绀虹┖鍊兼彁绀哄浘鏍囥��',
+      required: false,
+      options: [
+        {value: 'show', label: '鏄剧ず'},
+        {value: 'hidden', label: '闅愯棌'},
+      ],
+      forbid: subtype === 'propcard'
     },
     {
       type: 'select',
diff --git a/src/menu/components/card/double-data-card/options.jsx b/src/menu/components/card/double-data-card/options.jsx
index 5cb3395..2fc6753 100644
--- a/src/menu/components/card/double-data-card/options.jsx
+++ b/src/menu/components/card/double-data-card/options.jsx
@@ -173,6 +173,21 @@
         {value: 'show', label: '鍚�'},
         {value: 'hidden', label: '鏄�'},
       ],
+      controlFields: [
+        {field: 'empSign', values: ['show']},
+      ]
+    },
+    {
+      type: 'radio',
+      field: 'empSign',
+      label: '绌哄�煎浘鏍�',
+      initval: wrap.empSign || 'show',
+      tooltip: '褰撴煡璇㈡暟鎹负绌烘椂锛屾槸鍚︽樉绀虹┖鍊兼彁绀哄浘鏍囥��',
+      required: false,
+      options: [
+        {value: 'show', label: '鏄剧ず'},
+        {value: 'hidden', label: '闅愯棌'},
+      ]
     },
     {
       type: 'select',
diff --git a/src/menu/components/editor/braft-editor/index.jsx b/src/menu/components/editor/braft-editor/index.jsx
index ba699ef..553f4b0 100644
--- a/src/menu/components/editor/braft-editor/index.jsx
+++ b/src/menu/components/editor/braft-editor/index.jsx
@@ -149,6 +149,9 @@
     const { card } = this.state
 
     if (res.tbStyle) {
+      if (res.tbStyle.includes('no-border') && (res.tbStyle.includes('bold-border') || res.tbStyle.includes('deep-border'))) {
+        res.tbStyle = res.tbStyle.filter(item => item !== 'no-border')
+      }
       res.tbStyle = res.tbStyle.join(' ')
     }
 
diff --git a/src/menu/components/editor/braft-editor/options.jsx b/src/menu/components/editor/braft-editor/options.jsx
index d3f260f..44defce 100644
--- a/src/menu/components/editor/braft-editor/options.jsx
+++ b/src/menu/components/editor/braft-editor/options.jsx
@@ -135,12 +135,16 @@
       field: 'tbStyle',
       label: '琛ㄦ牸鏍峰紡',
       initval: wrap.tbStyle ? wrap.tbStyle.split(' ') : [],
+      tooltip: '瀵屾枃鏈腑琛ㄦ牸鐨勬牱寮忥紝娉細閫夋嫨鈥滆竟妗嗗姞绮椻�濇垨鈥滆竟妗嗛鑹插姞娣扁�濇椂鈥滄棤杈规鈥濇棤鏁堛��',
       required: false,
       options: [
         {value: 'th-light', label: '琛ㄥご閫忔槑'},
-        {value: 'no-border', label: '鏃犺竟妗�'},
         {value: 'tb-flex', label: '鍒楃瓑瀹�'},
-      ]
+        {value: 'no-border', label: '鏃犺竟妗�'},
+        {value: 'bold-border', label: '杈规鍔犵矖'},
+        {value: 'deep-border', label: '杈规棰滆壊鍔犳繁'},
+      ],
+      span: 24
     },
     // {
     //   type: 'radio',
diff --git a/src/menu/components/share/actioncomponent/actionform/index.jsx b/src/menu/components/share/actioncomponent/actionform/index.jsx
index dcf94bf..8350b78 100644
--- a/src/menu/components/share/actioncomponent/actionform/index.jsx
+++ b/src/menu/components/share/actioncomponent/actionform/index.jsx
@@ -15,16 +15,16 @@
 const CodeMirror = asyncComponent(() => import('@/templates/zshare/codemirror'))
 const MKTable = asyncComponent(() => import('@/components/normalform/modalform/mkTable'))
 const acTyOptions = {
-  pop: ['label', 'OpenType', 'intertype', 'Ot', 'show', 'hover', 'swipe', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'anchors', 'width', 'openmenu', 'refreshTab', 'position', 'hoverTitle', 'hidden', 'preButton'],
-  prompt: ['label', 'OpenType', 'intertype', 'Ot', 'show', 'hover', 'swipe', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'anchors', 'width', 'openmenu', 'refreshTab', 'position', 'tipTitle', 'hoverTitle', 'hidden', 'preButton'],
-  exec: ['label', 'OpenType', 'intertype', 'Ot', 'show', 'hover', 'swipe', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'anchors', 'width', 'openmenu', 'refreshTab', 'hoverTitle', 'hidden', 'preButton'],
+  pop: ['label', 'OpenType', 'intertype', 'Ot', 'show', 'hover', 'swipe', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'anchors', 'width', 'openmenu', 'refreshTab', 'position', 'hoverTitle', 'hidden', 'preButton', 'extBtn', 'reload'],
+  prompt: ['label', 'OpenType', 'intertype', 'Ot', 'show', 'hover', 'swipe', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'anchors', 'width', 'openmenu', 'refreshTab', 'position', 'tipTitle', 'hoverTitle', 'hidden', 'preButton', 'reload'],
+  exec: ['label', 'OpenType', 'intertype', 'Ot', 'show', 'hover', 'swipe', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'anchors', 'width', 'openmenu', 'refreshTab', 'hoverTitle', 'hidden', 'preButton', 'reload'],
   excelIn: ['label', 'Ot', 'OpenType', 'intertype', 'show', 'hover', 'icon', 'class', 'color', 'sheet', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'width', 'hidden', 'refreshTab'],
   excelOut: ['label', 'Ot', 'OpenType', 'intertype', 'show', 'hover', 'icon', 'class', 'color', 'execSuccess', 'execError', 'syncComponent', 'switchTab', 'pagination', 'search', 'width', 'hidden', 'refreshTab'],
   popview: ['label', 'Ot', 'OpenType', 'show', 'hover', 'icon', 'class', 'color', 'popClose', 'width', 'display', 'ratio', 'syncComponent', 'clickouter', 'maskStyle', 'closeButton', 'hidden'],
   tab: ['label', 'Ot', 'OpenType', 'show', 'hover', 'icon', 'class', 'color', 'linkmenu', 'width', 'hidden', 'openTab'],
   innerpage: ['label', 'Ot', 'OpenType', 'pageTemplate', 'show', 'hover', 'swipe', 'icon', 'class', 'color', 'width', 'hidden'],
   funcbutton: ['label', 'OpenType', 'funcType', 'show', 'hover', 'swipe', 'icon', 'class', 'color', 'width', 'hidden'],
-  form: ['label', 'OpenType', 'formType', 'intertype', 'Ot', 'execSuccess', 'execError', 'syncComponent', 'width', 'openmenu', 'refreshTab', 'title', 'hidden']
+  form: ['label', 'OpenType', 'formType', 'intertype', 'Ot', 'execSuccess', 'execError', 'syncComponent', 'width', 'openmenu', 'refreshTab', 'title', 'hidden', 'reload']
 }
 
 class ActionForm extends Component {
@@ -248,9 +248,12 @@
       } else {
         reOptions.sqlType = this.state.insertUpdateOptions
       }
-      // if (this.record.execSuccess === 'goback') {
-        shows.push('reload')
-      // }
+      if (openType === 'pop') {
+        shows.push('extBtn')
+        if (this.record.extBtn === 'true') {
+          shows.push('extLabel', 'extStyle', 'confLabel', 'confStyle', 'extValue')
+        }
+      }
     } else if (openType === 'form') {
       let intertype = this.record.intertype
 
@@ -302,9 +305,6 @@
         shows.push('sql', 'sqlType', 'database')
       }
 
-      if (this.record.execSuccess === 'goback') {
-        shows.push('reload')
-      }
       if (['grid'].includes(this.record.execSuccess) || ['grid'].includes(this.record.execError)) {
         shows.push('resetPageIndex')
       }
@@ -926,6 +926,11 @@
               }]
             }
           }
+        } else if (item.key === 'extValue') {
+          rules.push(
+            { pattern: /^[0-9a-zA-Z_]*$/, message: '璇蜂娇鐢ㄥ瓧姣嶃�佹暟瀛椾互鍙奯' },
+            { max: 50, message: '鏈�澶�50涓瓧绗︺��' }
+          )
         } else {
           rules.push({ max: formRule.input.max, message: formRule.input.message })
         }
@@ -1235,6 +1240,9 @@
           if (values.outerBlacklist) {
             values.outerBlacklist = values.outerBlacklist.replace(/\s/ig, '')
           }
+          if (values.controlVal) {
+            values.controlVal = values.controlVal.replace(/\t+|\v+|\s+/g, '')
+          }
 
           if (values.openmenu && Array.isArray(values.openmenu) && values.openmenu.length > 0) {
             let list = null
diff --git a/src/menu/components/share/actioncomponent/formconfig.jsx b/src/menu/components/share/actioncomponent/formconfig.jsx
index f9105db..c9f2c24 100644
--- a/src/menu/components/share/actioncomponent/formconfig.jsx
+++ b/src/menu/components/share/actioncomponent/formconfig.jsx
@@ -1,5 +1,5 @@
 import React from 'react'
-import { btnClasses } from '@/utils/option.js'
+import { btnClasses, modalClasses } from '@/utils/option.js'
 
 /**
  * @description 鑾峰彇鎸夐挳琛ㄥ崟閰嶇疆淇℃伅
@@ -187,6 +187,9 @@
     } else {
       appMenus = []
     }
+    // if (appType === 'mob') {
+    //   appMenus.push({value: 'sign', text: '绛惧悕锛堢郴缁熼〉锛�'})
+    // }
     appMenus.push({value: 'goback', text: '杩斿洖锛堜笂涓�椤碉級'})
   } else {
     menulist = sessionStorage.getItem('fstMenuList')
@@ -217,6 +220,7 @@
       { value: 'expPdf', text: '瀵煎嚭PDF' },
       { value: 'shareLink', text: '鍒嗕韩閾炬帴' },
       { value: 'openLocation', text: '鎵撳紑鍦板浘'},
+      { value: 'wxPublicAuth', text: '寰俊鍏紬鍙锋巿鏉�'},
       { value: 'logout', text: '閫�鍑�' },
       { value: 'goBack', text: '杩斿洖' },
     ]
@@ -1409,21 +1413,6 @@
       initVal: card.reason || '',
       required: false
     },
-    // {
-    //   type: 'radio',
-    //   key: 'formCache',
-    //   label: '琛ㄥ崟缂撳瓨',
-    //   initVal: card.formCache || 'false',
-    //   tooltip: '涓昏鐢ㄤ簬鏁版嵁淇敼鍚庯紝鏇存柊鐩稿叧琛ㄥ崟鐨勯�夐」锛屾竻绌虹紦瀛樺悗琛ㄥ崟鍐嶆鎵撳紑鏃舵暟鎹細閲嶆柊鍔犺浇銆�',
-    //   required: false,
-    //   options: [{
-    //     value: 'false',
-    //     text: '涓嶆竻绌�'
-    //   }, {
-    //     value: 'clear',
-    //     text: '娓呯┖'
-    //   }]
-    // },
     {
       type: 'radio',
       key: 'hidden',
@@ -1463,6 +1452,64 @@
         {value: 'false', text: '绂佺敤'},
       ],
       forbid: viewType === 'popview'
+    },
+    {
+      type: 'radio',
+      key: 'extBtn',
+      label: '鎵╁睍鎸夐挳',
+      initVal: card.extBtn || 'false',
+      tooltip: '鐐瑰嚮鎵╁睍鎸夐挳鏃讹紝鍙橀噺 mk_submit_type 灏嗚璧嬪�笺��',
+      required: false,
+      options: [
+        {value: 'true', text: '鍚敤'},
+        {value: 'false', text: '绂佺敤'},
+      ],
+      forbid: appType === 'mob'
+    },
+    {
+      type: 'text',
+      key: 'extValue',
+      label: '鎵╁睍鍊�',
+      initVal: card.extValue || '',
+      required: true,
+      readonly: false,
+      forbid: appType === 'mob'
+    },
+    {
+      type: 'text',
+      key: 'extLabel',
+      label: '鎵╁睍鍚嶇О',
+      initVal: card.extLabel || '',
+      required: true,
+      readonly: false,
+      forbid: appType === 'mob'
+    },
+    {
+      type: 'select',
+      key: 'extStyle',
+      label: '鎵╁睍鏍峰紡',
+      initVal: card.extStyle || '',
+      required: false,
+      options: modalClasses,
+      forbid: appType === 'mob'
+    },
+    {
+      type: 'text',
+      key: 'confLabel',
+      label: '纭畾鍚嶇О',
+      initVal: card.confLabel || '',
+      required: false,
+      readonly: false,
+      forbid: appType === 'mob'
+    },
+    {
+      type: 'select',
+      key: 'confStyle',
+      label: '纭畾鏍峰紡',
+      initVal: card.confStyle || '',
+      required: false,
+      options: modalClasses,
+      forbid: appType === 'mob'
     },
     {
       type: 'splitLine',
@@ -2669,21 +2716,6 @@
       initVal: card.reason || '',
       required: false
     },
-    // {
-    //   type: 'radio',
-    //   key: 'formCache',
-    //   label: '琛ㄥ崟缂撳瓨',
-    //   initVal: card.formCache || 'false',
-    //   tooltip: '涓昏鐢ㄤ簬鏁版嵁淇敼鍚庯紝鏇存柊鐩稿叧琛ㄥ崟鐨勯�夐」锛屾竻绌虹紦瀛樺悗琛ㄥ崟鍐嶆鎵撳紑鏃舵暟鎹細閲嶆柊鍔犺浇銆�',
-    //   required: false,
-    //   options: [{
-    //     value: 'false',
-    //     text: '涓嶆竻绌�'
-    //   }, {
-    //     value: 'clear',
-    //     text: '娓呯┖'
-    //   }]
-    // },
     {
       type: 'radio',
       key: 'hidden',
@@ -2726,6 +2758,58 @@
     },
     {
       type: 'radio',
+      key: 'extBtn',
+      label: '鎵╁睍鎸夐挳',
+      initVal: card.extBtn || 'false',
+      tooltip: '鐐瑰嚮鎵╁睍鎸夐挳鏃讹紝鍙橀噺 mk_submit_type 灏嗚璧嬪�笺��',
+      required: false,
+      options: [
+        {value: 'true', text: '鍚敤'},
+        {value: 'false', text: '绂佺敤'},
+      ],
+    },
+    {
+      type: 'text',
+      key: 'extValue',
+      label: '鎵╁睍鍊�',
+      initVal: card.extValue || '',
+      required: true,
+      readonly: false
+    },
+    {
+      type: 'text',
+      key: 'extLabel',
+      label: '鎵╁睍鍚嶇О',
+      initVal: card.extLabel || '',
+      required: true,
+      readonly: false
+    },
+    {
+      type: 'select',
+      key: 'extStyle',
+      label: '鎵╁睍鏍峰紡',
+      initVal: card.extStyle || '',
+      required: false,
+      options: modalClasses
+    },
+    {
+      type: 'text',
+      key: 'confLabel',
+      label: '纭畾鍚嶇О',
+      initVal: card.confLabel || '',
+      required: false,
+      readonly: false
+    },
+    {
+      type: 'select',
+      key: 'confStyle',
+      label: '纭畾鏍峰紡',
+      initVal: card.confStyle || '',
+      required: false,
+      options: modalClasses
+    },
+    {
+      type: 'radio',
       key: 'execType',
       label: '璇锋眰鏂瑰紡',
       initVal: card.execType || 'multi',
diff --git a/src/menu/components/table/edit-table/options.jsx b/src/menu/components/table/edit-table/options.jsx
index 1e409a4..c6899e7 100644
--- a/src/menu/components/table/edit-table/options.jsx
+++ b/src/menu/components/table/edit-table/options.jsx
@@ -228,6 +228,21 @@
         {value: 'show', label: '鍚�'},
         {value: 'hidden', label: '鏄�'},
       ],
+      controlFields: [
+        {field: 'empSign', values: ['show']},
+      ]
+    },
+    {
+      type: 'radio',
+      field: 'empSign',
+      label: '绌哄�煎浘鏍�',
+      initval: wrap.empSign || 'show',
+      tooltip: '褰撴煡璇㈡暟鎹负绌烘椂锛屾槸鍚︽樉绀虹┖鍊兼彁绀哄浘鏍囥��',
+      required: false,
+      options: [
+        {value: 'show', label: '鏄剧ず'},
+        {value: 'hidden', label: '闅愯棌'},
+      ],
     },
     {
       type: 'select',
diff --git a/src/menu/components/table/normal-table/options.jsx b/src/menu/components/table/normal-table/options.jsx
index 1806ca8..3781664 100644
--- a/src/menu/components/table/normal-table/options.jsx
+++ b/src/menu/components/table/normal-table/options.jsx
@@ -306,6 +306,21 @@
         {value: 'show', label: '鍚�'},
         {value: 'hidden', label: '鏄�'},
       ],
+      controlFields: [
+        {field: 'empSign', values: ['show']},
+      ]
+    },
+    {
+      type: 'radio',
+      field: 'empSign',
+      label: '绌哄�煎浘鏍�',
+      initval: wrap.empSign || 'show',
+      tooltip: '褰撴煡璇㈡暟鎹负绌烘椂锛屾槸鍚︽樉绀虹┖鍊兼彁绀哄浘鏍囥��',
+      required: false,
+      options: [
+        {value: 'show', label: '鏄剧ず'},
+        {value: 'hidden', label: '闅愯棌'},
+      ],
     },
     {
       type: 'radio',
diff --git a/src/menu/debug/index.jsx b/src/menu/debug/index.jsx
index d9d6921..2631cf0 100644
--- a/src/menu/debug/index.jsx
+++ b/src/menu/debug/index.jsx
@@ -754,7 +754,7 @@
     })
   
     // 闇�瑕佸0鏄庣殑鍙橀噺闆�
-    let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'mk_deleted', 'bid']
+    let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'mk_deleted', 'bid', 'mk_submit_type']
   
     // 涓婚敭瀛楁
     let primaryKey = setting.primaryKey || 'id'
@@ -935,7 +935,7 @@
     if (_declarefields) {
       _declarefields = ',' + _declarefields
     }
-    _sql = `Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@mk_deleted int,@bid nvarchar(50)${_declarefields}
+    _sql = `Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@mk_deleted int,@bid nvarchar(50),@mk_submit_type nvarchar(50)${_declarefields}
       `
 
     let userName = 'User_Name'
@@ -953,7 +953,7 @@
     // 鍒濆鍖栧嚟璇佸強鐢ㄦ埛淇℃伅瀛楁
     _sql += `
         /* 鍑瘉鍙婄敤鎴蜂俊鎭垵濮嬪寲璧嬪�� */
-        select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @mk_deleted=1, @bid='${BID}', @BillCode='', @ModularDetailCode=''
+        select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @mk_deleted=1, @bid='${BID}', @mk_submit_type='', @BillCode='', @ModularDetailCode=''
         `
   
     // 琛ㄥ崟鍙橀噺璧嬪��
diff --git a/src/menu/modalconfig/index.jsx b/src/menu/modalconfig/index.jsx
index e76889a..884b633 100644
--- a/src/menu/modalconfig/index.jsx
+++ b/src/menu/modalconfig/index.jsx
@@ -431,14 +431,24 @@
                   </div>
                 </div>
                 <div className="ant-modal-footer">
-                  <div>
+                  {btn.extBtn === 'true' ? <div>
+                    <button type="button" className="ant-btn">
+                      <span>鍙栨秷</span>
+                    </button>
+                    <button type="button" className={'ant-btn extend-btn ' + (btn.extStyle || '')}>
+                      <span>{btn.extLabel}</span>
+                    </button>
+                    <button type="button" className={'ant-btn confirm-btn ' + (btn.confStyle || '')}>
+                      <span>{btn.confLabel || '纭畾'}</span>
+                    </button>
+                  </div> : <div>
                     <button type="button" className="ant-btn">
                       <span>鍙栨秷</span>
                     </button>
                     <button type="button" className="ant-btn ant-btn-primary">
                       <span>纭畾</span>
                     </button>
-                  </div>
+                  </div>}
                   <div className="action-mask"></div>
                 </div>
               </div>
diff --git a/src/menu/modalconfig/index.scss b/src/menu/modalconfig/index.scss
index 1ddd864..b735cd0 100644
--- a/src/menu/modalconfig/index.scss
+++ b/src/menu/modalconfig/index.scss
@@ -152,7 +152,79 @@
         .ant-modal-footer {
           position: relative;
           button {
-            opacity: 0.3;
+            opacity: 0.5;
+          }
+          .extend-btn {
+            color: var(--mk-sys-color)!important;
+            border-color: var(--mk-sys-color)!important;
+            background-color: #ffffff!important;
+          }
+          .confirm-btn {
+            background-color: var(--mk-sys-color)!important;
+            border-color: var(--mk-sys-color)!important;
+            color: #ffffff!important;
+          }
+          
+          .extend-btn.primary, .confirm-btn.primary {
+            background-color: #1890ff!important;
+            border-color: #1890ff!important;
+            color: #ffffff!important;
+          }
+          .extend-btn.yellow, .confirm-btn.yellow {
+            background-color: #fadb14!important;
+            border-color: #fadb14!important;
+            color: #ffffff!important;
+          }
+          .extend-btn.orange, .confirm-btn.orange {
+            background-color: #fa8c16!important;
+            border-color: #fa8c16!important;
+            color: #ffffff!important;
+          }
+          .extend-btn.danger, .confirm-btn.danger {
+            background-color: #f5222d!important;
+            border-color: #f5222d!important;
+            color: #ffffff!important;
+          }
+          .extend-btn.green, .confirm-btn.green {
+            background-color: #52c41a!important;
+            border-color: #52c41a!important;
+            color: #ffffff!important;
+          }
+          .extend-btn.purple, .confirm-btn.purple {
+            background-color: #722ed1!important;
+            border-color: #722ed1!important;
+            color: #ffffff!important;
+          }
+          
+          .extend-btn.border-primary, .confirm-btn.border-primary {
+            color:  #1890ff!important;
+            border-color:  #1890ff!important;
+            background-color: #ffffff!important;
+          }
+          .extend-btn.border-yellow, .confirm-btn.border-yellow {
+            color:  #fadb14!important;
+            border-color:  #fadb14!important;
+            background-color: #ffffff!important;
+          }
+          .extend-btn.border-orange, .confirm-btn.border-orange {
+            color:  #fa8c16!important;
+            border-color:  #fa8c16!important;
+            background-color: #ffffff!important;
+          }
+          .extend-btn.border-danger, .confirm-btn.border-danger {
+            color:  #f5222d!important;
+            border-color:  #f5222d!important;
+            background-color: #ffffff!important;
+          }
+          .extend-btn.border-green, .confirm-btn.border-green {
+            color:  #52c41a!important;
+            border-color:  #52c41a!important;
+            background-color: #ffffff!important;
+          }
+          .extend-btn.border-purple, .confirm-btn.border-purple {
+            color:  #722ed1!important;
+            border-color:  #722ed1!important;
+            background-color: #ffffff!important;
           }
         }
         .action-mask {
diff --git a/src/mob/components/menubar/normal-menubar/menucomponent/options.jsx b/src/mob/components/menubar/normal-menubar/menucomponent/options.jsx
index eace136..c8ead06 100644
--- a/src/mob/components/menubar/normal-menubar/menucomponent/options.jsx
+++ b/src/mob/components/menubar/normal-menubar/menucomponent/options.jsx
@@ -108,7 +108,6 @@
       extendName: 'MenuNo',
       options: [
         ...menulist,
-        // {value: 'IM', label: '鍗虫椂閫氫俊锛堢郴缁熼〉锛�'},
         {value: 'AIService', label: '鏅鸿兘瀹㈡湇锛堢郴缁熼〉锛�'}
       ]
     },
diff --git a/src/mob/components/navbar/normal-navbar/menus/menuform/index.jsx b/src/mob/components/navbar/normal-navbar/menus/menuform/index.jsx
index bb3818d..a8d4381 100644
--- a/src/mob/components/navbar/normal-navbar/menus/menuform/index.jsx
+++ b/src/mob/components/navbar/normal-navbar/menus/menuform/index.jsx
@@ -149,7 +149,6 @@
                     option.props.extend.toLowerCase().indexOf(input.toLowerCase()) >= 0}
                 >
                   {appMenus.map(item => (<Select.Option key={item.MenuID} extend={item.MenuNo || ''} value={item.MenuID}>{item.MenuName}</Select.Option>))}
-                  {/* <Select.Option key="IM" value="IM">鍗虫椂閫氫俊锛堢郴缁熼〉锛�</Select.Option> */}
                   <Select.Option key="AIService" extend={''} value="AIService">鏅鸿兘瀹㈡湇锛堢郴缁熼〉锛�</Select.Option>
                 </Select>
               )}
diff --git a/src/tabviews/custom/components/card/balcony/index.jsx b/src/tabviews/custom/components/card/balcony/index.jsx
index 668b8f0..0c99bb0 100644
--- a/src/tabviews/custom/components/card/balcony/index.jsx
+++ b/src/tabviews/custom/components/card/balcony/index.jsx
@@ -331,7 +331,9 @@
   
       if (id !== this.state.BID || id !== '') {
         this.setState({ BID: id, BData: data }, () => {
-          this.loadData()
+          if (config.wrap.datatype !== 'public') {
+            this.loadData()
+          }
         })
       }
     }
diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx
index a8fb5a3..d8ad740 100644
--- a/src/tabviews/custom/components/card/data-card/index.jsx
+++ b/src/tabviews/custom/components/card/data-card/index.jsx
@@ -128,7 +128,7 @@
     _config.wrap.scale = _config.wrap.scale === 'true' ? 'scale' : ''
     _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} ${config.wrap.hover === 'true' ? 'mk-hover' : ''}`
+    _config.wrap.wrapClass = `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${_config.wrap.scale} ${config.wrap.hover === 'true' ? 'mk-hover' : ''} ${config.wrap.empSign === 'hidden' ? 'mk-empty-hide' : ''}`
 
     if (_config.wrap.shifting === 'true') {
       _config.wrap.shifting = 'shifting'
diff --git a/src/tabviews/custom/components/card/data-card/index.scss b/src/tabviews/custom/components/card/data-card/index.scss
index bbb850d..12d1283 100644
--- a/src/tabviews/custom/components/card/data-card/index.scss
+++ b/src/tabviews/custom/components/card/data-card/index.scss
@@ -286,6 +286,10 @@
       border-color: var(--mk-sys-color);
     }
   }
+
+  .ant-empty-image svg {
+    max-width: 100%;
+  }
 }
 .custom-data-card-box.shifting {
   .normal-header:not(.header-search) + .toolbar-button {
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 90b5ea2..c7e972a 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.jsx
+++ b/src/tabviews/custom/components/card/double-data-card/index.jsx
@@ -127,7 +127,7 @@
     _config.wrap.selStyle = _config.wrap.selStyle || 'active'
     _config.wrap.pagestyle = _config.wrap.pagestyle || 'page'
 
-    _config.wrap.wrapClass =  `${_config.wrap.selStyle} ${_config.wrap.cardType || ''}`
+    _config.wrap.wrapClass =  `${_config.wrap.selStyle} ${_config.wrap.cardType || ''} ${config.wrap.empSign === 'hidden' ? 'mk-empty-hide' : ''}`
 
     if (_config.wrap.zHeight || _config.wrap.minWidth) {
       _config.wrap.zoomStyle = {
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 1cac501..2d6682d 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.scss
+++ b/src/tabviews/custom/components/card/double-data-card/index.scss
@@ -321,6 +321,10 @@
     border: 1px solid rgba(0, 0, 0, 0.07);
     background: rgba(0, 0, 0, 0);
   }
+
+  .ant-empty-image svg {
+    max-width: 100%;
+  }
 }
 .double-data-card-box.shifting {
   .normal-header:not(.header-search) + .toolbar-button {
diff --git a/src/tabviews/custom/components/card/prop-card/index.jsx b/src/tabviews/custom/components/card/prop-card/index.jsx
index 88bcf0e..a1e1a11 100644
--- a/src/tabviews/custom/components/card/prop-card/index.jsx
+++ b/src/tabviews/custom/components/card/prop-card/index.jsx
@@ -473,7 +473,9 @@
     
     if (id !== this.state.BID || id !== '') {
       this.setState({ BID: id, BData: data }, () => {
-        this.loadData()
+        if (config.wrap.datatype !== 'public') {
+          this.loadData()
+        }
       })
     }
   }
diff --git a/src/tabviews/custom/components/card/table-card/index.jsx b/src/tabviews/custom/components/card/table-card/index.jsx
index 538c792..8bf04ff 100644
--- a/src/tabviews/custom/components/card/table-card/index.jsx
+++ b/src/tabviews/custom/components/card/table-card/index.jsx
@@ -602,7 +602,7 @@
             selectedData={[]}
           /> : null
         }
-        <Row className={`card-row-list ${config.wrap.hover === 'true' ? 'mk-hover' : ''}`} style={{height: config.wrap.contentHeight}}>
+        <Row className={`card-row-list ${config.wrap.hover === 'true' ? 'mk-hover' : ''} ${config.wrap.empSign === 'hidden' ? 'mk-empty-hide' : ''}`} style={{height: config.wrap.contentHeight}}>
           {precards.map((item, index) => (
             <Col key={index} className="extend-card" span={24}>
               <div className="card-item-box" style={item.style}>
diff --git a/src/tabviews/custom/components/card/table-card/index.scss b/src/tabviews/custom/components/card/table-card/index.scss
index 10fb9be..f2697a6 100644
--- a/src/tabviews/custom/components/card/table-card/index.scss
+++ b/src/tabviews/custom/components/card/table-card/index.scss
@@ -113,6 +113,10 @@
       height: 60px;
     }
   }
+
+  .ant-empty-image svg {
+    max-width: 100%;
+  }
 }
 
 .custom-card-box::after {
diff --git a/src/tabviews/custom/components/editor/braft-editor/index.jsx b/src/tabviews/custom/components/editor/braft-editor/index.jsx
index 24d3909..2c5ddd6 100644
--- a/src/tabviews/custom/components/editor/braft-editor/index.jsx
+++ b/src/tabviews/custom/components/editor/braft-editor/index.jsx
@@ -168,7 +168,9 @@
     if (!config.setting.supModule || config.setting.supModule !== MenuID) return
     if (id !== this.state.BID || id !== '') {
       this.setState({ BID: id }, () => {
-        this.loadData()
+        if (config.wrap.datatype !== 'public') {
+          this.loadData()
+        }
       })
     }
   }
diff --git a/src/tabviews/custom/components/editor/braft-editor/index.scss b/src/tabviews/custom/components/editor/braft-editor/index.scss
index e9e62b4..37fd26d 100644
--- a/src/tabviews/custom/components/editor/braft-editor/index.scss
+++ b/src/tabviews/custom/components/editor/braft-editor/index.scss
@@ -49,6 +49,24 @@
     }
   }
 }
+.custom-braft-editor-box.bold-border {
+  .braft-content {
+    table {
+      td, th {
+        border-width: 2px!important;
+      }
+    }
+  }
+}
+.custom-braft-editor-box.deep-border {
+  .braft-content {
+    table {
+      td, th {
+        border-color: rgba(0, 0, 0, 0.85)!important;
+      }
+    }
+  }
+}
 .custom-braft-editor-box.tb-flex {
   .braft-content {
     table {
diff --git a/src/tabviews/custom/components/form/simple-form/index.jsx b/src/tabviews/custom/components/form/simple-form/index.jsx
index b62d1ab..2f83c49 100644
--- a/src/tabviews/custom/components/form/simple-form/index.jsx
+++ b/src/tabviews/custom/components/form/simple-form/index.jsx
@@ -308,7 +308,9 @@
         })
       } else {
         this.setState({ BID: id, BData: data }, () => {
-          this.loadData()
+          if (config.wrap.datatype !== 'public') {
+            this.loadData()
+          }
         })
       }
     }
diff --git a/src/tabviews/custom/components/form/step-form/index.jsx b/src/tabviews/custom/components/form/step-form/index.jsx
index e313c20..6f1c40e 100644
--- a/src/tabviews/custom/components/form/step-form/index.jsx
+++ b/src/tabviews/custom/components/form/step-form/index.jsx
@@ -306,7 +306,9 @@
         })
       } else {
         this.setState({ BID: id, BData: data }, () => {
-          this.loadData()
+          if (config.wrap.datatype !== 'public') {
+            this.loadData()
+          }
         })
       }
     }
diff --git a/src/tabviews/custom/components/form/tab-form/index.jsx b/src/tabviews/custom/components/form/tab-form/index.jsx
index 9ee3802..5e0c3cf 100644
--- a/src/tabviews/custom/components/form/tab-form/index.jsx
+++ b/src/tabviews/custom/components/form/tab-form/index.jsx
@@ -269,7 +269,9 @@
         })
       } else {
         this.setState({ BID: id, BData: data }, () => {
-          this.loadData()
+          if (config.wrap.datatype !== 'public') {
+            this.loadData()
+          }
         })
       }
     }
diff --git a/src/tabviews/custom/components/interfaces/interItem/index.jsx b/src/tabviews/custom/components/interfaces/interItem/index.jsx
index 87e0bd9..8db4d23 100644
--- a/src/tabviews/custom/components/interfaces/interItem/index.jsx
+++ b/src/tabviews/custom/components/interfaces/interItem/index.jsx
@@ -112,8 +112,10 @@
     const { BID } = this.state
 
     if (config.setting.supModule && !BID) {
-      MKEmitter.emit('mkPublicData', config.uuid, { $$empty: true, $$uuid: '' })
-      MKEmitter.emit('resetSelectLine', config.uuid, '', { $$empty: true, $$uuid: '' })
+      setTimeout(() => {
+        MKEmitter.emit('mkPublicData', config.uuid, { $$empty: true, $$uuid: '' })
+        MKEmitter.emit('resetSelectLine', config.uuid, '', { $$empty: true, $$uuid: '' })
+      }, 20)
       this.loading = false
       return
     }
diff --git a/src/tabviews/custom/components/share/normalTable/index.jsx b/src/tabviews/custom/components/share/normalTable/index.jsx
index 70809ce..dc47705 100644
--- a/src/tabviews/custom/components/share/normalTable/index.jsx
+++ b/src/tabviews/custom/components/share/normalTable/index.jsx
@@ -1209,7 +1209,7 @@
     }
 
     return (
-      <div className={`normal-custom-table ${setting.tableHeader || ''} ${setting.parity === 'true' ? 'mk-parity' : ''} ${height ? 'fixed-table-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed}`} style={style}>
+      <div className={`normal-custom-table ${setting.tableHeader || ''} ${setting.parity === 'true' ? 'mk-parity' : ''} ${height ? 'fixed-table-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || 'middle'} table-col-${columns.length} ${fixed} ${setting.empSign === 'hidden' ? 'mk-empty-hide' : ''}`} style={style}>
         {(setting.tableType === 'radio' || setting.tableType === 'checkbox') && data && data.length > 0 ?
           <Switch title="鏀惰捣" className="main-pickup" checkedChildren={window.GLOB.dict['open'] || '寮�'} unCheckedChildren={window.GLOB.dict['shut'] || '鍏�'} checked={pickup} onChange={this.pickupChange} /> : null
         }
diff --git a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
index e8b2a2b..87534fd 100644
--- a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
+++ b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -2920,7 +2920,7 @@
         {setting.hasSubmit && edData.length > 0 ? <div className="edit-custom-table-btn-wrap" style={submit.wrapStyle}>
           <Button style={submit.style} onClick={() => setTimeout(() => {this.submit()}, 10)} loading={loading} className="submit-table" type="link">{dict['submit'] || '鎻愪氦'}</Button>
         </div> : null}
-        <div className={`edit-custom-table ${setting.tableHeader || ''} ${setting.parity === 'true' ? 'mk-parity' : ''} ${height ? 'fixed-table-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || ''} mk-edit-${setting.editType || 'simple'}`} style={style}>
+        <div className={`edit-custom-table ${setting.tableHeader || ''} ${setting.parity === 'true' ? 'mk-parity' : ''} ${height ? 'fixed-table-height' : ''} ${setting.mode || ''} table-vertical-${setting.vertical || ''} mk-edit-${setting.editType || 'simple'} ${setting.empSign === 'hidden' ? 'mk-empty-hide' : ''}`} style={style}>
           <Table
             rowKey="$$uuid"
             components={components}
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index 9be2a57..87f9925 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -13,7 +13,8 @@
 import MKEmitter from '@/utils/events.js'
 import MkIcon from '@/components/mk-icon'
 import MkCounter from './mkcounter'
-// import './index.scss'
+
+import './index.scss'
 
 const MutilForm = asyncSpinComponent(() => import('@/tabviews/zshare/mutilform'))
 const { confirm } = Modal
@@ -45,7 +46,8 @@
     autoMatic: false,
     check: false,
     count: 0,
-    dict: window.GLOB.dict
+    dict: window.GLOB.dict,
+    submitType: ''
   }
 
   preCallback = null
@@ -445,6 +447,7 @@
 
   getSystemParam = (data, formdata, retmsg) => {
     const { setting, columns, btn } = this.props
+    const { submitType } = this.state
     let _params = []
 
     if ( btn.Ot === 'notRequired' || btn.Ot === 'requiredSgl' || btn.Ot === 'requiredOnce' ) {
@@ -468,11 +471,11 @@
         param.ID = primaryId
 
         if (retmsg) {
-          const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, data[0], columns, retmsg) // 鏁版嵁婧�
+          const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, data[0], columns, retmsg, submitType) // 鏁版嵁婧�
           param.LText = sql
           param.$callbacksql = callbacksql
         } else {
-          param.LText = getSysDefaultSql(btn, setting, '', param, data[0], columns, false) // 鏁版嵁婧�
+          param.LText = getSysDefaultSql(btn, setting, '', param, data[0], columns, false, submitType) // 鏁版嵁婧�
           if (btn.output) {
             param.key_back_type = 'Y'
           }
@@ -495,11 +498,11 @@
           param.ID = Utils.getguid()
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg, submitType) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false, submitType) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
@@ -521,11 +524,11 @@
           param.ID = primaryId
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, retmsg, submitType) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, formdata, param, data[0], columns, false, submitType) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
@@ -587,11 +590,11 @@
           param.ID = primaryId
 
           if (retmsg) {
-            const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, cell, columns, retmsg) // 鏁版嵁婧�
+            const { sql, callbacksql } = getSysDefaultSql(btn, setting, '', param, cell, columns, retmsg, submitType) // 鏁版嵁婧�
             param.LText = sql
             param.$callbacksql = callbacksql
           } else {
-            param.LText = getSysDefaultSql(btn, setting, '', param, cell, columns, false) // 鏁版嵁婧�
+            param.LText = getSysDefaultSql(btn, setting, '', param, cell, columns, false, submitType) // 鏁版嵁婧�
             if (btn.output) {
               param.key_back_type = 'Y'
             }
@@ -627,11 +630,11 @@
             param.ID = Utils.getguid()
 
             if (retmsg) {
-              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg) // 鏁版嵁婧�
+              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg, submitType) // 鏁版嵁婧�
               param.LText = sql
               param.$callbacksql = callbacksql
             } else {
-              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false) // 鏁版嵁婧�
+              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false, submitType) // 鏁版嵁婧�
               if (btn.output) {
                 param.key_back_type = 'Y'
               }
@@ -653,11 +656,11 @@
             param.ID = primaryId
 
             if (retmsg) {
-              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg) // 鏁版嵁婧�
+              const { sql, callbacksql } = getSysDefaultSql(btn, setting, formdata, param, cell, columns, retmsg, submitType) // 鏁版嵁婧�
               param.LText = sql
               param.$callbacksql = callbacksql
             } else {
-              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false) // 鏁版嵁婧�
+              param.LText = getSysDefaultSql(btn, setting, formdata, param, cell, columns, false, submitType) // 鏁版嵁婧�
               if (btn.output) {
                 param.key_back_type = 'Y'
               }
@@ -808,6 +811,8 @@
 
   getExps = (ex, formdata, cell, id, process) => {
     const { columns, BID, btn } = this.props
+    const { submitType } = this.state
+
     let exps = []
     let values = {
       time_id: Utils.getguid(),
@@ -826,6 +831,7 @@
       datam: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '',
       datam_begin: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '',
       datam_end: sessionStorage.getItem('dataM') === 'true' ? 'Y' : '',
+      mk_submit_type: submitType || ''
       // mk_check_begin: '',
       // mk_check_end: ''
     }
@@ -836,8 +842,6 @@
 
     let formkeys = []
     formdata && formdata.forEach(form => {
-      // if (!ex.reps.includes(form.key)) return
-
       formkeys.push(form.key)
 
       let val = form.value
@@ -1289,9 +1293,11 @@
    * @description 鑾峰彇鍥炶皟鑴氭湰鐨勫瓧娈靛畾涔�
    */
   getSysDeclareSql = (btn, formdata, data, columns, BID = '') => {
+    const { submitType } = this.state
+
     let datavars = {}                 // 澹版槑鐨勫彉閲忥紝琛ㄥ崟鍙婃樉绀哄垪
     // 闇�瑕佸0鏄庣殑鍙橀噺闆�
-    let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'mk_deleted', 'bid']
+    let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'mk_deleted', 'bid', 'mk_submit_type']
   
     // sql璇彞
     let _sql = ''
@@ -1421,7 +1427,7 @@
       _declarefields = ',' + _declarefields
     }
     _sql = `/* 绯荤粺鐢熸垚 */
-        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@mk_deleted int,@bid nvarchar(50)${_declarefields}
+        Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@mk_deleted int,@bid nvarchar(50),@mk_submit_type nvarchar(50)${_declarefields}
       `
   
     let userName = sessionStorage.getItem('User_Name') || ''
@@ -1439,7 +1445,7 @@
     // 鍒濆鍖栧嚟璇佸強鐢ㄦ埛淇℃伅瀛楁
     _sql += `
         /* 鍑瘉鍙婄敤鎴蜂俊鎭垵濮嬪寲璧嬪�� */
-        select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @mk_deleted=1, @bid='${BID}', @BillCode='', @ModularDetailCode=''
+        select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @mk_deleted=1, @bid='${BID}', @mk_submit_type='${submitType}', @BillCode='', @ModularDetailCode=''
         `
   
     // 琛ㄥ崟鍙橀噺璧嬪��
@@ -3895,11 +3901,11 @@
   /**
    * @description 妯℃�佹锛堣〃鍗曪級锛岀‘璁�
    */
-  handleOk = () => {
+  handleOk = (submitType = '') => {
     if (!this.formRef) return
     
     this.formRef.handleConfirm().then(res => {
-      this.setState({ confirmLoading: true })
+      this.setState({ confirmLoading: true, submitType: submitType })
 
       this.execSubmit(this.state.selines, () => { this.setState({ confirmLoading: false }) }, res)
     })
@@ -3912,7 +3918,8 @@
     this.setState({
       loading: false,
       visible: false,
-      confirmLoading: false
+      confirmLoading: false,
+      submitType: ''
     })
 
     this.preCallback && this.preCallback()
@@ -4085,7 +4092,7 @@
    */
   getModels = () => {
     const { BID, btn, BData } = this.props
-    const { btnconfig, visible, dict } = this.state
+    const { btnconfig, visible, dict, confirmLoading, submitType } = this.state
 
     if (!btnconfig || !btnconfig.setting) return null
 
@@ -4114,19 +4121,23 @@
           <MutilForm
             BID={BID}
             action={btnconfig}
-            inputSubmit={this.handleOk}
+            inputSubmit={() => this.handleOk()}
             data={this.state.selines[0]}
             BData={BData}
             wrappedComponentRef={(inst) => this.formRef = inst}
           />
-          <div className="ant-drawer-footer" style={{ position: 'absolute', zIndex: 1, right: 0, bottom: 0, width: '100%', borderTop: '1px solid #e9e9e9', padding: '10px 16px', background: '#fff', textAlign: 'right'}}>
+          {btnconfig.setting.formType === 'check' ? <div className="ant-drawer-footer" style={{ position: 'absolute', zIndex: 1, right: 0, bottom: 0, width: '100%', borderTop: '1px solid #e9e9e9', padding: '10px 16px', background: '#fff', textAlign: 'right'}}>
             <Button onClick={this.handleCancel} style={{ marginRight: 8 }}>
-              {btnconfig.setting.formType !== 'check' ? dict['cancel'] || '鍙栨秷' : dict['close'] || '鍏抽棴'}
+              {dict['close'] || '鍏抽棴'}
             </Button>
-            {btnconfig.setting.formType !== 'check' ? <Button onClick={this.handleOk} loading={this.state.confirmLoading} type="primary">
-              {dict['ok'] || '纭畾'}
-            </Button> : null}
-          </div>
+          </div> : <div className="ant-drawer-footer" style={{ position: 'absolute', zIndex: 1, right: 0, bottom: 0, width: '100%', borderTop: '1px solid #e9e9e9', padding: '10px 16px', background: '#fff', textAlign: 'right'}}>
+            <Button onClick={this.handleCancel} style={{ marginRight: 8 }}>
+              {dict['cancel'] || '鍙栨秷'}
+            </Button>
+            {btn.extBtn === 'true' ? <Button className={'extend-btn ' + (btn.extStyle || '')} disabled={confirmLoading && submitType !== btn.extValue} loading={confirmLoading && submitType === btn.extValue} onClick={() => this.handleOk(btn.extValue)}>{btn.extLabel}</Button> : null}
+            {btn.extBtn === 'true' ? <Button className={'confirm-btn ' + (btn.confStyle || '')} disabled={confirmLoading && submitType !== ''} loading={confirmLoading && submitType === ''} onClick={() => this.handleOk()}>{btn.confLabel || dict['ok'] || '纭畾'}</Button> : null}
+            {btn.extBtn !== 'true' ? <Button type="primary" loading={confirmLoading} onClick={() => this.handleOk()}>{dict['ok'] || '纭畾'}</Button> : null}
+          </div>}
         </Drawer>
       )
     } else {
@@ -4152,18 +4163,20 @@
           wrapClassName={'action-modal' + (btnconfig.setting.moveable === 'true' ? ' moveable-modal modal-' + btn.uuid : '')}
           visible={visible}
           width={width}
-          okText={dict['ok'] || '纭畾'}
-          cancelText={dict['cancel'] || '鍙栨秷'}
-          onOk={this.handleOk}
           maskStyle={btnconfig.setting.moveable === 'true' ?  {backgroundColor: 'rgba(0, 0, 0, 0.15)'} : null}
-          confirmLoading={this.state.confirmLoading}
           onCancel={this.handleCancel}
+          footer={[
+            <Button key="cancel" onClick={this.handleCancel}>{dict['cancel'] || '鍙栨秷'}</Button>,
+            btn.extBtn === 'true' ? <Button key="extend" className={'extend-btn ' + (btn.extStyle || '')} disabled={confirmLoading && submitType !== btn.extValue} loading={confirmLoading && submitType === btn.extValue} onClick={() => this.handleOk(btn.extValue)}>{btn.extLabel}</Button> : null,
+            btn.extBtn === 'true' ? <Button key="confirm" className={'confirm-btn ' + (btn.confStyle || '')} disabled={confirmLoading && submitType !== ''} loading={confirmLoading && submitType === ''} onClick={() => this.handleOk()}>{btn.confLabel || dict['ok'] || '纭畾'}</Button> : null,
+            btn.extBtn !== 'true' ? <Button key="confirm" type="primary" loading={confirmLoading} onClick={() => this.handleOk()}>{dict['ok'] || '纭畾'}</Button> : null
+          ]}
           destroyOnClose
         >
           <MutilForm
             BID={BID}
             action={btnconfig}
-            inputSubmit={this.handleOk}
+            inputSubmit={() => this.handleOk()}
             data={this.state.selines[0]}
             BData={BData}
             wrappedComponentRef={(inst) => this.formRef = inst}
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.scss b/src/tabviews/zshare/actionList/normalbutton/index.scss
index e69de29..7ca48aa 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.scss
+++ b/src/tabviews/zshare/actionList/normalbutton/index.scss
@@ -0,0 +1,72 @@
+.extend-btn {
+  color: var(--mk-sys-color)!important;
+  border-color: var(--mk-sys-color)!important;
+  background-color: #ffffff!important;
+}
+.confirm-btn {
+  background-color: var(--mk-sys-color)!important;
+  border-color: var(--mk-sys-color)!important;
+  color: #ffffff!important;
+}
+
+.extend-btn.primary, .confirm-btn.primary {
+  background-color: #1890ff!important;
+  border-color: #1890ff!important;
+  color: #ffffff!important;
+}
+.extend-btn.yellow, .confirm-btn.yellow {
+  background-color: #fadb14!important;
+  border-color: #fadb14!important;
+  color: #ffffff!important;
+}
+.extend-btn.orange, .confirm-btn.orange {
+  background-color: #fa8c16!important;
+  border-color: #fa8c16!important;
+  color: #ffffff!important;
+}
+.extend-btn.danger, .confirm-btn.danger {
+  background-color: #f5222d!important;
+  border-color: #f5222d!important;
+  color: #ffffff!important;
+}
+.extend-btn.green, .confirm-btn.green {
+  background-color: #52c41a!important;
+  border-color: #52c41a!important;
+  color: #ffffff!important;
+}
+.extend-btn.purple, .confirm-btn.purple {
+  background-color: #722ed1!important;
+  border-color: #722ed1!important;
+  color: #ffffff!important;
+}
+
+.extend-btn.border-primary, .confirm-btn.border-primary {
+  color:  #1890ff!important;
+  border-color:  #1890ff!important;
+  background-color: #ffffff!important;
+}
+.extend-btn.border-yellow, .confirm-btn.border-yellow {
+  color:  #fadb14!important;
+  border-color:  #fadb14!important;
+  background-color: #ffffff!important;
+}
+.extend-btn.border-orange, .confirm-btn.border-orange {
+  color:  #fa8c16!important;
+  border-color:  #fa8c16!important;
+  background-color: #ffffff!important;
+}
+.extend-btn.border-danger, .confirm-btn.border-danger {
+  color:  #f5222d!important;
+  border-color:  #f5222d!important;
+  background-color: #ffffff!important;
+}
+.extend-btn.border-green, .confirm-btn.border-green {
+  color:  #52c41a!important;
+  border-color:  #52c41a!important;
+  background-color: #ffffff!important;
+}
+.extend-btn.border-purple, .confirm-btn.border-purple {
+  color:  #722ed1!important;
+  border-color:  #722ed1!important;
+  background-color: #ffffff!important;
+}
\ No newline at end of file
diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx
index 9def935..98fa458 100644
--- a/src/tabviews/zshare/mutilform/index.jsx
+++ b/src/tabviews/zshare/mutilform/index.jsx
@@ -297,6 +297,14 @@
         } else {
           item.showValue = ''
         }
+      } else if (item.type === 'brafteditor') {
+        if (window.backend && newval && /<\/span>/.test(newval) && item.encryption === 'true') {
+          try {
+            newval = window.btoa(window.encodeURIComponent(newval))
+          } catch (e) {
+            newval = ''
+          }
+        }
       }
 
       if (newval !== '$empty') {
diff --git a/src/templates/sharecomponent/searchcomponent/searchform/index.jsx b/src/templates/sharecomponent/searchcomponent/searchform/index.jsx
index c2871bb..c4b4b9e 100644
--- a/src/templates/sharecomponent/searchcomponent/searchform/index.jsx
+++ b/src/templates/sharecomponent/searchcomponent/searchform/index.jsx
@@ -724,6 +724,10 @@
             values.field = values.field.join(',')
           }
 
+          if (values.initval && ['text', 'select', 'radio', 'multiselect', 'link', 'checkcard'].includes(values.type)) {
+            values.initval = values.initval.replace(/^\s+|\s+$/ig, '')
+          }
+
           if (['select', 'link'].includes(values.type)) {
             if (values.resourceType === '1') {
               if (/\$first/.test(values.initval) && values.initval.replace(/\s/g, '') === '$first') {
diff --git a/src/templates/zshare/verifycard/callbackcustomscript/index.jsx b/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
index 1cd3231..2619cbe 100644
--- a/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
+++ b/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
@@ -228,7 +228,7 @@
           {!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, lang, time_id, typename, datam</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: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address, mk_deleted, mk_submit_type</span></Tooltip>,&nbsp;
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'绯荤粺鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞跺湪鍗曞彿鐢熸垚鎴栧垱寤哄嚟璇佹椂浣跨敤銆�'}><span style={{color: '#13c2c2'}}>BillCode, BVoucher, FIBVoucherDate, FiYear, ModularDetailCode</span></Tooltip>
               {formfields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="琛ㄥ崟鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞惰祴鍊笺��">, <span style={{color: '#8E44AD'}}>{formfields}</span></Tooltip> : ''}
               {colfields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="瀛楁闆嗗彉閲忥紝绯荤粺浼氬畾涔夊彉閲忓苟璧嬪�笺��">, {colfields}</Tooltip> : ''}
diff --git a/src/templates/zshare/verifycard/customform/index.jsx b/src/templates/zshare/verifycard/customform/index.jsx
index efca89b..6433bfb 100644
--- a/src/templates/zshare/verifycard/customform/index.jsx
+++ b/src/templates/zshare/verifycard/customform/index.jsx
@@ -131,7 +131,7 @@
           <Col span={21} 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, lang, time_id</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: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address, mk_deleted, mk_submit_type</span></Tooltip>,&nbsp;
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={'绯荤粺鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞跺湪鍗曞彿鐢熸垚鎴栧垱寤哄嚟璇佹椂浣跨敤銆�'}><span style={{color: '#13c2c2'}}>BillCode, BVoucher, FIBVoucherDate, FiYear, ModularDetailCode</span></Tooltip>
               {formfields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="琛ㄥ崟鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞惰祴鍊笺��">, <span style={{color: '#8E44AD'}}>{formfields}</span></Tooltip> : ''}
               {colfields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="瀛楁闆嗗彉閲忥紝绯荤粺浼氬畾涔夊彉閲忓苟璧嬪�笺��">, {colfields}</Tooltip> : ''}
diff --git a/src/templates/zshare/verifycard/customscript/index.jsx b/src/templates/zshare/verifycard/customscript/index.jsx
index 27d1107..6924ddb 100644
--- a/src/templates/zshare/verifycard/customscript/index.jsx
+++ b/src/templates/zshare/verifycard/customscript/index.jsx
@@ -411,7 +411,7 @@
             <Form.Item label={'鍙敤瀛楁'}>
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="鍏叡鍊硷紝璇锋寜鐓xxx@鏍煎紡浣跨敤銆�"><span style={{color: '#1890ff'}}>BID, ID, LoginUID, SessionUid, UserID, Appkey, lang, time_id, typename, datam</span></Tooltip>,&nbsp;
               {window.GLOB.process && workFlow === 'true' ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title={`宸ヤ綔娴佸彉閲忥紝璇锋寜鐓xxx@鏍煎紡浣跨敤${flowType !== 'start' ? '锛寃orks_flow_sign 涓哄垎鏀惎鐢ㄩ珮绾ц缃椂鐨勬爣璁板��' : ''}銆俙}><span style={{color: '#26C281'}}>works_flow_code, works_flow_name, works_flow_param, works_flow_detail_id, status, statusname, work_group, work_grade, {flowType === 'start' ? 'start_type,' : 'check_type, notice_type, check_userids, notice_userids, works_flow_sign,'} </span></Tooltip> : null}
-              <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: '#fa8c16'}}>UserName, FullName, RoleID, mk_departmentcode, mk_organization, mk_user_type, mk_nation, mk_province, mk_city, mk_district, mk_address, mk_deleted, mk_submit_type</span></Tooltip>,&nbsp;
               <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="绯荤粺鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞跺湪鍗曞彿鐢熸垚鎴栧垱寤哄嚟璇佹椂浣跨敤銆�"><span style={{color: '#13c2c2'}}>BillCode, BVoucher, FIBVoucherDate, FiYear, ModularDetailCode</span></Tooltip>
               {formfields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="琛ㄥ崟鍙橀噺锛岀郴缁熶細瀹氫箟鍙橀噺骞惰祴鍊笺��">, <span style={{color: '#8E44AD'}}>{formfields}</span></Tooltip> : ''}
               {colfields ? <Tooltip mouseLeaveDelay={0.3} mouseEnterDelay={0.3} placement="top" title="瀛楁闆嗗彉閲忥紝绯荤粺浼氬畾涔夊彉閲忓苟璧嬪�笺��">, {colfields}</Tooltip> : ''}
diff --git a/src/templates/zshare/verifycard/index.jsx b/src/templates/zshare/verifycard/index.jsx
index 18ded34..d674655 100644
--- a/src/templates/zshare/verifycard/index.jsx
+++ b/src/templates/zshare/verifycard/index.jsx
@@ -723,9 +723,9 @@
       _fields = card.modal.fields || []
     }
 
-    let sysfields = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode', 'tbid', 'mk_deleted', 'bid']
-    let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@RoleID nvarchar(512)', '@mk_departmentcode nvarchar(512)', '@mk_organization nvarchar(512)', '@mk_user_type nvarchar(20)', '@mk_nation nvarchar(50)', '@mk_province nvarchar(50)', '@mk_city nvarchar(50)', '@mk_district nvarchar(50)', '@mk_address nvarchar(100)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)', '@bid nvarchar(50)', '@tbid nvarchar(50)', '@mk_deleted int']
-    let _select = ['@UserName=\'\'', '@FullName=\'\'', '@RoleID=\'\'', '@mk_departmentcode=\'\'', '@mk_organization=\'\'', '@mk_user_type=\'\'', '@mk_nation=\'\'', '@mk_province=\'\'', '@mk_city=\'\'', '@mk_district=\'\'', '@mk_address=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'', '@bid=\'\'', '@mk_deleted=1']
+    let sysfields = ['UserName', 'FullName', 'RoleID', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'BillCode', 'BVoucher', 'FIBVoucherDate', 'FiYear', 'ModularDetailCode', 'tbid', 'mk_deleted', 'bid', 'mk_submit_type']
+    let _declare = ['@UserName nvarchar(50)', '@FullName nvarchar(50)', '@RoleID nvarchar(512)', '@mk_departmentcode nvarchar(512)', '@mk_organization nvarchar(512)', '@mk_user_type nvarchar(20)', '@mk_nation nvarchar(50)', '@mk_province nvarchar(50)', '@mk_city nvarchar(50)', '@mk_district nvarchar(50)', '@mk_address nvarchar(100)', '@ErrorCode nvarchar(50)', '@retmsg nvarchar(4000)', '@BillCode nvarchar(50)', '@BVoucher nvarchar(50)', '@FIBVoucherDate nvarchar(50)', '@FiYear nvarchar(50)', '@ModularDetailCode nvarchar(50)', '@bid nvarchar(50)', '@tbid nvarchar(50)', '@mk_deleted int', '@mk_submit_type nvarchar(50)']
+    let _select = ['@UserName=\'\'', '@FullName=\'\'', '@RoleID=\'\'', '@mk_departmentcode=\'\'', '@mk_organization=\'\'', '@mk_user_type=\'\'', '@mk_nation=\'\'', '@mk_province=\'\'', '@mk_city=\'\'', '@mk_district=\'\'', '@mk_address=\'\'', '@ErrorCode=\'\'', '@retmsg=\'\'', '@BillCode=\'\'', '@BVoucher=\'\'', '@FIBVoucherDate=\'\'', '@FiYear=\'\'', '@ModularDetailCode=\'\'', '@bid=\'\'', '@mk_deleted=1', '@mk_submit_type=\'\'']
     
     let fieldArr = sysfields.map(_f => _f.toLowerCase())
     let hasBid = false
diff --git a/src/utils/option.js b/src/utils/option.js
index c0016f4..858aa90 100644
--- a/src/utils/option.js
+++ b/src/utils/option.js
@@ -360,6 +360,45 @@
   text: '鐧藉簳绱'
 }]
 
+// 鎸夐挳棰滆壊闆�
+export const modalClasses = [{
+  value: 'primary',
+  text: '钃濊壊'
+}, {
+  value: 'yellow',
+  text: '榛勮壊'
+}, {
+  value: 'orange',
+  text: '姗欒壊'
+}, {
+  value: 'danger',
+  text: '绾㈣壊'
+}, {
+  value: 'green',
+  text: '缁胯壊'
+}, {
+  value: 'purple',
+  text: '绱壊'
+}, {
+  value: 'border-primary',
+  text: '鐧藉簳钃濇'
+}, {
+  value: 'border-yellow',
+  text: '鐧藉簳榛勬'
+}, {
+  value: 'border-orange',
+  text: '鐧藉簳姗欐'
+}, {
+  value: 'border-danger',
+  text: '鐧藉簳绾㈡'
+}, {
+  value: 'border-green',
+  text: '鐧藉簳缁挎'
+}, {
+  value: 'border-purple',
+  text: '鐧藉簳绱'
+}]
+
 export const calendarColors = [
   {name: 'red', value: '#d0021b'},
   {name: 'orange', value: '#f5a623'},
diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 231ece6..27a4c57 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -3378,7 +3378,7 @@
         sqls.push({uuid: cell.uuid, roleId: roleId, type: 'pay', ...msg})
       }
     } else if (cell.OpenType === 'popview') {
-      if (cell.config && cell.config.components) {
+      if (cell.config && cell.config.components && cell.config.enabled) {
         let _mainSearch = []
 
         if (appType === 'mob') {
@@ -4393,6 +4393,12 @@
       }
     })
 
+    if (new RegExp('@mk_submit_type[^0-9a-z_]', 'ig').test(_sql)) {
+      decSql.push(`@mk_submit_type nvarchar(50)`)
+      secSql.push(`@mk_submit_type=@mk_submit_type@`)
+      reps.push('mk_submit_type')
+    }
+
     decSql = [...decSql, ..._declares]
 
     // INSERT INTO s_paas_api_log (appkey,api_name,api_count,menuname,createuserid,createuser,createstaff,cdefine1,cdefine2) 
@@ -4427,12 +4433,8 @@
       return true
     })
 
-    reps.forEach(n => {
-      _sql = _sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
-    })
-
     if (/\$@/ig.test(_sql)) {
-      _sql = _sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      _sql = _sql.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
       reps.push('datam_begin', 'datam_end')
     }
     if (btn.procMode === 'system') {
@@ -4441,10 +4443,15 @@
       }
     } else {
       if (/\$check@|@check\$/ig.test(_sql)) {
-        _sql = _sql.replace(/\$check@/ig, '@mk_check_begin@').replace(/@check\$/ig, '@mk_check_end@')
+        _sql = _sql.replace(/\$check@/ig, ' @mk_check_begin@ ').replace(/@check\$/ig, ' @mk_check_end@ ')
         reps.push('mk_check_begin', 'mk_check_end')
       }
     }
+    reps.forEach(n => {
+      if (['datam_begin', 'datam_end', 'mk_check_begin', 'mk_check_end'].includes(n)) return
+
+      _sql = _sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
     if (/@db@/ig.test(_sql)) {
       reps.push('db')
     }
@@ -4705,6 +4712,12 @@
       }
     })
 
+    if (new RegExp('@mk_submit_type[^0-9a-z_]', 'ig').test(_sql)) {
+      decSql.push(`@mk_submit_type nvarchar(50)`)
+      secSql.push(`@mk_submit_type=@mk_submit_type@`)
+      reps.push('mk_submit_type')
+    }
+
     decSql = [...decSql, ..._declares]
 
     _sql = `/* ${btn.logLabel}(鍥炶皟) */
@@ -4737,14 +4750,15 @@
       return true
     })
 
-    reps.forEach(n => {
-      _sql = _sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
-    })
-
     if (/\$@/ig.test(_sql)) {
-      _sql = _sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      _sql = _sql.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
       reps.push('datam_begin', 'datam_end')
     }
+    reps.forEach(n => {
+      if (['datam_begin', 'datam_end'].includes(n)) return
+
+      _sql = _sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
     if (/@db@/ig.test(_sql)) {
       reps.push('db')
     }
@@ -5011,16 +5025,16 @@
 
       return true
     })
-    
+
+    if (/\$@/ig.test(sql)) {
+      sql = sql.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
+      reps.push('datam_begin', 'datam_end')
+    }
     reps.forEach(n => {
-      if (['orderBy', 'pageSize', 'pageIndex'].includes(n)) return
+      if (['orderBy', 'pageSize', 'pageIndex', 'datam_begin', 'datam_end'].includes(n)) return
 
       sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
     })
-    if (/\$@/ig.test(sql)) {
-      sql = sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
-      reps.push('datam_begin', 'datam_end')
-    }
     if (/@db@/ig.test(sql)) {
       reps.push('db')
     }
@@ -5315,18 +5329,20 @@
       return true
     })
 
-    reps.forEach(n => {
-      sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
-    })
-
     if (/\$@/ig.test(sql)) {
-      sql = sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      sql = sql.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
       reps.push('datam_begin', 'datam_end')
     }
     if (/\$check@|@check\$/ig.test(sql)) {
-      sql = sql.replace(/\$check@/ig, '@mk_check_begin@').replace(/@check\$/ig, '@mk_check_end@')
+      sql = sql.replace(/\$check@/ig, ' @mk_check_begin@ ').replace(/@check\$/ig, ' @mk_check_end@ ')
       reps.push('mk_check_begin', 'mk_check_end')
     }
+    reps.forEach(n => {
+      if (['datam_begin', 'datam_end', 'mk_check_begin', 'mk_check_end'].includes(n)) return
+
+      sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
+    
     if (/@db@/ig.test(sql)) {
       reps.push('db')
     }
@@ -5591,14 +5607,15 @@
       return true
     })
 
-    reps.forEach(n => {
-      sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
-    })
-
     if (/\$@/ig.test(sql)) {
-      sql = sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      sql = sql.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
       reps.push('datam_begin', 'datam_end')
     }
+    reps.forEach(n => {
+      if (['datam_begin', 'datam_end'].includes(n)) return
+
+      sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
     if (/@db@/ig.test(sql)) {
       reps.push('db')
     }
@@ -5875,14 +5892,15 @@
       return true
     })
 
-    reps.forEach(n => {
-      _sql = _sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
-    })
-
     if (/\$@/ig.test(_sql)) {
-      _sql = _sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      _sql = _sql.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
       reps.push('datam_begin', 'datam_end')
     }
+    reps.forEach(n => {
+      if (['datam_begin', 'datam_end'].includes(n)) return
+
+      _sql = _sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
     if (/@db@/ig.test(_sql)) {
       reps.push('db')
     }
@@ -5988,14 +6006,15 @@
 
     reps.push(...sysVars)
 
-    reps.forEach(n => {
-      sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
-    })
-
     if (/\$@/ig.test(sql)) {
-      sql = sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      sql = sql.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
       reps.push('datam_begin', 'datam_end')
     }
+    reps.forEach(n => {
+      if (['datam_begin', 'datam_end'].includes(n)) return
+
+      sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
     if (/@db@/ig.test(sql)) {
       reps.push('db')
     }
@@ -6113,15 +6132,15 @@
       return true
     })
 
+    if (/\$@/ig.test(sql)) {
+      sql = sql.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
+      reps.push('datam_begin', 'datam_end')
+    }
     reps.forEach(n => {
-      if (['orderBy', 'pageSize', 'pageIndex'].includes(n)) return
+      if (['orderBy', 'pageSize', 'pageIndex', 'datam_begin', 'datam_end'].includes(n)) return
 
       sql = sql.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
     })
-    if (/\$@/ig.test(sql)) {
-      sql = sql.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
-      reps.push('datam_begin', 'datam_end')
-    }
     if (/@db@/ig.test(sql)) {
       reps.push('db')
     }
@@ -6160,13 +6179,15 @@
       }
     })
 
-    reps.forEach(n => {
-      _script = _script.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
-    })
     if (/\$@/ig.test(_script)) {
-      _script = _script.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
+      _script = _script.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
       reps.push('datam_begin', 'datam_end')
     }
+    reps.forEach(n => {
+      if (['datam_begin', 'datam_end'].includes(n)) return
+
+      _script = _script.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
+    })
     if (/@db@/ig.test(_script)) {
       reps.push('db')
     }
@@ -6282,15 +6303,17 @@
       }
     })
 
+    if (/\$@/ig.test(testSql)) {
+      _prev = _prev.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
+      _back = _back.replace(/\$@/ig, ' @datam_begin@ ').replace(/@\$/ig, ' @datam_end@ ')
+      reps.push('datam_begin', 'datam_end')
+    }
     reps.forEach(n => {
+      if (['datam_begin', 'datam_end'].includes(n)) return
+
       _prev = _prev.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
       _back = _back.replace(new RegExp('@' + n + '@', 'ig'), `'@${n}@'`)
     })
-    if (/\$@/ig.test(testSql)) {
-      _prev = _prev.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
-      _back = _back.replace(/\$@/ig, '@datam_begin@').replace(/@\$/ig, '@datam_end@')
-      reps.push('datam_begin', 'datam_end')
-    }
     if (/@db@/ig.test(testSql)) {
       reps.push('db')
     }
diff --git a/src/utils/utils.js b/src/utils/utils.js
index a93c540..0235f91 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -1771,7 +1771,7 @@
  * @return {Array}   columns   鏄剧ず鍒�
  * @return {Boolean} retmsg    鏄惁闇�瑕佹暟鎹繑鍥�
  */
-export function getSysDefaultSql (btn, setting, formdata, param, data, columns, retmsg = false) {
+export function getSysDefaultSql (btn, setting, formdata, param, data, columns, retmsg = false, submitType = '') {
   let primaryId = param.ID
   let BID = param.BID || ''
   let verify = btn.verify || {}
@@ -1809,7 +1809,7 @@
   })
 
   // 闇�瑕佸0鏄庣殑鍙橀噺闆�
-  let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'mk_deleted', 'bid']
+  let _vars = ['tbid', 'errorcode', 'retmsg', 'billcode', 'bvoucher', 'fibvoucherdate', 'fiyear', 'username', 'fullname', 'modulardetailcode', 'roleid', 'mk_departmentcode', 'mk_organization', 'mk_user_type', 'mk_nation', 'mk_province', 'mk_city', 'mk_district', 'mk_address', 'mk_deleted', 'bid', 'mk_submit_type']
 
   // 涓婚敭瀛楁
   let primaryKey = setting.primaryKey || 'id'
@@ -1942,7 +1942,7 @@
     _declarefields = ',' + _declarefields
   }
   _sql = `/* 绯荤粺鐢熸垚 */
-      Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@mk_deleted int,@bid nvarchar(50)${_declarefields}
+      Declare @tbid nvarchar(50),@ErrorCode nvarchar(50),@retmsg nvarchar(4000),@BillCode nvarchar(50),@BVoucher nvarchar(50),@FIBVoucherDate nvarchar(50), @FiYear nvarchar(50),@ModularDetailCode nvarchar(50), @UserName nvarchar(50),@FullName nvarchar(50),@RoleID nvarchar(512),@mk_departmentcode nvarchar(512),@mk_organization nvarchar(512),@mk_user_type nvarchar(20),@mk_nation nvarchar(50),@mk_province nvarchar(50),@mk_city nvarchar(50),@mk_district nvarchar(50),@mk_address nvarchar(100),@mk_deleted int,@bid nvarchar(50),@mk_submit_type nvarchar(50)${_declarefields}
     `
 
   let userName = sessionStorage.getItem('User_Name') || '' 
@@ -1960,7 +1960,7 @@
   // 鍒濆鍖栧嚟璇佸強鐢ㄦ埛淇℃伅瀛楁
   _sql += `
       /* 鍑瘉鍙婄敤鎴蜂俊鎭垵濮嬪寲璧嬪�� */
-      select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @mk_deleted=1, @bid='${BID}', @BillCode='', @ModularDetailCode=''
+      select @BVoucher='',@FIBVoucherDate='',@FiYear='',@ErrorCode='',@retmsg='',@UserName='${userName}', @FullName='${fullName}', @RoleID='${RoleID}', @mk_departmentcode='${departmentcode}', @mk_organization='${organization}', @mk_user_type='${mk_user_type}', @mk_nation='${nation}', @mk_province='${province}', @mk_city='${city}', @mk_district='${district}', @mk_address='${address}', @mk_deleted=1, @bid='${BID}', @mk_submit_type='${submitType}', @BillCode='', @ModularDetailCode=''
       `
 
   // 琛ㄥ崟鍙橀噺璧嬪��
diff --git a/src/views/appmanage/index.jsx b/src/views/appmanage/index.jsx
index 8781fbf..76ce934 100644
--- a/src/views/appmanage/index.jsx
+++ b/src/views/appmanage/index.jsx
@@ -495,7 +495,6 @@
               }
 
               cell.userbind = _param.userbind || ''
-              cell.instantMessage = _param.instantMessage || ''
             }
 
             if (cell.user_binding !== 'true') {
@@ -670,7 +669,6 @@
     sublist = sublist.map(item => {
       if (item.typename !== 'pc') {
         item.userbind = md5(selectApp.kei_no + item.typename + item.lang).replace(/^.{8}/, 'userbind')
-        item.instantMessage = md5(selectApp.kei_no + item.typename + item.lang).replace(/^.{14}/, 'instantmessage')
       }
       return item
     })
@@ -951,7 +949,6 @@
         selectApp.sublist = selectApp.sublist.map(item => {
           if (item.typename !== 'pc') {
             item.userbind = md5(selectApp.kei_no + item.typename + item.lang).replace(/^.{8}/, 'userbind')
-            item.instantMessage = md5(selectApp.kei_no + item.typename + item.lang).replace(/^.{14}/, 'instantmessage')
           }
           return item
         })
@@ -1005,9 +1002,6 @@
     }
     if (item.userbind) {
       _par.userbind = item.userbind
-    }
-    if (item.instantMessage) {
-      _par.instantMessage = item.instantMessage
     }
     if (item.apptype) {
       _par.apptype = item.apptype
@@ -1098,7 +1092,6 @@
       sublist = sublist.map(item => {
         if (item.typename !== 'pc') {
           item.userbind = md5(selectApp.kei_no + item.typename + item.lang).replace(/^.{8}/, 'userbind')
-          item.instantMessage = md5(selectApp.kei_no + item.typename + item.lang).replace(/^.{14}/, 'instantmessage')
         }
         return item
       })
diff --git a/src/views/appmanage/transmenu/index.jsx b/src/views/appmanage/transmenu/index.jsx
index 52f0433..a70592a 100644
--- a/src/views/appmanage/transmenu/index.jsx
+++ b/src/views/appmanage/transmenu/index.jsx
@@ -97,7 +97,7 @@
       if (result.status) {
         let menus = []
         result.menus.forEach(item => {
-          if (zhApp.userbind === item.MenuID || zhApp.instantMessage === item.MenuID) return
+          if (zhApp.userbind === item.MenuID) return
           
           menus.push(item)
         })
diff --git a/src/views/design/sidemenu/index.jsx b/src/views/design/sidemenu/index.jsx
index 897bd86..293e3a3 100644
--- a/src/views/design/sidemenu/index.jsx
+++ b/src/views/design/sidemenu/index.jsx
@@ -330,7 +330,7 @@
                 {item.children.map(cell => {
                   return (
                     <Menu.Item key={cell.MenuID}>
-                      <span className={'editable-menu-item ' + (cell.up_action ? 'unupdate' : '') + (window.backend && window.GLOB.systemType !== 'production' && cell.PageParam.backend !== 'level1' ? ' unbackend' : '')} onDoubleClick={() => this.editmenu(cell)}>{cell.PageParam.interfaces === 'true' ? <ApiOutlined title="鑿滃崟涓娇鐢ㄤ簡澶栭儴鎺ュ彛" /> : null}{cell.PageParam.msg === 'true' ? <SoundOutlined title="鑿滃崟涓彂閫佷簡娑堟伅" /> : null}{cell.MenuName}{cell.PageParam.pds === 'true' ? <DatabaseOutlined style={{marginLeft: '5px', color: 'inherit'}} title="鑿滃崟涓娇鐢ㄤ簡鍏叡鏁版嵁婧�" /> : null}</span>
+                      <span className={'editable-menu-item ' + (cell.up_action ? 'unupdate' : '') + (window.backend && window.GLOB.systemType !== 'production' && cell.PageParam.backend !== 'level1' ? ' unbackend' : '')} onDoubleClick={() => this.editmenu(cell)}>{cell.PageParam.interfaces === 'true' ? <ApiOutlined title="鑿滃崟涓娇鐢ㄤ簡澶栭儴鎺ュ彛" /> : null}{cell.PageParam.msg === 'true' ? <SoundOutlined title="鑿滃崟涓彂閫佷簡娑堟伅" /> : null}{cell.MenuName}{cell.PageParam.pds === 'true' ? <DatabaseOutlined style={{marginLeft: '5px', color: 'orange'}} title="鑿滃崟涓娇鐢ㄤ簡鍏叡鏁版嵁婧�" /> : null}</span>
                     </Menu.Item>
                   )
                 })}
diff --git a/src/views/mobdesign/index.jsx b/src/views/mobdesign/index.jsx
index 4a44a02..dab7a68 100644
--- a/src/views/mobdesign/index.jsx
+++ b/src/views/mobdesign/index.jsx
@@ -114,7 +114,6 @@
         sessionStorage.setItem('sysBgColor', param.sysBgColor || '#ffffff')
         sessionStorage.setItem('direction', param.direction || 'vertical')
         sessionStorage.setItem('userbind', param.userbind || '')
-        sessionStorage.setItem('instantMessage', param.instantMessage || '')
 
         if (param.applangList) {
           sessionStorage.setItem('applangList', param.applangList)
@@ -765,9 +764,6 @@
       // if (sessionStorage.getItem('userbind')) {
       //   appIndeList = appIndeList + ',' + sessionStorage.getItem('userbind')
       // }
-      if (sessionStorage.getItem('instantMessage')) {
-        appIndeList = appIndeList + ',' + sessionStorage.getItem('instantMessage')
-      }
 
       let menus = res.menus.filter(item => appIndeList.indexOf(item.MenuID) === -1)
       menus = menus.map(item => {
diff --git a/src/views/rolemanage/index.jsx b/src/views/rolemanage/index.jsx
index 2bd8b09..736c83f 100644
--- a/src/views/rolemanage/index.jsx
+++ b/src/views/rolemanage/index.jsx
@@ -30,7 +30,7 @@
           if (record.extra || this.state.appKeys.includes(record.MenuID)) {
             return <span className={className} style={{color: '#1890ff'}}>{text}</span>
           } else if (record.interfaces === 'true' || record.msg === 'true' || record.pds === 'true') {
-            return <span className={className}>{record.interfaces === 'true' ? <ApiOutlined style={{color: 'orange', marginRight: '5px'}} title="鑿滃崟涓娇鐢ㄤ簡澶栭儴鎺ュ彛" /> : null}{record.msg === 'true' ? <SoundOutlined style={{color: 'orange', marginRight: '5px'}} title="鑿滃崟涓彂閫佷簡娑堟伅" /> : null}{text}{record.pds === 'true' ? <DatabaseOutlined style={{marginLeft: '5px'}} title="鑿滃崟涓娇鐢ㄤ簡鍏叡鏁版嵁婧�" /> : null}</span>
+            return <span className={className}>{record.interfaces === 'true' ? <ApiOutlined style={{color: 'orange', marginRight: '5px'}} title="鑿滃崟涓娇鐢ㄤ簡澶栭儴鎺ュ彛" /> : null}{record.msg === 'true' ? <SoundOutlined style={{color: 'orange', marginRight: '5px'}} title="鑿滃崟涓彂閫佷簡娑堟伅" /> : null}{text}{record.pds === 'true' ? <DatabaseOutlined style={{color: 'orange', marginLeft: '5px'}} title="鑿滃崟涓娇鐢ㄤ簡鍏叡鏁版嵁婧�" /> : null}</span>
           }
           return <span className={className}>{text}</span>
         }
@@ -148,7 +148,6 @@
     Api.getCloudConfig(param).then(result => {
       if (result.status) {
         let ub = app.user_binding === 'true' && app.userbind ? false : true
-        let im = app.instantMessage ? false : true
 
         let menus = result.menus.map(item => {
           item.nodes = ''
@@ -166,15 +165,13 @@
                 item.type = pageParam.type
               }
 
-              if (item.type === 'navbar' || item.type === 'im') {
+              if (item.type === 'navbar') {
                 item.backend = 'level1'
               }
 
               if (pageParam.version !== '1.0') {
                 item.nodes = ''
               } else if (pageParam.login || pageParam.pass) {
-                item.nodes = ''
-              } else if (pageParam.type === 'im') {
                 item.nodes = ''
               }
             } catch (e) {
@@ -188,17 +185,10 @@
             item.extra = true
             ub = true
           }
-          if (app.instantMessage === item.MenuID) {
-            item.extra = true
-            im = true
-          }
           
           return item
         })
 
-        if (!im) {
-          menus.push({nodes: '', type: 'none', backend: 'level1', extra: true, MenuID: app.instantMessage, MenuName: '鍗虫椂閫氫俊'})
-        }
         if (!ub) {
           menus.push({nodes: '', type: 'none', backend: 'level1', extra: true, MenuID: app.userbind, MenuName: '鐢ㄦ埛缁戝畾'})
         }
@@ -554,8 +544,6 @@
                       item.nodes = ''
                     } else if (pageParam.login || pageParam.pass) {
                       item.nodes = ''
-                    } else if (pageParam.type === 'im') {
-                      item.nodes = ''
                     }
                   } catch (e) {
                     item.nodes = ''
@@ -893,10 +881,6 @@
         duration: 5
       })
       return
-    }
-
-    if (app.instantMessage && item.MenuID === app.instantMessage) {
-      route = 'imdesign'
     }
 
     window.open(window.location.href.replace(/#.+/ig, `#/${route}/${window.btoa(window.encodeURIComponent(JSON.stringify({...app, MenuID: item.MenuID, type: 'app'})))}`))

--
Gitblit v1.8.0