import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { toast, errorMessage } from '@/app/store/toast' import { PageLoading, ErrorState } from '@/components/ui/feedback' import { PageHeader } from '@/components/common/PageHeader' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Card, CardHeader } from '@/components/ui/card' import { StatCard } from '@/components/common/StatCard' import { Select } from '@/components/ui/select' import { Drawer } from '@/components/ui/drawer' import { Textarea } from '@/components/ui/input' import { PermissionGate } from '@/components/common/PermissionGate' import { CountryFlag } from '@/components/common/CountryFlag' import { getRisks, updateRisk } from '@/services/api/crm' import { riskLevelMeta, riskTypeLabel, RISK_TYPES, RISK_LEVELS } from '@/config/constants' import { formatRelative } from '@/utils/format' import { cn } from '@/utils/cn' import { AlertTriangle, Settings } from 'lucide-react' export function RisksPage() { const queryClient = useQueryClient() const navigate = useNavigate() const [level, setLevel] = useState('') const [type, setType] = useState('') const [status, setStatus] = useState('') const [detailId, setDetailId] = useState(null) const [noteDraft, setNoteDraft] = useState('') const { data, isLoading, isError, refetch } = useQuery({ queryKey: ['risks', level, type, status], queryFn: () => getRisks({ level, type, status }), }) const updateMut = useMutation({ mutationFn: ({ id, data }: { id: string; data: any }) => updateRisk(id, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['risks'] }) toast.success('风险状态已更新') }, onError: (e) => toast.error(errorMessage(e)), }) const list = data?.list ?? [] const openCount = list.filter((r) => r.status === 'open').length const confirmedCount = list.filter((r) => r.status === 'confirmed').length const urgentCount = list.filter((r) => r.level === 'urgent').length const detail = list.find((r) => r.id === detailId) if (isLoading) return if (isError) return refetch()} /> return (
} />
setStatus('open')} /> setStatus('confirmed')} /> setLevel('urgent')} />
setType(e.target.value)} options={RISK_TYPES.map((t) => ({ value: t.value, label: t.label }))} className="w-36" />