From deab3ddf1990cd25b4692d1358ac9d50856644f0 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 24 三月 2023 14:28:31 +0800
Subject: [PATCH] 2023-03-24

---
 src/views/systemproc/proc/index.jsx                                                |    3 
 src/tabviews/custom/components/chart/antv-scatter/index.jsx                        |    7 
 src/tabviews/custom/components/chart/antv-bar-line/index.jsx                       |    7 
 src/tabviews/custom/components/chart/antv-dashboard/index.jsx                      |    7 
 src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx |    7 
 src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx   |    7 
 src/tabviews/custom/components/tree/antd-tree/index.jsx                            |    7 
 src/tabviews/custom/components/card/double-data-card/index.jsx                     |    7 
 src/templates/zshare/verifycard/callbackcustomscript/index.jsx                     |    7 
 src/menu/datasource/verifycard/customscript/index.jsx                              |    7 
 src/templates/comtableconfig/updatetable/index.jsx                                 |  211 +++++++++++++++-----
 src/templates/zshare/verifycard/customscript/index.jsx                             |    7 
 src/tabviews/custom/components/carousel/data-card/index.jsx                        |   25 +
 src/tabviews/custom/popview/index.jsx                                              |    5 
 src/templates/zshare/verifycard/customform/index.jsx                               |    7 
 src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx  |    7 
 src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx  |    8 
 src/tabviews/zshare/actionList/normalbutton/index.jsx                              |   26 +
 src/tabviews/custom/components/chart/custom-chart/index.jsx                        |    7 
 src/tabviews/custom/components/card/data-card/index.jsx                            |    7 
 src/utils/utils.js                                                                 |    2 
 src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx              |    7 
 src/tabviews/custom/components/card/table-card/index.jsx                           |    7 
 src/tabviews/custom/components/card/prop-card/index.jsx                            |    4 
 src/api/cacheutils.js                                                              |    6 
 src/menu/components/share/actioncomponent/formconfig.jsx                           |    8 
 src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx     |    8 
 src/menu/datasource/verifycard/settingform/index.jsx                               |    8 
 src/tabviews/custom/components/table/normal-table/index.jsx                        |   53 +++--
 src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx |    8 
 src/templates/zshare/verifycard/index.jsx                                          |    6 
 src/tabviews/custom/components/chart/antv-pie/index.jsx                            |    7 
 src/tabviews/custom/components/timeline/normal-timeline/index.jsx                  |   25 +
 src/tabviews/custom/components/carousel/prop-card/index.jsx                        |    7 
 src/menu/components/share/clockcomponent/settingform/index.jsx                     |    4 
 src/tabviews/custom/components/card/balcony/index.jsx                              |    4 
 src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx        |    7 
 src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx   |    8 
 src/templates/zshare/customscript/index.jsx                                        |    7 
 39 files changed, 449 insertions(+), 113 deletions(-)

