From b6c698c8833836971184a0a9c2645a15f8174d37 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 08 五月 2025 16:31:18 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/views/design/header/index.jsx |  240 +++++++++++++++++++++++------------------------------------
 1 files changed, 94 insertions(+), 146 deletions(-)

diff --git a/src/views/design/header/index.jsx b/src/views/design/header/index.jsx
index 674453a..dcb9ef0 100644
--- a/src/views/design/header/index.jsx
+++ b/src/views/design/header/index.jsx
@@ -1,22 +1,14 @@
 import React, {Component} from 'react'
 import { withRouter } from 'react-router-dom'
-import {connect} from 'react-redux'
 import { Dropdown, Menu, Modal, notification, Switch, Button, Popover } from 'antd'
 import { MenuFoldOutlined, SettingOutlined, AppstoreOutlined, DownOutlined, HomeOutlined, ApiOutlined, PlusOutlined, EditOutlined, MenuOutlined, DatabaseOutlined } from '@ant-design/icons'
 import moment from 'moment'
 
-import asyncComponent from '@/utils/asyncComponent'
-import {
-  modifyMenuTree,
-  modifyMainMenu,
-  resetEditLevel,
-  logout
-} from '@/store/action'
 import Api from '@/api'
-import options from '@/store/options.js'
 import Utils from '@/utils/utils.js'
 import avatar from '@/assets/img/avatar.jpg'
 import MainLogo from '@/assets/img/main-logo.png'
+import asyncComponent from '@/utils/asyncComponent'
 import MKEmitter from '@/utils/events.js'
 import './index.scss'
 
@@ -24,6 +16,8 @@
 const VersionsUp = asyncComponent(() => import('./versions'))
 const ThawMenu = asyncComponent(() => import('@/components/thawmenu'))
 const MenuForm = asyncComponent(() => import('./editfirstmenu/menuform'))
+const TransMenu = asyncComponent(() => import('./transmenu'))
+
 const { confirm } = Modal
 
 class Header extends Component {
@@ -31,21 +25,21 @@
     menulist: null, // 涓�绾ц彍鍗�
     userName: sessionStorage.getItem('CloudUserName'),
     avatar: Utils.getrealurl(sessionStorage.getItem('CloudAvatar')),
-    memberLevel: Utils.getMemberLevel(),
+    logo: sessionStorage.getItem('CloudLogo') || MainLogo,
     visible: false,
     loading: false
   }
 
   logout = () => {
     // 閫�鍑虹櫥褰�
-    let _this = this
+    let that = this
     confirm({
       title: '鎮ㄧ‘瀹氳閫�鍑哄悧?',
       content: '',
       onOk() {
         sessionStorage.clear()
-        _this.props.logout()
-        _this.props.history.replace('/login')
+        that.props.history.replace('/login')
+        window.location.reload()
       },
       onCancel() {}
     })
@@ -64,12 +58,12 @@
     // 鑾峰彇涓昏彍鍗�
     let _param = {
       func: 's_get_pc_menus',
-      systemType: options.sysType,
+      systemType: window.GLOB.sysType,
       pro_sys: window.GLOB.systemType === 'production' ? 'Y' : '',
       debug: 'Y'
     }
 
-    let result = await Api.getSystemConfig(_param)
+    let result = await Api.getCloudConfig(_param)
 
     // 鐧诲綍瓒呮椂
     if (!result) return
@@ -151,6 +145,7 @@
                 EasyCode: trd.EasyCode,
                 type: 'CommonTable',            // 榛樿鍊间负甯哥敤琛�
                 OpenType: 'newtab',             // 鎵撳紑鏂瑰紡
+                up_action: window.GLOB.upStatus && trd.up_action === 'Y',
                 level: 'third'
               }
   
@@ -162,8 +157,11 @@
               } catch (e) {
                 trdItem.PageParam = {OpenType: 'newtab'}
               }
+              if (trdItem.PageParam.Template === 'RolePermission' || trdItem.PageParam.Template === 'NewPage') {
+                trdItem.PageParam.backend = 'level1'
+              }
 
