import { useTranslation } from 'react-i18next'; import { StatCard } from '@/components/shared/StatCard'; import { ActivityFeed, ActivityItem } from '@/components/shared/ActivityFeed'; import { DashboardBuilder } from '@/components/dashboard/DashboardBuilder'; import { useUnifiedContacts, useAuditLog } from '@/api/hooks'; import { useSystemDashboard } from '@/api/systemDashboard'; import { useAuthStore } from '@/store/authStore'; import { formatDateTime } from '@/utils/date'; import { Database, Server, Cpu, DollarSign, Activity, TrendingUp } from 'lucide-react'; export function DashboardPage() { const { t } = useTranslation(); const { data: companiesData } = useUnifiedContacts(1, 1, undefined, 'company'); const { data: contactsData } = useUnifiedContacts(1, 1, undefined, 'person'); const { data: auditData, isError: auditError } = useAuditLog(1, 5); const { data: systemData } = useSystemDashboard(); const user = useAuthStore((s) => s.user); const isAdmin = user?.is_system_admin ?? false; const totalCompanies = companiesData?.total ?? 0; const totalContacts = contactsData?.total ?? 0; const auditEntries = auditData?.items ?? []; const activeThisWeek = auditEntries.filter((e) => { if (!e.timestamp) return false; const d = new Date(e.timestamp); const weekAgo = new Date(); weekAgo.setDate(weekAgo.getDate() - 7); return d >= weekAgo; }).length; const newThisMonth = auditEntries.filter((e) => { if (!e.timestamp) return false; const d = new Date(e.timestamp); const monthAgo = new Date(); monthAgo.setMonth(monthAgo.getMonth() - 1); return d >= monthAgo; }).length; const activities: ActivityItem[] = auditError ? [] : auditEntries.map((entry) => ({ id: `${entry.timestamp}-${entry.user}-${entry.action}`, user: entry.user || 'System', action: entry.action || '', time: entry.timestamp ? (formatDateTime(entry.timestamp) || '') : '', avatarUrl: null, })); return (
{systemData.database?.status === 'up' ? '✅' : '❌'}
{systemData.database?.db_size_human || '—'}
{systemData.redis?.status === 'up' ? '✅' : '❌'}
{systemData.redis?.used_memory_human || '—'}
{systemData.worker?.status === 'up' ? '✅' : '❌'}
Queue: {systemData.worker?.queue_length ?? '—'}
{systemData.api?.total_requests ?? '—'}
Errors: {systemData.api?.error_count ?? 0}
${systemData.llm.last_24h_cost?.toFixed(2) ?? '0.00'}
{systemData.llm.last_24h_tokens?.toLocaleString() ?? '0'}
{systemData.plugins?.active_plugins?.length ?? '—'}
{t('dashboard.activityUnavailable')}
) : (