import { Button, DatePicker, Form, Input, message, Table, Tag } from "antd"; import { useForm } from "antd/es/form/Form"; import Column from "antd/es/table/Column"; import { useCallback, useEffect, useState } from "react"; import { useSelector } from "react-redux"; import axiosInstance from "../../api/axios"; import { selectUserId, selectUserRole } from "../../features/auth/authSlice"; import dayjs from "dayjs"; import { PageResult, Pagination } from "types/common"; interface ApprovalVO { reservationId: string; approvalId: string; applicantName: string; applicantTeam: string; applicantContact: string; deviceName: string; startTime: Date; endTime: Date; decision: number; status: string; } export default function MyApproval() { const [approvals, setApprovals] = useState([]); const [form] = useForm(); const [pagination, setPagination] = useState({ current: 1, pageSize: 10, total: 0, }); const [editingRow, setEditingRow] = useState(null); const [tempEndTime, setTempEndTime] = useState(null); const userId = useSelector(selectUserId); const userRole = useSelector(selectUserRole); const fetchData = useCallback( async ( pagination: Pagination, searchParam?: { applicantName: string; deviceName: string } ) => { const data = await axiosInstance.get>( `/approval/${userId}`, { params: { page: pagination.current, size: pagination.pageSize, applicantName: searchParam?.applicantName, deviceName: searchParam?.deviceName, }, } ); setApprovals(data.records); setPagination({ ...pagination, total: data.total, }); }, [userId] ); useEffect(() => { fetchData(pagination); }, [fetchData, pagination]); const handlePageChange = async (pagination) => { const values = await form.validateFields(); fetchData(pagination, values); }; const handleSearch = async () => { const values = await form.validateFields(); const newPagination = { ...pagination, current: 1, }; setPagination(newPagination); await fetchData(newPagination, values); }; const handleSubmit = async (record) => { try { await axiosInstance.post(`/reservation/endTime/${record.reservationId}`, { endTime: dayjs(tempEndTime).format("YYYY-MM-DD"), }); const values = await form.validateFields(); await fetchData(pagination, values); setEditingRow(null); message.success("修改成功"); } catch { message.error("修改失败"); } }; return (
{ const isEditable = record.decision === 1 && userRole.includes("DEVICE_ADMIN"); if (editingRow === record.approvalId) { return (
setTempEndTime(date)} disabledDate={(current) => current && current.isBefore(dayjs(record.startTime), "day") } size="small" />
); } return isEditable ? ( {record.endTime} ) : ( {record.endTime} ); }} /> { if (decision === 1) { if (status === "APPROVED_ASSIST") { return ( 通过,需要协助 ); } else { return ( 通过 ); } } if (decision === 0) { return ( 拒绝 ); } return ( ERROR ); }} />
); }