diff --git a/src/api/cacheutils.js b/src/api/cacheutils.js
index f175333..9556233 100644
--- a/src/api/cacheutils.js
+++ b/src/api/cacheutils.js
@@ -72,6 +72,7 @@
       new Promise((resolve) => {
         let request = window.GLOB.IndexDB.transaction(['configs']).objectStore('configs').openCursor()
         let menus = []
+        let ids = []
 
         request.onerror = () => {
           resolve(menus)
@@ -80,7 +81,10 @@
         request.onsuccess = (e) => {
           let cursor = e.target.result
           if (cursor) {
-            menus.push(`'${cursor.value.menuid}','${cursor.value.open_edition || 'mk'}'`)
+            if (cursor.value.menuid && !ids.includes(cursor.value.menuid)) {
+              menus.push(`'${cursor.value.menuid}','${cursor.value.open_edition || 'mk'}'`)
+              ids.push(cursor.value.menuid)
+            }
             cursor.continue()
           } else {
             resolve(menus)
diff --git a/src/menu/components/share/actioncomponent/formconfig.jsx b/src/menu/components/share/actioncomponent/formconfig.jsx
index 296fa66..ae74c29 100644
--- a/src/menu/components/share/actioncomponent/formconfig.jsx
+++ b/src/menu/components/share/actioncomponent/formconfig.jsx
@@ -541,7 +541,7 @@
       key: 'execSuccess',
       label: '鎴愬姛鍚�',
       initVal: card.execSuccess || 'grid',
-      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍笺�傛敞锛氫笂绾х粍浠跺湪鏁版嵁婧愪腑娣诲姞銆傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓��',
+      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓�傝繑鍥炰俊鎭腑鍖呭惈@close_tab@銆丂close_popup@銆丂goback@ 浼氭墽琛岋紙鍏抽棴鏍囩-绠$悊绯荤粺锛夈�侊紙鍏抽棴寮圭獥锛夈�侊紙杩斿洖涓婁竴椤�-瀛愬簲鐢級绛夊姩浣溿��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍笺�傛敞锛氫笂绾х粍浠跺湪鏁版嵁婧愪腑娣诲姞銆傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓�傝繑鍥炰俊鎭腑鍖呭惈@close_tab@銆丂close_popup@銆丂goback@ 浼氭墽琛岋紙鍏抽棴鏍囩-绠$悊绯荤粺锛夈�侊紙鍏抽棴寮圭獥锛夈�侊紙杩斿洖涓婁竴椤�-瀛愬簲鐢級绛夊姩浣溿��',
       required: true,
       options: [{
         value: 'never',
@@ -564,7 +564,7 @@
       key: 'execError',
       label: '澶辫触鍚�',
       initVal: card.execError || 'never',
-      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍硷紝娉細涓婄骇缁勪欢鍦ㄦ暟鎹簮涓坊鍔犮�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓��',
+      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓�傝繑鍥炰俊鎭腑鍖呭惈@close_tab@銆丂close_popup@銆丂goback@ 浼氭墽琛岋紙鍏抽棴鏍囩-绠$悊绯荤粺锛夈�侊紙鍏抽棴寮圭獥锛夈�侊紙杩斿洖涓婁竴椤�-瀛愬簲鐢級绛夊姩浣溿��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍硷紝娉細涓婄骇缁勪欢鍦ㄦ暟鎹簮涓坊鍔犮�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓�傝繑鍥炰俊鎭腑鍖呭惈@close_tab@銆丂close_popup@銆丂goback@ 浼氭墽琛岋紙鍏抽棴鏍囩-绠$悊绯荤粺锛夈�侊紙鍏抽棴寮圭獥锛夈�侊紙杩斿洖涓婁竴椤�-瀛愬簲鐢級绛夊姩浣溿��',
       required: true,
       options: [{
         value: 'never',
@@ -1528,7 +1528,7 @@
       key: 'execSuccess',
       label: '鎴愬姛鍚�',
       initVal: card.execSuccess || 'grid',
-      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍笺�傛敞锛氫笂绾х粍浠跺湪鏁版嵁婧愪腑娣诲姞銆傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓��',
+      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓�傝繑鍥炰俊鎭腑鍖呭惈@close_tab@銆丂close_popup@銆丂goback@ 浼氭墽琛岋紙鍏抽棴鏍囩-绠$悊绯荤粺锛夈�侊紙鍏抽棴寮圭獥锛夈�侊紙杩斿洖涓婁竴椤�-瀛愬簲鐢級绛夊姩浣溿��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍笺�傛敞锛氫笂绾х粍浠跺湪鏁版嵁婧愪腑娣诲姞銆傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓�傝繑鍥炰俊鎭腑鍖呭惈@close_tab@銆丂close_popup@銆丂goback@ 浼氭墽琛岋紙鍏抽棴鏍囩-绠$悊绯荤粺锛夈�侊紙鍏抽棴寮圭獥锛夈�侊紙杩斿洖涓婁竴椤�-瀛愬簲鐢級绛夊姩浣溿��',
       required: true,
       options: [{
         value: 'never',
@@ -1550,7 +1550,7 @@
       key: 'execError',
       label: '澶辫触鍚�',
       initVal: card.execError || 'never',
-      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊閭d竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍硷紝娉細涓婄骇缁勪欢鍦ㄦ暟鎹簮涓坊鍔犮�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓��',
+      tooltip: refresh.length ? '鎵ц鍒锋柊婧愮粍浠舵椂锛岃鍦ㄦ簮鎸夐挳涓缃叧闂悗鍒锋柊鍝竴椤癸紝娉細姝ゆ椂浼氬悓姝ュ埛鏂板綋鍓嶇粍浠跺拰涓婄骇缁勪欢-琛屻�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓�傝繑鍥炰俊鎭腑鍖呭惈@close_tab@銆丂close_popup@銆丂goback@ 浼氭墽琛岋紙鍏抽棴鏍囩-绠$悊绯荤粺锛夈�侊紙鍏抽棴寮圭獥锛夈�侊紙杩斿洖涓婁竴椤�-瀛愬簲鐢級绛夊姩浣溿��' : '閫夋嫨鍒锋柊琛屾椂锛屽鏋滈�夋嫨澶氭潯鏁版嵁浼氬埛鏂拌〃鏍硷紝娉細涓婄骇缁勪欢鍦ㄦ暟鎹簮涓坊鍔犮�傚闇�璇煶鎾姤璇蜂互@speak@寮�澶达紝鎾姤鍐呭鎴栨枃浠舵斁缃簬<<>>涓�傝繑鍥炰俊鎭腑鍖呭惈@close_tab@銆丂close_popup@銆丂goback@ 浼氭墽琛岋紙鍏抽棴鏍囩-绠$悊绯荤粺锛夈�侊紙鍏抽棴寮圭獥锛夈�侊紙杩斿洖涓婁竴椤�-瀛愬簲鐢級绛夊姩浣溿��',
       required: true,
       options: [{
         value: 'never',
diff --git a/src/menu/components/share/clockcomponent/settingform/index.jsx b/src/menu/components/share/clockcomponent/settingform/index.jsx
index 0978f22..f31fb1c 100644
--- a/src/menu/components/share/clockcomponent/settingform/index.jsx
+++ b/src/menu/components/share/clockcomponent/settingform/index.jsx
@@ -100,7 +100,7 @@
                 })(<InputNumber min={0} max={500} precision={0} />)}
               </Form.Item>
             </Col> : null}
-            {config.type === 'card' && (config.subtype === 'balcony' || config.subtype === 'propcard') && timer && timer !== '2s' ? <Col span={22}>
+            {timer && timer !== '2s' ? <Col span={22}>
               <Form.Item label={
                 <Tooltip placement="topLeft" title="鍙互鎸囧畾瀛楁鐢ㄤ簬鎺у埗瀹氭椂鍣ㄧ殑鍏抽棴銆�">
                   <QuestionCircleOutlined className="mk-form-tip" />
@@ -116,7 +116,7 @@
                 )}
               </Form.Item>
             </Col> : null}
-            {(config.subtype === 'balcony' || config.subtype === 'propcard') && clearField && timer && timer !== '2s' ? <Col span={22}>
+            {clearField && timer && timer !== '2s' ? <Col span={22}>
               <Form.Item label={
                 <Tooltip placement="topLeft" title="褰撳瓧娈靛�间笌鍏抽棴鍊肩浉绛夋椂锛屽叧闂畾鏃跺櫒锛屽涓�煎彲鐢ㄩ�楀彿鍒嗛殧銆�">
                   <QuestionCircleOutlined className="mk-form-tip" />
diff --git a/src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx b/src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx
index fa48a0f..8173efc 100644
--- a/src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx
+++ b/src/menu/components/table/edit-table/columns/tableIn/customscript/index.jsx
@@ -101,6 +101,13 @@
             duration: 5
           })
           return
+        } else if (/,,/ig.test(values.sql)) {
+          notification.warning({
+            top: 92,
+            message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+            duration: 5
+          })
+          return
         }
 
         let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/menu/datasource/verifycard/customscript/index.jsx b/src/menu/datasource/verifycard/customscript/index.jsx
index 85de3e6..bca6509 100644
--- a/src/menu/datasource/verifycard/customscript/index.jsx
+++ b/src/menu/datasource/verifycard/customscript/index.jsx
@@ -140,6 +140,13 @@
             duration: 5
           })
           return
+        } else if (/,,/ig.test(values.sql)) {
+          notification.warning({
+            top: 92,
+            message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+            duration: 5
+          })
+          return
         }
 
         let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/menu/datasource/verifycard/settingform/index.jsx b/src/menu/datasource/verifycard/settingform/index.jsx
index 5e24b17..3295cea 100644
--- a/src/menu/datasource/verifycard/settingform/index.jsx
+++ b/src/menu/datasource/verifycard/settingform/index.jsx
@@ -135,6 +135,14 @@
               })
               reject()
               return
+            } else if (/,,/ig.test(values.dataresource)) {
+              notification.warning({
+                top: 92,
+                message: '鏁版嵁婧愪腑锛屼笉鍙嚭鐜拌繛缁殑鑻辨枃閫楀彿锛�,,锛�',
+                duration: 5
+              })
+              reject()
+              return
             }
 
             let error = Utils.verifySql(values.dataresource)
diff --git a/src/tabviews/custom/components/card/balcony/index.jsx b/src/tabviews/custom/components/card/balcony/index.jsx
index 9f50fd9..1697e66 100644
--- a/src/tabviews/custom/components/card/balcony/index.jsx
+++ b/src/tabviews/custom/components/card/balcony/index.jsx
@@ -364,9 +364,9 @@
         loading: false
       })
 
-      if (config.timer && config.clearField) {
+      if (config.timer && config.clearField && result.data && result.data[0]) {
         let vals = (config.clearValue || '').split(',')
-        if (vals.includes(_data[config.clearField])) {
+        if (vals.includes(result.data[0][config.clearField])) {
           this.timer && this.timer.stop()
         }
       }
diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx
index 4976ada..f4023d3 100644
--- a/src/tabviews/custom/components/card/data-card/index.jsx
+++ b/src/tabviews/custom/components/card/data-card/index.jsx
@@ -726,6 +726,13 @@
         total: result.total,
         loading: false
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
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 c866b32..6668fa2 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.jsx
+++ b/src/tabviews/custom/components/card/double-data-card/index.jsx
@@ -640,6 +640,13 @@
         total: result.total,
         loading: false
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/card/prop-card/index.jsx b/src/tabviews/custom/components/card/prop-card/index.jsx
index aac9321..651bd23 100644
--- a/src/tabviews/custom/components/card/prop-card/index.jsx
+++ b/src/tabviews/custom/components/card/prop-card/index.jsx
@@ -421,9 +421,9 @@
         }
       })
 
