import React, { useState, useEffect } from 'react';
import {
Package,
ArrowRightLeft,
Clock,
FileText,
CheckCircle2,
ClipboardList,
Bot,
Info,
Layers,
ChevronRight,
Smartphone
} from 'lucide-react';
// Корпоративные цвета Koblik Group
const COLORS = {
primary: '#FF9E00', // Фирменный оранжевый
dark: '#414449', // Корпоративный графитовый
background: '#F8F9FA',
text: '#2D2F33',
white: '#FFFFFF'
};
export default function App() {
const [currentTime, setCurrentTime] = useState(new Date());
useEffect(() => {
const timer = setInterval(() => setCurrentTime(new Date()), 1000);
return () => clearInterval(timer);
}, []);
// Список активных приоритетных документов в работе
const priorityDocuments = [
{
id: "Заказ № 1042-88",
client: 'ООО "Вектор"',
total: 1250,
picked: 875,
type: 'Отгрузка',
priority: 'Высокий'
},
{
id: "Заказ № 1042-95",
client: 'АО "АгроТех"',
total: 400,
picked: 380,
type: 'Кросс-докинг',
priority: 'Критический'
},
{
id: "Приемка № 884-П",
client: 'Завод "Деталь"',
total: 2000,
picked: 450,
type: 'Приемка',
priority: 'Средний'
}
];
// Данные активности сотрудников: ТСД заменено на Номер заказа
const tsdActivity = [
{ orderId: 'ЗКЗ-1042-88', worker: 'Иванов И.А.', item: 'Вал карданный L=1200', quantity: 12, unit: 'шт', itemStatus: 'arrived' },
{ orderId: 'ЗКЗ-1042-95', worker: 'Смирнов А.В.', item: 'Подшипник 206 (закрытый)', quantity: 48, unit: 'шт', itemStatus: 'planned' },
{ orderId: 'ЗКЗ-1042-92', worker: 'Петрова Е.С.', item: 'Редуктор цилиндрический Ц2У', quantity: 2, unit: 'шт', itemStatus: 'arrived' },
{ orderId: 'ЗКЗ-1042-89', worker: 'Сидоров К.М.', item: 'Звездочка Z-24 t=19.05', quantity: 120, unit: 'шт', itemStatus: 'planned' },
];
const containerMoves = [
{ id: 1, container: 'CONT-8892', robot: 'RBT-14', from: 'Приемка', to: 'A-12-04', status: 'В пути', statusType: 'moving' },
{ id: 2, container: 'CONT-1024', robot: 'RBT-02', from: 'B-05-01', to: 'Отгрузка', status: 'Ожидает ТС', statusType: 'waiting' },
{ id: 3, container: 'CONT-5531', robot: 'RBT-09', from: 'Консолидация', to: 'Буфер', status: 'В пути', statusType: 'moving' },
];
const getStatusBadge = (type, text) => {
const styles = {
moving: "bg-orange-50 text-orange-700 border-orange-200",
waiting: "bg-slate-100 text-slate-600 border-slate-200",
error: "bg-red-50 text-red-700 border-red-200",
processing: "bg-[#FF9E00] text-white border-[#E68E00]",
new: "bg-slate-50 text-slate-500 border-slate-200",
done: "bg-green-50 text-green-700 border-green-200"
};
return (
{text}
);
};
return (
{/* Шапка KOBLIK */}
Текущее время
{currentTime.toLocaleTimeString('ru-RU')}
{/* СЕКЦИЯ: ПРИОРИТЕТНЫЕ ЗАДАНИЯ В РАБОТЕ */}
Приоритетные задания
Всего в работе: {priorityDocuments.length}
{priorityDocuments.map((doc, index) => {
const progress = Math.round((doc.picked / doc.total) * 100);
return (
{doc.priority}
{doc.type}
{doc.id}
{doc.client}
{doc.picked} / {doc.total} ед.
{progress}%
);
})}
{/* Операторы ТСД (Активность по заказам) */}
| Сотрудник / Заказ |
Номенклатура и план |
Наличие в зоне |
{tsdActivity.map((task, index) => (
|
{task.worker}
{task.orderId}
|
{task.item}
Потребность:
{task.quantity} {task.unit}.
|
{task.itemStatus === 'arrived' ? (
В зоне отбора
) : (
Ожидает подвоза
)}
|
))}
{/* Логистика роботов */}
| ID Тары |
Маршрут |
Юнит |
Статус |
{containerMoves.map((move) => (
|
{move.container}
|
|
{move.robot}
|
{getStatusBadge(move.statusType, move.status)}
|
))}
);
}