From d823c59ba0b5f73e06c90d8bcae4dd25f5dfab64 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 07 九月 2023 17:18:02 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/menu/components/table/normal-table/options.jsx                     |   13 +
 src/tabviews/zshare/topSearch/index.jsx                                |   15 +
 src/utils/utils-custom.js                                              |  119 +++++++++
 src/views/rolemanage/index.jsx                                         |    8 
 src/views/design/sidemenu/index.scss                                   |    8 
 src/views/tabledesign/index.jsx                                        |    6 
 src/menu/components/table/edit-table/options.jsx                       |   15 +
 src/views/systemfunc/index.jsx                                         |    6 
 src/menu/tablenodes/index.jsx                                          |  295 ++++++++++++++++++++++++
 src/views/design/sidemenu/index.jsx                                    |    4 
 src/views/mobdesign/index.jsx                                          |    7 
 src/menu/components/table/edit-table/index.jsx                         |    2 
 src/views/menudesign/index.jsx                                         |    6 
 src/utils/utils.js                                                     |    8 
 src/index.js                                                           |   24 +-
 src/menu/components/card/double-data-card/options.jsx                  |   13 +
 src/menu/components/card/data-card/options.jsx                         |   13 +
 src/views/pcdesign/index.jsx                                           |    7 
 src/menu/components/table/base-table/options.jsx                       |   14 +
 src/tabviews/custom/components/table/edit-table/normalTable/index.jsx  |   56 +++
 src/tabviews/custom/components/table/edit-table/normalTable/index.scss |    3 
 src/menu/components/card/prop-card/index.jsx                           |    2 
 src/menu/components/search/main-search/options.jsx                     |   13 +
 src/menu/components/calendar/options.jsx                               |   13 +
 src/views/login/index.jsx                                              |   26 +-
 25 files changed, 640 insertions(+), 56 deletions(-)

diff --git a/src/index.js b/src/index.js
index 53cadc4..120b285 100644
--- a/src/index.js
+++ b/src/index.js
@@ -110,18 +110,6 @@
       GLOB.mainSystemApi = ''
     }
 
-    if (/#\/hs$/.test(window.location.href)) { // hs涓嬩笉鎵撳嵃鑴氭湰
-      GLOB.debugger = false
-
-      if (GLOB.mainSystemApi) {
-        GLOB.localSystemApi = GLOB.mainSystemApi
-        GLOB.mainSystemApi = ''
-      }
-      if (GLOB.cloudServiceApi) {
-        GLOB.mainSystemApi = GLOB.cloudServiceApi
-      }
-    }
-
     if (GLOB.sysType !== 'cloud') {
       if (config.appkey === options.cakey) {
         document.getElementById('root').innerHTML = '<div style="text-align: center; font-size: 30px; margin-top: 40vh;">涓嶅彲浣跨敤浜戠appkey锛岃鑱旂郴绠$悊鍛橈紒</div>'
@@ -153,6 +141,18 @@
       }
     }
 
+    if (/#\/hs$/.test(window.location.href)) { // hs涓嬩笉鎵撳嵃鑴氭湰
+      GLOB.debugger = false
+
+      if (GLOB.mainSystemApi) {
+        GLOB.localSystemApi = GLOB.mainSystemApi
+        GLOB.mainSystemApi = ''
+      }
+      if (GLOB.cloudServiceApi) {
+        GLOB.mainSystemApi = GLOB.cloudServiceApi
+      }
+    }
+
     let _href = window.location.href.split('#')[0]
     let _systemMsg = localStorage.getItem(_href + 'system')
     let className = 'mk-blue-black'
