From 0c439ced2c97905cb2b02f5f689a37b19369fb8a Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 22 七月 2022 15:00:58 +0800
Subject: [PATCH] 2022-07-22

---
 src/tabviews/formtab/index.jsx |  344 ++++++++++++++++++++++++++------------------------------
 1 files changed, 161 insertions(+), 183 deletions(-)

diff --git a/src/tabviews/formtab/index.jsx b/src/tabviews/formtab/index.jsx
index 09b5271..9c15dfd 100644
--- a/src/tabviews/formtab/index.jsx
+++ b/src/tabviews/formtab/index.jsx
@@ -2,7 +2,7 @@
 import PropTypes from 'prop-types'
 import {connect} from 'react-redux'
 import { is, fromJS } from 'immutable'
-import { notification, Spin, Tabs, Icon} from 'antd'
+import { notification, Spin, Tabs} from 'antd'
 import moment from 'moment'
 
 import Api from '@/api'
@@ -11,21 +11,21 @@
 import Utils from '@/utils/utils.js'
 import options from '@/store/options.js'
 import asyncComponent from '@/utils/asyncLoadComponent'
-
+import MKEmitter from '@/utils/events.js'
+import MkIcon from '@/components/mk-icon'
 import FormGroup from './formgroup'
 import FormAction from './actionList'
 import NotFount from '@/components/404'
-import {refreshTabView, modifyTabview} from '@/store/action'
 import './index.scss'
 
 const { TabPane } = Tabs
 const SubTable = asyncComponent(() => import('@/tabviews/subtable'))
+const PagemsgComponent = asyncComponent(() => import('@/tabviews/zshare/pageMessage'))
 
 class NormalTable extends Component {
   static propTpyes = {
     MenuID: PropTypes.string,       // 鑿滃崟Id
     param: PropTypes.any,           // 涓昏〃浼犻�掑弬鏁�
-    refresh: PropTypes.any          // 鍒锋柊涓昏〃椤甸潰
   }
 
   state = {
@@ -40,27 +40,21 @@
     arr_field: '',        // 浣跨敤 sPC_Get_TableData 鏃剁殑鏌ヨ瀛楁闆�
     setting: null,        // 椤甸潰鍏ㄥ眬璁剧疆锛氭暟鎹簮銆佹寜閽強鏄剧ず鍒楀浐瀹氥�佷富閿瓑
     data: null,           // 鍒楄〃鏁版嵁闆�
-    configMap: {},        // 椤甸潰閰嶇疆淇℃伅锛氫笅鎷夈�佹寜閽瓑
     BIDs: {},             // 涓婄骇琛╥d
-    setsingle: false,     // 涓昏〃鍗曢�夊閫夊垏鎹�
-    pickup: false,        // 涓昏〃鏁版嵁闅愯棌鏄剧ず鍒囨崲
-    popData: false,       // 寮规椤甸潰锛屾墍閫夌殑琛ㄦ牸鏁版嵁
-    visible: false,       // 寮规鏄剧ず闅愯棌鎺у埗
     primaryId: null,
-    refreshtabs: null
   }
 
   /**
    * @description 鑾峰彇椤甸潰閰嶇疆淇℃伅
    */
   async loadconfig () {
-    const { permAction } = this.props
+    const { permAction, MenuID } = this.props
 
     let param = {
       func: 'sPC_Get_LongParam',
-      MenuID: this.props.MenuID
+      MenuID: MenuID
     }
-    let result = await Api.getSystemCacheConfig(param)
+    let result = await Api.getCacheConfig(param)
     if (result.status) {
       let config = ''
 
@@ -90,35 +84,64 @@
         return
       }
 
-      // 鏉冮檺杩囨护
-      if (this.props.param.menuType !== 'HS') {
+      // 鍏煎鏍囩
+      if (!config.tabgroups) {
+        config.tabgroups = [{ uuid: 'tabs', sublist: [] }]
+      } else if (typeof(config.tabgroups[0]) === 'string') {
+        let _tabgroups = []
+        config.tabgroups.forEach(groupId => {
+          let _group = {
+            uuid: groupId,
+            sublist: fromJS(config[groupId]).toJS()
+          }
+  
+          delete config[groupId]
+  
+          _tabgroups.push(_group)
+        })
+  
+        config.tabgroups = _tabgroups
+      }
+
+      if (!window.GLOB.mkHS) {
         config.action = config.action.filter(item => permAction[item.uuid])
         config.tabgroups.forEach(group => {
-          if (!config[group]) return
-  
-          config[group] = config[group].filter(tab => permAction[tab.linkTab])
+          group.sublist = group.sublist.filter(tab => {
+            if (tab.supMenu === 'mainTable') {
+              tab.supMenu = MenuID
+            }
+            return permAction[tab.linkTab]
+          })
+        })
+      } else {
+        config.tabgroups.forEach(group => {
+          group.sublist = group.sublist.filter(tab => {
+            if (tab.supMenu === 'mainTable') {
+              tab.supMenu = MenuID
+            }
+            return true
+          })
         })
       }
 
+      // 鎸夐挳绫诲瀷鍏煎
+      config.action = config.action.map(item => {
+        if (item.intertype === 'inner' && !item.innerFunc) {
+          item.intertype = 'system'
+        }
+        return item
+      })
+
       let _arrField = [config.setting.primaryKey]     // 瀛楁闆� , 榛樿娣诲姞涓婚敭
+      let roleId = sessionStorage.getItem('role_id') || '' // 瑙掕壊ID
 
       config.groups.forEach(group => {
         group.sublist = group.sublist.filter(item => {
+          item.field && _arrField.push(item.field)
           if (!item.blacklist || item.blacklist.length === 0) {
-            _arrField.push(item.field)
             return true
           }
-
-          let _black = item.blacklist.filter(v => {
-            return this.props.permRoles.indexOf(v) !== -1
-          })
-
-          if (_black.length > 0) {
-            return false
-          } else {
-            _arrField.push(item.field)
-            return true
-          }
+          return item.blacklist.filter(v => roleId.indexOf(v) > -1).length === 0
         })
       })
       _arrField = _arrField.join(',')
@@ -131,8 +154,8 @@
         primaryId: this.props.param.primaryId || '',
         data: this.props.param.data || null,
         BIDs: {
-          mainTable: config.setting.onload !== 'false' ? (this.props.param.primaryId || '') : '',
-          mainTabledata: config.setting.onload !== 'false' ? (config.setting.datatype === 'query' ? '' : this.props.param.data) : ''
+          [MenuID]: config.setting.onload !== 'false' ? (this.props.param.primaryId || '') : '',
+          [MenuID + 'data']: config.setting.onload !== 'false' ? (config.setting.datatype === 'query' ? '' : this.props.param.data) : ''
         }
       }, () => {
         this.improveSelectOption(config.groups)
@@ -143,7 +166,7 @@
           notification.warning({
             top: 92,
             message: '鏈幏鍙栧埌涓昏〃鏁版嵁锛�',
-            duration: 10
+            duration: 5
           })
         }
       })
