fix(analytics): picked_up as separate status in dashboard
- KPI: separate Доставлено and Вывезено cards - Trend: separate line for Вывезено (#14b8a6) - Driver chart: separate bar for Вывезено - SQL: admin_delivery_stats returns picked_up column - SQL: admin_daily_trend returns picked_up column - SQL: admin_driver_stats returns picked_up column - delivery_rate = (delivered + picked_up) / total - Colors: delivered #22c55e, picked_up #14b8a6 (distinct)
This commit is contained in:
parent
6786779f2c
commit
1b9fea7f1d
|
|
@ -39,7 +39,7 @@ const STATUS_COLORS = {
|
|||
loaded: '#6366f1',
|
||||
on_route: '#8b5cf6',
|
||||
delivered: '#10b981',
|
||||
picked_up: '#10b981',
|
||||
picked_up: '#14b8a6',
|
||||
paid_storage: '#06b6d4',
|
||||
problem: '#ef4444',
|
||||
cancelled: '#64748b',
|
||||
|
|
@ -112,7 +112,7 @@ export const AdminDashboard = () => {
|
|||
<Skeleton className="w-32 h-8" />
|
||||
</div>
|
||||
<div style={{ display: 'grid', gridTemplateColumns: mobile ? '1fr 1fr' : `repeat(auto-fit, minmax(80px, 160px))`, gap: '0.4rem' }}>
|
||||
{Array.from({ length: 6 }).map((_, i) => (
|
||||
{Array.from({ length: 7 }).map((_, i) => (
|
||||
<Panel key={i} style={{ padding: mobile ? '0.4rem 0.6rem' : '0.5rem 0.75rem', textAlign: 'center' }}>
|
||||
<Skeleton className="w-12 h-3 mb-1" />
|
||||
<Skeleton className="w-8 h-5" />
|
||||
|
|
@ -150,12 +150,12 @@ export const AdminDashboard = () => {
|
|||
// ── Trend & Driver Data ───────────────────────────────────────────────────
|
||||
const trendData = (dailyTrend || []).map(d => ({
|
||||
date: d.date ? new Date(d.date).toLocaleDateString('ru-RU', { day: '2-digit', month: '2-digit' }) : '',
|
||||
delivered: d.delivered || 0, total: d.total || 0, problems: d.problems || 0,
|
||||
delivered: d.delivered || 0, picked_up: d.picked_up || 0, total: d.total || 0, problems: d.problems || 0,
|
||||
}));
|
||||
|
||||
const driverData = (driverStats || []).map(d => ({
|
||||
name: d.driver_name || 'Неизвестный',
|
||||
total: d.total || 0, delivered: d.delivered || 0, problems: d.problems || 0,
|
||||
total: d.total || 0, delivered: d.delivered || 0, picked_up: d.picked_up || 0, problems: d.problems || 0,
|
||||
}));
|
||||
|
||||
// Funnel: ALWAYS show all steps, even with 0 values
|
||||
|
|
@ -189,6 +189,7 @@ export const AdminDashboard = () => {
|
|||
{ label: 'Ожидает', val: sv.pending },
|
||||
{ label: 'В работе', val: sv.in_progress },
|
||||
{ label: 'Доставлено', val: sv.delivered },
|
||||
{ label: 'Вывезено', val: sv.picked_up },
|
||||
{ label: 'Проблемы', val: sv.problem },
|
||||
{ label: '% доставки', val: sv.delivery_rate != null ? sv.delivery_rate + '%' : '—' },
|
||||
].map((kpi, i) => (
|
||||
|
|
@ -237,6 +238,7 @@ export const AdminDashboard = () => {
|
|||
<Legend wrapperStyle={{ fontSize: fontSize.xs }} />
|
||||
<Line type="monotone" dataKey="total" name="Всего" stroke="#94a3b8" strokeWidth={2} dot={false} />
|
||||
<Line type="monotone" dataKey="delivered" name="Доставлено" stroke="#22c55e" strokeWidth={2} dot={false} />
|
||||
<Line type="monotone" dataKey="picked_up" name="Вывезено" stroke="#14b8a6" strokeWidth={2} dot={false} />
|
||||
<Line type="monotone" dataKey="problems" name="Проблемы" stroke="#ef4444" strokeWidth={2} dot={false} />
|
||||
</LineChart>
|
||||
</ResponsiveContainer>
|
||||
|
|
@ -367,6 +369,7 @@ export const AdminDashboard = () => {
|
|||
<Tooltip content={<CustomTooltip />} />
|
||||
<Legend wrapperStyle={{ fontSize: fontSize.xs }} />
|
||||
<Bar dataKey="delivered" name="Доставлено" fill="#22c55e" stackId="a" />
|
||||
<Bar dataKey="picked_up" name="Вывезено" fill="#14b8a6" stackId="a" />
|
||||
<Bar dataKey="problems" name="Проблемы" fill="#ef4444" stackId="a" />
|
||||
</BarChart>
|
||||
</ResponsiveContainer>
|
||||
|
|
|
|||
Loading…
Reference in New Issue