diff --git a/src/AuthContext.jsx b/src/AuthContext.jsx index c38625f..0f352a1 100644 --- a/src/AuthContext.jsx +++ b/src/AuthContext.jsx @@ -19,18 +19,20 @@ export const AuthProvider = ({ children }) => { const login = (userData) => { setIsAuthenticated(true); - setRole(userData.user.role_name); + setRole(userData.user.role_name); localStorage.setItem("token", userData.token); localStorage.setItem("user", JSON.stringify(userData.user)); + localStorage.setItem("role", JSON.stringify(userData.user.role_name)); localStorage.setItem("isAuthenticated", true); }; const logout = () => { setIsAuthenticated(false); - setRole(null); + setRole(null); localStorage.removeItem("token"); localStorage.removeItem("isAuthenticated"); localStorage.removeItem("user"); + localStorage.removeItem("role"); }; useEffect(() => { diff --git a/src/components/AddOrderModal.jsx b/src/components/AddOrderModal.jsx new file mode 100644 index 0000000..63a890e --- /dev/null +++ b/src/components/AddOrderModal.jsx @@ -0,0 +1,94 @@ +import React, { useState } from "react"; +import DatePicker from "react-datepicker"; +import "react-datepicker/dist/react-datepicker.css"; + +const AddOrderModal = ({ show, onHide, onSubmit }) => { + const [deadline, setDeadline] = useState(new Date()); + const [robotsCount, setRobotsCount] = useState(2000); + const [formError, setFormError] = useState(""); + + const handleSubmit = () => { + if (!deadline || robotsCount <= 0) { + setFormError("Пожалуйста, заполните все поля корректно."); + return; + } + setFormError(""); + onSubmit({ deadline, robotsCount }); + }; + + if (!show) { + return null; + } + + return ( +
+
+
+
+
Добавить новый заказ
+ +
+
+ {formError &&

{formError}

} +
+ + setRobotsCount(Number(e.target.value))} + min="1" + placeholder="Введите количество роботов" + /> +
+
+ + setDeadline(date)} + className="form-control" + dateFormat="P" + placeholderText="Выберите дату дедлайна" + /> +
+
+
+ + +
+
+
+
+ ); +}; + +export default AddOrderModal; diff --git a/src/components/Header.jsx b/src/components/Header.jsx index 046a999..a77a6af 100644 --- a/src/components/Header.jsx +++ b/src/components/Header.jsx @@ -3,9 +3,10 @@ import { Link, useNavigate } from "react-router-dom"; import { useAuth } from "../AuthContext"; const Header = () => { - const { isAuthenticated, role, logout } = useAuth(); + const { isAuthenticated, logout } = useAuth(); const navigate = useNavigate(); const user = JSON.parse(localStorage.getItem("user")); + const role = JSON.parse(localStorage.getItem("role")); const handleLogout = () => { logout(); diff --git a/src/pages/Home.jsx b/src/pages/Home.jsx index c8a33e7..9962cfb 100644 --- a/src/pages/Home.jsx +++ b/src/pages/Home.jsx @@ -3,8 +3,7 @@ import { useNavigate } from "react-router-dom"; import DeliveryOrdersList from "../components/DeliveryOrdersList.jsx"; import { getTotalOrders, calculateTotalOrder } from "../api.jsx"; import { getStatuses } from "../api.jsx"; -import DatePicker from "react-datepicker"; -import "react-datepicker/dist/react-datepicker.css"; +import AddOrderModal from "../components/AddOrderModal.jsx"; const Home = () => { const [statuses, setStatuses] = useState([]); @@ -13,8 +12,7 @@ const Home = () => { const [loadingStatuses, setLoadingStatuses] = useState(true); const [loadingOrders, setLoadingOrders] = useState(true); const [loadingCreateOrder, setLoadingCreateOrder] = useState(false); - const [deliveryOrdersCount, setDeliveryOrdersCount] = useState(0); - const [deadline, setDeadline] = useState(new Date()); + const [showModal, setShowModal] = useState(false); const navigate = useNavigate(); const user = JSON.parse(localStorage.getItem("user")); @@ -51,16 +49,17 @@ const Home = () => { } }; - const handleCreateOrder = async () => { + const handleCreateOrder = async ({ deadline, robotsCount }) => { setLoadingCreateOrder(true); try { - await calculateTotalOrder(); + await calculateTotalOrder({ deadline, robotsCount }); alert("Начался расчет маршрутов. Заказ скоро появится в списке заказов."); fetchTotalOrders(); } catch (error) { console.error("Ошибка при расчете заказа:", error); } finally { setLoadingCreateOrder(false); + setShowModal(false); } }; @@ -78,36 +77,13 @@ const Home = () => { return (
-
- - setDeadline(date)} - className="form-control" - dateFormat="P" - placeholderText="Выберите дату дедлайна" - /> -
{loadingCreateOrder && ( @@ -141,10 +117,6 @@ const Home = () => {

Количество роботов: {order.count_robots}

-

- Количество подзаказов:{" "} - {deliveryOrdersCount || 0} -

Создатель:{" "} {order.user_login || "Неизвестный пользователь"} @@ -153,13 +125,18 @@ const Home = () => {

)}
)) )} + + setShowModal(false)} + onSubmit={handleCreateOrder} + /> ); };