From 31ec63f0419895876cbaba99637a884a32d33d0d Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 01 九月 2021 10:31:45 +0800
Subject: [PATCH] 2021-09-01

---
 src/components/header/index.jsx |  175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 162 insertions(+), 13 deletions(-)

diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index cd34bd4..1485833 100644
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -49,7 +49,8 @@
     oriVersion: '',
     newVersion: '',
     debug: sessionStorage.getItem('debug') === 'true',
-    navBar: ['linkage_navigation', 'linkage'].includes(window.GLOB.navBar) ? 'topmenu' : ''
+    navBar: ['linkage_navigation', 'linkage', 'menu_board', 'menu_board_navigation'].includes(window.GLOB.navBar) ? 'topmenu' : '',
+    menuType: window.GLOB.navBar
   }
 
   handleCollapse = () => {
@@ -143,7 +144,7 @@
         edition_type: 'A',
         pro_sys: window.GLOB.systemType === 'production' ? 'Y' : ''
       }).then(result => {
-        let _permAction = {} // 鎸夐挳鏉冮檺
+        let _permAction = {loaded: true} // 鎸夐挳鏉冮檺
 
         if (result && result.status) {
           if (result.UserRoles_Menu) {
@@ -214,7 +215,7 @@
 
         this.props.modifyMenuTree(menulist)
         this.props.modifyMainMenu(mainMenu)
-        this.props.initMenuPermission(thdMenuList)
+        this.props.initMenuPermission([...thdMenuList, {MenuID: 'home_page_id', EasyCode: '', MenuName: 'home', type: 'CustomPage'}])
 
         resolve(_menu)
       })
@@ -308,13 +309,14 @@
                 ParentNames: [fst.MenuName, snd.MenuName],
                 MenuNo: trd.MenuNo,
                 EasyCode: trd.EasyCode,
-                type: 'CommonTable',            // 榛樿鍊间负甯哥敤琛�
-                OpenType: 'newtab'              // 鎵撳紑鏂瑰紡
+                type: 'CommonTable',
+                OpenType: 'newtab',
+                hidden: 'false'
               }
   
               if (trd.LinkUrl && iframes.includes(trd.LinkUrl.split('?')[0])) {
                 trdItem.type = 'iframe'
-                trdItem.LinkUrl = trd.LinkUrl
+                trdItem.LinkUrl = trd.LinkUrl.replace('&amp;', '&')
               } else {
                 try {
                   trdItem.PageParam = trd.PageParam ? JSON.parse(trd.PageParam) : {OpenType: 'newtab'}
@@ -324,6 +326,7 @@
 
                 trdItem.type = trdItem.PageParam.Template || trdItem.type
                 trdItem.OpenType = trdItem.PageParam.OpenType || trdItem.OpenType
+                trdItem.hidden = trdItem.PageParam.hidden || trdItem.hidden
 
                 if (trdItem.type === 'NewPage') {
                   trdItem.src = trdItem.PageParam.url || ''
@@ -338,7 +341,7 @@
                       _param.Full_Name = sessionStorage.getItem('Full_Name')
 
                       trdItem.src = _url + window.btoa(window.encodeURIComponent(JSON.stringify(_param)))
-                    } catch {
+                    } catch (e) {
                       console.warn('鑿滃崟鍙傛暟瑙f瀽閿欒锛�')
                     }
                   }
@@ -357,6 +360,8 @@
             })
           }
 
+          sndItem.children = sndItem.children.filter(item => item.hidden !== 'true')
+
           return sndItem
         })
       }
@@ -371,7 +376,7 @@
     // 淇敼缂栬緫鐘舵��
     let UserID = sessionStorage.getItem('CloudUserID')
     let LoginUID = sessionStorage.getItem('CloudLoginUID')
-
+    
     if (!UserID || !LoginUID) {
       this.setState({
         loginVisible: true
@@ -408,12 +413,18 @@
           sessionStorage.setItem('dataM', res.dataM ? 'true' : '')
           sessionStorage.setItem('isEditState', 'true')
 
+          this.setSystemFuncs()
+
           this.props.modifyMenuTree([])
           this.props.modifyMainMenu(null)
           this.props.modifyTabview([])
 
           this.props.history.replace('/design')
         } else {
+          if (res.message.indexOf('瀵嗙爜閿欒') > -1) {
+            const input = document.getElementById('password')
+            input && input.select()
+          }
           this.setState({
             loginLoading: false
           })
@@ -424,6 +435,107 @@
           })
         }
       })
