生产管理系统前端 - 水肥机控制页面框架搭建

This commit is contained in:
2025-10-28 20:10:18 +08:00
parent e3829d2fcc
commit 94f83d36ff
24 changed files with 833 additions and 113 deletions

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Droplets } from 'lucide-react';
export default function FertilizerHistoryDataPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Droplets className="w-6 h-6 text-cyan-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/fertilizer/history-data
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Droplets } from 'lucide-react';
export default function FertilizerLevelSettingPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Droplets className="w-6 h-6 text-cyan-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/fertilizer/level-setting
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Droplets } from 'lucide-react';
export default function FertilizerStirringControlPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Droplets className="w-6 h-6 text-cyan-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/fertilizer/stirring-control
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Droplets } from 'lucide-react';
export default function FertilizerWaterControlPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Droplets className="w-6 h-6 text-cyan-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/fertilizer/water-control
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { AlertTriangle } from 'lucide-react';
export default function MonitoringAlertLogicPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<AlertTriangle className="w-6 h-6 text-red-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/monitoring/alert-logic
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { AlertTriangle } from 'lucide-react';
export default function MonitoringNotificationPushPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<AlertTriangle className="w-6 h-6 text-red-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/monitoring/notification-push
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { AlertTriangle } from 'lucide-react';
export default function MonitoringThresholdAlertPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<AlertTriangle className="w-6 h-6 text-red-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/monitoring/threshold-alert
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -1,123 +1,30 @@
import Link from 'next/link' 'use client';
import { Metadata } from 'next'
export const metadata: Metadata = { import { Card } from '@/components/ui/card';
title: '水肥控制 - Crop-X 智慧农业管理系统', import { Package } from 'lucide-react';
description: '水肥一体化控制系统主页面',
}
export default function WaterFertilizerControlPage() { export default function WaterFertilizerControlPage() {
return ( return (
<div className="space-y-6"> <div className="space-y-6">
<div className="bg-white rounded-lg shadow p-6"> <Card className="p-6">
<h2 className="text-xl font-semibold text-gray-800 mb-4"> <div className="flex items-center gap-3 mb-4">
<Package className="w-6 h-6 text-blue-600" />
</h2> <h2 className="text-xl font-semibold"></h2>
<p className="text-gray-600 mb-6">
</p>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<Link
href="/water-fertilizer-control/irrigation-system-management"
className="block p-4 bg-green-50 rounded-lg hover:bg-green-100 transition-colors"
>
<h3 className="font-semibold text-green-900 mb-2">
🚰
</h3>
<p className="text-green-700 text-sm">
</p>
</Link>
<Link
href="/water-fertilizer-control/smart-irrigation"
className="block p-4 bg-blue-50 rounded-lg hover:bg-blue-100 transition-colors"
>
<h3 className="font-semibold text-blue-900 mb-2">
💦
</h3>
<p className="text-blue-700 text-sm">
</p>
</Link>
<Link
href="/water-fertilizer-control/fertilizer-formula-management"
className="block p-4 bg-purple-50 rounded-lg hover:bg-purple-100 transition-colors"
>
<h3 className="font-semibold text-purple-900 mb-2">
🧪
</h3>
<p className="text-purple-700 text-sm">
</p>
</Link>
<Link
href="/water-fertilizer-control/integrated-control"
className="block p-4 bg-orange-50 rounded-lg hover:bg-orange-100 transition-colors"
>
<h3 className="font-semibold text-orange-900 mb-2">
</h3>
<p className="text-orange-700 text-sm">
</p>
</Link>
<Link
href="/water-fertilizer-control/real-time-monitoring"
className="block p-4 bg-teal-50 rounded-lg hover:bg-teal-100 transition-colors"
>
<h3 className="font-semibold text-teal-900 mb-2">
📊
</h3>
<p className="text-teal-700 text-sm">
</p>
</Link>
</div> </div>
</div> <div className="space-y-3">
<p className="text-muted-foreground">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div className="bg-white rounded-lg shadow p-6"> </p>
<h3 className="text-lg font-semibold text-gray-800 mb-4"> <div className="p-3 bg-muted rounded-lg">
📊 <p className="text-sm">
</h3> <strong></strong> /water-fertilizer-control
<div className="space-y-2"> </p>
<div className="flex justify-between items-center"> <p className="text-sm mt-1">
<span className="text-gray-600">线</span> <strong></strong>
<span className="text-green-600 font-semibold">18 / 20</span> </p>
</div>
<div className="flex justify-between items-center">
<span className="text-gray-600"></span>
<span className="text-blue-600 font-semibold">2,450 m³</span>
</div>
<div className="flex justify-between items-center">
<span className="text-gray-600"></span>
<span className="text-purple-600 font-semibold">8 </span>
</div>
</div> </div>
</div> </div>
</Card>
<div className="bg-white rounded-lg shadow p-6">
<h3 className="text-lg font-semibold text-gray-800 mb-4">
🔧
</h3>
<div className="space-y-2">
<button className="w-full px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700 transition-colors">
</button>
<button className="w-full px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors">
</button>
<button className="w-full px-4 py-2 bg-purple-600 text-white rounded hover:bg-purple-700 transition-colors">
</button>
</div>
</div>
</div>
</div> </div>
) );
} }

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { TrendingUp } from 'lucide-react';
export default function SmartIrrigationAutoPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<TrendingUp className="w-6 h-6 text-green-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
AI模型的全自动智能灌溉系统运行和监控
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/smart/auto
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { TrendingUp } from 'lucide-react';
export default function SmartIrrigationHistoryPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<TrendingUp className="w-6 h-6 text-green-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/smart/history
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { TrendingUp } from 'lucide-react';
export default function SmartIrrigationManualPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<TrendingUp className="w-6 h-6 text-green-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/smart/manual
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { TrendingUp } from 'lucide-react';
export default function SmartIrrigationModelConfigPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<TrendingUp className="w-6 h-6 text-green-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
AI驱动的智能灌溉决策模型配置和参数优化
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/smart/model-config
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { TrendingUp } from 'lucide-react';
export default function SmartIrrigationRealtimePage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<TrendingUp className="w-6 h-6 text-green-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/smart/realtime
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Settings } from 'lucide-react';
export default function WaterFertilizerHistoryPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Settings className="w-6 h-6 text-orange-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-control/fertilizer-history
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Settings } from 'lucide-react';
export default function WaterFertilizerParamsPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Settings className="w-6 h-6 text-orange-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-control/params
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Settings } from 'lucide-react';
export default function WaterFertilizerTankRealtimePage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Settings className="w-6 h-6 text-orange-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-control/tank-realtime
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Settings } from 'lucide-react';
export default function WaterFertilizerValveControlPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Settings className="w-6 h-6 text-orange-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-control/valve-control
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Settings } from 'lucide-react';
export default function WaterFertilizerValveHistoryPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Settings className="w-6 h-6 text-orange-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-control/valve-history
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Settings } from 'lucide-react';
export default function WaterFertilizerValveRealtimePage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Settings className="w-6 h-6 text-orange-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-control/valve-realtime
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Package } from 'lucide-react';
export default function WaterFertilizerComponentPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Package className="w-6 h-6 text-blue-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-management/component
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Package } from 'lucide-react';
export default function WaterFertilizerDevicePage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Package className="w-6 h-6 text-blue-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-management/device
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Package } from 'lucide-react';
export default function WaterFertilizerMappingPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Package className="w-6 h-6 text-blue-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-management/mapping
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -0,0 +1,30 @@
'use client';
import { Card } from '@/components/ui/card';
import { Package } from 'lucide-react';
export default function WaterFertilizerParameterPage() {
return (
<div className="space-y-6">
<Card className="p-6">
<div className="flex items-center gap-3 mb-4">
<Package className="w-6 h-6 text-blue-600" />
<h2 className="text-xl font-semibold"></h2>
</div>
<div className="space-y-3">
<p className="text-muted-foreground">
</p>
<div className="p-3 bg-muted rounded-lg">
<p className="text-sm">
<strong></strong> /water-fertilizer-control/wf-management/parameter
</p>
<p className="text-sm mt-1">
<strong></strong>
</p>
</div>
</div>
</Card>
</div>
);
}

