# 验收处理功能快速测试指南

## 🎯 测试目标
验证物资归还验收功能是否正确实现了：
1. ✅ 根据申请单自动带出清单物品
2. ✅ 输入每个物品的完好程度
3. ✅ 保存验收结果并更新状态

## 🚀 快速测试步骤

### 步骤1：准备测试数据
确保系统中有待验收的归还记录

**如果没有，先创建一条：**
1. 进入"物资归还" → "归还登记"标签
2. 点击"新建归还登记"
3. 选择一个待归还的领用单
4. 确认归还物品和数量
5. 提交登记（状态会变为"待验收"）

### 步骤2：进入验收处理
1. 切换到"归还处理"标签页
2. 找到"待验收归还"列表
3. 找到刚才创建的归还记录
4. 点击"开始验收"按钮

### 步骤3：验证自动带出清单 ✅
**检查点：**
- [ ] 对话框是否打开
- [ ] 顶部是否显示归还单信息（单号、领用单、归还人、时间）
- [ ] 是否显示"验收操作指南"卡片
- [ ] 验收清单是否自动列出所有物品
- [ ] 每个物品是否显示序号（#1, #2...）
- [ ] 物品信息是否完整（名称、类型、借出数量、申报数量、申报状态、批次号）

**预期结果：**
```
✓ 对话框标题：归还验收处理
✓ 显示归还单基本信息
✓ 显示操作指南（4个步骤）
✓ 清单显示"共 X 项物品待验收"
✓ 每个物品卡片有序号和完整信息
```

### 步骤4：验证默认数据填充 ✅
**检查每个物品的初始值：**
- [ ] "实际验收数量"是否等于申报归还数量
- [ ] 状态数量是否根据申报状态自动填充
  - 申报"正常" → 正常数量 = 申报数量
  - 申报"损坏" → 损坏数量 = 申报数量
  - 申报"遗失" → 遗失数量 = 申报数量
  - 申报"需要保养" → 需保养数量 = 申报数量

**预期结果：**
```
示例：申报归还200米滴灌管，状态"正常"
✓ 实际验收数量：200
✓ 正常：200
✓ 损坏：0
✓ 遗失：0
✓ 需保养：0
✓ 显示绿色提示"数量分配正确"
```

### 步骤5：测试完好程度输入 ✅
**测试场景1：修改状态数量**
1. 选择第一个物品
2. 修改状态数量：
   - 正常：180
   - 损坏：20
   - 遗失：0
   - 需保养：0

**检查点：**
- [ ] 输入框可以正常输入
- [ ] 数量可以增加/减少
- [ ] 总计实时更新（180 + 20 = 200）
- [ ] 显示绿色"数量分配正确"

**测试场景2：数量不匹配**
1. 修改正常数量为150（总计150，应为200）
2. 观察提示变化

**检查点：**
- [ ] 显示红色警告
- [ ] 提示文字："状态数量总和（150）需等于实际验收数量（200）"

**测试场景3：修改实际验收数量**
1. 将实际验收数量改为180
2. 重新分配状态数量

**检查点：**
- [ ] 可以修改实际验收数量
- [ ] 最大值为借出数量
- [ ] 状态数量需要重新调整到180

### 步骤6：测试多物品验收 ✅
如果有多个物品：
1. 逐个完成每个物品的验收
2. 观察验收汇总区域

**检查点：**
- [ ] 每个物品都可以独立设置
- [ ] 验收汇总正确统计所有物品
- [ ] 汇总显示4个状态的总数量

**预期结果：**
```
验收汇总
┌─────────┬─────────┬─────────┬─────────┐
│ ✓ 正常  │ ⚠ 损坏  │ ✗ 遗失  │ 🔧 需保养│
│   380   │   35    │   10    │   25    │
└─────────┴─────────┴─────────┴─────────┘
```

### 步骤7：测试验收备注 ✅
1. 在"验收备注"文本框中输入内容
2. 输入测试文字："物资外观完好，功能正常"

**检查点：**
- [ ] 备注框可以正常输入
- [ ] 支持多行文本
- [ ] 可以输入中文和标点

### 步骤8：测试验证机制 ✅
**测试场景：提交前验证**
1. 故意让某个物品的数量不匹配
2. 点击"确认验收并更新库存"

**检查点：**
- [ ] 显示错误提示
- [ ] 提示内容："验收数量分配错误，请检查各状态数量总和是否等于实际验收数量"
- [ ] 不允许提交

### 步骤9：提交验收 ✅
1. 确保所有物品数量分配正确
2. 点击"确认验收并更新库存"按钮

**检查点：**
- [ ] 显示成功提示
- [ ] 提示包含验收结果摘要
- [ ] 对话框自动关闭

**预期提示内容：**
```
✓ 归还验收完成，系统已更新库存和状态

正常物资 380 件已入库；
损坏物资 35 件已转维修；
遗失物资 10 件已记录损失；
需保养物资 25 件已安排保养
```

### 步骤10：验证状态更新 ✅
1. 回到归还记录列表
2. 找到刚才验收的记录

**检查点：**
- [ ] 状态是否变为"已验收"
- [ ] 是否显示验收人
- [ ] 是否显示验收时间
- [ ] 验收结果是否正确保存

### 步骤11：查看验收详情 ✅
1. 点击"已验收"记录的"详情"按钮
2. 查看验收结果