+    })
+  }
+
+  setSystemFuncs = () => {
+    if (!window.GLOB.WebSql && !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
+          })
+          return
+        } 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')
+
+    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')
+    }
+
+    if (window.GLOB.WebSql) {
+      window.GLOB.WebSql.transaction(tx => {
+        tx.executeSql('DELETE FROM FUNCS')
+
+        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')
+
+      objectStore.clear()
+
+      funcs.forEach(item => {
+        if (!item.key_sql) return
+        item.id = item.func_code
+        objectStore.add(item)
+      })
+
+      let funcStore = window.GLOB.IndexDB.transaction(['version'], 'readwrite').objectStore('version')
+      funcStore.put({id: 'funcs', version: '1.0', createDate: timestamp})
+    }
+  }
+
+  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'})
+            }
+          }
+        }
+      }
     })
   }
 
@@ -561,7 +673,7 @@
       } else if (menu.OpenType === 'blank') {
         menu.selected = true
         this.props.modifyTabview([menu])
-      } else if (this.state.navBar === 'topmenu') {
+      } else if (this.state.navBar === 'topmenu' && this.state.menuType !== 'menu_board_navigation') {
         menu.selected = true
         this.props.modifyTabview([menu])
       } else {
@@ -571,7 +683,7 @@
           return tab.MenuID !== menu.MenuID
         })
   
-        if (this.props.tabviews.length !== tabs.length) {
+        if (this.props.tabviews.length > tabs.length) {
           this.props.modifyTabview(fromJS(tabs).toJS())
         }
   
@@ -590,7 +702,7 @@
 
   render () {
     const { mainMenu, collapse } = this.props
-    const { thdMenuList, searchkey, oriVersion, newVersion, debug, menulist, navBar } = this.state
+    const { thdMenuList, searchkey, oriVersion, newVersion, debug, menulist, navBar, menuType } = this.state
 
     const menu = (
       <Menu className="header-dropdown">
@@ -630,8 +742,7 @@
             })}
           </ul> : null
         }
-        {/* 姝e父鑿滃崟 */}
-        {navBar === 'topmenu' && menulist ?
+        {navBar === 'topmenu' && menuType !== 'menu_board' && menuType !== 'menu_board_navigation' && menulist ?
           <ul className="header-menu vertical-menu">{
             menulist.map(item => {
               if (item.children && item.children.length > 0) {
@@ -674,6 +785,44 @@
             })}
           </ul> : null
         }
+        {navBar === 'topmenu' && (menuType === 'menu_board' || menuType === 'menu_board_navigation') && menulist ?
+          <ul className="header-menu vertical-menu">{
+            menulist.map(item => {
+              if (item.children && item.children.length > 0) {
+                return (
+                  <Dropdown key={item.MenuID} placement="bottomCenter" overlayClassName="vertical-dropdown-menu" overlay={
+                    <div className="menu-board">
+                      {item.children.map(cell => {
+                        return (
+                          <div className="menu-wrap" key={cell.MenuID}>
+                            <div className="title" onClick={e => e.stopPropagation()}>{cell.MenuName}</div>
+                            <div className="menu-detail">
+                              {cell.children && cell.children.map(m => (
+                                <div key={m.MenuID} title={m.MenuName} onClick={() => {this.changeVerMenu(m)}}>
+                                  {m.MenuName}
+                                </div>
+                              ))}
+                            </div>
+                          </div>
+                        )
+                      })}
+                    </div>
+                  }>
+                    <li>
+                      <span>{item.MenuName}</span>
+                    </li>
+                  </Dropdown>
+                )
+              } else {
+                return (
+                  <li key={item.MenuID} onClick={() => {this.changeVerMenu(item, 'first')}}>
+                    <span>{item.MenuName}</span>
+                  </li>
+                )
+              }
+            })}
+          </ul> : null
+        }
         {/* 澶村儚銆佺敤鎴峰悕 */}
         <Dropdown className="header-setting" overlay={menu}>
           <div>

--
Gitblit v1.8.0