import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import { Calendar, Loader2, Sparkles, Users } from 'lucide-react' import './AnnualReportPage.scss' type YearOption = number | 'all' function AnnualReportPage() { const navigate = useNavigate() const [availableYears, setAvailableYears] = useState([]) const [selectedYear, setSelectedYear] = useState(null) const [selectedPairYear, setSelectedPairYear] = useState(null) const [isLoading, setIsLoading] = useState(true) const [isGenerating, setIsGenerating] = useState(false) const [loadError, setLoadError] = useState(null) useEffect(() => { loadAvailableYears() }, []) const loadAvailableYears = async () => { setIsLoading(true) setLoadError(null) try { const result = await window.electronAPI.annualReport.getAvailableYears() if (result.success && result.data && result.data.length > 0) { setAvailableYears(result.data) setSelectedYear((prev) => prev ?? result.data[0]) setSelectedPairYear((prev) => prev ?? result.data[0]) } else if (!result.success) { setLoadError(result.error || '加载年度数据失败') } } catch (e) { console.error(e) setLoadError(String(e)) } finally { setIsLoading(false) } } const handleGenerateReport = async () => { if (selectedYear === null) return setIsGenerating(true) try { const yearParam = selectedYear === 'all' ? 0 : selectedYear navigate(`/annual-report/view?year=${yearParam}`) } catch (e) { console.error('生成报告失败:', e) } finally { setIsGenerating(false) } } const handleGenerateDualReport = () => { if (selectedPairYear === null) return const yearParam = selectedPairYear === 'all' ? 0 : selectedPairYear navigate(`/dual-report?year=${yearParam}`) } if (isLoading) { return (

正在加载年份数据...

) } if (availableYears.length === 0) { return (

暂无聊天记录

{loadError || '请先解密数据库后再生成年度报告'}

) } const yearOptions: YearOption[] = availableYears.length > 0 ? ['all', ...availableYears] : [] const getYearLabel = (value: YearOption | null) => { if (!value) return '' return value === 'all' ? '全部时间' : `${value} 年` } return (

年度报告

选择年份,回顾你在微信里的点点滴滴

总年度报告

包含所有会话与消息

{yearOptions.map(option => (
setSelectedYear(option)} > {option === 'all' ? '全部' : option} {option === 'all' ? '时间' : '年'}
))}

双人年度报告

选择一位好友,只看你们的私聊

私聊
{yearOptions.map(option => (
setSelectedPairYear(option)} > {option === 'all' ? '全部' : option} {option === 'all' ? '时间' : '年'}
))}

从聊天排行中选择好友生成双人报告

) } export default AnnualReportPage