-              if (trdItem.type === 'CustomPage' && this.state.memberLevel < 20) { // 浼氬憳绛夌骇澶т簬绛変簬20鏃讹紝鏈夌紪杈戞潈闄�
+              if (trdItem.type === 'CustomPage' && window.GLOB.memberLevel < 20) { // 浼氬憳绛夌骇澶т簬绛変簬20鏃讹紝鏈夌紪杈戞潈闄�
                 trdItem.forbidden = true
               }
 
@@ -189,6 +187,7 @@
   }
 
   changeEditState = () => {
+    sessionStorage.removeItem('isEditState')
     this.props.history.replace('/main')
     window.location.reload()
   }
@@ -214,7 +213,7 @@
       this.setState({
         loading: true
       })
-      Api.getSystemConfig(param).then(res => {
+      Api.getCloudConfig(param).then(res => {
         if (res.status) {
           this.setState({
             loading: false,
@@ -236,105 +235,69 @@
     }, () => {})
   }
 
-  setSystemFuncs = () => {
-    if (!window.GLOB.IndexDB) {
-      return
-    }
-    this.getfuncTime().then(res => {
-      Api.getSystemFuncs(res.createDate).then(result => {
-        if (!result.status) {
-          notification.error({
-            top: 92,
-            message: result.message,
-            duration: 10
-          })
-        } else if (result.func_detail && result.func_detail.length > 0) {
-          this.writeFuncs(result.func_detail)
-        }
-      })
-    })
-  }
+  // setSystemFuncs = () => {
+  //   if (!window.GLOB.IndexDB) {
+  //     return
+  //   }
+  //   this.getfuncTime().then(res => {
+  //     Api.getSystemFuncs(res.createDate).then(result => {
+  //       if (!result.status) {
+  //         notification.error({
+  //           top: 92,
+  //           message: result.message,
+  //           duration: 10
+  //         })
+  //       } else if (result.func_detail && result.func_detail.length > 0) {
+  //         this.writeFuncs(result.func_detail)
+  //       }
+  //     })
+  //   })
+  // }
 
-  writeFuncs = (funcs) => {
-    let timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
+  // writeFuncs = (funcs) => {
+  //   let shim = +sessionStorage.getItem('sys_time_shim')
+  //   let timestamp = moment().add(shim, 'seconds').format('YYYY-MM-DD HH:mm:ss')
 
-    let sys_datetime = sessionStorage.getItem('sys_datetime')
-    let app_datetime = sessionStorage.getItem('app_datetime')
-    if (sys_datetime && app_datetime) {
-      let seconds = Math.floor((new Date().getTime() - app_datetime) / 1000)
-      timestamp = moment(sys_datetime, 'YYYY-MM-DD HH:mm:ss').add(seconds, 'seconds').format('YYYY-MM-DD HH:mm:ss')
-    }
+  //   let objectStore = window.GLOB.IndexDB.transaction(['funcs'], 'readwrite').objectStore('funcs')
 
-    // if (window.GLOB.WebSql) {
-    //   window.GLOB.WebSql.transaction(tx => {
-    //     tx.executeSql('DELETE FROM FUNCS')
+  //   objectStore.clear()
 
-    //     funcs.forEach(item => {
-    //       if (!item.key_sql) return
-    //       tx.executeSql('INSERT INTO FUNCS (func_code, key_sql) VALUES (?, ?)', [item.func_code, item.key_sql])
-    //     })
-    //     tx.executeSql(`UPDATE VERSIONS SET createDate='${timestamp}' where CDefine1='funcs'`)
-    //   })
-    // } else {
-      let objectStore = window.GLOB.IndexDB.transaction(['funcs'], 'readwrite').objectStore('funcs')
+  //   funcs.forEach(item => {
+  //     if (!item.key_sql) return
+  //     item.id = item.func_code
+  //     objectStore.add(item)
+  //   })
 
-      objectStore.clear()
+  //   let funcStore = window.GLOB.IndexDB.transaction(['version'], 'readwrite').objectStore('version')
+  //   funcStore.put({id: 'funcs', version: '1.0', createDate: timestamp})
+  // }
 
-      funcs.forEach(item => {
-        if (!item.key_sql) return
-        item.id = item.func_code
-        objectStore.add(item)
-      })
+  // getfuncTime = () => {
+  //   return new Promise((resolve, reject) => {
+  //     let objectStore = window.GLOB.IndexDB.transaction(['version'], 'readwrite').objectStore('version')
+  //     let request = objectStore.get('funcs')
 
-      let funcStore = window.GLOB.IndexDB.transaction(['version'], 'readwrite').objectStore('version')
-      funcStore.put({id: 'funcs', version: '1.0', createDate: timestamp})
-    // }
-  }
+  //     request.onerror = (event) => {
+  //       console.warn(event)
+  //       reject()
+  //     }
 
-  getfuncTime = () => {
-    return new Promise((resolve, reject) => {
-      // if (window.GLOB.WebSql) {
-      //   window.GLOB.WebSql.transaction(tx => {
-      //     tx.executeSql("SELECT * FROM VERSIONS where CDefine1='funcs'", [], (tx, results) => {
-      //       let rows = results.rows
-      //       if (rows.length === 0) {
-      //         tx.executeSql('DELETE FROM FUNCS')
-      //         tx.executeSql('INSERT INTO VERSIONS (version, createDate, CDefine1) VALUES (?, ?, ?)', ['1.0', '1970-01-01 14:59:09.000', 'funcs'])
-      //         resolve({createDate: '1970-01-01 14:59:09.000'})
-      //       } else {
-      //         resolve(rows[0])
-      //       }
-      //     }, (tx, results) => {
-      //       reject()
-      //       console.warn(results)
-      //     })
-      //   })
-      // } else {
-        let objectStore = window.GLOB.IndexDB.transaction(['version'], 'readwrite').objectStore('version')
-        let request = objectStore.get('funcs')
-
-        request.onerror = (event) => {
-          console.warn(event)
-          reject()
-        }
-
-        request.onsuccess = () => {
-          if (request.result) {
-            resolve(request.result)
-          } else {
-            let add = objectStore.add({id: 'funcs', version: '1.0', createDate: '1970-01-01 14:59:09.000'})
-    
-            add.onerror = () => {
-              reject()
-            }
-            add.onsuccess = () => {
-              resolve({id: 'funcs', version: '1.0', createDate: '1970-01-01 14:59:09.000'})
-            }
-          }
-        }
-      // }
-    })
-  }
+  //     request.onsuccess = () => {
+  //       if (request.result) {
+  //         resolve(request.result)
+  //       } else {
+  //         let add = objectStore.add({id: 'funcs', version: '1.0', createDate: '1970-01-01 14:59:09.000'})
+  
+  //         add.onerror = () => {
+  //           reject()
+  //         }
+  //         add.onsuccess = () => {
+  //           resolve({id: 'funcs', version: '1.0', createDate: '1970-01-01 14:59:09.000'})
+  //         }
+  //       }
+  //     }
+  //   })
+  // }
 
   getSmStemp = () => {
     if (!sessionStorage.getItem('msgTemplate')) {
@@ -342,20 +305,21 @@
         inner join (select openid from sapp where id='${window.GLOB.appkey}') b 
         on a.openid=b.openid`
   
-      _sql = Utils.formatOptions(_sql)
+      _sql = Utils.formatOptions(_sql, 'x')
   
       let param = {
         func: 'sPC_Get_SelectedList',
         LText: _sql,
         obj_name: 'data',
-        arr_field: 'ID,TemplateCode,SignName'
+        arr_field: 'ID,TemplateCode,SignName',
+        exec_type: 'x'
       }
       
       param.timestamp = moment().format('YYYY-MM-DD HH:mm:ss')
-      param.secretkey = Utils.encrypt(param.LText, param.timestamp)
+      param.secretkey = Utils.encrypt('', param.timestamp)
       param.open_key = Utils.encryptOpenKey(param.secretkey, param.timestamp) // 浜戠鏁版嵁楠岃瘉
       
-      Api.getSystemConfig(param).then(res => {
+      Api.getCloudConfig(param).then(res => {
         let msgs = []
         if (!res.status) {
           notification.warning({
@@ -372,7 +336,6 @@
   }
   
   UNSAFE_componentWillMount () {
-    sessionStorage.setItem('isEditState', 'true')
     document.body.className = ''
     
     // 缁勪欢鍔犺浇鏃讹紝鑾峰彇鑿滃崟鏁版嵁
@@ -383,17 +346,13 @@
     window.addEventListener('storage', (e) => {
       if (e.key === 'menuUpdate') {
         this.reload()
-      } else if (e.key === 'wxTemplates') {
-        if (e.newValue) {
-          sessionStorage.setItem('wxTemplates', e.newValue)
-        }
       }
     })
     MKEmitter.addListener('mkUpdateMenuList', this.reload)
 
     if (window.GLOB.systemType !== 'production') {
       setTimeout(() => {
-        Api.getSystemConfig({func: 'sPC_Get_Roles_sModular'}).then(res => {
+        Api.getCloudConfig({func: 'sPC_Get_Roles_sModular'}).then(res => {
           if (res.status) {
             let _permFuncField = []
             let _sysRoles = []
@@ -424,7 +383,7 @@
       }, 100)
 
       setTimeout(() => {
-        this.setSystemFuncs()
+        // this.setSystemFuncs()
         this.getSmStemp()
       }, 500)
     }
@@ -441,22 +400,22 @@
   }
 
   gotoDoc = () => {
-    if (options.sysType === 'local' && window.GLOB.mainSystemApi) {
+    if (window.GLOB.sysType === 'local' && window.GLOB.mainSystemApi) {
       let ssodomain = window.GLOB.mainSystemApi.replace('/webapi/dostars', '')
       let url = `${ssodomain}/doc/index.html#?appkey=${window.GLOB.appkey}&LoginUID=${sessionStorage.getItem('LoginUID')}`
       window.open(url)
-    } else if (options.sysType === 'SSO' || options.sysType === 'cloud') {
+    } else if (window.GLOB.sysType === 'SSO' || window.GLOB.sysType === 'cloud') {
       window.open(`${window.location.href.replace(/\/index.html(.*)|\/#(.*)/ig, '')}/doc/index.html#?appkey=${window.GLOB.appkey}&LoginUID=${sessionStorage.getItem('LoginUID')}`)
     }
   }
 
   render () {
     const { mainMenu, editLevel } = this.props
-    const { menulist, memberLevel, visible, loading } = this.state
+    const { menulist, visible, loading, logo } = this.state
 
     return (
       <header className={'sys-header-container ant-menu-dark ' + (['level2', 'level3'].includes(editLevel) ? 'mask' : '')} id="main-header-container">
-        <div className="header-logo"><img src={MainLogo} alt=""/></div>
+        <div className="header-logo"><img src={logo} alt=""/></div>
         <div className="header-collapse">
           <MenuFoldOutlined/>
         </div>
@@ -494,7 +453,7 @@
               <div className="icon"><HomeOutlined /></div>
               <div className="title">棣栭〉</div>
               <div className="detail">鍩轰簬鑷畾涔夐〉闈㈢殑棣栭〉璁捐锛屽彲瀹炵幇鐏垫椿鐨勫厓绱犻厤缃強鏍峰紡璋冩暣锛屽睍鐜板綋鍓嶇郴缁熺殑椋庢牸銆�</div>
-              <Button type="primary" disabled={!(memberLevel >= 20)} title={memberLevel >= 20 ? '' : '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��'} onClick={() => {window.open('#/menudesign/JTdCJTIyTWVudVR5cGUlMjIlM0ElMjJob21lJTIyJTJDJTIyTWVudUlkJTIyJTNBJTIyaG9tZV9wYWdlX2lkJTIyJTJDJTIyTWVudU5hbWUlMjIlM0ElMjIlRTklQTYlOTYlRTklQTElQjUlMjIlN0Q=')}}>
+              <Button type="primary" disabled={window.GLOB.memberLevel < 20} title={window.GLOB.memberLevel < 20 ? '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��' : ''} onClick={() => {window.open('#/menudesign/JTdCJTIyTWVudVR5cGUlMjIlM0ElMjJob21lJTIyJTJDJTIyTWVudUlkJTIyJTNBJTIyaG9tZV9wYWdlX2lkJTIyJTJDJTIyTWVudU5hbWUlMjIlM0ElMjIlRTklQTYlOTYlRTklQTElQjUlMjIlN0Q=')}}>
                 缂栬緫
               </Button>
             </div> : null
@@ -503,7 +462,7 @@
             <div className="icon"><ApiOutlined /></div>
             <div className="title">鎺ュ彛璋冭瘯</div>
             <div className="detail">鍙嚜鍔ㄥ鐞嗙櫥褰曟帴鍙g殑鍙傛暟鍔犲瘑锛屼互鍙婁笟鍔℃帴鍙g殑绛惧悕璁$畻锛屾柟渚垮紑鍙戜汉鍛樼殑鎺ュ彛娴嬭瘯宸ヤ綔銆�</div>
-            <Button type="primary" disabled={!(memberLevel >= 20)} title={memberLevel >= 20 ? '' : '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��'} onClick={() => {window.open('#/interface')}}>
+            <Button type="primary" disabled={window.GLOB.memberLevel < 20} title={window.GLOB.memberLevel < 20 ? '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��' : ''} onClick={() => {window.open('#/interface')}}>
               缂栬緫
             </Button>
           </div>
@@ -512,10 +471,10 @@
             <div className="title">搴旂敤绠$悊</div>
             <div className="detail">鍙垱寤哄強绠$悊PC銆乸ad鍙婄Щ鍔ㄧ绛変笉鍚岃澶囩殑搴旂敤锛屽疄鐜版槑绉戜簯APP銆佸井淇″叕浼楀彿銆佸皬绋嬪簭绛夊骞冲彴鐨勫簲鐢ㄥ叡浜��</div>
             {window.GLOB.systemType !== 'production' ? 
-              <Button type="primary" disabled={!(memberLevel >= 20)} title={memberLevel >= 20 ? '' : '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��'} onClick={() => {window.open('#/appmanage')}}>
+              <Button type="primary" disabled={window.GLOB.memberLevel < 20} title={window.GLOB.memberLevel < 20 ? '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��' : ''} onClick={() => {window.open('#/appmanage')}}>
                 缂栬緫
               </Button> :
-              <Button type="primary" disabled={!(memberLevel >= 20)} title={memberLevel >= 20 ? '' : '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��'} onClick={() => {window.open('#/appcheck')}}>
+              <Button type="primary" disabled={window.GLOB.memberLevel < 20} title={window.GLOB.memberLevel < 20 ? '浼氬憳绛夌骇涓嶅锛屾棤寮�鍙戞潈闄愩��' : ''} onClick={() => {window.open('#/appcheck')}}>
                 鏌ョ湅
               </Button>
             }
@@ -536,6 +495,12 @@
               缂栬緫
             </Button>
           </div> : null}
+          {window.GLOB.systemType !== 'production' && sessionStorage.getItem('lang') !== 'zh-CN' ? <div className="entrance">
+            <div className="icon"><PlusOutlined /></div>
+            <div className="title">鑿滃崟杞崲</div>
+            <div className="detail">鍙�夋嫨姣嶈绯荤粺鐨勮彍鍗曪紝蹇�熻浆鎹㈠埌褰撳墠璇█銆傛墦鍗版ā鏉胯鍦℉S涓嬪鍒跺悗锛屽湪姝ゅ閫夋嫨鎸囧畾妯℃澘杩涜璇█杞崲銆�</div>
+            <TransMenu reload={this.reload} menulist={menulist}/>
+          </div> : null}
         </div>
         {/* 缂栬緫鑿滃崟 */}
         {editLevel === 'level1' ? <EditMenu menulist={this.state.menulist} reload={this.reload} exitEdit={this.exitEdit}/> : null}
@@ -547,7 +512,7 @@
               <Switch size="small" style={{marginLeft: '7px'}} disabled={!!editLevel} checked={true} onChange={this.changeEditState} />
             </Menu.Item>
             <Menu.Item key="doc" onClick={this.gotoDoc}>鏂囨。涓績</Menu.Item>
-            {options.sysType !== 'cloud' ? <Menu.Item style={{padding: 0}} key="verup">
+            {window.GLOB.sysType !== 'cloud' ? <Menu.Item style={{padding: 0}} key="verup">
               <VersionsUp />
             </Menu.Item> : null}
             <Menu.Item key="logout" onClick={this.logout}>閫�鍑�</Menu.Item>
@@ -579,21 +544,4 @@
   }
 }
 
-const mapStateToProps = (state) => {
-  return {
-    menuTree: state.menuTree,
-    mainMenu: state.mainMenu,
-    editLevel: state.editLevel
-  }
-}
-
-const mapDispatchToProps = (dispatch) => {
-  return {
-    modifyMenuTree: (menuTree) => dispatch(modifyMenuTree(menuTree)),
-    modifyMainMenu: (mainMenu) => dispatch(modifyMainMenu(mainMenu)),
-    resetEditLevel: (level) => dispatch(resetEditLevel(level)),
-    logout: () => dispatch(logout())
-  }
-}
-
-export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Header))
\ No newline at end of file
+export default withRouter(Header)
\ No newline at end of file

--
Gitblit v1.8.0