commit 6da9fd27a761085bccbd15efd99beab1d72688df Author: Торов Михаил Дмитриевич Date: Tue Sep 1 12:08:40 2026 +0300 Initial commit: React app prototype Add test.html UI component and app.js entry point. Co-authored-by: Cursor diff --git a/app.js b/app.js new file mode 100644 index 0000000..e69de29 diff --git a/test.html b/test.html new file mode 100644 index 0000000..b098b79 --- /dev/null +++ b/test.html @@ -0,0 +1,294 @@ +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 */} +
+
+
+ + + + + + + + + +
+

WMS Dashboard

+
+ +
+
+ Текущее время +
+ {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' ? ( + + В зоне отбора + + ) : ( + + Ожидает подвоза + + )} +
+
+
+ + {/* Логистика роботов */} +
+
+
+ +

Логистика роботов

+
+
+ +
+ + + + + + + + + + + {containerMoves.map((move) => ( + + + + + + + ))} + +
ID ТарыМаршрутЮнитСтатус
+ {move.container} + +
+ {move.from} + + {move.to} +
+
+
+ {move.robot} +
+
+ {getStatusBadge(move.statusType, move.status)} +
+
+
+ +
+
+ + +
+ ); +} \ No newline at end of file