生产管理系统前端 - 地块对比分析,地块适宜性评价开发

This commit is contained in:
2025-10-30 15:03:05 +08:00
parent 2aa93f941e
commit 77bf48f88a
51 changed files with 11252 additions and 96 deletions

View File

@@ -1,18 +1,158 @@
'use client';
import { useEffect } from 'react';
import { Card } from '@/components/ui/card';
import { toast } from 'sonner';
import { FieldSelector } from './components/FieldSelector';
import { ChartRadarAnalysis } from './components/RadarChart';
import { YieldComparison } from './components/YieldComparison';
import { NutrientComparison } from './components/NutrientComparison';
import { MapComparison } from './components/MapComparison';
import { useChartAnalysis, FieldData } from './components/chartAnalysisReducer';
// 模拟地块数据
const mockFieldsData: FieldData[] = [
{
id: 'field-1',
name: '东区1号地',
area: 50.5,
location: '东经120.15°, 北纬30.25°',
soilType: '壤土',
ph: 6.5,
organicMatter: 32,
nitrogen: 1.8,
phosphorus: 1.2,
potassium: 18,
soilDepth: 85,
slope: 3,
currentCrop: '水稻',
yield: 750,
suitabilityScore: 87,
suitabilityGrade: '高度适宜',
irrigation: '喷灌',
drainage: '良好',
},
{
id: 'field-2',
name: '西区2号地',
area: 45.2,
location: '东经120.12°, 北纬30.28°',
soilType: '粘土',
ph: 7.8,
organicMatter: 22,
nitrogen: 1.3,
phosphorus: 0.9,
potassium: 14,
soilDepth: 55,
slope: 5,
currentCrop: '玉米',
yield: 650,
suitabilityScore: 72,
suitabilityGrade: '一般适宜',
irrigation: '滴灌',
drainage: '中等',
},
{
id: 'field-3',
name: '南区3号地',
area: 38.8,
location: '东经120.18°, 北纬30.22°',
soilType: '砂土',
ph: 8.5,
organicMatter: 15,
nitrogen: 0.8,
phosphorus: 0.6,
potassium: 10,
soilDepth: 42,
slope: 8,
currentCrop: '小麦',
yield: 480,
suitabilityScore: 58,
suitabilityGrade: '不适宜',
irrigation: '漫灌',
drainage: '较差',
},
{
id: 'field-4',
name: '北区4号地',
area: 55.0,
location: '东经120.20°, 北纬30.30°',
soilType: '壤土',
ph: 6.8,
organicMatter: 28,
nitrogen: 1.6,
phosphorus: 1.0,
potassium: 16,
soilDepth: 75,
slope: 2,
currentCrop: '大豆',
yield: 380,
suitabilityScore: 82,
suitabilityGrade: '高度适宜',
irrigation: '喷灌',
drainage: '良好',
},
];
export default function ChartPage() {
const { setFields, state } = useChartAnalysis();
// 初始化数据
useEffect(() => {
// 直接使用模拟数据,确保数据可用
setFields(mockFieldsData);
localStorage.setItem('chart-analysis-fields', JSON.stringify(mockFieldsData));
}, [setFields]);
// 如果数据还没有加载显示loading状态
if (state.fields.length === 0) {
return (
<div className="space-y-6">
<div className="flex items-center justify-between">
<div>
<h2 className="text-green-800 dark:text-green-200"></h2>
<p className="text-muted-foreground">
</p>
</div>
</div>
<Card className="p-6 bg-card">
<div className="text-center py-8">
<p>...</p>
</div>
</Card>
</div>
);
}
return (
<div className="space-y-6">
<Card className="p-6">
<h2 className="text-xl font-semibold"></h2>
<div className="p-3 bg-muted rounded-lg mt-3">
<p className="text-sm">
<strong></strong> /land-information/comparison/chart
<div className="flex items-center justify-between">
<div>
<h2 className="text-green-800 dark:text-green-200"></h2>
<p className="text-muted-foreground">
</p>
</div>
</Card>
</div>
{/* 地块选择器 */}
<FieldSelector fields={state.fields} />
{/* 图表分析区域 */}
<div className="space-y-4">
{/* 雷达图 */}
<ChartRadarAnalysis />
{/* 产量与有机质对比 */}
<YieldComparison />
{/* 养分对比 */}
<NutrientComparison />
{/* 地图对比 */}
<MapComparison />
</div>
</div>
);
}