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 && (
+
+ ⚠ Просрочено
+
+ )}