From eb0c4703ec7cd21dc921ae113b7e3be69c641c1d Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 17 九月 2021 15:18:06 +0800
Subject: [PATCH] 2021-09-17

---
 src/components/tabview/index.jsx                               |   28 +----
 src/index.js                                                   |    4 
 src/tabviews/custom/components/card/prop-card/index.jsx        |    7 +
 src/components/sidemenu/index.scss                             |   14 +-
 src/tabviews/zshare/actionList/popupbutton/index.jsx           |   14 --
 src/store/reducer.js                                           |    8 -
 src/tabviews/custom/components/table/normal-table/index.jsx    |    1 
 src/store/action-type.js                                       |    3 
 src/tabviews/zshare/actionList/excelInbutton/index.jsx         |    4 
 src/tabviews/zshare/actionList/printbutton/index.jsx           |    1 
 public/options.json                                            |    1 
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx        |    6 +
 src/components/breadview/index.jsx                             |   31 +++---
 src/menu/components/card/cardcellcomponent/formconfig.jsx      |    4 
 src/store/action.js                                            |    8 -
 src/menu/components/share/clockcomponent/settingform/index.jsx |   42 +++++++-
 src/tabviews/custom/components/card/balcony/index.jsx          |   71 +++++++++++++
 src/views/design/sidemenu/index.jsx                            |    2 
 src/menu/components/share/clockcomponent/index.jsx             |   14 +-
 src/components/sidemenu/index.jsx                              |    6 
 src/tabviews/commontable/index.jsx                             |   10 --
 src/tabviews/zshare/actionList/normalbutton/index.jsx          |   12 ++
 public/README.txt                                              |    3 
 23 files changed, 177 insertions(+), 117 deletions(-)

diff --git a/public/README.txt b/public/README.txt
index bccb451..9d9efdf 100644
--- a/public/README.txt
+++ b/public/README.txt
@@ -11,4 +11,5 @@
 defaultLang       -- 榛樿鎵撳紑鐨勫瓙搴旂敤璇█绫诲瀷锛屽~鍏efaultApp鏃舵湁鏁�
 WXAppID           -- 浣跨敤鍏紬鍙锋椂锛岀粦瀹氱殑鍏紬鍙稩D
 debugger          -- debugger妯″紡鏄惁寮�鍚紝寮�鍚悗绉诲姩绔瓙搴旂敤涓細鏈夋帶鍒跺彴
-licenseKey        -- 璁稿彲瀵嗛挜锛屽湪鍐呴儴缃戠粶涓娇鐢ㄧ郴缁熸椂锛屼細璺宠繃epc楠岃瘉
\ No newline at end of file
+licenseKey        -- 璁稿彲瀵嗛挜锛屽湪鍐呴儴缃戠粶涓娇鐢ㄧ郴缁熸椂锛屼細璺宠繃epc楠岃瘉
+probation         -- 璇曠敤鏈燂紙YYYY-MM-DD锛夛紝鍦ㄦ寮忕郴缁熶腑锛岃瘯鐢ㄦ湡鍐呰皟鐢ㄧ郴缁熸帴鍙g殑鑴氭湰浼氳褰曚笅鏉�
\ No newline at end of file
diff --git a/public/options.json b/public/options.json
index 7ca016a..f9c0b8f 100644
--- a/public/options.json
+++ b/public/options.json
@@ -11,6 +11,7 @@
   "WXAppID": "",
   "debugger": false,
   "licenseKey": "E1A8FE",
+  "probation": "",
   "host": "http://qingqiumarket.cn",
   "service": "mkwms/"
 }
\ No newline at end of file
diff --git a/src/components/breadview/index.jsx b/src/components/breadview/index.jsx
index 5c3a5a1..1faf3c1 100644
--- a/src/components/breadview/index.jsx
+++ b/src/components/breadview/index.jsx
@@ -1,6 +1,5 @@
 import React, {Component} from 'react'
 import {connect} from 'react-redux'
-import { is, fromJS } from 'immutable'
 import { BackTop, Breadcrumb, Icon, notification} from 'antd'
 import moment from 'moment'
 import 'moment/locale/zh-cn'
@@ -140,18 +139,21 @@
     this.setState({tabview: home})
   }
 
