# 📊 历史数据查询与对比功能 - 完整性检查报告 ## 🎯 需求对照检查 ### ✅ 已实现功能 | 需求项 | 状态 | 实现情况 | |--------|------|---------| | **用户灵活选择设备** | ✅ 部分实现 | 有设备筛选器,但未连接实际数据 | | **灵活选择时间范围** | ⚠️ 部分实现 | 有对比类型选择,但缺少自定义时间范围 | | **灵活选择指标** | ✅ 部分实现 | 有指标选择器,但未实现切换逻辑 | | **时间对比功能** | ✅ 已实现 | 支持年度、季度、月度对比 | | **折线图可视化** | ✅ 已实现 | 使用Recharts折线图展示 | | **柱状图可视化** | ❌ 未实现 | 只有折线图,缺少柱状图 | | **数据导出Excel** | ⚠️ 占位实现 | 按钮存在,但只是alert提示 | | **增长率计算** | ✅ 已实现 | 自动计算并显示增长率 | --- ## 📋 详细功能分析 ### 1️⃣ 设备选择功能 ⚠️ **当前状态**: ```tsx ``` **问题**: - ❌ 没有 `value` 和 `onValueChange` 绑定 - ❌ 设备列表是硬编码的,未从存储加载 - ❌ 选择设备后不会过滤数据 **需要改进**: - ✅ 从 machineryStorage 加载实际设备列表 - ✅ 添加状态管理和数据筛选逻辑 - ✅ 选择设备后更新图表和表格数据 --- ### 2️⃣ 时间范围选择 ⚠️ **当前状态**: ```tsx ``` **问题**: - ❌ 只能选择对比类型,不能选择具体的时间范围 - ❌ 缺少"本年vs去年"这样的快捷选项 - ❌ 没有自定义时间段选择器 **需要改进**: - ✅ 添加时间范围选择器(开始时间、结束时间) - ✅ 添加快捷选项:"本年vs去年"、"本季度vs去年同期" - ✅ 支持自定义对比周期 --- ### 3️⃣ 指标选择功能 ⚠️ **当前状态**: ```tsx ``` **问题**: - ❌ 没有状态绑定,选择后不会更新 - ❌ 图表数据没有根据指标切换 - ❌ Y轴标签没有根据指标变化 **需要改进**: - ✅ 添加指标状态管理 - ✅ 根据选择的指标切换图表数据 - ✅ 动态更新Y轴标签和单位 --- ### 4️⃣ 时间对比功能 ✅ **当前状态**: ```tsx // 年度对比 { month: '1月', year2023: 420, year2024: 480 } // 季度对比 { week: '第1周', q1: 120, q2: 135 } ``` **优点**: - ✅ 支持多种对比维度 - ✅ 数据结构清晰 - ✅ 自动切换对比周期 **可以改进**: - 添加更多快捷对比选项 - 支持自定义对比周期 --- ### 5️⃣ 可视化图表 ⚠️ **当前状态**: ```tsx ``` **优点**: - ✅ 折线图实现完整 - ✅ 图例清晰 - ✅ 响应式设计 **问题**: - ❌ 只有折线图,缺少柱状图 - ❌ 不支持图表类型切换 - ❌ 缺少面积图等其他图表类型 **需要改进**: - ✅ 添加柱状图选项 - ✅ 添加图表类型切换器 - ✅ 支持组合图表(折线+柱状) --- ### 6️⃣ 数据导出 ⚠️ **当前状态**: ```tsx const exportToExcel = () => { alert('导出Excel功能'); }; ``` **问题**: - ❌ 只是一个占位符 - ❌ 没有实际的导出逻辑 - ❌ 不能真正导出Excel文件 **需要改进**: - ✅ 实现真实的Excel导出功能 - ✅ 包含图表和数据表 - ✅ 支持自定义导出格式 --- ## 🔧 需要完善的功能 ### 优先级1: 高(核心功能) #### 1. 设备选择与数据联动 ```tsx const [selectedMachinery, setSelectedMachinery] = useState('all'); const [machinery, setMachinery] = useState([]); useEffect(() => { // 加载农机列表 const machineryData = machineryStorage.getAllMachinery(); setMachinery(machineryData); }, []); // 根据选择的设备过滤数据 const filteredData = useMemo(() => { if (selectedMachinery === 'all') return allData; return allData.filter(item => item.machineryId === selectedMachinery); }, [selectedMachinery, allData]); ``` --- #### 2. 指标切换功能 ```tsx const [selectedMetric, setSelectedMetric] = useState('area'); const metricConfig = { area: { label: '作业面积', unit: '亩' }, efficiency: { label: '作业效率', unit: '亩/小时' }, cost: { label: '作业成本', unit: '元' }, quality: { label: '作业质量', unit: '分' }, }; // 根据指标获取数据 const getMetricValue = (item: OperationData, metric: string) => { switch (metric) { case 'area': return item.area; case 'efficiency': return item.area / item.duration; case 'cost': return item.cost; case 'quality': return item.quality; default: return 0; } }; ``` --- #### 3. 柱状图选项 ```tsx const [chartType, setChartType] = useState<'line' | 'bar'>('line');
{chartType === 'line' ? ( {/* 折线图 */} ) : ( {/* 柱状图 */} )} ``` --- ### 优先级2: 中(增强功能) #### 4. 自定义时间范围 ```tsx const [customTimeRange, setCustomTimeRange] = useState({ period1: { start: '', end: '' }, period2: { start: '', end: '' }, });

