# 排班管理功能使用指南

## 功能概述

排班管理功能位于 **农事管理 → 绩效管理 → 排班管理**，支持灵活的周排班和月排班管理，提供可视化的人员时间分配界面。

## 主要功能

### 1. 新建排班

1. 点击"新建排班"按钮
2. 填写排班基本信息：
   - **排班名称**：如"2024年3月第1周排班"
   - **排班类型**：
     - 周排班：7天
     - 月排班：30天
   - **开始日期**和**结束日期**：系统会根据类型自动计算结束日期

3. 添加人员：
   - 可以勾选单个或多个员工
   - 也可以点击"添加全部员工"一次性添加所有在职员工
   - 添加后，系统会为每个员工在每一天生成默认的早班排班

4. 编辑排班详情：
   - 使用表格形式查看和编辑每个人员的每天排班
   - 月排班支持按周分页显示，点击箭头切换查看不同周

### 2. 班次类型

系统支持4种班次类型，每种都有预设的工作时间：

- **早班**：08:00-16:00
- **中班**：12:00-20:00  
- **晚班**：16:00-00:00
- **休息**：无需工作

每个班次可以：
- 单独调整工作时间
- 添加任务说明（可选）

### 3. 批量操作

#### 批量设置班次
在"批量操作"列，可以快速将某个员工的所有日期设置为同一班次类型。

#### 复制某天排班
点击日期下方的"复制"按钮，可以将该日的所有排班复制到其他所有日期。

### 4. 排班管理

#### 编辑排班
- 在排班列表中点击"编辑"按钮
- 可以修改排班的所有内容，包括人员和班次安排

#### 复制排班
- 点击"复制"按钮，创建一个排班的副本
- 系统会自动调整时间到当前日期
- 状态重置为"草稿"

#### 发布排班
- 草稿状态的排班可以点击"发布"按钮
- 发布后状态变为"已发布"

#### 导出班表
- 点击"导出"按钮
- 系统会生成CSV格式的班表文件
- 包含所有班次的详细信息

#### 删除排班
- 点击删除按钮（垃圾桶图标）
- 确认后删除排班及所有班次数据

## 使用技巧

1. **快速创建排班**
   - 先创建一周的标准排班
   - 使用"复制"功能快速生成后续周次的排班

2. **灵活调整**
   - 可以先使用批量操作设置基础班次
   - 再针对特殊情况单独调整

3. **月排班分页**
   - 月排班时，使用分页查看不同周次
   - 每页显示7天的排班情况

4. **人员管理**
   - 在排班编辑界面可以随时添加或移除人员
   - 移除人员会删除该人员的所有排班记录

## 数据存储

- 排班数据保存在浏览器的 localStorage 中
- 键名：`smart_agriculture_schedules`
- 刷新页面后数据会自动加载

## 注意事项

1. 确保在"系统配置 → 用户管理 → 员工管理"中已录入员工信息
2. 删除排班操作不可恢复，请谨慎操作
3. 建议定期导出班表作为备份
4. 发布前仔细检查排班安排是否正确

## 技术实现

### 组件结构

- **OperationPerformance.tsx**: 主组件，包含排班列表展示
- **ScheduleEditor.tsx**: 排班编辑器，提供详细的编辑界面

### 数据模型

```typescript
interface Schedule {
  id: string;
  name: string;
  type: 'week' | 'month';
  startDate: string;
  endDate: string;
  shifts: ScheduleShift[];
  status: '草稿' | '已发布';
  createdAt: string;
}

interface ScheduleShift {
  staffId: string;
  staffName: string;
  team: string;
  date: string;
  shift: '早班' | '中班' | '晚班' | '休息';
  workHours: string;
  task?: string;
}
```

## 更新日志

### 2024-03-XX
- ✅ 新增排班编辑器组件
- ✅ 支持周排班和月排班
- ✅ 支持可视化的人员时间分配
- ✅ 支持批量操作和单独调整
- ✅ 支持复制某天排班到其他日期
- ✅ 月排班支持分页显示
- ✅ 支持CSV格式导出
