14 KiB
14 KiB
✅ 负载设备库功能 - 开发完成
🎯 功能概述
负载设备库是一个完整的设备管理系统,用于管理所有负载设备的基本信息和生命周期。
📋 字段说明
核心字段(5个)
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 设备名称 | 文本 | ✅ 是 | 设备的唯一名称标识 |
| 负载类型 | 下拉选择 | ✅ 是 | 从"负载类型"中选择 |
| 采购时间 | 日期 | ✅ 是 | 设备采购日期 |
| 使用时间 | 日期 | ⭕ 否 | 设备投入使用日期,留空表示待使用 |
| 备注 | 多行文本 | ⭕ 否 | 设备用途、注意事项等 |
系统字段(自动生成)
| 字段 | 说明 |
|---|---|
| id | 唯一标识符 |
| createdAt | 创建时间 |
| updatedAt | 更新时间 |
🎨 界面功能
1️⃣ 统计卡片(4个)
┌──────────┬──────────┬──────────┬──────────┐
│总设备数 │已投入使用│待使用 │本月采购 │
│ 3 │ 2 │ 1 │ 0 │
└──────────┴──────────┴──────────┴──────────┘
说明:
- 总设备数: 所有设备总数
- 已投入使用: 有使用时间的设备数量(绿色)
- 待使用: 没有使用时间的设备数量(橙色)
- 本月采购: 本月采购的设备数量(蓝色)
2️⃣ 搜索功能
搜索范围:
- ✅ 设备名称
- ✅ 负载类型名称
- ✅ 备注内容
特点:
- 实时搜索
- 高亮显示
- 一键清除
3️⃣ 设备列表
列表字段:
| 列名 | 说明 |
|---|---|
| 设备名称 | 设备的名称 |
| 负载类型 | 类型名称 + 品牌 + 型号 |
| 采购时间 | 格式化日期显示 |
| 使用时间 | 绿色显示,未使用显示"-" |
| 备注 | 超过20字自动截断 |
| 状态 | 已使用/待使用徽章 |
| 操作 | 查看、编辑、删除 |
状态徽章:
- 🟢 已使用: 有使用时间(绿色背景)
- 🟠 待使用: 无使用时间(橙色背景)
4️⃣ 分页功能
特点:
- ✅ 默认每页10条
- ✅ 可选每页数量: 10/20/50/100
- ✅ 支持首页/上一页/下一页/末页
- ✅ 显示总数和当前范围
- ✅ 使用通用分页组件
5️⃣ 操作功能
🔍 查看详情
- 完整显示所有字段
- 显示创建和更新时间
- 显示关联的负载类型详情
- 类型品牌、型号、描述
✏️ 编辑设备
- 修改所有字段
- 表单验证
- 自动保存更新时间
➕ 新增设备
- 填写必填字段
- 选择负载类型
- 日期选择器
- 表单验证
🗑️ 删除设备
- 二次确认弹窗
- 防止误删
- 不可恢复提示
📊 数据示例
示例1: 已使用设备
设备名称: 北斗定位终端-001
负载类型: 北斗定位终端 (华为)
型号: BD-200
采购时间: 2024-01-15
使用时间: 2024-01-20 ✅
备注: 用于拖拉机实时定位
状态: 已使用 🟢
示例2: 待使用设备
设备名称: 油耗传感器-F01
负载类型: 油耗传感器 (博世)
型号: FS-100
采购时间: 2024-03-05
使用时间: - ⭕
备注: 待安装
状态: 待使用 🟠
示例3: 监控设备
设备名称: 高清摄像头-A01
负载类型: 高清摄像头 (海康威视)
型号: DS-2CD2345
采购时间: 2024-02-10
使用时间: 2024-02-15 ✅
备注: 监控农田作业情况
状态: 已使用 🟢
🔗 与负载类型的关联
数据关联
负载设备库中的"负载类型"字段,关联到"负载类型"页面的数据:
负载类型页面 (LoadType)
↓
类型数据
↓
负载设备库 (LoadDeviceLibrary)
↓
下拉选择
选择器显示格式
北斗定位终端 (华为) - BD-200
高清摄像头 (海康威视) - DS-2CD2345
油耗传感器 (博世) - FS-100
转速传感器 (西门子) - RS-500
温度传感器 (霍尼韦尔) - TS-300
列表显示格式
负载类型列:
北斗定位终端 (华为)
BD-200 ← 型号(灰色小字)
💾 数据存储
LocalStorage Key
smart_agriculture_load_devices
数据结构
interface LoadDeviceRecord {
id: string; // 唯一标识
deviceName: string; // 设备名称
loadTypeId: string; // 负载类型ID(外键)
purchaseDate: string; // 采购时间 (YYYY-MM-DD)
usageDate?: string; // 使用时间 (YYYY-MM-DD)
remarks?: string; // 备注
createdAt: string; // 创建时间 (ISO 8601)
updatedAt: string; // 更新时间 (ISO 8601)
}
示例数据
{
"id": "device-1",
"deviceName": "北斗定位终端-001",
"loadTypeId": "type-1",
"purchaseDate": "2024-01-15",
"usageDate": "2024-01-20",
"remarks": "用于拖拉机实时定位",
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
}
🎯 使用流程
流程1: 新增设备
- 点击"新增设备"按钮
- 填写设备名称(必填)
- 选择负载类型(必填,从下拉列表选择)
- 选择采购时间(必填,日期选择器)
- 选择使用时间(可选,留空表示待使用)
- 填写备注(可选)
- 点击"添加"保存
流程2: 编辑设备
- 在列表中找到要编辑的设备
- 点击"编辑"按钮(铅笔图标)
- 修改需要更改的字段
- 点击"保存"
流程3: 查看详情
- 在列表中找到要查看的设备
- 点击"查看"按钮(眼睛图标)
- 查看完整的设备信息
- 包括关联的负载类型详情
- 点击"关闭"退出
流程4: 删除设备
- 在列表中找到要删除的设备
- 点击"删除"按钮(垃圾桶图标)
- 在确认对话框中点击"确认删除"
- 设备被永久删除
流程5: 搜索设备
- 在搜索框输入关键词
- 实时过滤列表
- 点击"清除"恢复完整列表
📱 界面预览
统计卡片区域
┌─────────────────────────────────────────────────────┐
│ 负载设备库 [+ 新增设备] │
│ 管理所有负载设备的基本信息和采购记录 │
├─────────────────────────────────────────────────────┤
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │总设备数│ │已投入使│ │待使用 │ │本月采购│ │
│ │ 3 │ │ 2 │ │ 1 │ │ 0 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
└─────────────────────────────────────────────────────┘
搜索栏
┌─────────────────────────────────────────────────────┐
│ 🔍 搜索设备名称、类型或备注... [清除] │
└─────────────────────────────────────────────────────┘
设备列表表格
┌──────────┬───────────<EFBFBD><EFBFBD><EFBFBD>┬──────────┬──────────┬──────┬──────┬────────┐
│设备名称 │负载类型 │采购时间 │使用时间 │备注 │状态 │操作 │
├──────────┼────────────┼──────────┼──────────┼──────┼──────┼────────┤
│北斗定位 │北斗定位终端│2024-01-15│2024-01-20│用于..│已使用│👁✏️🗑️ │
│终端-001 │(华为) │ │ │ │ │ │
│ │BD-200 │ │ │ │ │ │
├──────────┼────────────┼──────────┼──────────┼──────┼──────┼────────┤
│高清摄像 │高清摄像头 │2024-02-10│2024-02-15│监控..│已使用│👁✏️🗑️ │
│头-A01 │(海康威视) │ │ │ │ │ │
│ │DS-2CD2345 │ │ │ │ │ │
├──────────┼────────────┼──────────┼──────────┼──────┼──────┼────────┤
│油耗传感 │油耗传感器 │2024-03-05│ - │待安装│待使用│👁✏️🗑️ │
│器-F01 │(博世) │ │ │ │ │ │
│ │FS-100 │ │ │ │ │ │
└──────────┴────────────┴──────────┴──────────┴──────┴──────┴────────┘
分页控制
┌─────────────────────────────────────────────────────┐
│ 显示 1-3 条,共 3 条 │
│ [每页: 10▼] [首页] [上一页] 1 [下一页] [末页] │
└─────────────────────────────────────────────────────┘
✨ 功能特点
1. 完整的CRUD操作
- ✅ Create (新增)
- ✅ Read (查看)
- ✅ Update (编辑)
- ✅ Delete (删除)
2. 数据验证
- ✅ 必填字段验证
- ✅ 日期格式验证
- ✅ 类型关联验证
3. 用户体验
- ✅ 实时搜索
- ✅ 分页浏览
- ✅ 状态徽章
- ✅ 二次确认
- ✅ Toast提示
4. 数据展示
- ✅ 统计卡片
- ✅ 格式化日期
- ✅ 文本截断
- ✅ 状态标识
5. 关联数据
- ✅ 自动加载负载类型
- ✅ 下拉选择器
- ✅ 详情展示类型信息
- ✅ 安全的数据规范化
🔧 技术实现
核心技术栈
- React Hooks (useState, useEffect)
- React Hook Form (表单管理)
- 自定义分页Hook (usePagination)
- LocalStorage (数据持久化)
- Shadcn UI (UI组件库)
组件依赖
// UI组件
import { Button } from '../../ui/button';
import { Card } from '../../ui/card';
import { Badge } from '../../ui/badge';
import { Table, ... } from '../../ui/table';
import { Dialog, ... } from '../../ui/dialog';
import { AlertDialog, ... } from '../../ui/alert-dialog';
import { Input } from '../../ui/input';
import { Label } from '../../ui/label';
import { Select, ... } from '../../ui/select';
import { Textarea } from '../../ui/textarea';
// 功能组件
import { DataPagination } from '../../ui/data-pagination';
import { usePagination } from '../../../lib/usePagination';
// 第三方库
import { toast } from 'sonner@2.0.3';
import { useForm } from 'react-hook-form@7.55.0';
// 图标
import { Plus, Edit, Trash2, Eye, Search } from 'lucide-react';
关键函数
loadData()
- 加载负载类型数据
- 加载设备数据
- 初始化示例数据
- 数据规范化处理
onSubmit()
- 新增/编辑设备
- 数据验证
- LocalStorage保存
- Toast通知
handleDelete()
- 删除确认
- 数据更新
- LocalStorage同步
搜索过滤
const filteredDevices = devices.filter(device => {
const searchLower = searchTerm.toLowerCase();
return (
device.deviceName.toLowerCase().includes(searchLower) ||
getLoadTypeName(device.loadTypeId).toLowerCase().includes(searchLower) ||
(device.remarks && device.remarks.toLowerCase().includes(searchLower))
);
});
统计计算
const stats = {
total: devices.length,
withUsageDate: devices.filter(d => d.usageDate).length,
withoutUsageDate: devices.filter(d => !d.usageDate).length,
thisMonth: devices.filter(d => {
const purchaseDate = new Date(d.purchaseDate);
const now = new Date();
return purchaseDate.getMonth() === now.getMonth() &&
purchaseDate.getFullYear() === now.getFullYear();
}).length,
};
📝 注意事项
1. 数据依赖
- 负载设备库依赖于负载类型数据
- 如果负载类型为空,选择器会显示"暂无可用类型"
- 确保先在"负载类型"页面添加类型
2. 日期处理
- 采购时间为必填
- 使用时间可选,留空表示待使用
- 使用HTML5日期选择器(type="date")
3. 状态判断
- 有使用时间 = 已使用(绿色徽章)
- 无使用时间 = 待使用(橙色徽章)
4. 删除操作
- 删除是永久性的,不可恢复
- 有二次确认对话框
- 删除后从LocalStorage中移除
5. 搜索功能
- 支持模糊搜索
- 搜索范围:设备名称、类型名称、备注
- 大小写不敏感
🚀 快速开始
访问路径
智能农机管理系统 → 农机负载管理 → 负载设备库
初始数据
系统会自动创建3条示例数据:
- 北斗定位终端-001(已使用)
- 高清摄像头-A01(已使用)
- 油耗传感器-F01(待使用)
第一次使用
- 确保负载类型数据已存在
- 刷新页面加载数据
- 查看示例设备
- 尝试添加新设备
📚 相关文档
/LOAD_TYPE_PARAMETER_EXAMPLES.md- 负载类型参数示例/PARAMETER_EXAMPLES_QUICK_VIEW.md- 参数模板快速查看/lib/usePagination.ts- 分页Hook源码/components/ui/data-pagination.tsx- 分页组件源码
🎉 开发状态
- ✅ 基础架构完成
- ✅ CRUD功能完成
- ✅ 搜索功能完成
- ✅ 分页功能完成
- ✅ 统计功能完成
- ✅ 表单验证完成
- ✅ 数据关联完成
- ✅ 界面优化完成
状态: 🟢 已完成,可以使用
开发时间: 2025-10-17
版本: v1.0
开发者: AI Assistant