对比周期1

对比周期2

``` --- #### 5. 快捷时间对比 ```tsx const quickComparisons = [ { label: '本年 vs 去年', value: 'year-to-year' }, { label: '本月 vs 上月', value: 'month-to-month' }, { label: '本季度 vs 去年同期', value: 'quarter-yoy' }, ]; ``` --- #### 6. Excel导出功能 ```tsx import * as XLSX from 'xlsx'; const exportToExcel = () => { const worksheet = XLSX.utils.json_to_sheet(comparisonData); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, '对比数据'); const fileName = `历史数据对比_${new Date().toLocaleDateString()}.xlsx`; XLSX.writeFile(workbook, fileName); }; ``` --- ### 优先级3: 低(优化功能) #### 7. 多指标对比 ```tsx const [selectedMetrics, setSelectedMetrics] = useState(['area', 'efficiency']); // 支持选择多个指标同时展示 {selectedMetrics.map(metric => ( ))} ``` --- #### 8. 趋势分析 ```tsx // 添加趋势分析卡片

趋势分析

平均增长率
+12.5%
最大增幅
+20.3%
趋势预测
📈 上升
``` --- ## 📊 功能完善建议 ### 建议1: 完善数据联动 ```tsx // 完整的数据筛选逻辑 const filteredData = useMemo(() => { let data = allOperationData; // 按设备筛选 if (selectedMachinery !== 'all') { data = data.filter(item => item.machineryId === selectedMachinery); } // 按时间范围筛选 data = data.filter(item => { const itemDate = new Date(item.date); return itemDate >= startDate && itemDate <= endDate; }); return data; }, [selectedMachinery, startDate, endDate, allOperationData]); // 按指标聚合数据 const aggregatedData = useMemo(() => { return aggregateByPeriod(filteredData, compareType, selectedMetric); }, [filteredData, compareType, selectedMetric]); ``` --- ### 建议2: 增强图表功能 ```tsx // 图表类型切换 折线图 柱状图 面积图 {/* 折线图配置 */} {/* 柱状图配置 */} {/* 面积图配置 */} ``` --- ### 建议3: 实现真实Excel导出 ```tsx const exportToExcel = () => { // 准备数据 const exportData = comparisonData.map(row => ({ '时间': row.month || row.week, [period1Label]: row.period1, [period2Label]: row.period2, '增长率': `${((row.period2 - row.period1) / row.period1 * 100).toFixed(1)}%`, })); // 创建工作表 const worksheet = XLSX.utils.json_to_sheet(exportData); // 设置列宽 worksheet['!cols'] = [ { wch: 10 }, { wch: 15 }, { wch: 15 }, { wch: 12 }, ]; // 创建工作簿 const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, '历史数据对比'); // 导出文件 const fileName = `历史数据对比_${selectedMetric}_${new Date().toLocaleDateString()}.xlsx`; XLSX.writeFile(workbook, fileName); // 显示成功提示 toast.success('数据已成功导出!'); }; ``` --- ## ✅ 功能完善清单 ### 核心功能(必须) - [ ] ❌ 设备选择器连接实际数据 - [ ] ❌ 指标切换功能实现 - [ ] ❌ 添加柱状图选项 - [ ] ❌ 实现真实Excel导出 - [ ] ❌ 添加时间范围选择器 ### 增强功能(推荐) - [ ] ❌ 添加"本年vs去年"快捷选项 - [ ] ❌ 支持自定义对比周期 - [ ] ❌ 图表类型切换(折线/柱状/面积) - [ ] ❌ 多指标同时对比 - [ ] ❌ 趋势分析功能 ### 优化功能(可选) - [ ] ❌ 数据钻取功能 - [ ] ❌ 预测分析 - [ ] ❌ 同比环比分析 - [ ] ❌ 导出包含图表的PDF --- ## 🎯 实施计划 ### Phase 1: 核心功能完善(2-3小时) **任务**: 1. 设备选择器数据联动 2. 指标切换功能 3. 添加柱状图 4. Excel导出功能 **预期结果**: - ✅ 所有选择器都能正常工作 - ✅ 数据根据选择实时更新 - ✅ 支持折线图和柱状图 - ✅ 可以导出Excel文件 --- ### Phase 2: 时间对比增强(1-2小时) **任务**: 1. 添加快捷时间对比选项 2. 实现自定义时间范围 3. 完善对比逻辑 **预期结果**: - ✅ 支持"本年vs去年"等快捷选项 - ✅ 可以自定义对比任意两个时间段 - ✅ 对比结果准确可靠 --- ### Phase 3: 可视化优化(1小时) **任务**: 1. 添加更多图表类型 2. 优化图表样式 3. 添加趋势分析 **预期结果**: - ✅ 支持多种图表类型 - ✅ 图表美观易读 - ✅ 提供数据洞察 --- ## 📝 代码示例 ### 完整的HistoryComparison组件(改进版) ```tsx import { useState, useMemo, useEffect } from 'react'; import { Card } from '../../ui/card'; import { Button } from '../../ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../ui/select'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../ui/tabs'; import { LineChart, Line, BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts'; import { Download, Calendar, TrendingUp, BarChart3 } from 'lucide-react'; import { machineryStorage } from '../../../lib/machineryStorage'; import { MachineryRecord } from '../../../types/machinery'; import * as XLSX from 'xlsx'; import { toast } from 'sonner'; export function HistoryComparison() { // 状态管理 const [compareType, setCompareType] = useState('year'); const [selectedMachinery, setSelectedMachinery] = useState('all'); const [selectedMetric, setSelectedMetric] = useState('area'); const [chartType, setChartType] = useState<'line' | 'bar'>('line'); const [machinery, setMachinery] = useState([]); // 加载农机列表 useEffect(() => { const machineryData = machineryStorage.getAllMachinery(); setMachinery(machineryData); }, []); // 指标配置 const metricConfig = { area: { label: '作业面积', unit: '亩' }, efficiency: { label: '作业效率', unit: '亩/小时' }, cost: { label: '作业成本', unit: '元' }, quality: { label: '作业质量', unit: '分' }, }; // 模拟数据(实际应该从后端或存储加载) const yearComparisonData = [ { month: '1月', year2023: 420, year2024: 480 }, { month: '2月', year2023: 380, year2024: 410 }, // ... ]; // Excel导出 const exportToExcel = () => { const exportData = yearComparisonData.map(row => ({ '时间': row.month, '2023年': row.year2023, '2024年': row.year2024, '增长率': `${((row.year2024 - row.year2023) / row.year2023 * 100).toFixed(1)}%`, })); const worksheet = XLSX.utils.json_to_sheet(exportData); const workbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(workbook, worksheet, '历史数据对比'); XLSX.writeFile(workbook, `历史数据对比_${new Date().toLocaleDateString()}.xlsx`); toast.success('数据已成功导出!'); }; return (
{/* 标题和导出按钮 */}

