# 盘点管理完整功能说明

## 功能概述

盘点管理模块已完成全面升级，实现了完整的盘点业务闭环，符合实际仓库管理流程。

## 核心改进

### 1. 业务流程优化

**之前**：创建任务时就需要填写实盘数量  
**现在**：创建 → 打印 → 现场盘点 → 录入 → 审批

这个流程更符合实际业务场景：
1. 先创建任务记录账面数量
2. 打印盘点表供现场使用
3. 盘点人员现场清点
4. 回到系统录入实盘结果
5. 提交审批调整库存

### 2. 任务状态管理

现在支持三种状态：
- **待盘点**（蓝色）：任务已创建，等待现场盘点
- **待审批**（橙色）：实盘数量已录入，等待审批
- **已完成**（绿色）：审批通过，库存已调整
- **已取消**（灰色）：任务取消

### 3. 打印功能

新增专业的打印盘点表功能：

**打印时机**：
- 创建任务后立即打印（实盘数量栏为空）
- 录入完成后打印（实盘数量栏有数据）
- 任何时候都可以重复打印

**打印内容**：
```
┌─────────────────────────────────────┐
│        库存盘点表                   │
│   Stock Inventory Check List       │
├─────────────────────────────────────┤
│ 任务信息（名称、编号、仓库等）      │
├─────────────────────────────────────┤
│ 盘点明细表格                        │
│ - 物料信息（名称、规格、库位等）    │
│ - 账面数量                          │
│ - 实盘数量（空白或已填）            │
│ - 差异                              │
├─────────────────────────────────────┤
│ 统计汇总（总数、盘盈、盘亏）        │
├─────────────────────────────────────┤
│ 签字确认（盘点人、复核人、审批人）  │
└─────────────────────────────────────┘
```

**打印优化**：
- ✅ 自动隐藏页面其他元素
- ✅ A4纸张，标准格式
- ✅ 表格边框清晰
- ✅ 适合手工填写
- ✅ 可保存为PDF

### 4. 盘点录入功能

新增专门的盘点录入对话框：

**功能特点**：
- 显示任务基本信息
- 列表展示所有待盘点物料
- 输入实盘数量
- 实时计算差异
- 实时更新状态（盘盈/盘亏/正常）
- 显示录入进度

**数据验证**：
- 必须录入所有物料的实盘数量
- 数量必须为非负数
- 提交前检查完整性

**用户体验**：
- 清晰的统计信息
- 实时反馈
- 一键提交审批

## 完整操作流程

### 流程1：创建盘点任务

```
进入库存管理 > 盘点管理
    ↓
点击"创建盘点任务"
    ↓
填写任务信息
    ↓
点击"初始化盘点物料"（加载库存）
    ↓
全盘：所有物料自动选中
抽盘：手动勾选需要盘点的物料
    ↓
点击"确认创建"
    ↓
状态：待盘点
```

**界面展示**：
- 只显示账面数量
- 不显示实盘数量和差异
- 物料列表简洁明了

### 流程2：打印盘点表

```
找到待盘点的任务
    ↓
点击"打印盘点表"按钮
    ↓
浏览器打开打印预览
    ↓
检查内容是否正确
    ↓
选择打印机或保存PDF
    ↓
打印/保存
```

**打印表特点**：
- 实盘数量栏显示为下划线
- 差异栏显示为下划线
- 适合现场手工填写

### 流程3：现场盘点

```
携带打印的盘点表
    ↓
到达指定仓库
    ↓
按照盘点表逐项清点
    ↓
在"实盘数量"栏填写实际数量
    ↓
如有异常在"备注"栏说明
    ↓
盘点完成，签字确认
```

### 流程4：录入实盘数量

```
返回系统，找到待盘点任务
    ↓
点击"盘点录入"按钮
    ↓
在弹出对话框中录入数据
    ↓
系统自动计算差异
    ↓
状态自动更新（盘盈/盘亏/正常）
    ↓
检查录入是否完整
    ↓
点击"提交审批"
    ↓
状态：待审批
```

**录入界面**：
- 显示任务信息
- 物料列表
- 实盘数量输入框
- 实时差异计算
- 统计信息（总数、已录入、盘盈、盘亏）

### 流程5：审批调整

```
审批人员查看任务
    ↓
检查盘盈盘亏情况
    ↓
查看详细明细
    ↓
确认数据准确性
    ↓
点击"审批通过"或"驳回"
```

**审批通过**：
- 任务状态变为"已完成"
- 系统自动调整库存
- 记录盘盈盘亏
- 生成库存变动记录

**审批驳回**：
- 任务状态变为"待盘点"
- 需要重新盘点录入
- 可以重新打印盘点表

## 数据模型

### StockCheckTask（盘点任务）

