From deb2536eaaa559d6c8ec94f81afb94b6c7806b4d Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 29 三月 2024 16:15:14 +0800
Subject: [PATCH] 2024-03-29

---
 src/components/tabview/index.jsx |  274 +++++++++++++++++++++++++++++++-----------------------
 1 files changed, 157 insertions(+), 117 deletions(-)

diff --git a/src/components/tabview/index.jsx b/src/components/tabview/index.jsx
index a853921..51f9743 100644
--- a/src/components/tabview/index.jsx
+++ b/src/components/tabview/index.jsx
@@ -1,17 +1,12 @@
 import React, {Component} from 'react'
-import PropTypes from 'prop-types'
-import {connect} from 'react-redux'
 import { fromJS } from 'immutable'
-import {Tabs, Icon, BackTop, notification} from 'antd'
+import { Tabs, BackTop, notification, Modal } from 'antd'
+import { RedoOutlined, CloseOutlined, LoadingOutlined } from '@ant-design/icons'
 import moment from 'moment'
 import 'moment/locale/zh-cn'
 
-import { initActionPermission } from '@/store/action'
 import asyncComponent from '@/utils/asyncLoadComponent'
 import NotFount from '@/components/404'
-import options from '@/store/options.js'
-import mzhCN from '@/locales/zh-CN/main.js'
-import menUS from '@/locales/en-US/main.js'
 import MKEmitter from '@/utils/events.js'
 import Api from '@/api'
 import './index.scss'
@@ -19,33 +14,54 @@
 const Home = asyncComponent(() => import('@/tabviews/home'))
 const CustomPage = asyncComponent(() => import('@/tabviews/custom'))
 const CommonTable = asyncComponent(() => import('@/tabviews/commontable'))
-const CalendarPage = asyncComponent(() => import('@/tabviews/calendar'))
+const BaseTable = asyncComponent(() => import('@/tabviews/basetable'))
 const TreePage = asyncComponent(() => import('@/tabviews/treepage'))
-const VerupTable = asyncComponent(() => import('@/tabviews/verupmanage'))
-const ScriptTable = asyncComponent(() => import('@/tabviews/scriptmanage'))
-const TabManage = asyncComponent(() => import('@/tabviews/tabmanage'))
 const Iframe = asyncComponent(() => import('@/tabviews/iframe'))
 const RoleManage = asyncComponent(() => import('@/tabviews/rolemanage'))
-const FormTab = asyncComponent(() => import('@/tabviews/formtab'))
 
-let service = ''
-
-if (process.env.NODE_ENV === 'production') {
-  service = document.location.origin + '/' + window.GLOB.service + 'zh-CN/'
-} else {
-  service = window.GLOB.location + '/' + window.GLOB.service + 'zh-CN/'
-}
+moment.locale('zh-cn')
 
 class TabViews extends Component {
-  static propTpyes = {
-    collapse: PropTypes.bool
-  }
-
   state = {
     activeId: '',
-    tabviews: null, // 鏍囩闆�
-    iFrameHeight: 0,
-    dict: sessionStorage.getItem('lang') !== 'en-US' ? mzhCN : menUS,
+    tabviews: [],
+    visible: false
+  }
+
+  reloading = false
+
+  UNSAFE_componentWillMount () {
+    if (!window.GLOB.mkHS) {
+      this.setState({
+        activeId: 'home_page_id',
+        tabviews: [{
+          MenuID: 'home_page_id',
+          MenuName: '棣栭〉',
+          type: 'Home'
+        }]
+      })
+    }
+  }
+
+  componentDidMount () {
+    MKEmitter.addListener('modifyTabs', this.modifyTabs)
+    MKEmitter.addListener('closeTabView', this.closeTabView)
+
+    if (window.GLOB.forcedUpdate) {
+      MKEmitter.addListener('reloadTabs', this.reloadTabs)
+    }
+  }
+
+  /**
+   * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊
+   */
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+    MKEmitter.removeListener('modifyTabs', this.modifyTabs)
+    MKEmitter.removeListener('reloadTabs', this.reloadTabs)
+    MKEmitter.removeListener('closeTabView', this.closeTabView)
   }
 
   // 鍏抽棴tab椤碉紝閲嶆柊閫夋嫨鏄剧ず椤�
@@ -88,7 +104,7 @@
     e.stopPropagation()
     window.GLOB.CacheMap = new Map()
 
