import { Container, Box, Alert, Snackbar, Button, Stack, Typography, TextField, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, } from "@mui/material"; import { useEffect, useState } from "react"; import { useRouter } from "next/router"; export default function Time(props) { const [ranges, setRanges] = useState([]); const [range, setRange] = useState(""); const [newName, setNewName] = useState(""); const [snackbarError, setSnackbarError] = useState(false); const [snackbarErrorMessage, setSnackbarErrorMessage] = useState(""); const [snackbarSuccess, setSnackbarSuccess] = useState(false); const [limit, setLimit] = useState(1); const [token, setToken] = useState(""); const router = useRouter(); const isAdmin = () => { if (props.username === "admin") { return true; } else { return false; } }; const getLimit = () => { fetch("/api/time/limit", { method: "GET", headers: { "Content-Type": "application/json", }, }) .then((res) => res.json()) .then((res) => { setLimit(res.limit); }); }; const addRange = () => { fetch("/api/time/ranges", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ name: newName, range, token, }), }).then((res) => res.json().then((res) => { if (res.error) { setSnackbarError(true); setSnackbarErrorMessage(res.error); } else { setSnackbarSuccess(true); refreshRanges(); } }) ); }; const refreshRanges = () => { getLimit(); fetch("/api/time/ranges") .then((res) => res.json()) .then((res) => { if (res.error) { setSnackbarError(true); setSnackbarErrorMessage(res.error); } else { setSnackbarSuccess(true); setRanges(res); } }); }; const deleteRange = (id) => { fetch(`/api/time/ranges/${id}`, { method: "DELETE", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ token }), }) .then((res) => res.json()) .then((res) => { if (res.error) { setSnackbarError(true); setSnackbarErrorMessage(res.error); } else { setSnackbarSuccess(true); refreshRanges(); } }); }; const updateUsername = (id, username) => { fetch(`/api/time/ranges/${id}`, { method: "PUT", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ username }), }) .then((res) => res.json()) .then((res) => { if (res.error) { setSnackbarError(true); setSnackbarErrorMessage(res.error); } else { setSnackbarSuccess(true); refreshRanges(); } }); }; const updateLimit = (limit) => { fetch("/api/time/limit", { method: "PUT", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ limit, token }), }) .then((res) => res.json()) .then((res) => { if (res.error) { setSnackbarError(true); setSnackbarErrorMessage(res.error); } else { setSnackbarSuccess(true); refreshRanges(); } }); }; useEffect(() => { if (!props.username) { router.push("/"); } }); /* useEffect(() => { const interval = setInterval(() => { refreshRanges(); }, 1000); return () => clearInterval(interval); }, []); */ useEffect(() => { refreshRanges(); }, []); return ( {isAdmin() && ( setToken(e.target.value)} /> setNewName(e.target.value)} /> setRange(e.target.value)} placeholder="2022-01-01 00:00:00" /> setLimit(e.target.value)} /> )} 当前每人排班数量上限:{limit} 名称 时间段 姓名 操作 {ranges.map((range) => ( {range.name} {range.range} {range.username} {isAdmin() && ( )} ))}
setSnackbarError(false)} > setSnackbarError(false)} severity="error" > {snackbarErrorMessage} setSnackbarSuccess(false)} > setSnackbarSuccess(false)} severity="success" > 操作成功!
); }