diff --git a/src/config/menuConfig.js b/src/config/menuConfig.js index b4e32f7..2db2373 100644 --- a/src/config/menuConfig.js +++ b/src/config/menuConfig.js @@ -20,28 +20,22 @@ const menuConfig = [ }, { - path: "/leader/approval", + path: "/approval", label: "预约审批", icon: FileDoneOutlined, - roles: ["LEADER"], + roles: ["LEADER", "DEVICE_ADMIN"], }, { - path: "/leader/my-approval", + path: "/my-approval", label: "审批记录", icon: UnorderedListOutlined, - roles: ["LEADER"], - }, - { - path: "/device-admin/approval", - label: "预约审批", - icon: FileDoneOutlined, - roles: ["DEVICE_ADMIN"], + roles: ["LEADER", "DEVICE_ADMIN"], }, { path: "/userdetail", label: "个人信息", icon: UserOutlined, - roles: ["USER", "DEVICE_ADMIN"], + roles: ["USER", "LEADER", "DEVICE_ADMIN", "ADMIN"], }, ]; diff --git a/src/config/roleRouteConfig.js b/src/config/roleRouteConfig.js index ad3fca9..f98c679 100644 --- a/src/config/roleRouteConfig.js +++ b/src/config/roleRouteConfig.js @@ -1,8 +1,8 @@ const roleRoute = { USER: "/user/reserve", ADMIN: "/admin/user-manage", - LEADER: "/leader/approval", - DEVICE_ADMIN: "/device-admin/approval", + LEADER: "/approval", + DEVICE_ADMIN: "/approval", }; export default roleRoute; diff --git a/src/pages/deviceAdmin/Approval.jsx b/src/pages/deviceAdmin/Approval.jsx deleted file mode 100644 index ebf7768..0000000 --- a/src/pages/deviceAdmin/Approval.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import ApprovalTable from "../../components/ApprovalTable"; - -export default function DeviceAdminApproval() { - return ; -} diff --git a/src/pages/leader/Approval.jsx b/src/pages/leader/Approval.jsx deleted file mode 100644 index 3420380..0000000 --- a/src/pages/leader/Approval.jsx +++ /dev/null @@ -1,5 +0,0 @@ -import ApprovalTable from "../../components/ApprovalTable"; - -export default function LeaderApproval() { - return ; -} diff --git a/src/components/ApprovalTable.jsx b/src/pages/shared/Approval.jsx similarity index 82% rename from src/components/ApprovalTable.jsx rename to src/pages/shared/Approval.jsx index 3da6381..c3a8f1c 100644 --- a/src/components/ApprovalTable.jsx +++ b/src/pages/shared/Approval.jsx @@ -2,10 +2,11 @@ import { Button, message, Space, Table } from "antd"; import Column from "antd/es/table/Column"; import { useEffect, useState } from "react"; import { useSelector } from "react-redux"; -import axiosInstance from "../api/axios"; -import { selectUserId } from "../features/auth/authSlice"; +import axiosInstance from "../../api/axios"; +import { selectUserId } from "../../features/auth/authSlice"; +import { selectUserRole } from "../../features/auth/authSlice"; -export default function ApprovalTable({ showNeedAssist }) { +export default function Approval() { const [reservations, setReservations] = useState([]); const [pagination, setPagination] = useState({ current: 1, @@ -14,6 +15,11 @@ export default function ApprovalTable({ showNeedAssist }) { }); const userId = useSelector(selectUserId); + const roles = useSelector(selectUserRole); + let showNeedAssist = false; + if (roles.some((r) => r === "DEVICE_ADMIN")) { + showNeedAssist = true; + } const fetchData = async (pagination) => { const data = await axiosInstance.get(`/reservation/approval/${userId}`, { @@ -34,12 +40,12 @@ export default function ApprovalTable({ showNeedAssist }) { fetchData(pagination); }, []); - const handlePageChange = (pagination) => { - fetchData(pagination); + const handlePageChange = async (pagination) => { + await fetchData(pagination); }; - const handleApproval = (reservationId, isApprove, needAssist) => { - axiosInstance.post("/approval", { + const handleApproval = async (reservationId, isApprove, needAssist) => { + await axiosInstance.post("/approval", { userId, reservationId, isApprove, @@ -52,7 +58,7 @@ export default function ApprovalTable({ showNeedAssist }) { current: 1, }; setPagination(newPagination); - fetchData(newPagination); + await fetchData(newPagination); }; // "预约人、所属团队、联系方式、预约设备、预约时间: 设备详情、" diff --git a/src/pages/leader/MyApproval.jsx b/src/pages/shared/MyApproval.jsx similarity index 84% rename from src/pages/leader/MyApproval.jsx rename to src/pages/shared/MyApproval.jsx index 01ba1a6..3cce9e5 100644 --- a/src/pages/leader/MyApproval.jsx +++ b/src/pages/shared/MyApproval.jsx @@ -6,7 +6,7 @@ import { useSelector } from "react-redux"; import axiosInstance from "../../api/axios"; import { selectUserId } from "../../features/auth/authSlice"; -export default function LeaderMyApproval() { +export default function MyApproval() { const [approvals, setApprovals] = useState([]); const [form] = useForm(); const [pagination, setPagination] = useState({ @@ -18,7 +18,7 @@ export default function LeaderMyApproval() { const userId = useSelector(selectUserId); const fetchData = async (pagination, searchParam) => { - const data = await axiosInstance.get(`/approval/leader/${userId}`, { + const data = await axiosInstance.get(`/approval/${userId}`, { params: { page: pagination.current, size: pagination.pageSize, @@ -93,13 +93,21 @@ export default function LeaderMyApproval() { { + render={(_, { decision, status }) => { if (decision === 1) { - return ( - - 通过 - - ); + if (status === "APPROVED_ASSIST") { + return ( + + 通过,需要协助 + + ); + } else { + return ( + + 通过 + + ); + } } if (decision === 0) { return ( diff --git a/src/pages/UserDetail.jsx b/src/pages/shared/UserDetail.jsx similarity index 97% rename from src/pages/UserDetail.jsx rename to src/pages/shared/UserDetail.jsx index 59d3a30..24c63f2 100644 --- a/src/pages/UserDetail.jsx +++ b/src/pages/shared/UserDetail.jsx @@ -2,8 +2,8 @@ import { Button, Col, Form, Input, message, Row } from "antd"; import { useForm } from "antd/es/form/Form"; import { useEffect, useState } from "react"; import { useSelector } from "react-redux"; -import axiosInstance from "../api/axios"; -import { selectUserId } from "../features/auth/authSlice"; +import axiosInstance from "../../api/axios"; +import { selectUserId } from "../../features/auth/authSlice"; export default function UserDetail() { const [form] = useForm(); diff --git a/src/pages/user/MyReservation.jsx b/src/pages/user/MyReservation.jsx index 8b36f57..a8e78e1 100644 --- a/src/pages/user/MyReservation.jsx +++ b/src/pages/user/MyReservation.jsx @@ -74,11 +74,29 @@ export default function MyReservation() { title="预约状态" key="statusLabel" dataIndex="statusLabel" - render={(_, { statusLabel }) => { - const color = statusLabel === "通过" ? "green" : "yellow"; + render={(_, record) => { + if (record.statusLabel === "通过") { + return ( + + 通过 + + ); + } else if (record.statusLabel === "不通过") { + return ( + + 不通过 + + ); + } else if (record.statusLabel === "通过,需要协助实验") { + return ( + + 通过,需要协助实验 + + ); + } return ( - - {statusLabel} + + {record.statusLabel} ); }} diff --git a/src/pages/user/Reserve.jsx b/src/pages/user/Reserve.jsx index 5d9a28f..d31fbe1 100644 --- a/src/pages/user/Reserve.jsx +++ b/src/pages/user/Reserve.jsx @@ -95,7 +95,6 @@ export default function Reserve() { key="action" render={(_, record) => ( - 查看日历 setSelectedDevice(record)}>预约 )} diff --git a/src/router/index.jsx b/src/router/index.jsx index 5a3f688..60967ab 100644 --- a/src/router/index.jsx +++ b/src/router/index.jsx @@ -6,8 +6,10 @@ import LeaderMyApproval from "../pages/leader/MyApproval"; import Login from "../pages/Login"; import MyReservation from "../pages/user/MyReservation"; import Reserve from "../pages/user/Reserve"; -import UserDetail from "../pages/UserDetail"; +import UserDetail from "../pages/shared/UserDetail"; import ProtectedRoute from "./ProtectedRoute"; +import Approval from "../pages/shared/Approval"; +import MyApproval from "../pages/shared/MyApproval"; const router = createBrowserRouter([ { @@ -37,26 +39,15 @@ const router = createBrowserRouter([ ], }, { - path: "leader", - element: , + element: , children: [ { path: "approval", - element: , + element: , }, { path: "my-approval", - element: , - }, - ], - }, - { - path: "device-admin", - element: , - children: [ - { - path: "approval", - element: , + element: , }, ], },