-      if (config.timer && config.clearField) {
+      if (config.timer && config.clearField && result.data && result.data[0]) {
         let vals = (config.clearValue || '').split(',')
-        if (vals.includes(_data[config.clearField])) {
+        if (vals.includes(result.data[0][config.clearField])) {
           this.timer && this.timer.stop()
         }
       }
diff --git a/src/tabviews/custom/components/card/table-card/index.jsx b/src/tabviews/custom/components/card/table-card/index.jsx
index ed5623f..47aab12 100644
--- a/src/tabviews/custom/components/card/table-card/index.jsx
+++ b/src/tabviews/custom/components/card/table-card/index.jsx
@@ -338,6 +338,13 @@
         total: result.total,
         loading: false
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/carousel/data-card/index.jsx b/src/tabviews/custom/components/carousel/data-card/index.jsx
index 4dbe6e2..590bc98 100644
--- a/src/tabviews/custom/components/carousel/data-card/index.jsx
+++ b/src/tabviews/custom/components/carousel/data-card/index.jsx
@@ -294,19 +294,28 @@
         Api.writeCacheConfig(config.uuid, result.data || '')
       }
 
+      let data = result.data.map((item, index) => {
+        item.key = index
+        item.$$uuid = item[config.setting.primaryKey] || ''
+        item.$$BID = BID || ''
+        item.$$BData = BData || ''
+        item.$Index = index + 1
+        return item
+      })
+
       this.setState({
-        data: result.data.map((item, index) => {
-          item.key = index
-          item.$$uuid = item[config.setting.primaryKey] || ''
-          item.$$BID = BID || ''
-          item.$$BData = BData || ''
-          item.$Index = index + 1
-          return item
-        }),
+        data: data,
         loading: false
       }, () => {
         this.openModal(result.ErrCode)
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/carousel/prop-card/index.jsx b/src/tabviews/custom/components/carousel/prop-card/index.jsx
index 6698d56..bfeba28 100644
--- a/src/tabviews/custom/components/carousel/prop-card/index.jsx
+++ b/src/tabviews/custom/components/carousel/prop-card/index.jsx
@@ -330,6 +330,13 @@
           this.openModal(result.ErrCode)
         }
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
index 7e4180a..c76b83c 100644
--- a/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-bar-line/index.jsx
@@ -548,6 +548,13 @@
         this.data = result.data || []
         this.handleData()
       }
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/chart/antv-dashboard/index.jsx b/src/tabviews/custom/components/chart/antv-dashboard/index.jsx
index 1544237..5a584b0 100644
--- a/src/tabviews/custom/components/chart/antv-dashboard/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-dashboard/index.jsx
@@ -299,6 +299,13 @@
       this.setState({
         loading: false
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/chart/antv-pie/index.jsx b/src/tabviews/custom/components/chart/antv-pie/index.jsx
index 17e24f5..46e5ccf 100644
--- a/src/tabviews/custom/components/chart/antv-pie/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-pie/index.jsx
@@ -259,6 +259,13 @@
         this.data = result.data || []
         this.handleData()
       }
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/chart/antv-scatter/index.jsx b/src/tabviews/custom/components/chart/antv-scatter/index.jsx
index b418e31..abc0f0c 100644
--- a/src/tabviews/custom/components/chart/antv-scatter/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-scatter/index.jsx
@@ -290,6 +290,13 @@
         this.data = result.data || []
         this.handleData()
       }
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/chart/custom-chart/index.jsx b/src/tabviews/custom/components/chart/custom-chart/index.jsx
index fb81260..f2b717e 100644
--- a/src/tabviews/custom/components/chart/custom-chart/index.jsx
+++ b/src/tabviews/custom/components/chart/custom-chart/index.jsx
@@ -280,6 +280,13 @@
         this.data = result.data || []
         this.handleData()
       }
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx
index b4ec245..0dca1df 100644
--- a/src/tabviews/custom/components/table/normal-table/index.jsx
+++ b/src/tabviews/custom/components/table/normal-table/index.jsx
@@ -256,35 +256,44 @@
         start = pageSize * (pageIndex - 1) + 1
       }
 