diff --git a/src/menu/components/calendar/options.jsx b/src/menu/components/calendar/options.jsx
index 3ab3730..f7ae8e9 100644
--- a/src/menu/components/calendar/options.jsx
+++ b/src/menu/components/calendar/options.jsx
@@ -131,6 +131,19 @@
     },
     {
       type: 'radio',
+      field: 'cacheSearch',
+      label: '鎼滅储缂撳瓨',
+      initval: wrap.cacheSearch || 'false',
+      tooltip: '鍚敤鎼滅储鏉′欢缂撳瓨鍚庯紝鍦ㄨ彍鍗曞埛鏂版椂鎼滅储鏉′欢涓嶅彉銆�',
+      required: false,
+      options: [
+        {value: 'true', label: '鍚敤'},
+        {value: 'false', label: '绂佺敤'},
+      ],
+      forbid: !!appType || isprint
+    },
+    {
+      type: 'radio',
       field: 'click',
       label: '鐐瑰嚮浜嬩欢',
       initval: wrap.click || '',
diff --git a/src/menu/components/card/data-card/options.jsx b/src/menu/components/card/data-card/options.jsx
index 519af8e..adc2931 100644
--- a/src/menu/components/card/data-card/options.jsx
+++ b/src/menu/components/card/data-card/options.jsx
@@ -564,6 +564,19 @@
       forbid: ispop || isprint
     },
     {
+      type: 'radio',
+      field: 'cacheSearch',
+      label: '鎼滅储缂撳瓨',
+      initval: wrap.cacheSearch || 'false',
+      tooltip: '鍚敤鎼滅储鏉′欢缂撳瓨鍚庯紝鍦ㄨ彍鍗曞埛鏂版椂鎼滅储鏉′欢涓嶅彉銆�',
+      required: false,
+      options: [
+        {value: 'true', label: '鍚敤'},
+        {value: 'false', label: '绂佺敤'},
+      ],
+      forbid: !!appType || isprint
+    },
+    {
       type: 'multiselect',
       field: 'blacklist',
       label: '榛戝悕鍗�',
diff --git a/src/menu/components/card/double-data-card/options.jsx b/src/menu/components/card/double-data-card/options.jsx
index 82a6258..dac4c9e 100644
--- a/src/menu/components/card/double-data-card/options.jsx
+++ b/src/menu/components/card/double-data-card/options.jsx
@@ -240,6 +240,19 @@
       forbid: ispop || isprint
     },
     {
+      type: 'radio',
+      field: 'cacheSearch',
+      label: '鎼滅储缂撳瓨',
+      initval: wrap.cacheSearch || 'false',
+      tooltip: '鍚敤鎼滅储鏉′欢缂撳瓨鍚庯紝鍦ㄨ彍鍗曞埛鏂版椂鎼滅储鏉′欢涓嶅彉銆�',
+      required: false,
+      options: [
+        {value: 'true', label: '鍚敤'},
+        {value: 'false', label: '绂佺敤'},
+      ],
+      forbid: !!appType || isprint
+    },
+    {
       type: 'multiselect',
       field: 'blacklist',
       label: '榛戝悕鍗�',
diff --git a/src/menu/components/card/prop-card/index.jsx b/src/menu/components/card/prop-card/index.jsx
index 880a042..551e955 100644
--- a/src/menu/components/card/prop-card/index.jsx
+++ b/src/menu/components/card/prop-card/index.jsx
@@ -399,7 +399,7 @@
         <div className={`${card.wrap.layout || 'grid'}-layout float-${card.wrap.cardFloat || 'left'} select-${card.wrap.selStyle || ''}`}>
           {card.subcards.map(subcard => (<CardComponent key={subcard.uuid} cards={card} card={subcard} move={this.move} updateElement={this.updateCard} deleteElement={this.deleteCard}/>))}
         </div>
-        {card.wrap.display === 'hidden' ? <HeatMapOutlined className="prop-hidden"/> : null}
+        {card.wrap.display === 'hidden' ? <HeatMapOutlined title="缁勪欢闅愯棌" className="prop-hidden"/> : null}
         <div className="component-name">
           <div className="center">
             <div className="title" onDoubleClick={() => {
diff --git a/src/menu/components/search/main-search/options.jsx b/src/menu/components/search/main-search/options.jsx
index c1cd29d..8228b2b 100644
--- a/src/menu/components/search/main-search/options.jsx
+++ b/src/menu/components/search/main-search/options.jsx
@@ -155,6 +155,19 @@
       forbid: !appType || sessionStorage.getItem('editMenuType') === 'popview'
     },
     {
+      type: 'radio',
+      field: 'cacheSearch',
+      label: '鎼滅储缂撳瓨',
+      initval: wrap.cacheSearch || 'false',
+      tooltip: '鍚敤鎼滅储鏉′欢缂撳瓨鍚庯紝鍦ㄨ彍鍗曞埛鏂版椂鎼滅储鏉′欢涓嶅彉銆�',
+      required: false,
+      options: [
+        {value: 'true', label: '鍚敤'},
+        {value: 'false', label: '绂佺敤'},
+      ],
+      forbid: !!appType
+    },
+    {
       type: 'multiselect',
       field: 'blacklist',
       label: '榛戝悕鍗�',
diff --git a/src/menu/components/table/base-table/options.jsx b/src/menu/components/table/base-table/options.jsx
index 3db5e1e..775a39c 100644
--- a/src/menu/components/table/base-table/options.jsx
+++ b/src/menu/components/table/base-table/options.jsx
@@ -199,7 +199,19 @@
       initval: wrap.controlVal || '',
       tooltip: '褰撳瓧娈靛�间笌绂佺敤鍊肩浉绛夋椂锛岃鏁版嵁浼氱鐢紝澶氫釜鍊肩敤閫楀彿鍒嗛殧銆�',
       required: false
-    }
+    },
+    {
+      type: 'radio',
+      field: 'cacheSearch',
+      label: '鎼滅储缂撳瓨',
+      initval: wrap.cacheSearch || 'false',
+      tooltip: '鍚敤鎼滅储鏉′欢缂撳瓨鍚庯紝鍦ㄨ彍鍗曞埛鏂版椂鎼滅储鏉′欢涓嶅彉銆�',
+      required: false,
+      options: [
+        {value: 'true', label: '鍚敤'},
+        {value: 'false', label: '绂佺敤'},
+      ]
+    },
   ]
 
   return wrapForm
diff --git a/src/menu/components/table/edit-table/index.jsx b/src/menu/components/table/edit-table/index.jsx
index 9aed6ca..f211286 100644
--- a/src/menu/components/table/edit-table/index.jsx
+++ b/src/menu/components/table/edit-table/index.jsx
@@ -323,7 +323,7 @@
             <PlusOutlined className="plus" title="娣诲姞鍒�" onClick={this.addColumns}/>
             {appType !== 'mob' ? <PlusCircleOutlined className="plus" title="娣诲姞鎼滅储" onClick={this.addSearch}/> : null}
             <PlusSquareOutlined className="plus" title="娣诲姞鎸夐挳" onClick={this.addButton}/>
-            <NormalForm title="琛ㄦ牸璁剧疆" width={800} update={this.updateWrap} getForms={this.getWrapForms}>
+            <NormalForm title="琛ㄦ牸璁剧疆" width={900} update={this.updateWrap} getForms={this.getWrapForms}>
               <EditOutlined style={{color: '#1890ff'}} title="缂栬緫"/>
             </NormalForm>
             <CopyComponent type="editable" card={card}/>
diff --git a/src/menu/components/table/edit-table/options.jsx b/src/menu/components/table/edit-table/options.jsx
index 9fd58b0..18fc7a4 100644
--- a/src/menu/components/table/edit-table/options.jsx
+++ b/src/menu/components/table/edit-table/options.jsx
@@ -111,6 +111,9 @@
         {value: 'all', label: '鍏ㄩ儴'},
         {value: 'change', label: '淇敼椤�'},
         {value: 'simple', label: '鍗曢」'},
