From d072d36c6d2d7bca900212451eae112f44766097 Mon Sep 17 00:00:00 2001 From: BenjaminNH <1249376374@qq.com> Date: Fri, 27 Jun 2025 21:57:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E5=9B=A2=E9=98=9F?= =?UTF-8?q?=E8=B4=9F=E8=B4=A3=E4=BA=BA=E6=9F=A5=E7=9C=8B=E5=BE=85=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E9=A2=84=E7=BA=A6=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/menuConfig.js | 8 +++ src/config/roleRouteConfig.js | 8 +++ src/pages/Login.jsx | 10 ++- src/pages/leader/Approval.jsx | 92 ++++++++++++++++++++++++++++ src/pages/user/DeviceDetailModal.jsx | 1 - src/router/index.jsx | 11 ++++ 6 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 src/config/roleRouteConfig.js create mode 100644 src/pages/leader/Approval.jsx diff --git a/src/config/menuConfig.js b/src/config/menuConfig.js index 735b8ab..456f46f 100644 --- a/src/config/menuConfig.js +++ b/src/config/menuConfig.js @@ -1,8 +1,10 @@ import { DesktopOutlined, + FileDoneOutlined, UnorderedListOutlined, UserOutlined, } from "@ant-design/icons"; +import { lazy } from "react"; const menuConfig = [ { @@ -23,6 +25,12 @@ const menuConfig = [ icon: UserOutlined, roles: ["USER"], }, + { + path: "/leader/approval", + label: "预约审批", + icon: FileDoneOutlined, + roles: ["LEADER"], + }, ]; export default menuConfig; diff --git a/src/config/roleRouteConfig.js b/src/config/roleRouteConfig.js new file mode 100644 index 0000000..ad3fca9 --- /dev/null +++ b/src/config/roleRouteConfig.js @@ -0,0 +1,8 @@ +const roleRoute = { + USER: "/user/reserve", + ADMIN: "/admin/user-manage", + LEADER: "/leader/approval", + DEVICE_ADMIN: "/device-admin/approval", +}; + +export default roleRoute; diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 24ade3a..31be108 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -3,6 +3,7 @@ import { Button, Flex, Form, Input, message } from "antd"; import { useDispatch } from "react-redux"; import { useNavigate } from "react-router-dom"; import { login } from "../features/auth/authThunk"; +import roleRoute from "../config/roleRouteConfig"; export default function Login() { const dispatch = useDispatch(); @@ -10,8 +11,13 @@ export default function Login() { const onFinish = async (values) => { const res = await dispatch(login(values)).unwrap(); - message.success("登录成功"); - navigate("/user/reserve"); + const path = res.roles.map((r) => roleRoute[r]).find(Boolean); + if (path) { + message.success("登录成功"); + navigate(path); + } else { + message.error("系统错误"); + } }; return ( diff --git a/src/pages/leader/Approval.jsx b/src/pages/leader/Approval.jsx new file mode 100644 index 0000000..a61b78c --- /dev/null +++ b/src/pages/leader/Approval.jsx @@ -0,0 +1,92 @@ +import { Button, Space, Table } from "antd"; +import Column from "antd/es/table/Column"; +import { useEffect, useState } from "react"; +import { useSelector } from "react-redux"; +import { selectUserId } from "../../features/auth/authSlice"; +import axiosInstance from "../../api/axios"; + +export default function LeaderApproval() { + const [reservations, setReservations] = useState([]); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 10, + total: 0, + }); + + const userId = useSelector(selectUserId); + + const fetchData = async (pagination) => { + const data = await axiosInstance.get(`/reservation/leader/${userId}`, { + params: { + page: pagination.current, + size: pagination.pageSize, + }, + }); + console.log(data); + + setReservations(data.records); + setPagination({ + ...pagination, + total: data.total, + }); + }; + + useEffect(() => { + fetchData(pagination); + }, []); + + const handlePageChange = (pagination) => { + fetchData(pagination); + }; + + const handleApproval = (reservationId, isApprove) => { + console.log(reservationId); + console.log(isApprove); + }; + + // "预约人、所属团队、联系方式、预约设备、预约时间: 设备详情、" + return ( + + + + + + + + { + return ( + + + + + ); + }} + /> +
+ ); +} diff --git a/src/pages/user/DeviceDetailModal.jsx b/src/pages/user/DeviceDetailModal.jsx index de9fbdc..73e394c 100644 --- a/src/pages/user/DeviceDetailModal.jsx +++ b/src/pages/user/DeviceDetailModal.jsx @@ -58,7 +58,6 @@ export default function DeviceDetailModal({ visiable, device, onclose }) { startTime: startTime.format("YYYY-MM-DD"), endTime: endTime.format("YYYY-MM-DD"), }; - console.log(payload); await axiosInstance.post("/reservation", payload); message.success("预约成功"); diff --git a/src/router/index.jsx b/src/router/index.jsx index 63e4435..193e666 100644 --- a/src/router/index.jsx +++ b/src/router/index.jsx @@ -5,6 +5,7 @@ import CommonLayout from "../layouts/CommonLayout"; import Reserve from "../pages/user/Reserve"; import MyReservation from "../pages/user/MyReservation"; import UserDetail from "../pages/user/UserDetail"; +import LeaderApproval from "../pages/leader/Approval"; const router = createBrowserRouter([ { @@ -37,6 +38,16 @@ const router = createBrowserRouter([ }, ], }, + { + path: "leader", + element: , + children: [ + { + path: "approval", + element: , + }, + ], + }, ], }, ]);