@@ -155,7 +178,7 @@
       notification.warning({
         top: 92,
         message: result.message,
-        duration: 10
+        duration: 5
       })
     }
   }
@@ -173,14 +196,13 @@
           item.options.unshift({
             key: Utils.getuuid(),
             Value: '',
-            Text: this.state.dict['main.all']
+            Text: '鍏ㄩ儴'
           })
         }
   
         if (item.resourceType === '1' && item.dataSource) {
           let _option = Utils.getSelectQueryOptions(item)
           let _sql = Utils.formatOptions(_option.sql)
-          let isSSO = item.database === 'sso'
   
           let param = {
             func: 'sPC_Get_SelectedList',
@@ -189,11 +211,23 @@
             arr_field: _option.field
           }
   
-          param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
+          param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
           param.secretkey = Utils.encrypt(param.LText, param.timestamp)
+
+          if (window.GLOB.mkHS) { // 浜戠鏁版嵁楠岃瘉
+            param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
+
+            if (item.database === 'sso' && options.cloudServiceApi) { // 瀛樺湪浜戠鍦板潃鏃讹紝浣跨敤浜戠绯荤粺鍙傛暟
+              param.rduri = options.cloudServiceApi
+              param.userid = sessionStorage.getItem('CloudUserID') || ''
+              param.LoginUID = sessionStorage.getItem('CloudLoginUID') || ''
+            }
+          } else if (item.database === 'sso' && window.GLOB.mainSystemApi && window.GLOB.systemType === 'production') {
+            param.rduri = window.GLOB.mainSystemApi
+          }
   
           let defer = new Promise(resolve => {
-            Api.getSystemCacheConfig(param, isSSO).then(res => {
+            Api.getSystemCacheConfig(param).then(res => {
               res.search = item
               resolve(res)
             })
@@ -203,7 +237,7 @@
           notification.warning({
             top: 92,
             message: item.label + ': ' + this.state.dict['main.datasource.settingerror'],
-            duration: 10
+            duration: 5
           })
         }
 
@@ -231,7 +265,7 @@
             }
 
             if (res.search.type === 'link') {
-              _item.parentId = cell[res.search.linkField]
+              _item.ParentID = cell[res.search.linkField]
             } else if (res.search.type === 'select' && res.search.linkSubField && res.search.linkSubField.length > 0) {
               res.search.linkSubField.forEach(_field => {
                 _item[_field] = (cell[_field] || cell[_field] === 0) ? cell[_field] : ''
@@ -246,7 +280,7 @@
           notification.warning({
             top: 92,
             message: res.search.label + ':' + res.message,
-            duration: 10
+            duration: 5
           })
         }
       })
@@ -281,7 +315,7 @@
       notification.warning({
         top: 92,
         message: '鏈缃暟鎹煡璇㈤厤缃紒',
-        duration: 10
+        duration: 5
       })
       return
     }
@@ -296,6 +330,11 @@
 
     if (!param) return // 鏈幏鍙栧弬鏁版椂锛屼笉鍙戣姹�
 
+    // 鏁版嵁绠$悊鏉冮檺
+    if (sessionStorage.getItem('dataM') === 'true') {
+      param.dataM = 'Y'
+    }
+
     let result = await Api.genericInterface(param)
     if (result.status) {
       let _data = result.data[0] || ''
@@ -307,18 +346,14 @@
         notification.warning({
           top: 92,
           message: '鏈煡璇㈠埌鏁版嵁淇℃伅锛�',
-          duration: 10
+          duration: 5
         })
       }
 
       this.setState({
         data: _data,
         primaryId: _primaryId,
-        BIDs: {
-          ...BIDs,
-          mainTable: _primaryId,
-          mainTabledata: _data
-        }
+        BIDs: { ...BIDs, [this.props.MenuID]: _primaryId, [this.props.MenuID + 'data']: _data }
       })
 
       if (_data && (setting.interType !== 'inner' || (setting.interType === 'inner' && setting.innerFunc))) {
@@ -341,7 +376,7 @@
           notification.warning({
             top: 92,
             message: '鏈煡璇㈠埌' + emptys.join(', ') + '瀛楁淇℃伅锛�',
-            duration: 10
+            duration: 5
           })
         }
       }
@@ -349,7 +384,7 @@
       notification.error({
         top: 92,
         message: result.message,
-        duration: 15
+        duration: 10
       })
     }
   }