-    if (options.sysType === 'local' && window.GLOB.systemType !== 'production') {
+    if (window.GLOB.sysType === 'local' && window.GLOB.systemType !== 'production') {
       let roledefer = new Promise(resolve => {
         Api.getSystemConfig({
           func: 's_Get_TrdMenu_Role',
@@ -112,7 +128,7 @@
               })
             }
   
-            this.props.initActionPermission(_permAction)
+            window.GLOB.mkActions = _permAction
           }
 
           resolve()
@@ -121,7 +137,7 @@
   
       // 鑾峰彇涓昏彍鍗曞弬鏁�
       let menudefer = new Promise(resolve => {
-        Api.getAppVersion().then(() => {
+        Api.getAppVersion(menu.MenuID).then(() => {
           resolve()
         }, () => {
           resolve()
@@ -136,10 +152,74 @@
     }
   }
 
-  modifyTabs = (tab, type) => {
-    const { tabviews } = this.state
+  reloadTabs = () => {
+    if (this.reloading) return
 
-    if (type === 'plus') {
+    this.reloading = true
+    let time = new Date().getTime()
+
+    this.setState({visible: true})
+
+    Api.getAppVersion(true).then((list) => {
+      let _time = new Date().getTime()
+      let delay = _time - time
+      delay = delay < 3000 ? 3000 - delay : 0
+
+      setTimeout(() => {
+        this.setState({visible: false})
+        this.reloading = false
+  
+        Modal.success({
+          title: '鏇存柊鎴愬姛銆�',
+        })
+  
+        if (list && list.length) {
+          let _tabIds = this.state.tabviews.map(item => item.MenuID)
+          list.forEach((m, i) => {
+            if (_tabIds.includes(m)) {
+              setTimeout(() => {
+                MKEmitter.emit('reloadMenuView', m)
+              }, i * 20)
+            }
+          })
+        }
+      }, delay)
+    }, (message) => {
+      let _time = new Date().getTime()
+      let delay = _time - time
+      delay = delay < 3000 ? 3000 - delay : 0
+
+      setTimeout(() => {
+        this.setState({visible: false})
+        this.reloading = false
+        Modal.error({
+          title: message || '绯荤粺閰嶇疆鏇存柊澶辫触锛�',
+        })
+      }, delay)
+    })
+  }
+
+  modifyTabs = (tab, fixed) => {
+    const { tabviews, activeId } = this.state
+
+    if (fixed) {
+      let _tabs = tabviews.filter(item => item.MenuID !== tab.MenuID)
+      let index = _tabs.findIndex(item => item.MenuID === activeId)
+
+      this.setState({
+        tabviews: _tabs
+      }, () => {
+        if (index > -1) {
+          _tabs.splice(index + 1, 0, tab)
+        } else {
+          _tabs.push(tab)
+        }
+        this.setState({
+          tabviews: _tabs,
+          activeId: tab.MenuID
+        })
+      })
+    } else {
       if (tabviews.findIndex(item => item.MenuID === tab.MenuID) > -1) {
         let _tabs = tabviews.filter(item => item.MenuID !== tab.MenuID)
         this.setState({
@@ -156,11 +236,6 @@
           activeId: tab.MenuID
         })
       }
-    } else if (type === 'replace') {
-      this.setState({
-        tabviews: tab ? [tab] : [],
-        activeId: tab ? tab.MenuID : ''
-      })
     }
 
     let node = document.getElementById('root').parentNode.parentNode
@@ -180,96 +255,59 @@
     })
   }
 
+  changeTemp = (MenuID, Template) => {
+    let tabs = fromJS(this.state.tabviews).toJS()
+
+    this.setState({
+      tabviews: tabs.map(item => {
+        if (item.MenuID === MenuID) {
+          item.type = Template
+        }
+        return item
+      })
+    })
+  }
+
   selectcomponent = (view) => {
     // 鏍规嵁tab椤典腑鑿滃崟淇℃伅锛岄�夋嫨鎵�闇�鐨勭粍浠�
     if (view.type === 'Home') {
-      return (<Home MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
-    } else if (view.type === 'CommonTable' || view.type === 'ManageTable') {
-      return (<CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
+      return (<Home MenuID={view.MenuID} MenuName={view.MenuName}/>)
+    } else if (view.type === 'BaseTable') {
+      return (<BaseTable MenuID={view.MenuID} MenuName={view.MenuName} param={view.param} changeTemp={this.changeTemp}/>)
     } else if (view.type === 'CustomPage') {
-      return (<CustomPage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
+      return (<CustomPage MenuID={view.MenuID} MenuName={view.MenuName} param={view.param} changeTemp={this.changeTemp}/>)
+    } else if (view.type === 'CommonTable') {
+      return (<CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} param={view.param} changeTemp={this.changeTemp}/>)
     } else if (view.type === 'TreePage') {
-      return (<TreePage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
-    } else if (view.type === 'CalendarPage') {
-      return (<CalendarPage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
-    } else if (view.type === 'VerupTable') {
-      return (<VerupTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
-    } else if (view.type === 'ScriptTable') {
-      return (<ScriptTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
-    } else if (view.type === 'TabManage') {
-      return (<TabManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
+      return (<TreePage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} param={view.param}/>)
     } else if (view.type === 'RolePermission') {
-      return (<RoleManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
-    } else if (view.type === 'appRolePermission') {
-      return (<RoleManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
-    } else if (view.type === 'FormTab') {
-      return (<FormTab MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
+      return (<RoleManage MenuID={view.MenuID}/>)
     } else if (view.type === 'iframe') {
-      return (<Iframe key={view.MenuID} MenuID={view.MenuID} MenuNo={view.MenuNo} title={view.MenuName} MenuName={view.MenuName} url={service + view.LinkUrl}/>)
+      return (<Iframe MenuID={view.MenuID} title={view.MenuName} url={view.src}/>)
     } else {
-      return (<NotFount key={view.MenuID} />)
+      return (<NotFount />)
     }
-  }
-
-  UNSAFE_componentWillMount () {
-    if (!sessionStorage.getItem('lang') || sessionStorage.getItem('lang') === 'zh-CN') {
-      moment.locale('zh-cn')
-    } else {
-      moment.locale('en')
-    }
-
-    if (sessionStorage.getItem('isEditState') !== 'true') {
-      this.setState({
-        activeId: 'home_page_id',
-        tabviews: [{
-          MenuID: 'home_page_id',
-          MenuName: '棣栭〉',
-          type: 'Home'
-        }]
-      })
-    } else {
-      this.setState({
-        activeId: '',
-        tabviews: []
-      })
-    }
-  }
-
-  componentDidMount () {
-    MKEmitter.addListener('modifyTabs', this.modifyTabs)
-    MKEmitter.addListener('closeTabView', this.closeTabView)
-  }
-
-  /**
-   * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊
-   */
-  componentWillUnmount () {
-    this.setState = () => {
-      return
-    }
-    MKEmitter.removeListener('modifyTabs', this.modifyTabs)
-    MKEmitter.removeListener('closeTabView', this.closeTabView)
   }
 
   render () {
-    const { tabviews, activeId } = this.state
+    const { tabviews, activeId, visible } = this.state
 
     return (
-      <section id="mk-tabview-wrap" className={'mk-tabview-wrap' + (this.props.collapse ? ' collapsed' : '')}>
+      <section id="mk-tabgroup-wrap" className="mk-tabview-wrap">
         <div className="content-header">
-          {tabviews && tabviews.length > 0 &&
+          {tabviews.length > 0 &&
             <Tabs activeKey={activeId}>
-              {tabviews.map((view, index) => {
+              {tabviews.map(view => {
                 return (
                   <Tabs.TabPane
                     tab={
                       <span className="tab-control">
-                        <Icon type="redo" onClick={(e) => {this.refreshTabview(e, view)}}/>
+                        <RedoOutlined onClick={(e) => {this.refreshTabview(e, view)}}/>
                         <span className="tab-name" onClick={(e) => {this.changeTab(e, view)}}>
                           {view.MenuName}
                         </span>
                         {view.type !== 'Home' ?
-                          <Icon type="close" onClick={(e) => {e.stopPropagation();this.closeTabView(view.MenuID)}}/> : null
+                          <CloseOutlined onClick={(e) => {e.stopPropagation();this.closeTabView(view.MenuID)}}/> : null
                         }
                       </span>
                     }
@@ -283,28 +321,30 @@
                         </div>
                       </div>
                     </BackTop>
-                    {/* {options.sysType === 'local' && window.GLOB.systemType !== 'production' ? <div className="mk-water-mark">娴嬭瘯绯荤粺</div> : null} */}
                   </Tabs.TabPane>
                 )
               })}
             </Tabs>
           }
         </div>
+        <Modal
+          visible={visible}
+          width={400}
+          closable={false}
+          centered={true}
+          footer={null}
+          destroyOnClose
+        >
+          <div className="mk-menus-update">
+            <div className="tip">
+              绯荤粺鏇存柊涓紝璇风◢鍚�
+            </div>
+            <LoadingOutlined />
+          </div>
+        </Modal>
       </section>
     )
   }
 }
 
-const mapStateToProps = (state) => {
-  return {
-    collapse: state.collapse,
-  }
-}
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    initActionPermission: (permAction) => dispatch(initActionPermission(permAction))
-  }
-}
-
-export default connect(mapStateToProps, mapDispatchToProps)(TabViews)
\ No newline at end of file
+export default TabViews
\ No newline at end of file

--
Gitblit v1.8.0