From 063b983daaf51a7f1e8677bde1e9c0e618866c91 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 21 二月 2020 10:30:19 +0800
Subject: [PATCH] 2020-02-21

---
 src/components/tabview/index.jsx |  230 ++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 171 insertions(+), 59 deletions(-)

diff --git a/src/components/tabview/index.jsx b/src/components/tabview/index.jsx
index 527a64c..ed5a8b2 100644
--- a/src/components/tabview/index.jsx
+++ b/src/components/tabview/index.jsx
@@ -2,55 +2,94 @@
 import PropTypes from 'prop-types'
 import {connect} from 'react-redux'
 import { is, fromJS } from 'immutable'
-import {Tabs, Icon} from 'antd'
+import {Tabs, Icon, Button, ConfigProvider, message, BackTop} from 'antd'
 import {modifyTabview, toggleIsiframe} from '@/store/action'
-import asyncComponent from '@/utils/asyncComponent'
+// import asyncComponent from '@/utils/asyncComponent'
+import asyncComponent from '@/utils/asyncLoadComponent'
 import NotFount from '@/components/404'
+import enUS from 'antd/es/locale/en_US'
+import zhCN from 'antd/es/locale/zh_CN'
+import mzhCN from '@/locales/zh-CN/main.js'
+import menUS from '@/locales/en-US/main.js'
+import moment from 'moment'
+import 'moment/locale/zh-cn'
 import './index.scss'
+
+
 let Comps = {}
