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}
+ />
);
};