-  UNSAFE_componentWillReceiveProps (nextProps) {
-    if (nextProps.tabviews && !is(fromJS(this.state.tabviews), fromJS(nextProps.tabviews))) {
-      // 淇濆瓨淇敼鏍囩闆�
-      this.setState({
-        tabview: nextProps.tabviews[nextProps.tabviews.length - 1]
-      })
+  modifyTabs = (tab, type) => {
+    if (!tab || type !== 'replace') return
 
-      let node = document.getElementById('root').parentNode.parentNode
-      if (node) {
-        node.scrollTop = 0
-      }
+    this.setState({
+      tabview: tab,
+    })
+
+    let node = document.getElementById('root').parentNode.parentNode
+    if (node) {
+      node.scrollTop = 0
     }
+  }
+
+  componentDidMount () {
+    MKEmitter.addListener('modifyTabs', this.modifyTabs)
   }
 
   /**
@@ -161,6 +163,7 @@
     this.setState = () => {
       return
     }
+    MKEmitter.removeListener('modifyTabs', this.modifyTabs)
   }
 
   render () {
@@ -195,10 +198,8 @@
   }
 }
 
-const mapStateToProps = (state) => {
-  return {
-    tabviews: state.tabviews
-  }
+const mapStateToProps = () => {
+  return {}
 }
 
 const mapDispatchToProps = (dispatch) => {
diff --git a/src/components/sidemenu/index.jsx b/src/components/sidemenu/index.jsx
index 846c5bd..fcbc8f2 100644
--- a/src/components/sidemenu/index.jsx
+++ b/src/components/sidemenu/index.jsx
@@ -97,7 +97,7 @@
     if (mainMenu === '') return (<span className="mk-side-menu-hidden"></span>)
 
     return (
-      <aside id="mk-sidemenu-wrap" className={'mk-side-menu ant-menu-dark' + (this.props.collapse ? ' collapsed' : '') + (this.props.isiframe ? ' mk-iframe' : '')}>
+      <aside id="mk-sidemenu-wrap" className={'mk-side-menu ant-menu-dark' + (this.props.collapse ? ' collapsed' : '')}>
         <Menu openKeys={this.state.openKeys} onOpenChange={this.onOpenChange} mode="inline" theme="dark" inlineCollapsed={this.props.collapse}>
           {this.state.subMenulist && this.state.subMenulist.map((item) => {
             return (
@@ -129,13 +129,11 @@
 const mapStateToProps = (state) => {
   return {
     collapse: state.collapse,
-    isiframe: state.isiframe,
     mainMenu: state.mainMenu,
-    menuTree: state.menuTree,
   }
 }
 
-const mapDispatchToProps = (dispatch) => {
+const mapDispatchToProps = () => {
   return {}
 }
 
diff --git a/src/components/sidemenu/index.scss b/src/components/sidemenu/index.scss
index 9cce86f..c9b71c5 100644
--- a/src/components/sidemenu/index.scss
+++ b/src/components/sidemenu/index.scss
@@ -94,13 +94,13 @@
   }
 }
 
-.mk-side-menu.mk-iframe { // tab椤典腑涓篿frame鏃�
-  max-height: 100vh;
-  overflow-y: scroll;
-  &::-webkit-scrollbar {
-    display: none;
-  }
-}
+// .mk-side-menu.mk-iframe { // tab椤典腑涓篿frame鏃�
+//   max-height: 100vh;
+//   overflow-y: scroll;
+//   &::-webkit-scrollbar {
+//     display: none;
+//   }
+// }
 .mk-side-menu.collapsed { // 宸︿晶鑿滃崟鍚堝苟鏃�
   flex: 0 0 80px;
   width: 80px;
diff --git a/src/components/tabview/index.jsx b/src/components/tabview/index.jsx
index 9cb3e0d..a853921 100644
--- a/src/components/tabview/index.jsx
+++ b/src/components/tabview/index.jsx
@@ -6,7 +6,7 @@
 import moment from 'moment'
 import 'moment/locale/zh-cn'
 
-import { toggleIsiframe, initActionPermission } from '@/store/action'
+import { initActionPermission } from '@/store/action'
 import asyncComponent from '@/utils/asyncLoadComponent'
 import NotFount from '@/components/404'
 import options from '@/store/options.js'
@@ -64,7 +64,9 @@
     
     if (index > -1) {
       let activeId = ''
-      if (index > 0) {
+      if (id !== this.state.activeId) {
+        activeId = this.state.activeId
+      } else if (index > 0) {
         activeId = tabs[index - 1].MenuID || ''
       } else if (tabs[index]) {
         activeId = tabs[index].MenuID || ''
@@ -74,10 +76,6 @@
         activeId,
         tabviews: tabs
       })
-
-      if (this.props.isiframe) {
-        this.props.toggleIsiframe(false)
-      }
 
       let node = document.getElementById('root').parentNode.parentNode
       if (node) {
@@ -174,16 +172,6 @@
   changeTab = (e, menu) => {
     e.stopPropagation()
     // 绐楀彛鍒囨崲
-    let _isiframe = this.props.isiframe
-    if (menu.type === 'iframe') {
-      _isiframe = true
-    } else {
-      _isiframe = false
-    }
-
-    if (_isiframe !== this.props.isiframe) {
-      this.props.toggleIsiframe(_isiframe)
-    }
     
     this.setState({
       activeId: menu.MenuID || ''
@@ -252,10 +240,6 @@
     MKEmitter.addListener('closeTabView', this.closeTabView)
   }
 
-  UNSAFE_componentWillReceiveProps (nextProps) {
-    
-  }
-
   /**
    * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊
    */
@@ -314,14 +298,12 @@
 const mapStateToProps = (state) => {
   return {
     collapse: state.collapse,
-    isiframe: state.isiframe
   }
 }
 
 const mapDispatchToProps = (dispatch) => {
   return {
-    initActionPermission: (permAction) => dispatch(initActionPermission(permAction)),
-    toggleIsiframe: (isiframe) => dispatch(toggleIsiframe(isiframe))
+    initActionPermission: (permAction) => dispatch(initActionPermission(permAction))
   }
 }
 
diff --git a/src/index.js b/src/index.js
index d6c0ef7..49328bb 100644
--- a/src/index.js
+++ b/src/index.js
@@ -71,6 +71,7 @@
     GLOB.appId = config.appId || ''
     GLOB.lineColor = config.lineColor || ''
     GLOB.licenseKey = config.licenseKey || ''
+    GLOB.probation = false
 
     if (config.externalDatabase !== false && config.externalDatabase !== 'false' && config.externalDatabase !== undefined) {
       GLOB.externalDatabase = config.externalDatabase ? `[${config.externalDatabase}]..` : ''
@@ -81,6 +82,9 @@
     // 鍙湁涓氬姟绯荤粺鎵嶅彲浠ヨ缃负姝e紡绯荤粺
     if (options.sysType === 'local' && (config.systemType === 'official' || config.systemType === 'production')) {
       GLOB.systemType = 'production'
+      if (config.probation && /^20\d{2}-\d{2}-\d{2}$/.test(config.probation) && new Date(config.probation).getTime() > new Date().getTime()) {
+        GLOB.probation = true
+      }
     } else {
       GLOB.systemType = ''
     }
diff --git a/src/menu/components/card/cardcellcomponent/formconfig.jsx b/src/menu/components/card/cardcellcomponent/formconfig.jsx
index 5298c1f..60cb23b 100644
--- a/src/menu/components/card/cardcellcomponent/formconfig.jsx
+++ b/src/menu/components/card/cardcellcomponent/formconfig.jsx
@@ -216,7 +216,7 @@
       type: 'number',
       key: 'barHeight',
       min: 5,
-      max: 50,
+      max: 500,
       label: '楂樺害',
       initVal: card.barHeight || 25,
       required: true,
@@ -225,7 +225,7 @@
       type: 'number',
       key: 'qrWidth',
       min: 5,
-      max: 500,
+      max: 1000,
       label: '瀹藉害',
       initVal: card.qrWidth || 50,
       required: true,
diff --git a/src/menu/components/share/clockcomponent/index.jsx b/src/menu/components/share/clockcomponent/index.jsx
index 65549fc..a18f7dd 100644
--- a/src/menu/components/share/clockcomponent/index.jsx
+++ b/src/menu/components/share/clockcomponent/index.jsx
@@ -10,14 +10,12 @@
 
 class ClockComponent extends Component {
   static propTpyes = {
-    btnlog: PropTypes.array,
     updateConfig: PropTypes.func
   }
 
   state = {
     dict: sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS,
-    visible: false,
-    timer: '',
+    visible: false
   }
 
   shouldComponentUpdate (nextProps, nextState) {
@@ -25,11 +23,8 @@
   }
 
   trigger = () => {
-    const { config } = this.props
-
     this.setState({
-      visible: true,
-      timer: config.timer || ''
+      visible: true
     })
   }
 
@@ -45,7 +40,8 @@
   }
 
   render () {
-    const { visible, loading, timer } = this.state
+    const { config } = this.props
+    const { visible, loading } = this.state
 
     return (
       <div className="clock-component-wrap">
@@ -60,7 +56,7 @@
           onCancel={() => this.setState({ visible: false })}
           destroyOnClose
         >
-          <ClockForm timer={timer} inputSubmit={this.submit} wrappedComponentRef={(inst) => this.verifyRef = inst}/>
+          <ClockForm config={config} inputSubmit={this.submit} wrappedComponentRef={(inst) => this.verifyRef = inst}/>
         </Modal>
       </div>
     )
diff --git a/src/menu/components/share/clockcomponent/settingform/index.jsx b/src/menu/components/share/clockcomponent/settingform/index.jsx
index d5ee583..dd4c146 100644
--- a/src/menu/components/share/clockcomponent/settingform/index.jsx
+++ b/src/menu/components/share/clockcomponent/settingform/index.jsx
@@ -1,16 +1,18 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
-import { Form, Row, Col, Select } from 'antd'
+import { Form, Row, Col, Select, Tooltip, Icon, Input } from 'antd'
 
 import './index.scss'
 
 class SettingForm extends Component {
   static propTpyes = {
-    timer: PropTypes.string,      // 缁勪欢鍚嶇О
-    inputSubmit: PropTypes.func   // 鍥炶溅浜嬩欢
+    config: PropTypes.string,
+    inputSubmit: PropTypes.func
   }
 
-  state = {}
+  state = {
+    clearField: this.props.config.clearField || ''
+  }
 
   handleConfirm = () => {
     // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭�
@@ -26,6 +28,8 @@
   }
 
   render() {
+    const { config } = this.props
+    const { clearField } = this.state
     const { getFieldDecorator } = this.props.form
 
     const formItemLayout = {
@@ -46,7 +50,7 @@
             <Col span={22}>
               <Form.Item label="瀹氭椂鍣�">
                 {getFieldDecorator('timer', {
-                  initialValue: this.props.timer || ''
+                  initialValue: config.timer || ''
                 })(
                   <Select>
                     <Select.Option value=""> 鏃� </Select.Option>
@@ -63,6 +67,34 @@
                 )}
               </Form.Item>
             </Col>
+            {config.subtype === 'balcony' || config.subtype === 'propcard' ? <Col span={22}>
+              <Form.Item label={
+                <Tooltip placement="topLeft" title="鍙互鎸囧畾瀛楁鐢ㄤ簬鎺у埗瀹氭椂鍣ㄧ殑鍏抽棴銆�">
+                  <Icon type="question-circle" style={{marginRight: '3px', color: '#c49f47'}} />
+                  鍏抽棴瀹氭椂
+                </Tooltip>
+              }>
+                {getFieldDecorator('clearField', {
+                  initialValue: clearField || ''
+                })(
+                  <Select allowClear onChange={(val) => this.setState({clearField: val})}>
+                    {config.columns.map(col => (<Select.Option key={col.uuid} value={col.field}>{col.label}</Select.Option>))}
+                  </Select>
+                )}
+              </Form.Item>
+            </Col> : null}
+            {(config.subtype === 'balcony' || config.subtype === 'propcard') && clearField ? <Col span={22}>
+              <Form.Item label={
+                <Tooltip placement="topLeft" title="褰撳瓧娈靛�间笌鍏抽棴鍊肩浉绛夋椂锛屽叧闂畾鏃跺櫒锛屽涓�煎彲鐢ㄩ�楀彿鍒嗛殧銆�">
+                  <Icon type="question-circle" style={{marginRight: '3px', color: '#c49f47'}} />
+                  鍏抽棴鍊�
+                </Tooltip>
+              }>
+                {getFieldDecorator('clearValue', {
+                  initialValue: config.clearValue || ''
+                })(<Input placeholder="" autoComplete="off" onPressEnter={this.props.inputSubmit}/>)}
+              </Form.Item>
+            </Col> : null}
           </Row>
         </Form>
       </div>
diff --git a/src/store/action-type.js b/src/store/action-type.js
index 08b822e..13cba48 100644
--- a/src/store/action-type.js
+++ b/src/store/action-type.js
@@ -7,9 +7,6 @@
 // 灞曞紑鍚堝苟鑿滃崟鏍�
 export const Toggle_COLLAPSE = 'Toggle_COLLAPSE'
 
-// 淇敼绐楀彛鏍峰紡锛屽尯鍒唅frame涓庢甯搁〉闈�
-export const TOGGLE_ISIFRAME = 'TOGGLE_ISIFRAME'
-
 // 鍒锋柊tab椤甸潰
 export const REFRESH_TABVIEW = 'REFRESH_TABVIEW'
 
diff --git a/src/store/action.js b/src/store/action.js
index dd38fc8..5fed87e 100644
--- a/src/store/action.js
+++ b/src/store/action.js
@@ -24,14 +24,6 @@
   }
 }
 
-// 淇敼绐楀彛鏍峰紡锛屽尯鍒唅frame涓庢甯搁〉闈�
-export const toggleIsiframe = (isiframe) => {
-  return {
-    type: user.TOGGLE_ISIFRAME,
-    isiframe
-  }
-}
-
 // 閲嶇疆缂栬緫绾у埆
 export const resetEditLevel = (editLevel) => {
   return {
diff --git a/src/store/reducer.js b/src/store/reducer.js
index e623cf4..e262dfa 100644
--- a/src/store/reducer.js
+++ b/src/store/reducer.js
@@ -25,7 +25,6 @@
   menuTree: null,       // 鑿滃崟缁撴瀯鏍�
   mainMenu: _mainMenu,  // 宸查�変富鑿滃崟
   collapse: _collapse,  // 鏄惁鏀惰捣渚ц竟鏍忓鑸�
-  isiframe: false,      // 鏄惁涓篿frame绐楀彛
   editLevel: null,      // 缂栬緫鑿滃崟绾у埆锛屽�间负level1銆乴evel2銆乴evel3銆丠S
   permAction: {},       // 鐢ㄦ埛鎸夐挳鏉冮檺
   permMenus: [],        // 鐢ㄦ埛涓夌骇鑿滃崟鍒楄〃
@@ -52,12 +51,6 @@
       return {
         ...state,
         mainMenu: action.mainMenu
-      }
-    case Type.TOGGLE_ISIFRAME:
-    // 鍒囨崲鏄惁涓篿frame鐘舵��
-      return {
-        ...state,
-        isiframe: action.isiframe
       }
     case Type.RESET_EDITLEVEL:
     // 閲嶇疆缂栬緫绾у埆
@@ -88,7 +81,6 @@
         menuTree: null,
         mainMenu: null,
         collapse: localStorage.getItem('collapse') === 'true',
-        isiframe: false,
         editLevel: null,
         permAction: {},
         permMenus: [],
diff --git a/src/tabviews/commontable/index.jsx b/src/tabviews/commontable/index.jsx
index a4658c6..72d448d 100644
--- a/src/tabviews/commontable/index.jsx
+++ b/src/tabviews/commontable/index.jsx
@@ -1012,15 +1012,6 @@
     this.loadconfig()
   }
 
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    if (!is(fromJS(this.props.tabviews), fromJS(nextProps.tabviews))) {
-      let selectTab = nextProps.tabviews.filter(tab => tab.selected)[0]
-      if (selectTab && selectTab.MenuID === this.props.MenuID) {
-        this.setShortcut()
-      }
-    }
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
   }
@@ -1176,7 +1167,6 @@
 const mapStateToProps = (state) => {
   return {
     menuType: state.editLevel,
-    tabviews: state.tabviews,
     permAction: state.permAction,
     permMenus: state.permMenus
   }
diff --git a/src/tabviews/custom/components/card/balcony/index.jsx b/src/tabviews/custom/components/card/balcony/index.jsx
index 2842c8a..aec9138 100644
--- a/src/tabviews/custom/components/card/balcony/index.jsx
+++ b/src/tabviews/custom/components/card/balcony/index.jsx
@@ -2,8 +2,10 @@
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
 import { Spin, notification, Checkbox } from 'antd'
+import moment from 'moment'
 
 import Api from '@/api'
+import Utils from '@/utils/utils.js'
 import UtilsDM from '@/utils/utils-datamanage.js'
 import asyncComponent from '@/utils/asyncComponent'
 import MKEmitter from '@/utils/events.js'
@@ -111,6 +113,7 @@
     MKEmitter.addListener('syncBalconyData', this.syncBalconyData)
     MKEmitter.addListener('resetSelectLine', this.resetParentParam)
     MKEmitter.addListener('refreshByButtonResult', this.refreshByButtonResult)
+    this.handleTimer()
   }
 
   shouldComponentUpdate (nextProps, nextState) {
@@ -118,6 +121,7 @@
   }
 
   componentWillUnmount () {
+    clearTimeout(this.timer)
     this.setState = () => {
       return
     }
@@ -148,6 +152,56 @@
 
       this.setState({sync: false, data: _data})
     }
+  }
+
+  handleTimer = () => {
+    const { config } = this.state
+
+    if (!config.timer) return
+
+    const _change = { '5s': 5000, '15s': 15000, '30s': 30000, '1min': 60000, '5min': 300000, '10min': 600000, '15min': 900000, '30min': 1800000, '1hour': 3600000 }
+
+    let timer = _change[config.timer]
+
+    if (!timer) return
+
+    let _param = {
+      func: 's_get_timers_role',
+      LText: `select '${window.GLOB.appkey || ''}','${config.uuid}'`,
+      timer_type: config.timer,
+      component_id: config.uuid
+    }
+    
+    _param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')          // 鏃堕棿鎴�
+    _param.LText = Utils.formatOptions(_param.LText)                   // 鍏抽敭瀛楃鏇挎崲锛宐ase64鍔犲瘑
+    _param.secretkey = Utils.encrypt(_param.LText, _param.timestamp)   // md5瀵嗛挜
+
+    Api.getSystemConfig(_param).then(result => {
+      if (!result.status) {
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+        return
+      } else if (result.run_type) {
+        this.setState({timer})
+        this.timer = setTimeout(() => {
+          this.timerTask()
+        }, timer)
+      }
+    })
+  }
+
+  timerTask = () => {
+    const { timer } = this.state
+    if (!timer) return
+    
+    this.loadData(true)
+
+    this.timer = setTimeout(() => {
+      this.timerTask()
+    }, timer)
   }
 
   /**
@@ -225,7 +279,7 @@
     this.loadData()
   }
 
-  async loadData () {
+  async loadData (hastimer) {
     const { menuType } = this.props
     const { config, arr_field, BID, BData } = this.state
 
@@ -243,9 +297,11 @@
 
     let searches = []
 
-    this.setState({
-      loading: true
-    })
+    if (!hastimer) {
+      this.setState({
+        loading: true
+      })
+    }
 
     let _orderBy = config.setting.order || ''
     let param = UtilsDM.getQueryDataParams(config.setting, arr_field, searches, _orderBy, 1, 1, BID, menuType)
@@ -260,6 +316,13 @@
         data: _data,
         loading: false
       })
+
+      if (config.timer && config.clearField) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(_data[config.clearField])) {
+          clearTimeout(this.timer)
+        }
+      }
     } 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 3ac9350..66bd1f7 100644
--- a/src/tabviews/custom/components/card/prop-card/index.jsx
+++ b/src/tabviews/custom/components/card/prop-card/index.jsx
@@ -319,6 +319,13 @@
         data: _data,
         loading: false
       })
+
+      if (config.timer && config.clearField) {
+        let vals = (config.clearValue || '').split(',')
+        if (vals.includes(_data[config.clearField])) {
+          clearTimeout(this.timer)
+        }
+      }
     } 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 bfe5644..6fdb93b 100644
--- a/src/tabviews/custom/components/table/normal-table/index.jsx
+++ b/src/tabviews/custom/components/table/normal-table/index.jsx
@@ -648,7 +648,6 @@
 const mapStateToProps = (state) => {
   return {
     menuType: state.editLevel,
-    tabviews: state.tabviews,
     permAction: state.permAction,
     permMenus: state.permMenus
   }
diff --git a/src/tabviews/zshare/actionList/excelInbutton/index.jsx b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
index 4685368..e4b395d 100644
--- a/src/tabviews/zshare/actionList/excelInbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -323,6 +323,10 @@
 
       param.menuname = btn.logLabel
 
+      if (window.GLOB.probation) {
+        param.s_debug_type = 'Y'
+      }
+
       Api.genericInterface(param).then((res) => {
         if (res.status) {
           this.execSuccess(res)
diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index e52aece..ec5a55a 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -606,12 +606,16 @@
     param.exec_type = 'y' // 鍚庡彴瑙g爜
     param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
     param.secretkey = Utils.encrypt('', param.timestamp)
-    param.LText = Utils.formatOptions(param.LText)
+    param.LText = Utils.formatOptions(script)
 
     if (this.props.menuType === 'HS') { // 鍑芥暟 sPC_TableData_InUpDe 浜戠楠岃瘉
       param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
     }
 
+    if (window.GLOB.probation) {
+      param.s_debug_type = 'Y'
+    }
+
     Api.genericInterface(param).then((res) => {
       if (res.status) {
         this.execSuccess({ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'})
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index a47e588..f071aad 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -426,6 +426,10 @@
 
       param.menuname = btn.logLabel
 
+      if (window.GLOB.probation) {
+        param.s_debug_type = 'Y'
+      }
+
       if (check_param) {
         check_param.menuname = btn.logLabel
         this.setState({checkParam: check_param})
@@ -532,6 +536,9 @@
 
         if (param.func === 'sPC_TableData_InUpDe') {
           param.menuname = btn.logLabel
+          if (window.GLOB.probation) {
+            param.s_debug_type = 'Y'
+          }
         }
 
         return param
@@ -1047,6 +1054,10 @@
       param.secretkey = Utils.encrypt('', param.timestamp)
       param.LText = Utils.formatOptions(param.LText)
       param.menuname = btn.logLabel
+
+      if (window.GLOB.probation) {
+        param.s_debug_type = 'Y'
+      }
 
       if (this.props.menuType === 'HS') { // 鍑芥暟 sPC_TableData_InUpDe 浜戠楠岃瘉
         param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
@@ -1856,7 +1867,6 @@
 
 const mapStateToProps = (state) => {
   return {
-    tabviews: state.tabviews,
     menuType: state.editLevel
   }
 }
diff --git a/src/tabviews/zshare/actionList/popupbutton/index.jsx b/src/tabviews/zshare/actionList/popupbutton/index.jsx
index de6fa8a..672597b 100644
--- a/src/tabviews/zshare/actionList/popupbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -1,6 +1,5 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
-import {connect} from 'react-redux'
 import { is, fromJS } from 'immutable'
 import { Button, Modal, notification, Icon, Drawer } from 'antd'
 
@@ -318,15 +317,4 @@
     )
   }
 }
-
-const mapStateToProps = (state) => {
-  return {
-    tabviews: state.tabviews,
-  }
-}
-
-const mapDispatchToProps = () => {
-  return {}
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(PopupButton)
\ No newline at end of file
+export default PopupButton
\ No newline at end of file
diff --git a/src/tabviews/zshare/actionList/printbutton/index.jsx b/src/tabviews/zshare/actionList/printbutton/index.jsx
index a069809..4931b51 100644
--- a/src/tabviews/zshare/actionList/printbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -1554,7 +1554,6 @@
 
 const mapStateToProps = (state) => {
   return {
-    tabviews: state.tabviews,
     menuType: state.editLevel
   }
 }
diff --git a/src/views/design/sidemenu/index.jsx b/src/views/design/sidemenu/index.jsx
index e92164f..6c794cf 100644
--- a/src/views/design/sidemenu/index.jsx
+++ b/src/views/design/sidemenu/index.jsx
@@ -236,7 +236,7 @@
 
   render () {
     return (
-      <aside id="mk-sidemenu-wrap" className="mk-sys-side-menu ant-menu-dark mk-edit">
+      <aside className="mk-sys-side-menu ant-menu-dark mk-edit">
         {!(this.props.editLevel === 'level2' || this.props.editLevel === 'level3') &&
           <Menu openKeys={this.state.openKeys} onOpenChange={this.onOpenChange} mode="inline" theme="dark">
           {!this.props.editLevel && <li className="sup-menu"><Icon onClick={this.enterSubEdit} className="edit-check" type="edit" /></li>}

--
Gitblit v1.8.0