+let service = window.GLOB.service ? (/\/$/.test(window.GLOB.service) ? window.GLOB.service : window.GLOB.service + '/') : ''
+
+if (process.env.NODE_ENV === 'production') {
+  service = document.location.origin + '/' + service + 'zh-CN/'
+} else {
+  service = 'http://qingqiumarket.cn/' + service + 'zh-CN/'
+}
 
 class Header extends Component {
   static propTpyes = {
+    collapse: PropTypes.bool,
     tabviews: PropTypes.array // 鏍囩椤垫暟缁�
   }
 
   state = {
-    selectedTabId: '', // 褰撳墠閫変腑tab椤甸潰
-    iFrameHeight: 0
+    tabviews: null, // 鏍囩闆�
+    iFrameHeight: 0,
+    dict: (!sessionStorage.getItem('lang') || sessionStorage.getItem('lang') === 'zh-CN') ? mzhCN : menUS,
+    locale: (!sessionStorage.getItem('lang') || sessionStorage.getItem('lang') === 'zh-CN') ? zhCN : enUS
   }
 
-  handleTabview (menu) {
+  handleTabview (e, menu) {
+    e.stopPropagation()
     // 鍏抽棴tab椤碉紝閲嶆柊閫夋嫨鏄剧ず椤�
-    let tabs = JSON.parse(JSON.stringify(this.props.tabviews))
+    let tabs = JSON.parse(JSON.stringify(this.state.tabviews))
     tabs = tabs.filter(tab => {
-      if (tab.MenuID === this.state.selectedTabId) {
-        tab.selected = true
-      } else {
-        tab.selected = false
-      }
       return tab.MenuID !== menu.MenuID
     })
-    if (menu.MenuID === this.state.selectedTabId) {
+    
+    if (menu.selected) {
       tabs[0] && (tabs[0].selected = true)
     }
+
     this.props.modifyTabview(tabs)
   }
 
-  changeTab (menu) {
+  changeTab (e, menu) {
+    e.stopPropagation()
     // 绐楀彛鍒囨崲
-    this.setState({
-      selectedTabId: menu.MenuID
+    let tabs = JSON.parse(JSON.stringify(this.state.tabviews))
+    tabs = tabs.map(tab => {
+      tab.selected = false
+
+      if (tab.MenuID === menu.MenuID) {
+        tab.selected = true
+      }
+
+      return tab
     })
 
-    this.resetWindow(menu)
+    this.setState({
+      tabviews: tabs
+    })
+
+    this.props.modifyTabview(tabs)
   }
 
   selectcomponent (view) {
     // 鏍规嵁tab椤典腑鑿滃崟淇℃伅锛岄�夋嫨鎵�闇�鐨勭粍浠�
-    if (view.Remark === 'CommonTable') {
-      return (<Comps.CommonTable MenuNo={view.MenuNo} key={view.MenuID}/>)
-    } else if (view.LinkUrl.split('?')[0] === 'Main/Index') {
-      return (<Comps.Iframe key={view.MenuID} title={view.MenuName} url={'http://qingqiumarket.cn/MKWMS/zh-CN/' + view.LinkUrl}/>)
+    if (view.type === 'Home') {
+      return (<Comps.Home MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
+    } else if (view.type === 'CommonTable') {
+      return (<Comps.CommonTable MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
+    } else if (view.type === 'DataManage') {
+      return (<Comps.DataManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
+    } else if (view.type === 'RolePermission') {
+      return (<Comps.RoleManage MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID}/>)
+    } else if (view.type === 'TabForm') {
+      return (<Comps.TabForm MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
+    } else if (view.type === 'FormTab') {
+      return (<Comps.FormTab MenuNo={view.MenuNo} MenuID={view.MenuID} MenuName={view.MenuName} key={view.MenuID} param={view.param}/>)
+    } else if (view.type === 'iframe') {
+      return (<Comps.Iframe key={view.MenuID} title={view.MenuName} MenuName={view.MenuName} url={service + view.LinkUrl}/>)
     } else {
       return (<NotFount key={view.MenuID} />)
     }
@@ -60,9 +99,7 @@
     // 绐楀彛鍦╥frame涓庢櫘閫氶〉闈㈠垏鎹㈡椂锛屼慨鏀瑰乏渚ц彍鍗曟爮鏍峰紡
     if (!view) return
     let _isiframe = this.props.isiframe
-    if (view && view.Remark === 'CommonTable') {
-      _isiframe = false
-    } else if (view && view.LinkUrl.split('?')[0] === 'Main/Index') {
+    if (view && view.type === 'iframe') {
       _isiframe = true
     } else {
       _isiframe = false
@@ -73,60 +110,134 @@
     }
   }
 
+  copyMenuNo = (e) => {
+    e.stopPropagation()
+    let oInput = document.createElement('input')
+    oInput.value = e.target.dataset.menuno || ''
+    document.body.appendChild(oInput)
+    oInput.select()
+    document.execCommand('Copy')
+    oInput.className = 'oInput'
+    oInput.style.display = 'none'
+    message.success(this.state.dict['main.copy.success'])
+  }
+
+  UNSAFE_componentWillMount () {
+    if (!sessionStorage.getItem('lang') || sessionStorage.getItem('lang') === 'zh-CN') {
+      moment.locale('zh-cn')
+    } else {
+      moment.locale('en')
+    }
+    this.setState({
+      tabviews: this.props.tabviews
+    })
+  }
+
+  componentDidMount () {
+    let home = {
+      MenuID: '1576117946681plembmkk9akkv8sn0vtdfdsfaf',
+      MenuName: '棣栭〉',
+      MenuNo: 'MESOrderDetailMwe',
+      PageParam: {},
+      id: 1,
+      selected: true,
+      src: '',
+      text: '棣栭〉',
+      type: 'Home'
+    }
+    this.props.modifyTabview([home])
+  }
+
   UNSAFE_componentWillReceiveProps (nextProps) {
-    if (nextProps.tabviews && !is(fromJS(this.props.tabviews), fromJS(nextProps.tabviews))) {
+    if (nextProps.tabviews && !is(fromJS(this.state.tabviews), fromJS(nextProps.tabviews))) {
       // tab绐楀彛椤靛鍔犳垨鍒犻櫎
-      if (nextProps.tabviews.length > this.props.tabviews.length) {
+      if (nextProps.tabviews.length > this.state.tabviews.length) {
         // 鏌ョ湅鏂皌ab椤甸渶瑕佺粍浠舵槸鍚﹀姞杞�
-        let newtab = nextProps.tabviews[nextProps.tabviews.length - 1]
-        if (!Comps.CommonTable && newtab.Remark === 'CommonTable') {
+        let MenuIDs = this.state.tabviews.map(tab => {return tab.MenuID})
+        let newtab = nextProps.tabviews.filter(tab => !MenuIDs.includes(tab.MenuID))[0]
+        if (!Comps.Home && newtab.type === 'Home') {
+          Comps.Home = asyncComponent(() => import('@/tabviews/home'))
+        } else if (!Comps.CommonTable && newtab.type === 'CommonTable') {
           Comps.CommonTable = asyncComponent(() => import('@/tabviews/commontable'))
-        } else if (!Comps.Iframe && newtab.LinkUrl.split('?')[0] === 'Main/Index') {
+        } else if (!Comps.Iframe && newtab.type === 'iframe') {
           Comps.Iframe = asyncComponent(() => import('@/tabviews/iframe'))
+        } else if (!Comps.DataManage && newtab.type === 'DataManage') {
+          Comps.DataManage = asyncComponent(() => import('@/tabviews/datamanage'))
+        } else if (!Comps.RoleManage && newtab.type === 'RolePermission') {
+          Comps.RoleManage = asyncComponent(() => import('@/tabviews/rolemanage'))
+        } else if (!Comps.TabForm && newtab.type === 'TabForm') {
+          Comps.TabForm = asyncComponent(() => import('@/tabviews/tabform'))
+        } else if (!Comps.TabForm && newtab.type === 'FormTab') {
+          Comps.FormTab = asyncComponent(() => import('@/tabviews/formtab'))
         }
       }
 
-      // 璁剧疆閫変腑绐楀彛
-      let view = nextProps.tabviews.filter(tab => tab.selected)[0]
+      // 淇濆瓨淇敼鏍囩闆�
       this.setState({
-        selectedTabId: view ? view.MenuID : ''
+        tabviews: nextProps.tabviews
       })
 
-      this.resetWindow(view)
+      let node = document.getElementById('root').parentNode.parentNode
+      if (node) {
+        node.scrollTop = 0
+      }
     }
   }
 
-  shouldComponentUpdate(nextProps, nextState) {
-    return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
-  }
+  // shouldComponentUpdate(nextProps, nextState) {
+  //   return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state), fromJS(nextState))
+  // }
 
   render () {
+    const { tabviews } = this.state
+    let view = tabviews.filter(tab => tab.selected)[0]
+    this.resetWindow(view)
+    let selectedTabId = view ? view.MenuID : ''
+
     return (
-      <section className="flex-container content-box">
-        <div className="content-header">
-          {this.props.tabviews && this.props.tabviews.length > 0 &&
-            <Tabs activeKey={this.state.selectedTabId}>
-              {this.props.tabviews.map(view => {
-                return (
-                  <Tabs.TabPane
-                    className="test"
-                    tab={
-                      <span>
-                        <span className="tab-name" onClick={() => {this.changeTab(view)}}>
-                          {view.MenuName}
+      <section className={'flex-container content-box' + (this.props.collapse ? ' collapsed' : '')}>
+        <ConfigProvider locale={this.state.locale}>
+          <div className="content-header">
+            {tabviews && tabviews.length > 0 &&
+              <Tabs activeKey={selectedTabId}>
+                {tabviews.map(view => {
+                  return (
+                    <Tabs.TabPane
+                      className="test"
+                      tab={
+                        <span className="tab-control">
+                          <span className="tab-name" onClick={(e) => {this.changeTab(e, view)}}>
+                            {view.MenuName}
+                          </span>
+                          {view.type !== 'Home' ? <Icon type="close" onClick={(e) => {this.handleTabview(e, view)}}/> : null}
                         </span>
-                        <Icon type="close" onClick={() => {this.handleTabview(view)}}/>
-                      </span>
-                    }
-                    key={view.MenuID}
-                  >
-                    {this.selectcomponent(view)}
-                  </Tabs.TabPane>
-                )
-              })}
-            </Tabs>
-          }
-        </div>
+                      }
+                      key={view.MenuID}
+                    >
+                      {this.selectcomponent(view)}
+                      {view.type !== 'CommonTable' ?
+                        <Button
+                          icon="copy"
+                          shape="circle"
+                          className={'main-copy ' + (view.type === 'iframe' ? 'ifr-copy' : '')}
+                          data-menuno={view.MenuNo}
+                          onClick={this.copyMenuNo}
+                        /> : null
+                      }
+                      <BackTop>
+                        <div className="ant-back-top">
+                          <div className="ant-back-top-content">
+                            <div className="ant-back-top-icon"></div>
+                          </div>
+                        </div>
+                      </BackTop>
+                    </Tabs.TabPane>
+                  )
+                })}
+              </Tabs>
+            }
+          </div>
+        </ConfigProvider>
       </section>
     )
   }
@@ -135,6 +246,7 @@
 const mapStateToProps = (state) => {
   return {
     tabviews: state.tabviews,
+    collapse: state.collapse,
     isiframe: state.isiframe
   }
 }

--
Gitblit v1.8.0