历史数据查询与对比

多维度历史数据对比分析

{/* 查询条件 */}

查询条件

{/* 对比类型 */}
{/* 设备筛选 */}
{/* 指标选择 */}
{/* 查询按钮 */}
{/* 图表类型切换 */}

{compareType === 'year' ? '年度对比' : compareType === 'quarter' ? '季度对比' : '月度对比'} - {metricConfig[selectedMetric].label}

{chartType === 'line' ? ( ) : ( )}
{/* 对比数据表 */}

对比数据详情

{yearComparisonData.map((row, index) => ( ))}
时间 2023年 2024年 增长率
{row.month} {row.year2023} {metricConfig[selectedMetric].unit} {row.year2024} {metricConfig[selectedMetric].unit} row.year2023 ? 'text-green-600' : 'text-red-600' }`}> {((row.year2024 - row.year2023) / row.year2023 * 100).toFixed(1)}%
); } ``` --- ## ✅ 总结 ### 当前状态 **优点**: - ✅ 基础框架完整 - ✅ UI设计合理 - ✅ 基本的对比功能可用 **不足**: - ❌ 缺少数据联动 - ❌ 指标切换未实现 - ❌ 只有折线图 - ❌ Excel导出是占位符 - ❌ 缺少自定义时间范围 --- ### 完善建议 **优先级排序**: 1. **高**: 数据联动、指标切换、柱状图 2. **中**: Excel导出、时间范围选择 3. **低**: 高级可视化、趋势分析 **预计工作量**: 4-6小时完成核心功能 --- **文档版本**: v1.0 **检查日期**: 2025-10-17 **状态**: ⚠️ **需要完善核心功能** **总体评价**: 基础框架良好,但需要完善数据联动、图表类型和导出功能才能满足完整需求。