-      this.setState({
-        data: result.data.map((item, index) => {
-          item.key = index
-          item.$$uuid = item[setting.primaryKey] || ''
-          item.$$key = '' + item.key + item.$$uuid
-          item.$$BID = BID || ''
-          item.$$BData = BData || ''
-          item.$Index = start + index + ''
+      let data = result.data.map((item, index) => {
+        item.key = index
+        item.$$uuid = item[setting.primaryKey] || ''
+        item.$$key = '' + item.key + item.$$uuid
+        item.$$BID = BID || ''
+        item.$$BData = BData || ''
+        item.$Index = start + index + ''
 
-          if (config.absFields) {
-            config.absFields.forEach(f => {
-              if (!isNaN(item[f])) {
-                item[f] = Math.abs(item[f])
-              }
-            })
-          }
-
-          if (setting.controlField) {
-            if (setting.controlVal.includes(item[setting.controlField])) {
-              item.$disabled = true
+        if (config.absFields) {
+          config.absFields.forEach(f => {
+            if (!isNaN(item[f])) {
+              item[f] = Math.abs(item[f])
             }
+          })
+        }
+
+        if (setting.controlField) {
+          if (setting.controlVal.includes(item[setting.controlField])) {
+            item.$disabled = true
           }
-          
-          return item
-        }),
+        }
+        
+        return item
+      })
+
+      this.setState({
+        data: data,
         selectedData: [],
         total: result.total,
         loading: false
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/timeline/normal-timeline/index.jsx b/src/tabviews/custom/components/timeline/normal-timeline/index.jsx
index a888021..1905369 100644
--- a/src/tabviews/custom/components/timeline/normal-timeline/index.jsx
+++ b/src/tabviews/custom/components/timeline/normal-timeline/index.jsx
@@ -303,17 +303,26 @@
         Api.writeCacheConfig(config.uuid, result.data || '')
       }
 
+      let data = result.data.map((item, index) => {
+        item.key = index
+        item.$$uuid = item[config.setting.primaryKey] || ''
+        item.$$BID = BID || ''
+        item.$$BData = BData || ''
+        item.$Index = index + 1 + ''
+        return item
+      })
+
       this.setState({
-        data: result.data.map((item, index) => {
-          item.key = index
-          item.$$uuid = item[config.setting.primaryKey] || ''
-          item.$$BID = BID || ''
-          item.$$BData = BData || ''
-          item.$Index = index + 1 + ''
-          return item
-        }),
+        data: data,
         loading: false
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/components/tree/antd-tree/index.jsx b/src/tabviews/custom/components/tree/antd-tree/index.jsx
index 6b287c2..922eba9 100644
--- a/src/tabviews/custom/components/tree/antd-tree/index.jsx
+++ b/src/tabviews/custom/components/tree/antd-tree/index.jsx
@@ -270,6 +270,13 @@
       }, () => {
         this.handleData()
       })
+
+      if (config.timer && config.clearField && result.data && result.data[0]) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(result.data[0][config.clearField])) {
+          this.timer && this.timer.stop()
+        }
+      }
     } else {
       this.setState({
         loading: false
diff --git a/src/tabviews/custom/popview/index.jsx b/src/tabviews/custom/popview/index.jsx
index 6149fc0..7c3ba68 100644
--- a/src/tabviews/custom/popview/index.jsx
+++ b/src/tabviews/custom/popview/index.jsx
@@ -380,6 +380,7 @@
           cell.logLabel = item.$menuname + '-' + cell.label
           cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : ''
           cell.$menuId = item.uuid
+          cell.$MenuID = Tab.$MenuID
           cell.$tabId = Tab.uuid
           cell.$toolbtn = true
 
@@ -424,6 +425,7 @@
               cell.Ot = cell.Ot || 'requiredSgl'
               cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : ''
               cell.$menuId = item.uuid
+              cell.$MenuID = Tab.$MenuID
               cell.$tabId = Tab.uuid
 
               if (!mutil && cell.syncComponentId === item.setting.supModule) {
@@ -464,6 +466,7 @@
               cell.Ot = cell.Ot || 'requiredSgl'
               cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : ''
               cell.$menuId = item.uuid
+              cell.$MenuID = Tab.$MenuID
               cell.$tabId = Tab.uuid
 
               if (!mutil && cell.syncComponentId === item.setting.supModule) {
@@ -510,6 +513,7 @@
             cell.logLabel = item.$menuname + '-' + cell.label
             cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : ''
             cell.$menuId = item.uuid
+            cell.$MenuID = Tab.$MenuID
             cell.$tabId = Tab.uuid
 
             if (cell.syncComponentId === item.wrap.supModule) {
@@ -549,6 +553,7 @@
             cell.Ot = cell.Ot || 'requiredSgl'
             cell.syncComponentId = cell.syncComponent ? (cell.syncComponent.pop() || '') : ''
             cell.$menuId = item.uuid
+            cell.$MenuID = Tab.$MenuID
             cell.$tabId = Tab.uuid
 
             if (cell.syncComponentId === item.setting.supModule) {
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index 4b9f777..b22f897 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -1962,8 +1962,9 @@
     const { btn } = this.props
     const { btnconfig, autoMatic } = this.state
 
-    if (res.message && /^@speak@/.test(res.message)) {
-      res.message = res.message.replace('@speak@', '')
+    let sign = ''
+    if (/^@speak@/i.test(res.message)) {
+      res.message = res.message.replace(/^@speak@/i, '')
       let val = res.message.match(/<<.*>>/)
       res.message = res.message.replace(/\s*<<.*>>\s*/g, '')
       val = val ? val[0].replace(/<<|>>/g, '') : ''
@@ -1977,6 +1978,9 @@
       if (!res.message) {
         res.ErrCode = '-1'
       }
+    } else if (/@close_tab@|@close_popup@|@goback@/i.test(res.message)) {
+      sign = res.message.match(/@close_tab@|@close_popup@|@goback@/i)[0].toLowerCase()
+      res.message = res.message.replace(/@close_tab@|@close_popup@|@goback@/i, '')
     }
 
     if ((res.ErrCode === 'S' || !res.ErrCode) || autoMatic) { // 鎵ц鎴愬姛
@@ -2032,9 +2036,9 @@
       return
     }
 
-    if (btn.execSuccess === 'closetab') {
+    if (btn.execSuccess === 'closetab' || sign === '@close_tab@') {
       MKEmitter.emit('closeTabView', btn.$MenuID)
-    } else if (btn.execSuccess === 'closepoptab') {
+    } else if (btn.execSuccess === 'closepoptab' || sign === '@close_popup@') {
       MKEmitter.emit('popclose')
     } else if (btn.execSuccess !== 'never') {
       MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execSuccess, btn, id, this.state.selines)
@@ -2350,12 +2354,13 @@
    * 2銆乪xcel瀵煎嚭锛屽け璐ュ悗鍙栨秷瀵煎嚭鎸夐挳鍔犺浇涓姸鎬�
    * 3銆侀�氱煡涓诲垪琛ㄥ埛鏂�
    */
-  execError = (res) => {
+  execError = (res = {}) => {
     const { btn } = this.props
     const { btnconfig, autoMatic } = this.state
 
-    if (res.message && /^@speak@/.test(res.message)) {
-      res.message = res.message.replace('@speak@', '')
+    let sign = ''
+    if (/^@speak@/i.test(res.message)) {
+      res.message = res.message.replace(/^@speak@/i, '')
       let val = res.message.match(/<<.*>>/)
       res.message = res.message.replace(/\s*<<.*>>\s*/g, '')
       val = val ? val[0].replace(/<<|>>/g, '') : ''
@@ -2369,6 +2374,9 @@
       if (!res.message) {
         res.ErrCode = '-1'
       }
+    } else if (/@close_tab@|@close_popup@|@goback@/i.test(res.message)) {
+      sign = res.message.match(/@close_tab@|@close_popup@|@goback@/i)[0].toLowerCase()
+      res.message = res.message.replace(/@close_tab@|@close_popup@|@goback@/i, '')
     }
 
     if (res.ErrCode === 'E' && !autoMatic) {
@@ -2416,7 +2424,9 @@
       MKEmitter.emit('mkFC', 'focus', btnconfig.setting.errFocus)
     }
 
-    if (btn.execError === 'closepoptab') {
+    if (sign === '@close_tab@') {
+      MKEmitter.emit('closeTabView', btn.$MenuID)
+    } else if (btn.execError === 'closepoptab' || sign === '@close_popup@') {
       MKEmitter.emit('popclose')
     } else if (btn.execError !== 'never') {
       MKEmitter.emit('refreshByButtonResult', btn.$menuId, btn.execError, btn, '', this.state.selines)
diff --git a/src/templates/comtableconfig/updatetable/index.jsx b/src/templates/comtableconfig/updatetable/index.jsx
index f17ec72..647404a 100644
--- a/src/templates/comtableconfig/updatetable/index.jsx
+++ b/src/templates/comtableconfig/updatetable/index.jsx
@@ -21,6 +21,7 @@
 
   state = {}
   delButtons = []
+  baseMsg = {}
 
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.state), fromJS(nextState))
@@ -52,8 +53,14 @@
   }
 
   execUpdate = (_resolve) => {
-    const { config } = this.props
+    const config = fromJS(this.props.config).toJS()
     this.delButtons = []
+    this.baseMsg = {
+      fstMenuId: config.fstMenuId,
+      parentId: config.ParentId,
+      MenuName: config.MenuName,
+      MenuNo: config.MenuNo,
+    }
 
     let _config = {
       version: 1.0,
@@ -80,13 +87,14 @@
     let formActions = []
     let popActions = []
     let errors = []
+    let formTabs = []
     let mainTb = {name: '涓昏〃', uuid: Utils.getuuid(), useMSearch: 'false', isMain: true}
 
     let oldtabs = {
       mainTable: mainTb.uuid
     }
 
-    let tbl = this.getTable(config, mainTb, errors, formActions, popActions, oldtabs)
+    let tbl = this.getTable(config, mainTb, errors, formActions, formTabs, popActions, oldtabs)
 
     if (config.autoMatic && config.autoMatic.enable === 'true') {
       if (tbl.action.filter(item => item.uuid === config.autoMatic.action && (['pop', 'prompt', 'exec'].includes(item.OpenType) || (item.OpenType === 'funcbutton' && item.funcType === 'print'))).length === 0) {
@@ -183,7 +191,7 @@
         _config.components = _config.components.map(item => {
           if (item.type === 'tabs') {
             item.subtabs = item.subtabs.map(tab => {
-              tab.components[0] = this.getTable(menus[tab.components[0].linkTab], tab.components[0], errors, formActions, popActions, oldtabs)
+              tab.components[0] = this.getTable(menus[tab.components[0].linkTab], tab.components[0], errors, formActions, formTabs, popActions, oldtabs)
 
               return tab
             })
@@ -191,14 +199,14 @@
           return item
         })
 
-        this.setPopView(_resolve, _config, formActions, popActions, errors)
+        this.setPopView(_resolve, _config, formActions, formTabs, popActions, errors)
       })
     } else {
-      this.setPopView(_resolve, _config, formActions, popActions, errors)
+      this.setPopView(_resolve, _config, formActions, formTabs, popActions, errors)
     }
   }
 
-  setPopView = (_resolve, _config, formActions, popActions, errors) => {
+  setPopView = (_resolve, _config, formActions, formTabs, popActions, errors) => {
     if (popActions.length > 0) {
       let defers = popActions.map((item, i) => {
         return new Promise((resolve) => {
@@ -260,7 +268,7 @@
                       MenuName: btn.label,
                       tables: _config.tables || [],
                       Template: 'BaseTable',
-                      components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
+                      components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions, formTabs)],
                       viewType: 'popview',
                       style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
                     }
@@ -284,7 +292,7 @@
                         MenuName: btn.label,
                         tables: _config.tables || [],
                         Template: 'BaseTable',
-                        components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
+                        components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions, formTabs)],
                         viewType: 'popview',
                         style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
                       }
@@ -309,7 +317,7 @@
                     MenuName: btn.label,
                     tables: _config.tables || [],
                     Template: 'BaseTable',
-                    components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
+                    components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions, formTabs)],
                     viewType: 'popview',
                     style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
                   }
@@ -333,7 +341,7 @@
                       MenuName: btn.label,
                       tables: _config.tables || [],
                       Template: 'BaseTable',
-                      components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions)],
+                      components: [this.getTable(menus[btn.uuid], mainTb, errors, formActions, formTabs)],
                       viewType: 'popview',
                       style: { backgroundColor: '#ffffff', backgroundImage: '', paddingTop: '16px', paddingBottom: '40px', paddingLeft: '16px', paddingRight: '16px' }
                     }
@@ -346,14 +354,14 @@
           }
         })
 
-        this.setPopForm(_resolve, _config, formActions, errors)
+        this.setPopForm(_resolve, _config, formActions, formTabs, errors)
       })
     } else {
-      this.setPopForm(_resolve, _config, formActions, errors)
+      this.setPopForm(_resolve, _config, formActions, formTabs, errors)
     }
   }
 
-  setPopForm = (_resolve, _config, formActions, errors) => {
+  setPopForm = (_resolve, _config, formActions, formTabs, errors) => {
     if (formActions.length > 0) {
       let defers = formActions.map((item, i) => {
         return new Promise((resolve) => {
@@ -477,10 +485,10 @@
           }
         })
 
-        this.saveConfig(_resolve, _config, errors)
+        this.saveConfig(_resolve, _config, errors, formTabs)
       })
     } else {
-      this.saveConfig(_resolve, _config, errors)
+      this.saveConfig(_resolve, _config, errors, formTabs)
     }
   }
 
@@ -518,7 +526,7 @@
     })
   }
 