@@ -364,7 +399,7 @@
       notification.warning({
         top: 92,
         message: '鏈缃〃鍗曞瓧娈碉紒',
-        duration: 10
+        duration: 5
       })
       return null
     }
@@ -382,6 +417,16 @@
       _dataresource = '(' + _dataresource + ') tb'
     }
 
+    if (sessionStorage.getItem('dataM') === 'true') { // 鏁版嵁鏉冮檺
+      _dataresource = _dataresource.replace(/\$@/ig, '/*')
+      _dataresource = _dataresource.replace(/@\$/ig, '*/')
+      // param.custom_script = param.custom_script.replace(/\$@/ig, '/*')
+      // param.custom_script = param.custom_script.replace(/@\$/ig, '*/')
+    } else {
+      _dataresource = _dataresource.replace(/@\$|\$@/ig, '')
+      // param.custom_script = param.custom_script.replace(/@\$|\$@/ig, '')
+    }
+
     if (!/@ID@/ig.test(_dataresource)) {
       _dataresource = `${_dataresource} where ${setting.primaryKey}='${primaryId}'`
     }
@@ -389,9 +434,13 @@
     let LText = `select ${arr_field} from ${_dataresource}`
 
     param.LText = Utils.formatOptions(LText)
-    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss') + '.000'
+    param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
     param.secretkey = Utils.encrypt(param.LText, param.timestamp)
     param.DateCount = ''
+
+    if (!window.GLOB.mkHS) { // 浜戠鏁版嵁楠岃瘉
+      param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp)
+    }
 
     return param
   }
