diff --git a/src/admin/calendar/CalendarPage.jsx b/src/admin/calendar/CalendarPage.jsx index 154bb1a..9bd1e9a 100644 --- a/src/admin/calendar/CalendarPage.jsx +++ b/src/admin/calendar/CalendarPage.jsx @@ -45,13 +45,16 @@ function isSameDay(a, b) { function OrderChip({ order, onClick }) { const color = getStatusColor(order.status); + const isOverdue = order.scheduled_at && + new Date(order.scheduled_at) < new Date() && + order.status !== 'закрыт'; return (
{ e.stopPropagation(); onClick(order); }} - title={`${order.name} — ${order.status}`} + title={isOverdue ? `Просрочено: ${order.name}` : `${order.name} — ${order.status}`} style={{ - background: color + '1A', - color, + background: isOverdue ? '#fef2f2' : color + '1A', + color: isOverdue ? '#ef4444' : color, fontSize: '0.68rem', fontWeight: 600, padding: '2px 6px', @@ -303,6 +306,9 @@ function DayDetail({ date, orders, onOrderClick, onAdd, onAssign }) { {dayOrders.map((o) => { const color = getStatusColor(o.status); const time = new Date(o.scheduled_at).toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }); + const isOverdue = o.scheduled_at && + new Date(o.scheduled_at) < new Date() && + o.status !== 'закрыт'; return (
{o.status} - {time} + + {isOverdue ? `⚠ Просрочено` : time} +
); diff --git a/src/admin/orders/OrderCard.jsx b/src/admin/orders/OrderCard.jsx index ed6da0c..d07cbef 100644 --- a/src/admin/orders/OrderCard.jsx +++ b/src/admin/orders/OrderCard.jsx @@ -15,6 +15,10 @@ const OrderCard = ({ order, onClick }) => { id: order.id, }); + const isOverdue = order.scheduled_at && + new Date(order.scheduled_at) < new Date() && + order.status !== 'закрыт'; + return (
{ transform: CSS.Transform.toString(transform), transition, opacity: isDragging ? 0.45 : 1, - background: '#fff', - border: '1px solid var(--border-light)', + background: isOverdue ? '#fffafa' : '#fff', + border: isOverdue ? '1.5px solid #fca5a5' : '1px solid var(--border-light)', borderRadius: '10px', padding: '13px', cursor: 'pointer', @@ -43,6 +47,17 @@ const OrderCard = ({ order, onClick }) => {
+ {isOverdue && ( +
+ ⚠ Просрочено +
+ )}