-  saveConfig = (_resolve, _config, errors) => {
+  saveConfig = (_resolve, _config, errors, formTabs) => {
     let err = errors.join('锛�')
     let _this = this
 
@@ -529,17 +537,17 @@
         content: '',
         onOk() {
           return new Promise(resolve => {
-            _this.saveNewMenu(resolve, _config)
+            _this.saveNewMenu(resolve, _config, formTabs)
           })
         },
         onCancel() {}
       })
     } else {
-      this.saveNewMenu(_resolve, _config)
+      this.saveNewMenu(_resolve, _config, formTabs)
     }
   }
 
-  saveNewMenu = (_resolve, _config) => {
+  saveNewMenu = (_resolve, _config, formTabs) => {
     _config.components.forEach(item => {
       if (item.type === 'tabs') {
         item.subtabs.forEach(tab => {
@@ -558,6 +566,20 @@
           })
 
           tab.components[0].$tables = getTables(tab.components[0])
+
+          tab.components[0].errors = []
+          let columns = tab.components[0].columns.map(c => c.field)
+          if (tab.components[0].setting.interType === 'system' && tab.components[0].setting.execute !== 'false' && !tab.components[0].setting.dataresource) {
+            tab.components[0].errors.push({ level: 0, detail: '鏈缃暟鎹簮锛�'})
+          } else if (tab.components[0].setting.interType === 'system' && tab.components[0].setting.execute === 'false' && tab.components[0].scripts.filter(script => script.status !== 'false').length === 0) {
+            tab.components[0].errors.push({ level: 0, detail: '鏁版嵁婧愪腑鏃犲彲鐢ㄨ剼鏈紒'})
+          } else if (!tab.components[0].setting.primaryKey) {
+            tab.components[0].errors.push({ level: 0, detail: '鏈缃富閿紒'})
+          } else if (!columns.includes(tab.components[0].setting.primaryKey)) {
+            tab.components[0].errors.push({ level: 0, detail: '涓婚敭宸插け鏁堬紒'})
+          } else if (!tab.components[0].setting.supModule) {
+            tab.components[0].errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
+          }
         })
       } else {
         item.action.forEach(btn => {
@@ -575,35 +597,6 @@
         })
 
         item.$tables = getTables(item)
-      }
-    })
-
-    let tbs = []
-    _config.components.forEach(item => {
-      if (item.type === 'tabs') {
-        item.subtabs.forEach(tab => {
-          if (tab.components[0].$tables) {
-            tbs.push(...tab.components[0].$tables)
-          }
-
-          tab.components[0].errors = []
-          let columns = tab.components[0].columns.map(c => c.field)
-          if (tab.components[0].setting.interType === 'system' && tab.components[0].setting.execute !== 'false' && !tab.components[0].setting.dataresource) {
-            tab.components[0].errors.push({ level: 0, detail: '鏈缃暟鎹簮锛�'})
-          } else if (tab.components[0].setting.interType === 'system' && tab.components[0].setting.execute === 'false' && tab.components[0].scripts.filter(script => script.status !== 'false').length === 0) {
-            tab.components[0].errors.push({ level: 0, detail: '鏁版嵁婧愪腑鏃犲彲鐢ㄨ剼鏈紒'})
-          } else if (!tab.components[0].setting.primaryKey) {
-            tab.components[0].errors.push({ level: 0, detail: '鏈缃富閿紒'})
-          } else if (!columns.includes(tab.components[0].setting.primaryKey)) {
-            tab.components[0].errors.push({ level: 0, detail: '涓婚敭宸插け鏁堬紒'})
-          } else if (!tab.components[0].setting.supModule) {
-            tab.components[0].errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'})
-          }
-        })
-      } else {
-        if (item.$tables) {
-          tbs.push(...item.$tables)
-        }
 
         item.errors = []
         let columns = item.columns.map(c => c.field)
@@ -621,10 +614,100 @@
       }
     })
 