+      ],
+      controlFields: [
+        {field: 'standard', values: ['change', 'simple']},
       ]
     },
     // {
@@ -139,6 +142,18 @@
     },
     {
       type: 'radio',
+      field: 'standard',
+      label: '淇敼鏍囧噯',
+      initval: wrap.standard || 'init',
+      tooltip: '濡備綍鍒ゆ柇琛屼俊鎭槸鍚﹀簲璇ユ彁浜ゃ��',
+      required: false,
+      options: [
+        {value: 'init', label: '涓庡垵濮嬪�间笉鍚�'},
+        {value: 'change', label: '瀛樺湪缂栬緫鐥曡抗'},
+      ]
+    },
+    {
+      type: 'radio',
       field: 'cache',
       label: '缂撳瓨',
       initval: wrap.cache || 'true',
diff --git a/src/menu/components/table/normal-table/options.jsx b/src/menu/components/table/normal-table/options.jsx
index 8ab9460..8b1eae1 100644
--- a/src/menu/components/table/normal-table/options.jsx
+++ b/src/menu/components/table/normal-table/options.jsx
@@ -293,6 +293,19 @@
       forbid: ispop || isprint
     },
     {
+      type: 'radio',
+      field: 'cacheSearch',
+      label: '鎼滅储缂撳瓨',
+      initval: wrap.cacheSearch || 'false',
+      tooltip: '鍚敤鎼滅储鏉′欢缂撳瓨鍚庯紝鍦ㄨ彍鍗曞埛鏂版椂鎼滅储鏉′欢涓嶅彉銆�',
+      required: false,
+      options: [
+        {value: 'true', label: '鍚敤'},
+        {value: 'false', label: '绂佺敤'},
+      ],
+      forbid: !!appType || isprint
+    },
+    {
       type: 'multiselect',
       field: 'blacklist',
       label: '榛戝悕鍗�',
diff --git a/src/menu/tablenodes/index.jsx b/src/menu/tablenodes/index.jsx
index 26fb797..7fe455e 100644
--- a/src/menu/tablenodes/index.jsx
+++ b/src/menu/tablenodes/index.jsx
@@ -109,6 +109,293 @@
     return {tbs, ptbs}
   }
 
