diff --git a/src/admin/analytics/AnalyticsPage.jsx b/src/admin/analytics/AnalyticsPage.jsx index 996cbd2..3fa69b5 100644 --- a/src/admin/analytics/AnalyticsPage.jsx +++ b/src/admin/analytics/AnalyticsPage.jsx @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import { TrendingUp } from 'lucide-react'; +import { TrendingUp, Download } from 'lucide-react'; import { useAnalyticsPage } from './useAnalyticsPage'; const MONTHS_RU = ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек']; @@ -103,6 +103,28 @@ const AnalyticsPage = () => { return Object.values(map).sort((a, b) => b.revenue - a.revenue); }, [orders]); + const handleExportCSV = () => { + const BOM = ''; + const headers = ['ID', 'Статус', 'Сумма', 'Дата создания', 'Менеджер', 'Плёнка']; + const rows = orders.map((o) => [ + o.id, + o.status ?? '', + o.final_cost ?? '', + o.created_at ? new Date(o.created_at).toLocaleDateString('ru-RU') : '', + o.assigned_to ?? '', + o.film_thickness ?? '', + ].map((v) => `"${String(v).replace(/"/g, '""')}"`).join(',')); + + const csv = BOM + [headers.join(','), ...rows].join('\n'); + const blob = new Blob([csv], { type: 'text/csv;charset=utf-8' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `orders-${new Date().toISOString().slice(0, 10)}.csv`; + a.click(); + URL.revokeObjectURL(url); + }; + if (loading) { return (