From c0c820559b46f3a5ede6fbd7f66e77d09981829f Mon Sep 17 00:00:00 2001
From: Mr Ke <kelq@hugeinfo.com.cn>
Date: Wed, 29 Apr 2020 11:56:31 +0800
Subject: [PATCH] 提升菜单栏体验,升级公共查询表单组件

---
 src/components/common/MenuView/index.jsx |   31 +++++++++++++++++++------------
 1 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/src/components/common/MenuView/index.jsx b/src/components/common/MenuView/index.jsx
index 12f1a65..19202f3 100644
--- a/src/components/common/MenuView/index.jsx
+++ b/src/components/common/MenuView/index.jsx
@@ -6,7 +6,7 @@
 
 /** 菜单渲染组件 */
 
-import React from 'react';
+import React, { useState } from 'react';
 import { Layout, Menu, Icon, Badge } from 'antd';
 import { RouteComponentProps } from 'react-router-dom';
 import './index.scss';
@@ -20,7 +20,7 @@
 }) {
     if (!menudata.length) return null;
 
-    const { path, name } = find(menudata, pathname);
+    const { path, name, parentKey } = find(menudata, pathname);
 
     if (name) {
         const index = name.indexOf(' - ');
@@ -33,22 +33,29 @@
         document.title = `恒巨信息`;
     }
 
-    const defaultOpenKeys = menudata.map(({ name }) => name);
+    const defaultOpenKeys = parentKey ? [parentKey] : [];//默认展开的菜单key
+    const [openKeys, setOpenKeys] = useState(defaultOpenKeys);//设置打开菜单的key
+
+    function onOpenChange(key) {
+        let allKeys = menudata.map((d) => d.key);
+        const latestOpenKey = key.find(key => openKeys.indexOf(key) === -1);
+        if (allKeys.indexOf(latestOpenKey) === -1) {
+            setOpenKeys(key)
+        } else {
+            setOpenKeys(latestOpenKey ? [latestOpenKey] : [])
+        }
+    };
 
     return (
-        // <Layout.Sider
-        //   // width={200}
-        //   theme="light"
-        //   style={{ backgroundColor: 'white' }}>
         <Menu
             key={defaultOpenKeys.join('-')}
             style={{ height: '100%', borderRight: 0 }}
-            defaultOpenKeys={defaultOpenKeys}
+            openKeys={openKeys}
             selectedKeys={path ? [path] : []}
+            onOpenChange={onOpenChange}
             mode="inline">
             {render(menudata, history)}
         </Menu>
-        // </Layout.Sider>
     );
 }
 
@@ -56,7 +63,7 @@
     return data.map(({ name, icon, path, count, children, type }, index) =>
         children && children.length ? (
             <SubMenu
-                key={name}
+                key={path}
                 title={
                     <span>
                         <Icon type={icon || 'setting'} />
@@ -84,7 +91,7 @@
 };
 
 const find = (data, full, pathname = { path: '', name: '' }) =>
-    data.reduce((pn, { path, name, children }) => {
+    data.reduce((pn, { path, name, parentKey, children }) => {
         if (children && children.length) {
             return find(children, full, pn);
         }
@@ -92,7 +99,7 @@
             path.length > pn.path.length &&
             full.replace(/\/\d+/g, '').startsWith(path.replace(/\/\d+/g, ''))
         ) {
-            return { path, name };
+            return { path, name, parentKey };
         }
         return pn;
     }, pathname);

--
Gitblit v1.8.0