@@ -407,7 +456,7 @@
     if (setting.interType === 'inner') {
       param.func = setting.innerFunc
     } else {
-      if (this.props.param.menuType === 'HS') {
+      if (window.GLOB.mkHS) {
         if (setting.sysInterface === 'true' && options.cloudServiceApi) {
           param.rduri = options.cloudServiceApi
         } else if (setting.sysInterface !== 'true') {
@@ -441,7 +490,7 @@
       this.setState({
         primaryId: primaryId
       }, () => {
-        if (btn.execSuccess === 'refresh') {
+        if (btn.execSuccess === 'refresh' || btn.execSuccess === 'grid') {
           this.loadmaindata()
         } else {
           let data = {}
@@ -453,104 +502,25 @@
           }
 
           this.setState({
-            BIDs: {
-              ...BIDs,
-              mainTable: primaryId,
-              mainTabledata: data
-            }
+            BIDs: { ...BIDs, [this.props.MenuID]: primaryId, [this.props.MenuID + 'data']: data }
           })
         }
       })
     } else if (type === 'success' && btn.afterExecSuccess === 'close') {
-      if (this.props.refresh) {
-        this.props.refresh(btn.execSuccess)
-      } else {
-        if (btn.execSuccess !== 'never') {
-          let PMenu = {
-            MenuID: this.props.param.parentId || '',
-            position: btn.execSuccess
-          }
-          this.props.refreshTabView(PMenu)
-        }
-
-        let tabs = this.props.tabviews.filter(tab => {
-          tab.selected = false
-          if (tab.MenuID === this.props.param.parentId) {
-            tab.selected = true
-          }
-
-          return tab.MenuID !== this.props.MenuID
-        })
-
-        this.props.modifyTabview(tabs)
+      if (btn.execSuccess !== 'never') {
+        MKEmitter.emit('reloadData', this.props.param.parentId, 'formtab', btn)
       }
+
+      MKEmitter.emit('closeTabView', this.props.MenuID)
     } else if (type === 'error' && btn.afterExecError === 'notclose') {
       if (btn.execError === 'refresh') {
         this.loadmaindata()
       }
     } else if (type === 'error' && btn.afterExecError === 'close') {
-      if (this.props.refresh) {
-        this.props.refresh(btn.execError)
-      } else {
-        if (btn.execError !== 'never') {
-          let PMenu = {
-            MenuID: this.props.param.parentId || '',
-            position: btn.execError
-          }
-          this.props.refreshTabView(PMenu)
-        }
-
-        let tabs = this.props.tabviews.filter(tab => {
-          tab.selected = false
-          if (tab.MenuID === this.props.param.parentId) {
-            tab.selected = true
-          }
-
-          return tab.MenuID !== this.props.MenuID
-        })
-
-        this.props.modifyTabview(tabs)
+      if (btn.execError !== 'never') {
+        MKEmitter.emit('reloadData', this.props.param.parentId, 'formtab', btn)
       }
-    }
-  }
-
-  /**
-   * @description 琛ㄦ牸Id鍙樺寲
-   */
-  handleTableId = (type, id, data) => {
-    const { BIDs } = this.state
-
-    this.setState({
-      BIDs: {
-        ...BIDs,
-        [type]: id,
-        [type + 'data']: data
-      }
-    })
-  }
-
-  /**
-   * @description 瀛愯〃鎿嶄綔瀹屾垚鍚庡埛鏂颁富琛�
-   */
-  handleMainTable = (type, tab) => {
-    if (type === 'maingrid' && tab.supMenu === 'mainTable') {
-      this.loadmaindata()
-    } else if (type === 'maingrid' && tab.supMenu) {
-      this.setState({
-        refreshtabs: [tab.supMenu]
-      }, () => {
-        this.setState({
-          refreshtabs: null
-        })
-      })
-    } else if (type === 'equaltab' && tab.equalTab && tab.equalTab.length > 0) {
-      this.setState({
-        refreshtabs: tab.equalTab
-      }, () => {
-        this.setState({
-          refreshtabs: null
-        })
-      })
+      MKEmitter.emit('closeTabView', this.props.MenuID)
     }
   }
 
@@ -569,19 +539,36 @@
       config: {},
       groups: null,
       actions: null,
-      arr_field: '',
       setting: null,
       data: null,
-      configMap: {},
       BIDs: {},
-      setsingle: false,
-      pickup: false,
-      popData: false,
-      visible: false,
       primaryId: null,
-      refreshtabs: null
     }, () => {
       this.loadconfig()
+    })
+  }
+
+  reloadMenuView = (menuId) => {
+    const { MenuID } = this.props
+
+    if (MenuID !== menuId) return
+
+    this.reloadview()
+  }
+
+  reloadData = (menuId) => {
+    const { MenuID } = this.props
+
+    if (MenuID !== menuId) return
+    
+    this.loadmaindata()
+  }
+
+  changeTableLine = (ContainerId, tableId, id, data) => {
+    if (this.state.ContainerId !== ContainerId) return
+
+    this.setState({
+      BIDs: {...this.state.BIDs, [tableId]: id, [tableId + 'data']: data}
     })
   }
 
@@ -590,15 +577,14 @@
     this.loadconfig()
   }
 