-    this.submitConfig(_resolve, _config, tbs)
+    // if (formTabs.length > 0) {
+    //   this.transformTabs(_resolve, _config, formTabs)
+    // } else {
+      this.submitConfig(_resolve, _config)
+    // }
   }
 
-  submitConfig = (_resolve, config, tbs) => {
+  transformTabs = (_resolve, _config, formTabs) => {
+    let tab = formTabs.shift()
+
+    Api.getSystemConfig({
+      func: 'sPC_Get_LongParam',
+      MenuID: tab.uuid
+    }).then(res => {
+      if (res.status) {
+        let _LongParam = ''
+        if (res.LongParam) {
+          try {
+            _LongParam = JSON.parse(window.decodeURIComponent(window.atob(res.LongParam)))
+          } catch (e) {
+            console.warn('Parse Failure')
+            _LongParam = ''
+          }
+        }
+
+        if (_LongParam && (_LongParam.type === 'FormTab' || _LongParam.Template === 'FormTab') && _LongParam.enabled) {
+          if (!_LongParam.tabgroups) {
+            _LongParam.tabgroups = []
+          } else if (typeof(_LongParam.tabgroups[0]) === 'string') {
+            let _tabgroups = []
+            _LongParam.tabgroups.forEach(groupId => {
+              let _group = {
+                uuid: groupId,
+                sublist: fromJS(_LongParam[groupId]).toJS()
+              }
+      
+              delete _LongParam[groupId]
+      
+              _tabgroups.push(_group)
+            })
+      
+            _LongParam.tabgroups = _tabgroups
+          }
+
+          _LongParam.tabgroups = _LongParam.tabgroups.filter(group => group.sublist.length > 0)
+
+          _LongParam.tabgroups.forEach(group => {
+            group.sublist = group.sublist.map(tab => {
+              if (tab.supMenu === 'mainTable') {
+                tab.supMenu = ''
+              }
+              return tab
+            })
+          })
+
+          _LongParam.action = _LongParam.action.map(item => {
+            if (item.intertype === 'inner' && !item.innerFunc) {
+              item.intertype = 'system'
+            }
+            return item
+          })
+
+          delete _LongParam.funcs
+          delete _LongParam.tables
+        } else {
+          _config.components[0].action = _config.components[0].action.filter(btn => btn.uuid !== tab.uuid)
+        }
+      } else {
+        notification.warning({
+          top: 92,
+          message: res.message,
+          duration: 5
+        })
+        _resolve()
+      }
+    })
+  }
+
+  submitConfig = (_resolve, config) => {
+    let tbs = []
+    config.components.forEach(item => {
+      if (item.type === 'tabs') {
+        item.subtabs.forEach(tab => {
+          if (tab.components[0].$tables) {
+            tbs.push(...tab.components[0].$tables)
+          }
+        })
+      } else {
+        if (item.$tables) {
+          tbs.push(...item.$tables)
+        }
+      }
+    })
+
     let arr = []
     tbs = tbs.filter(tb => {
       let _tb = tb.toLowerCase()
@@ -734,7 +817,7 @@
     })
   }
 
-  getTable = (config, newCon, errors, formActions, popActions, oldtabs) => { 
+  getTable = (config, newCon, errors, formActions, formTabs, popActions, oldtabs) => { 
     let _card = {
       uuid: newCon.uuid,
       type: 'table',
@@ -759,7 +842,7 @@
       return _card
     }
 
-    if (newCon.supModule && oldtabs[newCon.supModule]) {
+    if (oldtabs && newCon.supModule && oldtabs[newCon.supModule]) {
       _card.setting.supModule = [oldtabs[newCon.supModule]]
     } else {
       _card.setting.supModule = ['empty']
@@ -1032,7 +1115,29 @@
 
         popActions.push({origin: btn.uuid, linkTab: btn.linkTab || '', uuid: _btn.uuid, name: newCon.name, label: btn.label})
       } else if (_btn.OpenType === 'tab') {
-        if (btn.tabTemplate === 'FormTab' || !btn.linkmenu || btn.linkmenu.length !== 3) {
+        if (btn.tabTemplate === 'FormTab') {
+          if (newCon.isMain !== true) {
+            errors.push(newCon.name + '涓寜閽��' + btn.label + '銆嬩笉鍦ㄦ敮鎸�')
+            return
+          }
+
+          delete _btn.tabTemplate
+
+          _btn.MenuID = 'tab' + md5(btn.uuid).substr(3)
+          _btn.MenuName = this.baseMsg.MenuName + '-' + btn.label
+          _btn.MenuNo = this.baseMsg.MenuNo + '_' + _btn.MenuID.substr(-4).toUpperCase()
+          _btn.hidden = _btn.hidden || 'false'
+          _btn.tabType = 'CustomPage'
+          _btn.linkmenu = [this.baseMsg.fstMenuId, this.baseMsg.parentId, _btn.MenuID]
+          
+          let _tab = {...btn}
+
+          _tab.MenuID = _btn.MenuID
+          _tab.MenuNo = _btn.MenuNo
+          _tab.MenuName = _btn.MenuName
+
+          formTabs.push(_tab)
+        } else if (!btn.linkmenu || btn.linkmenu.length !== 3) {
 
           errors.push(newCon.name + '涓寜閽��' + btn.label + '銆嬩笉鍦ㄦ敮鎸�')
           return
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
index a4e6142..149c255 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/customscript/index.jsx
@@ -115,6 +115,13 @@
             duration: 5
           })
           return
+        } else if (/,,/ig.test(values.sql)) {
+          notification.warning({
+            top: 92,
+            message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+            duration: 5
+          })
+          return
         }
 
         let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
index 09adfd9..b76445a 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/customscript/index.jsx
@@ -163,6 +163,13 @@
             duration: 5
           })
           return
+        } else if (/,,/ig.test(values.sql)) {
+          notification.warning({
+            top: 92,
+            message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+            duration: 5
+          })
+          return
         }
 
         let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx
index 0159b4e..09e0fe5 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/datasource/index.jsx
@@ -76,6 +76,14 @@
               })
               reject()
               return
