._.
This commit is contained in:
parent
fc71aa5e84
commit
e19f149df2
@ -41,7 +41,7 @@ const DeliveryOrdersList = ({
|
|||||||
|
|
||||||
const calculateRoutes = async () => {
|
const calculateRoutes = async () => {
|
||||||
const ordersToCalculate = deliveryOrders.filter(
|
const ordersToCalculate = deliveryOrders.filter(
|
||||||
(order) => !order.estimated_route_time_in_minutes || !order.route
|
(order) => !order.estimated_route_time_in_minutes
|
||||||
);
|
);
|
||||||
|
|
||||||
setCalculatingRoutes(ordersToCalculate.map((order) => order.id));
|
setCalculatingRoutes(ordersToCalculate.map((order) => order.id));
|
||||||
@ -73,6 +73,10 @@ const DeliveryOrdersList = ({
|
|||||||
fetchDeliveryOrders();
|
fetchDeliveryOrders();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const ordersToCalculate = deliveryOrders.filter(
|
||||||
|
(order) => !order.estimated_route_time_in_minutes
|
||||||
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{loadingDeliveryOrders ? (
|
{loadingDeliveryOrders ? (
|
||||||
@ -81,7 +85,7 @@ const DeliveryOrdersList = ({
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
{calculatingRoutes.length && (
|
{ordersToCalculate.length > 0 && (
|
||||||
<button onClick={calculateRoutes} className="btn btn-primary mb-3">
|
<button onClick={calculateRoutes} className="btn btn-primary mb-3">
|
||||||
Рассчитать все
|
Рассчитать все
|
||||||
</button>
|
</button>
|
||||||
@ -93,9 +97,9 @@ const DeliveryOrdersList = ({
|
|||||||
onClick={() => onSubOrderClick(order.id)}
|
onClick={() => onSubOrderClick(order.id)}
|
||||||
>
|
>
|
||||||
<div className="card-body">
|
<div className="card-body">
|
||||||
<p>Подзаказ #{index + 1}</p>
|
<p>Этап №{index + 1}</p>
|
||||||
<p>
|
<p>
|
||||||
Время на подзаказ:{" "}
|
Расчетная длительность этапа:{" "}
|
||||||
{formatTimeInHours(order.estimated_route_time_in_minutes)}
|
{formatTimeInHours(order.estimated_route_time_in_minutes)}
|
||||||
</p>
|
</p>
|
||||||
{calculatingRoutes.includes(order.id) && (
|
{calculatingRoutes.includes(order.id) && (
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
.nav-link {
|
.nav-link {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
width: 8rem !important;
|
width: 8.5rem !important;
|
||||||
margin: 0.1rem;
|
margin: 0.1rem;
|
||||||
border-radius: 0.5rem !important;
|
border-radius: 0.5rem !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,17 +56,7 @@ const Header = () => {
|
|||||||
}
|
}
|
||||||
to="/accessories"
|
to="/accessories"
|
||||||
>
|
>
|
||||||
Компоненты
|
Комплектующие
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
<li className="nav-item">
|
|
||||||
<NavLink
|
|
||||||
className={({ isActive }) =>
|
|
||||||
isActive ? "nav-link active" : "nav-link"
|
|
||||||
}
|
|
||||||
to="/users"
|
|
||||||
>
|
|
||||||
Пользователи
|
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li className="nav-item">
|
<li className="nav-item">
|
||||||
@ -79,6 +69,16 @@ const Header = () => {
|
|||||||
Города
|
Города
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
|
<li className="nav-item">
|
||||||
|
<NavLink
|
||||||
|
className={({ isActive }) =>
|
||||||
|
isActive ? "nav-link active" : "nav-link"
|
||||||
|
}
|
||||||
|
to="/federal_districts"
|
||||||
|
>
|
||||||
|
Федеральные округа
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
<li className="nav-item">
|
<li className="nav-item">
|
||||||
<NavLink
|
<NavLink
|
||||||
className={({ isActive }) =>
|
className={({ isActive }) =>
|
||||||
@ -86,7 +86,7 @@ const Header = () => {
|
|||||||
}
|
}
|
||||||
to="/trucks"
|
to="/trucks"
|
||||||
>
|
>
|
||||||
Грузовики
|
Транспортные средства
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li className="nav-item">
|
<li className="nav-item">
|
||||||
@ -104,19 +104,9 @@ const Header = () => {
|
|||||||
className={({ isActive }) =>
|
className={({ isActive }) =>
|
||||||
isActive ? "nav-link active" : "nav-link"
|
isActive ? "nav-link active" : "nav-link"
|
||||||
}
|
}
|
||||||
to="/federal_districts"
|
to="/users"
|
||||||
>
|
>
|
||||||
Федеральные округа
|
Пользователи
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
<li className="nav-item">
|
|
||||||
<NavLink
|
|
||||||
className={({ isActive }) =>
|
|
||||||
isActive ? "nav-link active" : "nav-link"
|
|
||||||
}
|
|
||||||
to="/roles"
|
|
||||||
>
|
|
||||||
Роли
|
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@ -38,7 +38,7 @@ const Accessories = () => {
|
|||||||
if (error.response && error.response.status === 401) {
|
if (error.response && error.response.status === 401) {
|
||||||
navigate("/login");
|
navigate("/login");
|
||||||
}
|
}
|
||||||
console.error("Ошибка при загрузке аксессуаров:", error);
|
console.error("Ошибка при загрузке комплектующих:", error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ const Accessories = () => {
|
|||||||
fetchAccessories();
|
fetchAccessories();
|
||||||
resetForm();
|
resetForm();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Ошибка при добавлении или обновлении аксессуара:", error);
|
console.error("Ошибка при добавлении или обновлении комплектующих:", error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ const Accessories = () => {
|
|||||||
await deleteAccessory(accessoryId);
|
await deleteAccessory(accessoryId);
|
||||||
fetchAccessories();
|
fetchAccessories();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Ошибка при удалении аксессуара:", error);
|
console.error("Ошибка при удалении комплктубщего:", error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -136,16 +136,16 @@ const Accessories = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container mt-4">
|
<div className="container mt-4">
|
||||||
<h3>Аксессуары</h3>
|
<h3>Комплектующие</h3>
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label htmlFor="accessoryName">Название аксессуара</label>
|
<label htmlFor="accessoryName">Название комплектующего</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="form-control"
|
className="form-control"
|
||||||
id="accessoryName"
|
id="accessoryName"
|
||||||
name="name"
|
name="name"
|
||||||
placeholder="Введите название аксессуара"
|
placeholder="Введите название комплектующего"
|
||||||
value={newAccessory.name}
|
value={newAccessory.name}
|
||||||
onChange={handleInputChange}
|
onChange={handleInputChange}
|
||||||
/>
|
/>
|
||||||
@ -239,7 +239,7 @@ const Accessories = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</form>
|
</form>
|
||||||
<h3 className="mt-5">Список аксессуаров</h3>
|
<h3 className="mt-5">Список комплектующих</h3>
|
||||||
<table className="table table-bordered">
|
<table className="table table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@ -118,7 +118,7 @@ const DeliveryOrderDetails = () => {
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className="content-container">
|
<div className="content-container">
|
||||||
<h2>Общая стоимость подзаказа: {totalCost} руб.</h2>
|
<h2>Общая стоимость этапа: {totalCost} руб.</h2>
|
||||||
<h3>Тип машины: {truckName}</h3>
|
<h3>Тип машины: {truckName}</h3>
|
||||||
<h3>Количество машин: {truckCount}</h3>
|
<h3>Количество машин: {truckCount}</h3>
|
||||||
<ol className="city-list">
|
<ol className="city-list">
|
||||||
|
|||||||
@ -105,10 +105,16 @@ const Home = () => {
|
|||||||
totalOrders.map((order) => (
|
totalOrders.map((order) => (
|
||||||
<div key={order.id} className="card mb-2">
|
<div key={order.id} className="card mb-2">
|
||||||
<div
|
<div
|
||||||
className="card-header"
|
className="card-header d-flex justify-content-between"
|
||||||
onClick={() => handleToggleAccordion(order.id)}
|
onClick={() => handleToggleAccordion(order.id)}
|
||||||
>
|
>
|
||||||
Заказ от {new Date(order.order_datetime).toLocaleString()}
|
<span>
|
||||||
|
Заказ от {new Date(order.order_datetime).toLocaleString()}
|
||||||
|
</span>
|
||||||
|
<span>
|
||||||
|
<strong>Создатель:</strong>{" "}
|
||||||
|
{order.user_login || "Неизвестный пользователь"}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{expandedOrderId === order.id && (
|
{expandedOrderId === order.id && (
|
||||||
@ -121,13 +127,9 @@ const Home = () => {
|
|||||||
<strong>Количество роботов:</strong> {order.count_robots}
|
<strong>Количество роботов:</strong> {order.count_robots}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<strong>Количество подзаказов:</strong>{" "}
|
<strong>Количество этапов:</strong>{" "}
|
||||||
{deliveryOrdersCount || 0}
|
{deliveryOrdersCount || 0}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
|
||||||
<strong>Создатель:</strong>{" "}
|
|
||||||
{order.user_login || "Неизвестный пользователь"}
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<DeliveryOrdersList
|
<DeliveryOrdersList
|
||||||
totalOrderId={order.id}
|
totalOrderId={order.id}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ const Trucks = () => {
|
|||||||
if (error.response && error.response.status === 401) {
|
if (error.response && error.response.status === 401) {
|
||||||
navigate("/login");
|
navigate("/login");
|
||||||
}
|
}
|
||||||
console.error("Ошибка при загрузке грузовиков:", error);
|
console.error("Ошибка при загрузке транспортных средств:", error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -52,7 +52,10 @@ const Trucks = () => {
|
|||||||
fetchTrucks();
|
fetchTrucks();
|
||||||
resetForm();
|
resetForm();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Ошибка при добавлении или обновлении грузовика:", error);
|
console.error(
|
||||||
|
"Ошибка при добавлении или обновлении транспортного средства:",
|
||||||
|
error
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,7 +73,7 @@ const Trucks = () => {
|
|||||||
await deleteTruck(truckId);
|
await deleteTruck(truckId);
|
||||||
fetchTrucks();
|
fetchTrucks();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Ошибка при удалении грузовика:", error);
|
console.error("Ошибка при удалении транспортного средства:", error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -89,42 +92,44 @@ const Trucks = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="container mt-4">
|
<div className="container mt-4">
|
||||||
<h3>Грузовики</h3>
|
<h3>Транспортные средства</h3>
|
||||||
<form onSubmit={handleSubmit}>
|
<form onSubmit={handleSubmit}>
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label htmlFor="truckName">Название грузовика</label>
|
<label htmlFor="truckName">Название транспортного средства</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="form-control"
|
className="form-control"
|
||||||
id="truckName"
|
id="truckName"
|
||||||
name="name"
|
name="name"
|
||||||
placeholder="Введите название грузовика"
|
placeholder="Введите название транвсопртного средства"
|
||||||
value={newTruck.name}
|
value={newTruck.name}
|
||||||
onChange={handleInputChange}
|
onChange={handleInputChange}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label htmlFor="truckCapacity">Грузоподъемность (тонны)</label>
|
<label htmlFor="truckCapacity">Грузоподъемность, тонны</label>
|
||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
className="form-control"
|
className="form-control"
|
||||||
id="truckCapacity"
|
id="truckCapacity"
|
||||||
name="capacity"
|
name="capacity"
|
||||||
placeholder="Введите грузоподъемность"
|
placeholder="Введите грузоподъемность в тоннах"
|
||||||
value={newTruck.capacity}
|
value={newTruck.capacity}
|
||||||
onChange={handleInputChange}
|
onChange={handleInputChange}
|
||||||
|
min={1}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="form-group mb-3">
|
<div className="form-group mb-3">
|
||||||
<label htmlFor="truckVolume">Объем (кубометры)</label>
|
<label htmlFor="truckVolume">Объем, кубометры</label>
|
||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
className="form-control"
|
className="form-control"
|
||||||
id="truckVolume"
|
id="truckVolume"
|
||||||
name="volume"
|
name="volume"
|
||||||
placeholder="Введите объем"
|
placeholder="Введите объем в кубических метрах"
|
||||||
value={newTruck.volume}
|
value={newTruck.volume}
|
||||||
onChange={handleInputChange}
|
onChange={handleInputChange}
|
||||||
|
min={1}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -146,7 +151,7 @@ const Trucks = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</form>
|
</form>
|
||||||
<h3 className="mt-5">Список грузовиков</h3>
|
<h3 className="mt-5">Список транспортных средств</h3>
|
||||||
<table className="table table-bordered">
|
<table className="table table-bordered">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user