This commit is contained in:
Андрей Дувакин 2024-10-05 22:32:35 +05:00
parent 1aa6c84448
commit 7e2bfc7489
2 changed files with 56 additions and 48 deletions

View File

@ -541,3 +541,22 @@ export const getDeliveryOrderDetails = async (deliveryOrderId) => {
throw error; throw error;
} }
}; };
export const calculateTotalOrder = async () => {
try {
const response = await axios.post(
`${API_URL}/total-orders/calculate`,
null,
{
headers: {
Authorization: `Bearer ${getAuthToken()}`,
"Content-Type": "application/json",
},
}
);
return response.data;
} catch (error) {
console.log("Ошибка при запуске расчета заказа:", error);
throw error;
}
};

View File

@ -1,7 +1,7 @@
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import DeliveryOrdersList from "../components/DeliveryOrdersList.jsx"; import DeliveryOrdersList from "../components/DeliveryOrdersList.jsx";
import { getTotalOrders, createTotalOrder } from "../api.jsx"; import { getTotalOrders, calculateTotalOrder } from "../api.jsx";
import { getStatuses } from "../api.jsx"; import { getStatuses } from "../api.jsx";
import DatePicker from "react-datepicker"; import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css"; import "react-datepicker/dist/react-datepicker.css";
@ -12,6 +12,7 @@ const Home = () => {
const [expandedOrderId, setExpandedOrderId] = useState(null); const [expandedOrderId, setExpandedOrderId] = useState(null);
const [loadingStatuses, setLoadingStatuses] = useState(true); const [loadingStatuses, setLoadingStatuses] = useState(true);
const [loadingOrders, setLoadingOrders] = useState(true); const [loadingOrders, setLoadingOrders] = useState(true);
const [loadingCreateOrder, setLoadingCreateOrder] = useState(false);
const [deliveryOrdersCount, setDeliveryOrdersCount] = useState(0); const [deliveryOrdersCount, setDeliveryOrdersCount] = useState(0);
const [deadline, setDeadline] = useState(new Date()); const [deadline, setDeadline] = useState(new Date());
const navigate = useNavigate(); const navigate = useNavigate();
@ -45,34 +46,15 @@ const Home = () => {
}; };
const handleCreateOrder = async () => { const handleCreateOrder = async () => {
const current_status = statuses.filter( setLoadingCreateOrder(true);
(status) => status.name === "Создан"
);
if (current_status.length === 0) {
console.error("Статус 'Создан' не найден");
return;
}
const statusId = current_status[0].id;
const currentDate = new Date().toISOString();
const deadlineDate = deadline.toISOString();
const defaultOrderData = {
order_datetime: currentDate,
count_robots: 2000,
deadline: deadlineDate,
price: 0.0,
user_id: user.id,
status_id: statusId,
};
try { try {
const newOrder = await createTotalOrder(defaultOrderData); await calculateTotalOrder();
setTotalOrders([...totalOrders, newOrder]); alert("Начался расчет маршрутов. Заказ скоро появится в списке заказов.");
fetchTotalOrders();
} catch (error) { } catch (error) {
console.error("Ошибка при создании заказа:", error); console.error("Ошибка при расчете заказа:", error);
} finally {
setLoadingCreateOrder(false);
} }
}; };
@ -102,12 +84,13 @@ const Home = () => {
placeholderText="Выберите дату дедлайна" placeholderText="Выберите дату дедлайна"
/> />
</div> </div>
<div className="d-flex align-items-center mb-3">
<button <button
className="btn btn-primary mb-3" className="btn btn-primary"
onClick={handleCreateOrder} onClick={handleCreateOrder}
disabled={loadingStatuses} disabled={loadingCreateOrder || loadingStatuses}
> >
{loadingStatuses ? ( {loadingCreateOrder ? (
<> <>
<span <span
className="spinner-border spinner-border-sm" className="spinner-border spinner-border-sm"
@ -120,6 +103,12 @@ const Home = () => {
"+ Создать" "+ Создать"
)} )}
</button> </button>
{loadingCreateOrder && (
<span className="ms-2 text-muted">
Запрос может выполняться до 5 минут...
</span>
)}
</div>
{loadingOrders ? ( {loadingOrders ? (
<div className="text-center"> <div className="text-center">