View File

@@ -1123,6 +1123,157 @@ const aiCropModel = {
] ]
} }
// 水肥一体化控制系统
const waterFertilizerControl = {
navMain: [
{
title: "水肥机管理",
url: "/water-fertilizer-control/wf-management",
icon: <Package className="w-4 h-4" />,
items: [
{
title: "设备管理",
url: "/water-fertilizer-control/wf-management/device",
isActive: false
},
{
title: "组件管理",
url: "/water-fertilizer-control/wf-management/component",
isActive: false
},
{
title: "参数配置",
url: "/water-fertilizer-control/wf-management/parameter",
isActive: false
},
{
title: "映射关系",
url: "/water-fertilizer-control/wf-management/mapping",
isActive: false
}
]
},
{
title: "智能灌溉",
url: "/water-fertilizer-control/smart",
icon: <TrendingUp className="w-4 h-4" />,
items: [
{
title: "模型配置",
url: "/water-fertilizer-control/smart/model-config",
isActive: false
},
{
title: "自动灌溉",
url: "/water-fertilizer-control/smart/auto",
isActive: false
},
{
title: "手动灌溉",
url: "/water-fertilizer-control/smart/manual",
isActive: false
},
{
title: "实时监控",
url: "/water-fertilizer-control/smart/realtime",
isActive: false
},
{
title: "历史记录",
url: "/water-fertilizer-control/smart/history",
isActive: false
}
]
},
{
title: "施肥配方管理",
url: "/water-fertilizer-control/fertilizer",
icon: <Droplets className="w-4 h-4" />,
items: [
{
title: "水量控制",
url: "/water-fertilizer-control/fertilizer/water-control",
isActive: false
},
{
title: "液位设定",
url: "/water-fertilizer-control/fertilizer/level-setting",
isActive: false
},
{
title: "搅拌控制",
url: "/water-fertilizer-control/fertilizer/stirring-control",
isActive: false
},
{
title: "历史数据",
url: "/water-fertilizer-control/fertilizer/history-data",
isActive: false
}
]
},
{
title: "水肥控制",
url: "/water-fertilizer-control/wf-control",
icon: <Settings className="w-4 h-4" />,
items: [
{
title: "参数设置",
url: "/water-fertilizer-control/wf-control/params",
isActive: false
},
{
title: "水箱实时监控",
url: "/water-fertilizer-control/wf-control/tank-realtime",
isActive: false
},
{
title: "阀门控制",
url: "/water-fertilizer-control/wf-control/valve-control",
isActive: false
},
{
title: "阀门实时监控",
url: "/water-fertilizer-control/wf-control/valve-realtime",
isActive: false
},
{
title: "施肥历史",
url: "/water-fertilizer-control/wf-control/fertilizer-history",
isActive: false
},
{
title: "阀门历史",
url: "/water-fertilizer-control/wf-control/valve-history",
isActive: false
}
]
},
{
title: "实时监测与预警",
url: "/water-fertilizer-control/monitoring",
icon: <AlertTriangle className="w-4 h-4" />,
items: [
{
title: "预警逻辑",
url: "/water-fertilizer-control/monitoring/alert-logic",
isActive: false
},
{
title: "阈值预警",
url: "/water-fertilizer-control/monitoring/threshold-alert",
isActive: false
},
{
title: "通知推送",
url: "/water-fertilizer-control/monitoring/notification-push",
isActive: false
}
]
}
]
}
function RootLayoutContent({ function RootLayoutContent({
children, children,
}: { }: {
@@ -1146,6 +1297,8 @@ function RootLayoutContent({
return agricultureAsset; return agricultureAsset;
case '/ai-crop-model': case '/ai-crop-model':
return aiCropModel; return aiCropModel;
case '/water-fertilizer-control':
return waterFertilizerControl;
case '/central-config': case '/central-config':
return centralConfigData; return centralConfigData;
default: default: