This commit is contained in:
Андрей Дувакин 2024-10-07 23:12:34 +05:00
parent fc71aa5e84
commit e19f149df2
7 changed files with 56 additions and 55 deletions

View File

@ -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) && (

View File

@ -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;
} }

View File

@ -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>
</> </>

View File

@ -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>

View File

@ -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">

View File

@ -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)}
> >
<span>
Заказ от {new Date(order.order_datetime).toLocaleString()} Заказ от {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}

View File

@ -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>