+  getFuncAndInterface = (config) => {
+    let ptbs = []
+
+    let filterBtn = (cell, tbs) => {
+      if (cell.intertype === 'inner') {
+        tbs.push({
+          label: cell.innerFunc + ' (' + cell.label + ')',
+          color: 'orange',
+          id: Utils.getuuid(),
+          direction: 'left'
+        })
+      } else if (cell.intertype === 'outer' || cell.intertype === 'custom') {
+        if (cell.innerFunc) {
+          tbs.push({
+            label: cell.innerFunc + ' (' + cell.label + ')',
+            color: 'orange',
+            id: Utils.getuuid(),
+            direction: 'left'
+          })
+        }
+        if (cell.outerFunc) {
+          tbs.push({
+            label: cell.outerFunc + ' (' + cell.label + ')',
+            color: 'orange',
+            id: Utils.getuuid(),
+            direction: 'left'
+          })
+        }
+        if (cell.interface && cell.sysInterface !== 'true') {
+          tbs.push({
+            label: cell.interface + ' (' + cell.label + ')',
+            color: 'orange',
+            id: Utils.getuuid(),
+            direction: 'left'
+          })
+        }
+        if (cell.proInterface) {
+          tbs.push({
+            label: cell.proInterface + ' (' + cell.label + ')',
+            color: 'orange',
+            id: Utils.getuuid(),
+            direction: 'left'
+          })
+        }
+        if (cell.exInterface) {
+          let url = ''
+
+          try {
+            url = JSON.parse(cell.exInterface).url
+          } catch(e) {
+            url = ''
+          }
+
+          if (url) {
+            tbs.push({
+              label: url + ' (' + cell.label + ')',
+              color: 'orange',
+              id: Utils.getuuid(),
+              direction: 'left'
+            })
+          }
+        }
+        if (cell.exProInterface) {
+          let url = ''
+
+          try {
+            url = JSON.parse(cell.exProInterface).url
+          } catch(e) {
+            url = ''
+          }
+
+          if (url) {
+            tbs.push({
+              label: url + ' (' + cell.label + ')',
+              color: 'orange',
+              id: Utils.getuuid(),
+              direction: 'left'
+            })
+          }
+        }
+        if (cell.callbackFunc) {
+          tbs.push({
+            label: cell.callbackFunc + ' (' + cell.label + ')',
+            color: 'orange',
+            id: Utils.getuuid(),
+            direction: 'left'
+          })
+        }
+      }
+    }
+
+    let filterSetting = (item, tbs) => {
+      if (!item.setting) return
+      if (item.setting.interType === 'inner') {
+        tbs.push({
+          label: item.setting.innerFunc + ' (鏁版嵁婧�)',
+          color: 'orange',
+          id: Utils.getuuid(),
+          direction: 'left'
+        })
+      } else if (item.setting.interType === 'outer') {
+        if (item.setting.outerFunc) {
+          tbs.push({
+            label: item.setting.outerFunc + ' (鏁版嵁婧�)',
+            color: 'orange',
+            id: Utils.getuuid(),
+            direction: 'left'
+          })
+        }
+        if (item.setting.interface && item.setting.sysInterface !== 'true') {
+          tbs.push({
+            label: item.setting.interface + ' (鏁版嵁婧�)',
+            color: 'orange',
+            id: Utils.getuuid(),
+            direction: 'left'
+          })
+        }
+        if (item.setting.proInterface) {
+          tbs.push({
+            label: item.setting.proInterface + ' (鏁版嵁婧�)',
+            color: 'orange',
+            id: Utils.getuuid(),
+            direction: 'left'
+          })
+        }
+        if (item.setting.exInterface) {
+          let url = ''
+
+          try {
+            url = JSON.parse(item.setting.exInterface).url
+          } catch(e) {
+            url = ''
+          }
+
+          if (url) {
+            tbs.push({
+              label: url + ' (鏁版嵁婧�)',
+              color: 'orange',
+              id: Utils.getuuid(),
+              direction: 'left'
+            })
+          }
+        }
+        if (item.setting.exProInterface) {
+          let url = ''
+
+          try {
+            url = JSON.parse(item.setting.exProInterface).url
+          } catch(e) {
+            url = ''
+          }
+
+          if (url) {
+            tbs.push({
+              label: url + ' (鏁版嵁婧�)',
+              color: 'orange',
+              id: Utils.getuuid(),
+              direction: 'left'
+            })
+          }
+        }
+      }
+    }
+
+    let traversal = (components, extra) => {
+      components.forEach(item => {
+        if (item.type === 'tabs') {
+          item.subtabs.forEach(tab => {
+            traversal(tab.components, extra)
+          })
+        } else if (item.type === 'group') {
+          traversal(item.components, extra)
+        } else {
+          let tbs = []
+
+          filterSetting(item, tbs)
+
+          if (item.action) {
+            item.action.forEach(cell => {
+              if (cell.OpenType === 'popview') {
+                if (cell.config.components) {
+                  traversal(cell.config.components, `-${cell.label}(寮圭獥)`)
+                }
+              } else {
+                filterBtn(cell, tbs)
+              }
+            })
+          }
+
+          if (item.type === 'card' || item.type === 'carousel' || item.type === 'timeline') {
+            item.subcards.forEach(card => {
+              card.elements && card.elements.forEach(cell => {
+                if (cell.eleType !== 'button') return
+                
+                if (cell.OpenType === 'popview') {
+                  if (cell.config.components) {
+                    traversal(cell.config.components, `-${cell.label}(寮圭獥)`)
+                  }
+                } else {
+                  filterBtn(cell, tbs)
+                }
+              })
+              card.backElements && card.backElements.forEach(cell => {
+                if (cell.eleType !== 'button') return
+                
+                if (cell.OpenType === 'popview') {
+                  if (cell.config.components) {
+                    traversal(cell.config.components, `-${cell.label}(寮圭獥)`)
+                  }
+                } else {
+                  filterBtn(cell, tbs)
+                }
+              })
+            })
+          } else if (item.type === 'balcony') {
+            item.elements && item.elements.forEach(cell => {
+              if (cell.eleType !== 'button') return
+              
+              if (cell.OpenType === 'popview') {
+                if (cell.config.components) {
+                  traversal(cell.config.components, `-${cell.label}(寮圭獥)`)
+                }
+              } else {
+                filterBtn(cell, tbs)
+              }
+            })
+          } else if (item.type === 'table') {
+            let loopCol = (cols) => {
+              cols.forEach(col => {
+                if (col.type === 'colspan') {
+                  loopCol(col.subcols)
+                } else if (col.type === 'custom') {
+                  col.elements.forEach(cell => {
+                    if (cell.eleType !== 'button') return
+                    
+                    if (cell.OpenType === 'popview') {
+                      if (cell.config.components) {
+                        traversal(cell.config.components, `-${cell.label}(寮圭獥)`)
+                      }
+                    } else {
+                      filterBtn(cell, tbs)
+                    }
+                  })
+                }
+              })
+            }
+            loopCol(item.cols)
+          } else if (item.type === 'form') {
+            item.subcards.forEach(group => {
+              filterBtn(group.subButton, tbs)
+            })
+          }
+          
+          if (tbs.length) {
+            ptbs.push({
+              label: item.name + extra,
+              id: Utils.getuuid(),
+              direction: 'left',
+              color: 'orange',
+              children: tbs
+            })
+          }
+        }
+      })
+    }
+
+    if (config.interfaces) {
+      config.interfaces.forEach(item => {
+        let tbs = []
+        filterSetting(item, tbs)
+        if (tbs.length) {
+          ptbs.push({
+            label: item.name,
+            id: Utils.getuuid(),
+            direction: 'left',
+            color: 'orange',
+            children: tbs
+          })
+        }
+      })
+    }
+
+    traversal(config.components, '')
+
+    return ptbs
+  }
+
   trigger = () => {
     const { config } = this.props
 
@@ -170,6 +457,12 @@
 
             data.children.push(cell)
           })