+            } else if (/,,/ig.test(values.dataresource)) {
+              notification.warning({
+                top: 92,
+                message: '鏁版嵁婧愪腑锛屼笉鍙嚭鐜拌繛缁殑鑻辨枃閫楀彿锛�,,锛�',
+                duration: 5
+              })
+              reject()
+              return
             }
 
             let error = Utils.verifySql(values.dataresource)
diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
index 76e6878..e307490 100644
--- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
+++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx
@@ -691,6 +691,13 @@
             duration: 5
           })
           return
+        } else if (/,,/ig.test(values.sql)) {
+          notification.warning({
+            top: 92,
+            message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+            duration: 5
+          })
+          return
         }
 
         let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx b/src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx
index 1a6de21..6b8f830 100644
--- a/src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx
+++ b/src/templates/sharecomponent/settingcalcomponent/verifycard/settingform/index.jsx
@@ -90,6 +90,14 @@
               })
               reject()
               return
+            } else if (/,,/ig.test(values.dataresource)) {
+              notification.warning({
+                top: 92,
+                message: '鏁版嵁婧愪腑锛屼笉鍙嚭鐜拌繛缁殑鑻辨枃閫楀彿锛�,,锛�',
+                duration: 5
+              })
+              reject()
+              return
             }
 
             let error = Utils.verifySql(values.dataresource)
