-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Expand file tree
/
Copy pathHeaderCustom.tsx
More file actions
137 lines (131 loc) · 4.65 KB
/
Copy pathHeaderCustom.tsx
File metadata and controls
137 lines (131 loc) · 4.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/**
* Created by hao.cheng on 2017/4/13.
*/
import React, { useEffect, useState } from 'react';
import screenfull from 'screenfull';
import avater from '../style/imgs/b1.jpg';
import SiderCustom from './SiderCustom';
import { Menu, Layout, Badge, Popover } from 'antd';
import { gitOauthToken, gitOauthInfo } from '../service';
import { parseQuery } from '../utils';
import { useHistory } from 'react-router-dom';
import { PwaInstaller } from './widget';
import { useAlita } from 'redux-alita';
import umbrella from 'umbrella-storage';
import { useSwitch } from '../utils/hooks';
import {
ArrowsAltOutlined,
BarsOutlined,
MenuFoldOutlined,
MenuUnfoldOutlined,
NotificationOutlined,
} from '@ant-design/icons';
const { Header } = Layout;
const SubMenu = Menu.SubMenu;
const MenuItemGroup = Menu.ItemGroup;
type HeaderCustomProps = {
toggle: () => void;
collapsed: boolean;
user: any;
responsive?: any;
path?: string;
};
const HeaderCustom = (props: HeaderCustomProps) => {
const [user, setUser] = useState<any>();
const [responsive] = useAlita('responsive', { light: true });
const [visible, turn] = useSwitch();
const history = useHistory();
useEffect(() => {
const query = parseQuery();
let storageUser = umbrella.getLocalStorage('user');
if (!storageUser && query.code) {
gitOauthToken(query.code as string).then((res: any) => {
gitOauthInfo(res.access_token).then((info: any) => {
setUser({
user: info,
});
umbrella.setLocalStorage('user', info);
});
});
} else {
setUser({
user: storageUser,
});
}
}, []);
const screenFull = () => {
if (screenfull.isEnabled) {
screenfull.toggle();
}
};
const menuClick = (e: any) => {
e.key === 'logout' && logout();
};
const logout = () => {
umbrella.removeLocalStorage('user');
history.push('/login');
};
return (
<Header className="custom-theme header">
{responsive?.isMobile ? (
<Popover
content={<SiderCustom collapsed={props.collapsed} popoverHide={turn.turnOff} />}
trigger="click"
placement="bottomLeft"
visible={visible}
onVisibleChange={(visible) => (visible ? turn.turnOn() : turn.turnOff())}
>
<BarsOutlined className="header__trigger custom-trigger" />
</Popover>
) : props.collapsed ? (
<MenuUnfoldOutlined
className="header__trigger custom-trigger"
onClick={props.toggle}
/>
) : (
<MenuFoldOutlined
className="header__trigger custom-trigger"
onClick={props.toggle}
/>
)}
<Menu
mode="horizontal"
style={{ lineHeight: '64px', float: 'right' }}
onClick={menuClick}
>
<Menu.Item key="pwa">
<PwaInstaller />
</Menu.Item>
<Menu.Item key="full">
<ArrowsAltOutlined onClick={screenFull} />
</Menu.Item>
<Menu.Item key="1">
<Badge count={25} overflowCount={10} style={{ marginLeft: 10 }}>
<NotificationOutlined />
</Badge>
</Menu.Item>
<SubMenu
title={
<span className="avatar">
<img src={avater} alt="头像" />
<i className="on bottom b-white" />
</span>
}
>
<MenuItemGroup title="用户中心">
<Menu.Item key="setting:1">你好 - {user?.userName}</Menu.Item>
<Menu.Item key="setting:2">个人信息</Menu.Item>
<Menu.Item key="logout">
<span onClick={logout}>退出登录</span>
</Menu.Item>
</MenuItemGroup>
<MenuItemGroup title="设置中心">
<Menu.Item key="setting:3">个人设置</Menu.Item>
<Menu.Item key="setting:4">系统设置</Menu.Item>
</MenuItemGroup>
</SubMenu>
</Menu>
</Header>
);
};
export default HeaderCustom;