```typescript
{
  id: string;                      // 任务ID
  taskNo: string;                  // 任务编号
  taskName: string;                // 任务名称
  warehouseId: string;             // 仓库ID
  warehouseName: string;           // 仓库名称
  status: '待盘点' | '待审批' | '已完成' | '已取消';
  checkType: '全盘' | '抽盘';      // 盘点类型
  planDate: string;                // 计划日期
  actualDate?: string;             // 实际盘点日期
  items: StockCheckItem[];         // 盘点明细
  profit: number;                  // 盘盈项数
  loss: number;                    // 盘亏项数
  checker: string;                 // 盘点人
  approver?: string;               // 审批人
  notes?: string;                  // 备注
  createdAt: string;               // 创建时间
}
```

### StockCheckItem（盘点明细）

```typescript
{
  id: string;                      // 明细ID
  materialId: string;              // 物料ID
  materialName: string;            // 物料名称
  spec: string;                    // 规格
  unit: string;                    // 单位
  locationCode: string;            // 库位编码
  batchNo: string;                 // 批次号
  bookQuantity: number;            // 账面数量
  actualQuantity?: number;         // 实盘数量（可选）
  difference: number;              // 差异
  status: '待盘点' | '盘盈' | '盘亏' | '正常';
  selected?: boolean;              // 是否选中（抽盘用）
  notes?: string;                  // 备注
}
```

## 关键函数说明

### handleInitCheckItems
```typescript
// 初始化盘点物料
// 从库存批次中加载物料，设置账面数量
// actualQuantity 初始为 undefined
```

### handlePrintCheckList
```typescript
// 打印盘点表
// 设置 printTask，触发打印预览
// 打印完成后清除 printTask
```

### handleOpenCheckInput
```typescript
// 打开盘点录入对话框
// 复制任务的 items 到 inputCheckItems
```

### handleUpdateInputCheckQuantity
```typescript
// 更新盘点录入数量
// 实时计算差异和状态
```

### handleSubmitCheckInput
```typescript
// 提交盘点录入
// 验证完整性
// 更新任务状态为"待审批"
// 计算盘盈盘亏数量
```

### handleSubmitCheckApproval
```typescript
// 提交审批结果
// 通过：状态变为"已完成"，调整库存
// 驳回：状态变为"待盘点"，重新盘点
```

## 使用建议

### 1. 全盘 vs 抽盘

**全盘**：
- 适用于定期全面盘点
- 盘点所有物料
- 工作量大但结果准确
- 建议：每月或每季度

**抽盘**：
- 适用于重点物料检查
- 只盘点选中的物料
- 效率高，针对性强
- 建议：每周或每两周

### 2. 打印时机

**创建后立即打印**：
- 实盘数量栏为空
- 适合现场手工填写
- 推荐做法

**录入后再打印**：
- 实盘数量已填写
- 适合复核检查
- 可作为存档

### 3. 差异处理

**正常范围**：
- 小额差异：盘盈/盘亏1-2件
- 可能原因：计量误差、单位换算

**异常差异**：
- 大额差异：盘盈/盘亏超过10%
- 需要：重新盘点、查明原因

**处理流程**：
1. 发现异常差异
2. 重新核实
3. 查找原因（损耗、遗失、错账等）
4. 在备注中说明
5. 报批处理

### 4. 审批要点

审批人员应检查：
- ✅ 盘点是否完整
- ✅ 差异是否合理
- ✅ 异常是否有说明
- ✅ 签字是否齐全
- ✅ 数据是否准确

## 业务价值

### 1. 账实相符
通过定期盘点，确保系统库存与实际库存一致，提高数据准确性。

### 2. 损耗管理
及时发现物料损耗、遗失等问题，加强库存管理。

### 3. 成本控制
准确的库存数据是成本核算的基础，影响企业财务报表。

### 4. 决策支持
真实的库存数据为采购、生产等决策提供可靠依据。

### 5. 流程规范
标准化的盘点流程，提高工作效率，减少人为错误。

## 技术特点

### 1. 打印优化
- 使用CSS @media print规则
- 自动隐藏非打印元素
- 专业的打印样式
- 支持PDF保存

### 2. 状态管理
- 清晰的状态流转
- 状态驱动的UI显示
- 防止非法状态转换

### 3. 数据验证
- 实盘数量必填
- 数量非负验证
- 完整性检查

### 4. 用户体验
- 实时反馈
- 进度提示
- 清晰的统计信息
- 友好的错误提示

## 后续优化建议

### 短期（1-2周）
1. 增加批量录入功能
2. 支持扫码录入
3. 增加移动端适配

### 中期（1-2个月）
1. 盘点历史对比
2. 差异分析报表
3. 预警阈值设置
4. 自动生成盘点计划

### 长期（3-6个月）
1. AI辅助盘点（图像识别）
2. RFID盘点集成
3. 盘点效率分析
4. 多仓协同盘点

## 总结

盘点管理模块现已实现：
- ✅ 完整的业务闭环
- ✅ 专业的打印功能
- ✅ 清晰的状态管理
- ✅ 友好的用户体验
- ✅ 准确的数据计算
- ✅ 规范的审批流程

这是一个符合实际业务需求、技术实现优秀、用户体验友好的库存盘点解决方案。