+        }
+
+        let funcs = this.getFuncAndInterface(config)
+
+        if (funcs.length) {
+          data.children.push(...funcs)
         }
 
         if (result.tb_list) {
@@ -528,7 +821,7 @@
           </div>
           <div className="footer">
             <Button key="cancel" onClick={() => { this.setState({ visible: false })}}>鍏抽棴</Button>
-            <span className="tip">娉細鐐瑰嚮琛ㄥ悕鍙睍寮�/鏀惰捣鑿滃崟</span>
+            <span className="tip">娉細鐐瑰嚮琛ㄥ悕锛堝彸渚э級鍙睍寮�/鏀惰捣鑿滃崟锛屽乏渚ф鑹叉爣娉ㄤ负鎺ュ彛鎴栧嚱鏁板悕銆�</span>
           </div>
         </Modal>
       </div>
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 71db29c..4ce4d1b 100644
--- a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
+++ b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -4,6 +4,7 @@
 import { Table, Typography, Modal, Input, InputNumber, Button, notification, message, Select } from 'antd'
 import { EditOutlined, QuestionCircleOutlined } from '@ant-design/icons'
 import moment from 'moment'
+import md5 from 'md5'
 
 import Api from '@/api'
 import asyncComponent from '@/utils/asyncComponent'
@@ -947,6 +948,7 @@
     pageSize: 10,         // 姣忛〉鏁版嵁鏉℃暟
     columns: null,        // 鏄剧ず鍒�
     forms: [],
+    signForms: [],
     orderfields: {},      // 鎺掑簭id涓巉ield杞崲
     loading: false,
     pageOptions: [],
@@ -963,6 +965,7 @@
     let deForms = []
     let _forms = {}
     let hasBid = false
+    let signForms = []
 
     let getColumns = (cols) => {
       return cols.map(item => {
@@ -974,6 +977,8 @@
         } else {
           if (item.editable === 'true') {
             _forms[item.field] = item
+
+            signForms.push(item.field)
 
             if (item.ctrlField) {
               item.ctrlValue = item.ctrlValue.split(',')
@@ -1046,6 +1051,7 @@
 
     this.setState({
       forms,
+      signForms,
       pageSize: setting.pageSize || 10,
       pageOptions,
       columns: _columns,
@@ -1108,10 +1114,28 @@
   }
 
   transferData = (menuid, data, type) => {
-    const { MenuID } = this.props
-    const { edData } = this.state
+    const { MenuID, setting } = this.props
+    const { edData, signForms } = this.state
 
     if (menuid !== MenuID) return
+
+    if (setting.commit !== 'all' && setting.standard !== 'change') {
+      if (type !== 'line') {
+        data.forEach(item => {
+          let value = ''
+          signForms.forEach(field => {
+            value += item[field]
+          })
+          item.$sign = md5(value)
+        })
+      } else {
+        let value = ''
+        signForms.forEach(field => {
+          value += data[field]
+        })
+        data.$sign = md5(value)
+      }
+    }
 
     if (type !== 'line') {
       let index = edData.findIndex(item => !item.$origin && !item.$forbid)
@@ -1461,19 +1485,31 @@
 
   changeRecord = (id, record) => {
     const { setting } = this.props
-    const { tableId } = this.state
+    const { tableId, signForms } = this.state
 
     if (id !== tableId) return
 
-    let lock = record.$lock
+    if (!record.$sign) {
+      record.$origin = false
+      record.$lock = true
+      delete record.$forbid
+    } else {
+      let value = ''
+      signForms.forEach(field => {
+        value += record[field]
+      })
+
+      if (record.$sign !== md5(value)) {
+        record.$origin = false
+        record.$lock = true
+      } else {
+        record.$origin = true
+        record.$lock = false
+      }
+    }
 
     let _data = this.state.edData.map(item => {
       if (item.$$uuid === record.$$uuid) {
-        record.$origin = false
-        record.$lock = true
-
-        delete record.$forbid
-
         return record
       } else {
         return item
@@ -1481,7 +1517,7 @@
     })
 
     this.setState({edData: _data}, () => {
-      if (setting.tableType && setting.hasAction && !lock && this.state.selectedRowKeys.includes(record.$$uuid)) {
+      if (setting.tableType && setting.hasAction && this.state.selectedRowKeys.includes(record.$$uuid)) {
         this.selectdata(this.state.selectedRowKeys)
       }
     })
diff --git a/src/tabviews/custom/components/table/edit-table/normalTable/index.scss b/src/tabviews/custom/components/table/edit-table/normalTable/index.scss
index 9fcaf63..873f7e7 100644
--- a/src/tabviews/custom/components/table/edit-table/normalTable/index.scss
+++ b/src/tabviews/custom/components/table/edit-table/normalTable/index.scss
@@ -254,6 +254,9 @@
     border-color: var(--mk-table-border-color)!important;
   }
   table tr {
+    th .ant-table-column-title {
+      position: unset!important;
+    }
     th .ant-table-column-title, th .ant-table-column-title span:not(.anticon) {
       font-size: var(--mk-table-font-size)!important;
       font-weight: var(--mk-table-font-weight)!important;
diff --git a/src/tabviews/zshare/topSearch/index.jsx b/src/tabviews/zshare/topSearch/index.jsx
index 6666d61..7b3a720 100644
--- a/src/tabviews/zshare/topSearch/index.jsx
+++ b/src/tabviews/zshare/topSearch/index.jsx
@@ -669,6 +669,8 @@
   }
 
   handleSubmit = () => {
+    const { config } = this.props
+
     this.setState({}, () => {
       this.props.form.validateFields((err, values) => {
         if (err) return
@@ -706,11 +708,20 @@
           this.sign = ''
         }, 2000)
         
+        if (config.wrap && config.wrap.cacheSearch === 'true') {
+          let _values = {}
+          searches.forEach(item => {
+            _values[item.key] = item.value
+          })
+  
+          window.GLOB.SearchBox.set(config.$searchId + 'cache', _values)
+        }
+
         if (this.props.refreshdata) {
           this.props.refreshdata(searches)
         } else {
-          window.GLOB.SearchBox.set(this.props.config.$searchId, searches)
-          MKEmitter.emit('searchRefresh', this.props.config.$searchId)
+          window.GLOB.SearchBox.set(config.$searchId, searches)
+          MKEmitter.emit('searchRefresh', config.$searchId)
         }
       })
     })
diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 5871f20..e6dd77b 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -1224,6 +1224,125 @@
 }
 
 /**
+ * @description 鑾峰彇鎺ュ彛鍙婂嚱鏁�
+ */
+export function getFuncsAndInters (config) {
+  let inters = 'false'
+
+  let filterBtn = (cell) => {
+    if ((cell.intertype === 'outer' && cell.sysInterface !== 'true') || cell.intertype === 'custom') {
+      inters = 'true'
+    }
+  }
+
+  let traversal = (components) => {
+    if (!components || inters === 'true') return
+
+    components.forEach(item => {
+      if (item.type === 'tabs') {
+        item.subtabs.forEach(tab => {
+          traversal(tab.components)
+        })
+      } else if (item.type === 'group') {
+        traversal(item.components)
+      } else {
+        if (item.setting && item.setting.interType === 'outer' && item.setting.sysInterface !== 'true') {
+          inters = 'true'
+        }
+
+        if (item.action) {
+          item.action.forEach(cell => {
+            if (cell.OpenType === 'popview') {
+              if (cell.config) {
+                traversal(cell.config.components)
+              }
+            } else {
+              filterBtn(cell)
+            }
+          })
+        }
+
+        if (item.type === 'card' || item.type === 'carousel' || item.type === 'timeline') {
+          item.subcards.forEach(card => {
+            card.elements && card.elements.forEach(cell => {
+              if (cell.eleType !== 'button') return
+              
+              if (cell.OpenType === 'popview') {
+                if (cell.config) {
+                  traversal(cell.config.components)
+                }
+              } else {
+                filterBtn(cell)
+              }
+            })
+            card.backElements && card.backElements.forEach(cell => {
+              if (cell.eleType !== 'button') return
+              
+              if (cell.OpenType === 'popview') {
+                if (cell.config) {
+                  traversal(cell.config.components)
+                }
+              } else {
+                filterBtn(cell)
+              }
+            })
+          })
+        } else if (item.type === 'balcony') {
+          item.elements && item.elements.forEach(cell => {
+            if (cell.eleType !== 'button') return
+            
+            if (cell.OpenType === 'popview') {
+              if (cell.config) {
+                traversal(cell.config.components)
+              }
+            } else {
+              filterBtn(cell)
+            }
+          })
+        } else if (item.type === 'table') {
+          let loopCol = (cols) => {
+            cols.forEach(col => {
+              if (col.type === 'colspan') {
+                loopCol(col.subcols)
+              } else if (col.type === 'custom') {
+                col.elements.forEach(cell => {
+                  if (cell.eleType !== 'button') return
+                  
+                  if (cell.OpenType === 'popview') {
+                    if (cell.config) {
+                      traversal(cell.config.components)
+                    }
+                  } else {
+                    filterBtn(cell)
+                  }
+                })
+              }
+            })
+          }
+          loopCol(item.cols)
+        } else if (item.type === 'form') {
+          item.subcards.forEach(group => {
+            filterBtn(group.subButton)
+          })
+        }
+      }
+    })
+  }
+
+  if (config.interfaces) {
+    config.interfaces.forEach(item => {
+      if (item.setting && item.setting.interType === 'outer' && item.setting.sysInterface !== 'true') {
+        inters = 'true'
+      }
+    })
+  }
+
+  traversal(config.components)
+
+  return inters
+}
+
+/**
  * @description 妫�娴嬬粍浠跺唴瀹�
  */
 export function checkComponent (card) {
diff --git a/src/utils/utils.js b/src/utils/utils.js
index 44c6a54..247f4b3 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -275,6 +275,10 @@
     let roleId = sessionStorage.getItem('role_id') || ''
     let required = false
     let keys = []
+    let values = null
+    if (config.wrap && config.wrap.cacheSearch === 'true') {
+      values = window.GLOB.SearchBox.get(config.$searchId + 'cache')
+    }
 
     config.search = config.search.map(item => {
       item.hidden = item.Hide === 'true'
@@ -387,6 +391,10 @@
       
       item.oriInitval = item.initval
 
+      if (values) {
+        item.initval = values[item.field] || ''
+      }
+
       if (item.blacklist && item.blacklist.length > 0 && !item.hidden) {
         if (item.blacklist.filter(v => roleId.indexOf(v) > -1).length > 0) {
           item.hidden = true
diff --git a/src/views/design/sidemenu/index.jsx b/src/views/design/sidemenu/index.jsx
index 3e07e00..959ed2d 100644
--- a/src/views/design/sidemenu/index.jsx
+++ b/src/views/design/sidemenu/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import { is, fromJS } from 'immutable'
 import { Menu, Popover, Modal, notification } from 'antd'
-import { EditOutlined, PlusOutlined, SettingOutlined } from '@ant-design/icons'
+import { EditOutlined, PlusOutlined, SettingOutlined, ApiOutlined } from '@ant-design/icons'
 import moment from 'moment'
 
 import asyncComponent from '@/utils/asyncComponent'
@@ -326,7 +326,7 @@
                 {item.children.map(cell => {
                   return (
                     <Menu.Item key={cell.MenuID}>
-                      <span className="editable-menu-item" onDoubleClick={() => this.editmenu(cell)}>{cell.MenuName}</span>
+                      <span className="editable-menu-item" onDoubleClick={() => this.editmenu(cell)}>{cell.PageParam && cell.PageParam.interfaces === 'true' ? <ApiOutlined title="鑿滃崟涓娇鐢ㄤ簡澶栭儴鎺ュ彛" /> : null}{cell.MenuName}</span>
                     </Menu.Item>
                   )
                 })}
diff --git a/src/views/design/sidemenu/index.scss b/src/views/design/sidemenu/index.scss
index bc55c66..bf1a210 100644
--- a/src/views/design/sidemenu/index.scss
+++ b/src/views/design/sidemenu/index.scss
@@ -12,9 +12,17 @@
       padding-left: 48px;
     }
     .editable-menu-item {
+      position: relative;
       display: block;
       padding-left: 48px;
       cursor: pointer;
+
+      .anticon-api {
+        position: absolute;
+        left: 25px;
+        top: 11px;
+        color: orange;
+      }
     }
   }
   .ant-menu-sub.ant-menu-inline {
diff --git a/src/views/login/index.jsx b/src/views/login/index.jsx
index 19e4aec..3135c50 100644
--- a/src/views/login/index.jsx
+++ b/src/views/login/index.jsx
@@ -547,20 +547,20 @@
 
     Api.getTouristMsg().then(result => {
       if (result.status) {
-        if (result.website && process.env.NODE_ENV === 'production') {
-          let website = result.website.replace(/http(s)?:\/\/|\/$/ig, '').toLowerCase()
-          let current = window.GLOB.baseurl.replace(/http(s)?:\/\/|\/$/ig, '').toLowerCase()
+        // if (result.website && process.env.NODE_ENV === 'production') {
+        //   let website = result.website.replace(/http(s)?:\/\/|\/$/ig, '').toLowerCase()
+        //   let current = window.GLOB.baseurl.replace(/http(s)?:\/\/|\/$/ig, '').toLowerCase()
 
-          if (website !== current) {
-            try {
-              window.history.replaceState(null, null, result.website.replace(/\/$/ig, '') + '/admin/index.html#/login')
-              window.location.reload()
-            } catch(e) {
-              window.location.href = result.website.replace(/\/$/ig, '') + '/admin/index.html#/login'
-            }
-            return
-          }
-        }
+        //   if (website !== current) {
+        //     try {
+        //       window.history.replaceState(null, null, result.website.replace(/\/$/ig, '') + '/admin/index.html#/login')
+        //       window.location.reload()
+        //     } catch(e) {
+        //       window.location.href = result.website.replace(/\/$/ig, '') + '/admin/index.html#/login'
+        //     }
+        //     return
+        //   }
+        // }
         
         sessionStorage.setItem('visitorUserID', result.UserID || '')
         sessionStorage.setItem('visitorLoginUID', result.LoginUID || '')
diff --git a/src/views/menudesign/index.jsx b/src/views/menudesign/index.jsx
index 189034b..9ec20db 100644
--- a/src/views/menudesign/index.jsx
+++ b/src/views/menudesign/index.jsx
@@ -13,7 +13,7 @@
 import Utils, { setGLOBFuncs } from '@/utils/utils.js'
 import antdZhCN from 'antd/es/locale/zh_CN'
 import MKEmitter from '@/utils/events.js'
-import { getTables } from '@/utils/utils-custom.js'
+import { getTables, getFuncsAndInters } from '@/utils/utils-custom.js'
 import asyncComponent from '@/utils/asyncComponent'
 
 import '@/assets/css/design.scss'
@@ -778,6 +778,8 @@
         config.tbkey = key
       }
 
+      let interfaces = getFuncsAndInters(config)
+
       let param = {
         func: 'sPC_TrdMenu_AddUpt',
         FstID: config.fstMenuId || '',
@@ -788,7 +790,7 @@
         EasyCode: config.easyCode || '',
         Template: 'CustomPage',
         MenuName: config.MenuName || '',
-        PageParam: JSON.stringify({Template: 'CustomPage', OpenType: config.OpenType || 'newtab', hidden: config.hidden || 'false'}),
+        PageParam: JSON.stringify({Template: 'CustomPage', OpenType: config.OpenType || 'newtab', hidden: config.hidden || 'false', interfaces}),
         open_edition: config.open_edition,
         LText: '',
         LTexttb: '',
diff --git a/src/views/mobdesign/index.jsx b/src/views/mobdesign/index.jsx
index c2092d2..072814b 100644
--- a/src/views/mobdesign/index.jsx
+++ b/src/views/mobdesign/index.jsx
@@ -12,7 +12,7 @@
 import Utils, { setGLOBFuncs } from '@/utils/utils.js'
 import antdZhCN from 'antd/es/locale/zh_CN'
 import MKEmitter from '@/utils/events.js'
-import MenuUtils, { getTables } from '@/utils/utils-custom.js'
+import MenuUtils, { getTables, getFuncsAndInters } from '@/utils/utils-custom.js'
 import asyncComponent from '@/utils/asyncComponent'
 
 import '@/assets/css/design.scss'
@@ -1503,6 +1503,9 @@
       let menus_used_list = subMenus.map(m => `'${config.uuid}','${config.MenuName || ''}','${config.MenuNo || ''}','${m.MenuID}','${m.MenuName}'`).join(';')
       menus_used_list = window.btoa(window.encodeURIComponent(menus_used_list || 'del'))
 
+      let interfaces = getFuncsAndInters(config)
+      roleParam.interfaces = interfaces
+
       let param = {
         func: 'sPC_TrdMenu_AddUpt',
         FstID: 'mk_app',
@@ -1515,7 +1518,7 @@
         TypeCharOne: sessionStorage.getItem('kei_no'),
         Typename: sessionStorage.getItem('typename'),
         MenuName: config.MenuName || '',
-        PageParam: JSON.stringify({Template: 'webPage'}),
+        PageParam: JSON.stringify({Template: 'webPage', interfaces}),
         open_edition: config.open_edition,
         menus_rolelist: window.btoa(window.encodeURIComponent(JSON.stringify(roleParam))),
         LText: '',
diff --git a/src/views/pcdesign/index.jsx b/src/views/pcdesign/index.jsx
index 9a139f7..e4239db 100644
--- a/src/views/pcdesign/index.jsx
+++ b/src/views/pcdesign/index.jsx
@@ -10,7 +10,7 @@
 
 import Api from '@/api'
 import Utils, { setGLOBFuncs } from '@/utils/utils.js'
-import { getTables } from '@/utils/utils-custom.js'
+import { getTables, getFuncsAndInters } from '@/utils/utils-custom.js'
 import antdZhCN from 'antd/es/locale/zh_CN'
 import MKEmitter from '@/utils/events.js'
 import MenuUtils from '@/utils/utils-custom.js'
@@ -1203,6 +1203,9 @@
         config.tbkey = key
       }
 
+      let interfaces = getFuncsAndInters(config)
+      roleParam.interfaces = interfaces
+
       let param = {
         func: 'sPC_TrdMenu_AddUpt',
         FstID: 'mk_app',
@@ -1215,7 +1218,7 @@
         TypeCharOne: sessionStorage.getItem('kei_no'),
         Typename: 'pc',
         MenuName: config.MenuName || '',
-        PageParam: JSON.stringify({Template: 'webPage'}),
+        PageParam: JSON.stringify({Template: 'webPage', interfaces}),
         menus_rolelist: window.btoa(window.encodeURIComponent(JSON.stringify(roleParam))),
         open_edition: config.open_edition,
         LText: '',
diff --git a/src/views/rolemanage/index.jsx b/src/views/rolemanage/index.jsx
index ce7203b..e246e2b 100644
--- a/src/views/rolemanage/index.jsx
+++ b/src/views/rolemanage/index.jsx
@@ -3,8 +3,8 @@
 import { Spin, notification, Button, Table, Modal, ConfigProvider, Tree, Input, Empty } from 'antd'
 import moment from 'moment'
 import md5 from 'md5'
-import enUS from 'antd/es/locale/en_US'
 import zhCN from 'antd/es/locale/zh_CN'
+import { ApiOutlined } from '@ant-design/icons'
 
 import Api from '@/api'
 import Utils from '@/utils/utils.js'
@@ -15,7 +15,6 @@
 const { TreeNode } = Tree
 const { Search } = Input
 
-const _locale = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
 const Header = asyncComponent(() => import('./header'))
 const TransferForm = asyncComponent(() => import('@/templates/zshare/basetransferform'))
 
@@ -29,6 +28,8 @@
         title: '鑿滃崟鍚嶇О', dataIndex: 'MenuName', key: 'MenuName', align: 'center', render: (text, record) => {
           if (record.extra) {
             return <span style={{color: '#1890ff'}}>{text}</span>
+          } else if (record.interfaces === 'true') {
+            return <span><ApiOutlined style={{color: 'orange', marginRight: '5px'}} title="鑿滃崟涓娇鐢ㄤ簡澶栭儴鎺ュ彛" />{text}</span>
           }
           return text
         }
@@ -140,6 +141,7 @@
             try {
               let pageParam = JSON.parse(window.decodeURIComponent(window.atob(item.menus_rolelist)))
               item.nodes = pageParam
+              item.interfaces = pageParam.interfaces || 'false'
               
               if (pageParam.type) {
                 item.type = pageParam.type
@@ -886,7 +888,7 @@
 
     return (
       <div className="mk-role-manage">
-        <ConfigProvider locale={_locale}>
+        <ConfigProvider locale={zhCN}>
           <Header app={app} />
           {loading ?
             <div className="loading-mask">
diff --git a/src/views/systemfunc/index.jsx b/src/views/systemfunc/index.jsx
index 109d291..63bee5f 100644
--- a/src/views/systemfunc/index.jsx
+++ b/src/views/systemfunc/index.jsx
@@ -17,8 +17,10 @@
     if (!sessionStorage.getItem('UserID')) {
       this.props.history.replace('/login')
     } else {
-      sessionStorage.setItem('LocalUserID', sessionStorage.getItem('UserID'))
-      sessionStorage.setItem('LocalLoginUID', sessionStorage.getItem('LoginUID'))
+      if (!sessionStorage.getItem('LocalUserID')) {
+        sessionStorage.setItem('LocalUserID', sessionStorage.getItem('UserID'))
+        sessionStorage.setItem('LocalLoginUID', sessionStorage.getItem('LoginUID'))
+      }
       sessionStorage.setItem('role_id', sessionStorage.getItem('cloudRole_id'))
       sessionStorage.setItem('dataM', sessionStorage.getItem('cloudDataM'))
       sessionStorage.setItem('User_Name', sessionStorage.getItem('CloudUserName'))
diff --git a/src/views/tabledesign/index.jsx b/src/views/tabledesign/index.jsx
index 3954522..ab31a4f 100644
--- a/src/views/tabledesign/index.jsx
+++ b/src/views/tabledesign/index.jsx
@@ -12,7 +12,7 @@
 import Utils, { setGLOBFuncs } from '@/utils/utils.js'
 import antdZhCN from 'antd/es/locale/zh_CN'
 import MKEmitter from '@/utils/events.js'
-import { getTables } from '@/utils/utils-custom.js'
+import { getTables, getFuncsAndInters } from '@/utils/utils-custom.js'
 import SourceElement from '@/templates/zshare/dragsource'
 import asyncComponent from '@/utils/asyncComponent'
 import Source from './source'
@@ -579,6 +579,8 @@
         config.tbkey = key
       }
 
+      let interfaces = getFuncsAndInters(config)
+
       let param = {
         func: 'sPC_TrdMenu_AddUpt',
         FstID: config.fstMenuId || '',
@@ -589,7 +591,7 @@
         EasyCode: config.easyCode || '',
         Template: 'BaseTable',
         MenuName: config.MenuName || '',
-        PageParam: JSON.stringify({Template: 'BaseTable', OpenType: config.OpenType || 'newtab', hidden: config.hidden || 'false'}),
+        PageParam: JSON.stringify({Template: 'BaseTable', OpenType: config.OpenType || 'newtab', hidden: config.hidden || 'false', interfaces}),
         open_edition: config.open_edition,
         LText: '',
         LTexttb: '',

--
Gitblit v1.8.0