diff --git a/src/features/auth/authSlice.js b/src/features/auth/authSlice.js index 74a60f1..642a88f 100644 --- a/src/features/auth/authSlice.js +++ b/src/features/auth/authSlice.js @@ -40,4 +40,6 @@ const authSlice = createSlice({ export const { logout } = authSlice.actions; export const selectUserRole = (state) => state.auth.roles; +export const selectUserName = (state) => state.auth.name; +export const selectUserId = (state) => state.auth.userId; export default authSlice.reducer; diff --git a/src/layouts/CommonLayout.jsx b/src/layouts/CommonLayout.jsx index b03d5b6..50286d8 100644 --- a/src/layouts/CommonLayout.jsx +++ b/src/layouts/CommonLayout.jsx @@ -1,22 +1,22 @@ -import { - DesktopOutlined, - FileOutlined, - PieChartOutlined, - TeamOutlined, - UserOutlined, -} from "@ant-design/icons"; -import { Layout, Menu, theme } from "antd"; +import { DownOutlined } from "@ant-design/icons"; +import { Dropdown, Layout, Menu, message, Space, theme } from "antd"; import { Content, Header } from "antd/es/layout/layout"; import Sider from "antd/es/layout/Sider"; import React, { useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; import { Outlet, useLocation, useNavigate } from "react-router-dom"; import menuConfig from "../config/menuConfig"; -import { useSelector } from "react-redux"; -import { selectUserRole } from "../features/auth/authSlice"; +import { + logout, + selectUserName, + selectUserRole, +} from "../features/auth/authSlice"; export default function CommonLayout() { const location = useLocation(); const naviagte = useNavigate(); + const dispatch = useDispatch(); + const userName = useSelector(selectUserName); const [collapsed, setCollapsed] = useState(false); const { @@ -29,6 +29,21 @@ export default function CommonLayout() { (item) => !item.roles || item.roles.some((role) => roles.includes(role)) ); + const dropDownItems = [ + { + key: "logout", + label: "退出登录", + }, + ]; + + const handleMenuClick = ({ key }) => { + if (key === "logout") { + dispatch(logout()); + message.success("已退出登录"); + naviagte("/login"); + } + }; + return ( -
+
+ + + {userName} + + + +
state.auth.userId); + const userId = useSelector(selectUserId); const fetchData = async (pagination) => { const data = await axiosInstance.get(`/reservation/${userId}`, {