Yansen 2 年之前
父節點
當前提交
b9848405eb

+ 1
- 0
package.json 查看文件

@@ -9,6 +9,7 @@
9 9
     "preview": "vite preview"
10 10
   },
11 11
   "dependencies": {
12
+    "@ant-design/icons": "^4.7.0",
12 13
     "@zjxpcyc/react-tiny-store": "^2.0.1",
13 14
     "antd": "^4.22.3",
14 15
     "react": "18.1.0",

+ 2
- 0
pnpm-lock.yaml 查看文件

@@ -1,6 +1,7 @@
1 1
 lockfileVersion: 5.4
2 2
 
3 3
 specifiers:
4
+  '@ant-design/icons': ^4.7.0
4 5
   '@types/react': ^18.0.15
5 6
   '@types/react-dom': ^18.0.6
6 7
   '@vitejs/plugin-react': ^2.0.0
@@ -15,6 +16,7 @@ specifiers:
15 16
   vite-plugin-imp: ^2.2.0
16 17
 
17 18
 dependencies:
19
+  '@ant-design/icons': registry.npmmirror.com/@ant-design/icons/4.7.0_ef5jwxihqo6n7gxfmzogljlgcm
18 20
   '@zjxpcyc/react-tiny-store': registry.npmmirror.com/@zjxpcyc/react-tiny-store/2.0.1
19 21
   antd: registry.npmmirror.com/antd/4.22.3_ef5jwxihqo6n7gxfmzogljlgcm
20 22
   react: registry.npmmirror.com/react/18.1.0

二進制
public/logo.png 查看文件


+ 0
- 13
src/layouts/AuthLayout/components/Header.jsx 查看文件

@@ -1,13 +0,0 @@
1
-import React from 'react';
2
-import { Layout, Spin } from 'antd';
3
-import Logo from './Logo';
4
-
5
-const { Header } = Layout;
6
-
7
-export default (props) => {
8
-  return (
9
-    <Header>
10
-      <Logo />
11
-    </Header>
12
-  )
13
-}

+ 9
- 0
src/layouts/AuthLayout/components/Header/Exit.jsx 查看文件

@@ -0,0 +1,9 @@
1
+import React from 'react';
2
+import { LogoutOutlined } from '@ant-design/icons';
3
+import { Button } from 'antd';
4
+
5
+export default (props) => {
6
+  return (
7
+    <Button className='font' type="text" icon={<LogoutOutlined />}>退出</Button>
8
+  )
9
+}

+ 14
- 0
src/layouts/AuthLayout/components/Header/Logo.jsx 查看文件

@@ -0,0 +1,14 @@
1
+import React from 'react';
2
+import { useModel } from '@/store'
3
+
4
+export default (props) => {
5
+
6
+  const { config } = useModel('system');
7
+
8
+  return (
9
+    <div className='logo'>
10
+      <img src="./logo.png" alt="" />
11
+      <h3>{config.appName}</h3>
12
+    </div>
13
+  )
14
+}

+ 22
- 0
src/layouts/AuthLayout/components/Header/User.jsx 查看文件

@@ -0,0 +1,22 @@
1
+import React, { useMemo } from 'react';
2
+import { Avatar, Dropdown, Menu, Space } from 'antd';
3
+
4
+export default (props) => {
5
+  const menuItems = [
6
+    {
7
+      key: 'changePassword',
8
+      label: '修改密码',
9
+    }
10
+  ];
11
+
12
+  const menu = <Menu items={menuItems} />;
13
+
14
+  return (
15
+    <Dropdown overlay={menu}>
16
+      <div className="user-info">
17
+        <Avatar src="https://joeschmoe.io/api/v1/random" />
18
+        <span className='font'>张延森</span>
19
+      </div>
20
+    </Dropdown>
21
+  )
22
+}

+ 19
- 0
src/layouts/AuthLayout/components/Header/index.jsx 查看文件

@@ -0,0 +1,19 @@
1
+import React from 'react';
2
+import { Layout, Space } from 'antd';
3
+import Logo from './Logo';
4
+import User from './User';
5
+import Exit from './Exit';
6
+
7
+const { Header } = Layout;
8
+
9
+export default (props) => {
10
+  return (
11
+    <Header className='layout-header'>
12
+      <Logo />
13
+      <Space>
14
+        <User />
15
+        <Exit />
16
+      </Space>
17
+    </Header>
18
+  )
19
+}

+ 0
- 7
src/layouts/AuthLayout/components/Logo.jsx 查看文件

@@ -1,7 +0,0 @@
1
-import React from 'react'
2
-
3
-export default (props) => {
4
-  return (
5
-    <div style={{ height: '64px' }}>Logo</div>
6
-  )
7
-}

+ 2
- 0
src/layouts/AuthLayout/index.jsx 查看文件

@@ -8,6 +8,8 @@ import Container from './components/Container';
8 8
 import Footer from './components/Footer';
9 9
 import useReady from './useReady';
10 10
 
11
+import './style.less';
12
+
11 13
 const { Content } = Layout;
12 14
 
13 15
 export default (props) => {

+ 46
- 0
src/layouts/AuthLayout/style.less 查看文件

@@ -0,0 +1,46 @@
1
+.layout-header {
2
+  box-sizing: border-box;
3
+  padding: 0;
4
+  display: flex;
5
+  align-items: center;
6
+  justify-content: space-between;
7
+
8
+  .logo {
9
+    width: 200px; // 200 是 side-bar 宽度
10
+    display: flex;
11
+    align-items: center;
12
+    box-sizing: border-box;
13
+    padding-left: 1em;
14
+
15
+    & > * {
16
+      color: #fff;
17
+    }
18
+
19
+    img {
20
+      width: 36px;
21
+      vertical-align: middle;
22
+      margin-right: 1em;
23
+    }
24
+  }
25
+
26
+  .font {
27
+    color: #fff;
28
+    display: inline-block;
29
+  }
30
+
31
+  .user-info {
32
+    cursor: pointer;
33
+
34
+    .ant-avatar {
35
+      border: 1px solid rgba(255, 255, 255, 0.4);
36
+    }
37
+
38
+    span {
39
+      margin-left: 1em;
40
+    }
41
+  }
42
+
43
+  .sys-exit {
44
+    margin-right: 1em;
45
+  }
46
+}

+ 3
- 1
src/store/models/system.js 查看文件

@@ -7,7 +7,9 @@ const setRootCssVar = (key, val) => {
7 7
 
8 8
 export default function useSystem() {
9 9
   const [theme, setTheme] = useState('light');
10
-  const [config, setConfig] = useState({});
10
+  const [config, setConfig] = useState({
11
+    appName: '云致科技',
12
+  });
11 13
 
12 14
   const updateTheme = useCallback((t) => {
13 15
     setTheme(t);