**检查点：**
- [ ] 显示验收处理信息
- [ ] 显示验收人和验收时间
- [ ] 显示验收结果统计
- [ ] 显示处理备注

## ✅ 完整测试检查表

### 功能测试
- [ ] 验收对话框正常打开
- [ ] 归还单信息正确显示
- [ ] 物品清单自动带出
- [ ] 物品信息完整显示
- [ ] 默认数量正确填充
- [ ] 可以修改实际验收数量
- [ ] 可以修改状态数量
- [ ] 可以输入验收备注
- [ ] 数量验证实时生效
- [ ] 验收汇总正确计算
- [ ] 可以成功提交验收
- [ ] 状态正确更新为"已验收"
- [ ] 验收结果正确保存

### UI/UX测试
- [ ] 界面布局合理
- [ ] 信息展示清晰
- [ ] 操作指引明确
- [ ] 输入框大小合适
- [ ] 颜色编码直观
- [ ] 提示信息准确
- [ ] 验证提示明显
- [ ] 成功提示友好

### 边界测试
- [ ] 验收数量=0时的处理
- [ ] 验收数量>借出数量时的限制
- [ ] 状态数量为负数时的限制
- [ ] 全部物品都正常的情况
- [ ] 全部物品都损坏的情况
- [ ] 混合状态的情况

## 🎨 视觉效果检查

### 验收清单卡片
```
┌─────────────────────────────────────────┐
│ #1  滴灌管                              │
│     类型：农具 • 借出：200米 •          │
│     申报归还：200米 • 申报状态：正常    │
│                                         │
│ ┌─────────────┬──────────────────────┐ │
│ │ 实际验收数量│ 物资状态分配 *       │ │
│ │ [200     ] │ ┌──────┬──────┐      │ │
│ │             │ │✓正常 │⚠损坏 │      │ │
│ │ 验收备注    │ │[200] │[ 0 ] │      │ │
│ │ [_______]   │ ├──────┼──────┤      │ │
│ │             │ │✗遗失 │🔧保养│      │ │
│ │             │ │[ 0 ] │[ 0 ] │      │ │
│ │             │ └──────┴──────┘      │ │
│ │             │ ✓ 数量分配正确        │ │
│ └─────────────┴──────────────────────┘ │
└─────────────────────────────────────────┘
```

### 验收汇总
```
┌───────────────────────────────────────┐
│ 📊 验收汇总                           │
├─────────┬─────────┬─────────┬────────┤
│ ✓ 正常  │ ⚠ 损坏  │ ✗ 遗失  │🔧 需保养│
│   200   │    0    │    0    │    0   │
└─────────┴─────────┴─────────┴────────┘
```

## 🐛 常见问题排查

### 问题1：清单没有自动显示
**可能原因：**
- selectedReturn为null
- verificationItems未初始化

**排查方法：**
```typescript
// 检查Dialog的onOpenChange
console.log('selectedReturn:', selectedReturn);
console.log('verificationItems:', verificationItems);
```

### 问题2：数量无法修改
**可能原因：**
- Input组件没有绑定onChange
- verificationItems状态未更新

**排查方法：**
```typescript
// 检查Input的onChange事件
onChange={(e) => {
  const newQty = parseInt(e.target.value) || 0;
  console.log('New quantity:', newQty);
  setVerificationItems(prev => ...);
}}
```

### 问题3：验证不生效
**可能原因：**
- 数量计算错误
- 验证逻辑问题

**排查方法：**
```typescript
console.log('totalVerified:', totalVerified);
console.log('actualQuantity:', verificationItem.actualQuantity);
console.log('quantityMatch:', quantityMatch);
```

## 📊 测试结果记录

### 测试信息
- 测试日期：__________
- 测试人员：__________
- 测试版本：__________

### 功能测试结果
| 功能项 | 测试结果 | 备注 |
|--------|---------|------|
| 清单自动带出 | ✅ / ❌ | |
| 默认数据填充 | ✅ / ❌ | |
| 完好程度输入 | ✅ / ❌ | |
| 数量验证 | ✅ / ❌ | |
| 验收汇总 | ✅ / ❌ | |
| 提交保存 | ✅ / ❌ | |
| 状态更新 | ✅ / ❌ | |

### 总体评价
- [ ] 功能完整
- [ ] 操作流畅
- [ ] 界面友好
- [ ] 数据准确

### 改进建议
1. _________________________________
2. _________________________________
3. _________________________________

## 🎯 验收标准

### 必须满足（P0）
- ✅ 清单必须自动带出所有物品
- ✅ 每个物品必须能输入完好程度
- ✅ 数量验证必须生效
- ✅ 验收结果必须正确保存
- ✅ 状态必须正确更新

### 应该满足（P1）
- ✅ 界面清晰易用
- ✅ 操作提示充分
- ✅ 验证提示明确
- ✅ 成功提示友好

### 可以改进（P2）
- ⭕ 支持键盘快捷操作
- ⭕ 支持批量设置状态
- ⭕ 支持拍照上传
- ⭕ 支持打印验收单

## 📚 相关文档
- 详细指南：`VERIFICATION_PROCESS_GUIDE.md`
- 功能完成：`RETURN_VERIFICATION_COMPLETE.md`
- 系统总结：`RETURN_SYSTEM_SUMMARY.md`
