This commit is contained in:
2026-01-18 00:49:39 +04:00
parent 46cd4ef38c
commit 21ef59ff94
21 changed files with 830 additions and 251 deletions

View File

@@ -9,8 +9,6 @@ interface WaybillWidgetProps {
date: string;
}
let durationOrder;
const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
const [entries, setEntries] = useState<WaybillEntry[]>([]);
const [orders, setOrders] = useState<Order[]>([]);
@@ -21,7 +19,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
const [selectedTimeSlot, setSelectedTimeSlot] = useState<string | null>(null);
const [duration, setDuration] = useState<number>(2);
// Часовые интервалы с 8:00 до 20:00
const timeSlots = Array.from({ length: 13 }, (_, i) => {
const hour = i + 8;
return `${hour.toString().padStart(2, '0')}:00`;
@@ -30,22 +28,23 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
const loadData = async () => {
try {
const response = await ordersApi.getOrders();
setOrders(response.data);
setOrders((response.data as any).data.items);
setLoading(true);
setError(null);
// Загружаем записи путевого листа
const entriesResponse = await waybillApi.getEntries();
const entriesResponse = (await waybillApi.getEntries() as any).data;
const vehicleEntries = entriesResponse.data.filter(
entry => entry.vehicleId === vehicleId && entry.date === date
(entry: { vehicleId: number; date: string; }) => entry.vehicleId === vehicleId && entry.date === date
);
setEntries(vehicleEntries);
// Загружаем доступные заказы
const ordersResponse = await ordersApi.getOrders();
const assignedOrderIds = new Set(vehicleEntries.map(entry => entry.orderId));
const available = ordersResponse.data.filter(
order => !assignedOrderIds.has(order.id) && order.status !== 'completed'
const ordersResponse = (await ordersApi.getOrders() as any).data.data.items;
const assignedOrderIds = new Set(vehicleEntries.map((entry: { orderId: any; }) => entry.orderId));
const available = ordersResponse.filter(
(order: Order) => !assignedOrderIds.has(order.id) && order.status !== 'completed'
);
setAvailableOrders(available);
@@ -71,13 +70,12 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
};
const getOrderInfo = (orderId: number, allOrders: Order[]): Order | undefined => {
// Ищем заказ среди всех заказов
const foundOrder = allOrders.find(order => order.id === orderId);
if (foundOrder) {
return foundOrder;
}
// Если заказ не найден, но есть в путевом листе - создаем базовый объект
const waybillEntry = entries.find(entry => entry.orderId === orderId);
if (waybillEntry) {
const basicOrder: Order = {
@@ -92,7 +90,6 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
return basicOrder;
}
// Если заказ не найден нигде
return undefined;
};
@@ -100,7 +97,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
if (selectedOrder) {
try {
const startHour = parseInt(timeSlot.split(':')[0]);
const endHour = startHour + duration; // Используем выбранную длительность
const endHour = startHour + duration;
const newEntry: Omit<WaybillEntry, 'id'> = {
vehicleId,
@@ -109,6 +106,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
endTime: `${endHour.toString().padStart(2, '0')}:00`,
date
};
console.log('Sending waybill entry:', newEntry);
await waybillApi.createEntry(newEntry);
setSelectedOrder(null);
@@ -128,7 +126,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
if (selectedTimeSlot) {
try {
const startHour = parseInt(selectedTimeSlot.split(':')[0]);
const endHour = startHour + duration; // Используем выбранную длительность
const endHour = startHour + duration;
const newEntry: Omit<WaybillEntry, 'id'> = {
vehicleId,
@@ -137,6 +135,7 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
endTime: `${endHour.toString().padStart(2, '0')}:00`,
date
};
console.log('Sending waybill entry:', newEntry);
await waybillApi.createEntry(newEntry);
setSelectedTimeSlot(null);
@@ -172,7 +171,6 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
<h5 className="mb-0">Путевой лист на {new Date(date).toLocaleDateString()}</h5>
</div>
<div className="card-body">
{/* Состояние выбора */}
<div className="alert alert-info mb-3">
{selectedOrder && !selectedTimeSlot && (
<div>
@@ -220,7 +218,6 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
</p>
)}
</div>
{/* Таблица временных интервалов */}
<div className="table-responsive mb-4">
<table className="table table-bordered">
<thead>
@@ -275,7 +272,6 @@ const WaybillWidget: React.FC<WaybillWidgetProps> = ({ vehicleId, date }) => {
</table>
</div>
{/* Список доступных заказов */}
<div className="available-orders">
<h6>Доступные заказы:</h6>
<div className="row">