diff --git a/src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx b/src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx
index 323f052..9a7fd02 100644
--- a/src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx
+++ b/src/templates/sharecomponent/settingcomponent/settingform/datasource/index.jsx
@@ -119,6 +119,14 @@
               })
               reject()
               return
+            } else if (/,,/ig.test(values.dataresource)) {
+              notification.warning({
+                top: 92,
+                message: '鏁版嵁婧愪腑锛屼笉鍙嚭鐜拌繛缁殑鑻辨枃閫楀彿锛�,,锛�',
+                duration: 5
+              })
+              reject()
+              return
             }
 
             let error = Utils.verifySql(values.dataresource)
diff --git a/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx b/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx
index 2f679b7..fbfb050 100644
--- a/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx
+++ b/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx
@@ -265,6 +265,13 @@
         duration: 5
       })
       return
+    } else if (/,,/ig.test(values.sql)) {
+      notification.warning({
+        top: 92,
+        message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+        duration: 5
+      })
+      return
     }
 
     let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx b/src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx
index ab38ac2..0a21e7d 100644
--- a/src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx
+++ b/src/templates/sharecomponent/treesettingcomponent/settingform/datasource/index.jsx
@@ -108,6 +108,14 @@
               })
               reject()
               return
+            } else if (/,,/ig.test(values.dataresource)) {
+              notification.warning({
+                top: 92,
+                message: '鏁版嵁婧愪腑锛屼笉鍙嚭鐜拌繛缁殑鑻辨枃閫楀彿锛�,,锛�',
+                duration: 5
+              })
+              reject()
+              return
             }
 
             let error = Utils.verifySql(values.dataresource)
diff --git a/src/templates/zshare/customscript/index.jsx b/src/templates/zshare/customscript/index.jsx
index bdd9c1d..2cc6298 100644
--- a/src/templates/zshare/customscript/index.jsx
+++ b/src/templates/zshare/customscript/index.jsx
@@ -231,6 +231,13 @@
         duration: 5
       })
       return
+    } else if (/,,/ig.test(values.sql)) {
+      notification.warning({
+        top: 92,
+        message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+        duration: 5
+      })
+      return
     }
 
     let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/templates/zshare/verifycard/callbackcustomscript/index.jsx b/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
index 4fe7e4e..94bdc6e 100644
--- a/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
+++ b/src/templates/zshare/verifycard/callbackcustomscript/index.jsx
@@ -71,6 +71,13 @@
             duration: 5
           })
           return
+        } else if (/,,/ig.test(values.sql)) {
+          notification.warning({
+            top: 92,
+            message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+            duration: 5
+          })
+          return
         }
 
         let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/templates/zshare/verifycard/customform/index.jsx b/src/templates/zshare/verifycard/customform/index.jsx
index 32a9516..f7194b4 100644
--- a/src/templates/zshare/verifycard/customform/index.jsx
+++ b/src/templates/zshare/verifycard/customform/index.jsx
@@ -90,6 +90,13 @@
             duration: 5
           })
           return
+        } else if (/,,/ig.test(values.sql)) {
+          notification.warning({
+            top: 92,
+            message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+            duration: 5
+          })
+          return
         }
 
         let error = Utils.verifySql(values.sql)
diff --git a/src/templates/zshare/verifycard/customscript/index.jsx b/src/templates/zshare/verifycard/customscript/index.jsx
index 4c4a094..1244f5f 100644
--- a/src/templates/zshare/verifycard/customscript/index.jsx
+++ b/src/templates/zshare/verifycard/customscript/index.jsx
@@ -101,6 +101,13 @@
             duration: 5
           })
           return
+        } else if (/,,/ig.test(values.sql)) {
+          notification.warning({
+            top: 92,
+            message: '鑷畾涔塻ql璇彞涓紝涓嶅彲鍑虹幇杩炵画鐨勮嫳鏂囬�楀彿锛�,,锛�',
+            duration: 5
+          })
+          return
         }
 
         let error = Utils.verifySql(values.sql, 'customscript')
diff --git a/src/templates/zshare/verifycard/index.jsx b/src/templates/zshare/verifycard/index.jsx
index 217f7a5..12f861b 100644
--- a/src/templates/zshare/verifycard/index.jsx
+++ b/src/templates/zshare/verifycard/index.jsx
@@ -545,7 +545,11 @@
     let _invalid = _verify.invalid
 
     if (!_invalid) { // 閫夋嫨琛屾椂锛屽け鏁堥獙璇侀粯璁ゅ紑鍚�
-      _invalid = card.Ot !== 'notRequired' ? 'true' : 'false'
+      if (config.setting && config.setting.maxScript && config.setting.maxScript >= 300) {
+        _invalid = 'false'
+      } else {
+        _invalid = card.Ot !== 'notRequired' ? 'true' : 'false'
+      }
     }
     if (card.sqlType === 'custom') { // 鑷畾涔夐獙璇佹椂锛屼笉浣跨敤榛樿sql
       _verify.default = 'false'
diff --git a/src/utils/utils.js b/src/utils/utils.js
index 1a78fdb..3350032 100644
--- a/src/utils/utils.js
+++ b/src/utils/utils.js
@@ -1707,7 +1707,7 @@
       /* 澶辨晥楠岃瘉 */
       select @tbid='', @ErrorCode='',@retmsg=''
       select @tbid='X' from ${datasource} right join (select ID from  dbo.SplitComma(@ID@)) sp
-      on tb.id =sp.id where tb.id is null
+      on tb.${primaryKey} =sp.id where tb.${primaryKey} is null
 
       If @tbid!=''
       Begin
diff --git a/src/views/systemproc/proc/index.jsx b/src/views/systemproc/proc/index.jsx
index cad4d02..f5156bb 100644
--- a/src/views/systemproc/proc/index.jsx
+++ b/src/views/systemproc/proc/index.jsx
@@ -108,7 +108,8 @@
         {key: 'alter', reg: /(^|\s)alter\s/ig},
         {key: 'object', reg: /(^|\s)object(\s|\()/ig},
         {key: 'kill', reg: /(^|\s)kill\s/ig},
-        {key: '--', reg: /--/ig}
+        {key: '--', reg: /--/ig},
+        {key: ',,', reg: /,,/ig}
       ]
 
       let error = ''

--
Gitblit v1.8.0