-  UNSAFE_componentWillReceiveProps(nextProps) {
-    if (nextProps.refreshTab && nextProps.refreshTab.MenuID === this.props.MenuID) {
-      this.reloadview()
-      this.props.refreshTabView('')
-    }
-  }
-
   shouldComponentUpdate (nextProps, nextState) {
     return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
+  }
+
+  componentDidMount () {
+    MKEmitter.addListener('reloadData', this.reloadData)
+    MKEmitter.addListener('reloadMenuView', this.reloadMenuView)
+    MKEmitter.addListener('changeTableLine', this.changeTableLine)
   }
 
   /**
@@ -608,6 +594,10 @@
     this.setState = () => {
       return
     }
+
+    MKEmitter.removeListener('reloadData', this.reloadData)
+    MKEmitter.removeListener('reloadMenuView', this.reloadMenuView)
+    MKEmitter.removeListener('changeTableLine', this.changeTableLine)
   }
 
   render() {
@@ -632,8 +622,6 @@
         }
         {hasform ?
           <FormAction
-            menuType={this.props.param.menuType}
-            logcolumns={[]}
             setting={setting}
             actions={actions}
             dict={this.state.dict}
@@ -645,31 +633,26 @@
           /> : null
         }
         {!loadingview && !viewlost && config.tabgroups.map(group => {
-            if (config[group].length === 0) return null
+            if (group.sublist.length === 0) return null
 
             return (
-              <Tabs defaultActiveKey="0" key={group}>
-                {config[group].map((_tab, index) => {
+              <Tabs defaultActiveKey="0" key={group.uuid}>
+                {group.sublist.map((_tab, index) => {
                   return (
                     <TabPane tab={
                       <span>
-                        {_tab.icon ? <Icon type={_tab.icon} /> : null}
+                        {_tab.icon ? <MkIcon type={_tab.icon} /> : null}
                         {_tab.label}
                       </span>
                     } key={`${index}`}>
-                      {_tab.type === 'SubTable' ?
-                        <SubTable
-                          Tab={_tab}
-                          menuType={this.props.param.menuType}
-                          MenuID={_tab.linkTab}
-                          SupMenuID={this.props.MenuID}
-                          refreshtabs={this.state.refreshtabs}
-                          ContainerId={this.state.ContainerId}
-                          BID={this.state.BIDs[_tab.supMenu] || ''}
-                          BData={this.state.BIDs[_tab.supMenu + 'data'] || ''}
-                          handleTableId={this.handleTableId}
-                          handleMainTable={(type) => this.handleMainTable(type, _tab)}
-                        /> : null}
+                      <SubTable
+                        Tab={_tab}
+                        MenuID={_tab.linkTab}
+                        SupMenuID={this.props.MenuID}
+                        ContainerId={this.state.ContainerId}
+                        BID={this.state.BIDs[_tab.supMenu] || ''}
+                        BData={this.state.BIDs[_tab.supMenu + 'data'] || ''}
+                      />
                     </TabPane>
                   )
                 })}
@@ -677,6 +660,7 @@
             )
           })
         }
+        {!window.GLOB.mkHS && window.GLOB.systemType !== 'production' ? <PagemsgComponent menu={{MenuName: this.props.MenuName, MenuNo: this.props.MenuNo}} config={config} dict={this.state.dict} /> : null}
         {viewlost ? <NotFount msg={this.state.lostmsg} /> : null}
       </div>
     )
@@ -685,18 +669,12 @@
 
 const mapStateToProps = (state) => {
   return {
-    tabviews: state.tabviews,
-    refreshTab: state.refreshTab,
-    permAction: state.permAction,
-    permRoles: state.permRoles
+    permAction: state.permAction
   }
 }
 
-const mapDispatchToProps = (dispatch) => {
-  return {
-    refreshTabView: (refreshTab) => dispatch(refreshTabView(refreshTab)),
-    modifyTabview: (tabviews) => dispatch(modifyTabview(tabviews))
-  }
+const mapDispatchToProps = () => {
+  return {}
 }
 
 export default connect(mapStateToProps, mapDispatchToProps)(NormalTable)
\ No newline at end of file

--
Gitblit v1.8.0