# 折旧计算方法选择功能说明

## 📋 功能概述

在农资农具管理-折旧计算tab中添加了折旧方法选择功能，支持用户在**直线法**和**工作量法**之间选择，系统会根据选择的方法自动重新计算所有设备的折旧数据。

---

## ✨ 核心功能

### 1️⃣ **折旧方法单选**

用户可以在两种折旧方法之间选择：

| 折旧方法 | 图标 | 颜色 | 默认状态 |
|---------|------|------|---------|
| **直线法（平均年限法）** | 🖥️ Cpu | 蓝色 | ✅ **默认选中** |
| **工作量法** | ⏱️ Timer | 绿色 | ⚪ 未选中 |

### 2️⃣ **自动重新计算**

- ✅ 选择折旧方法后，系统**自动**重新计算所有设备的折旧数据
- ✅ 无需点击额外按钮，切换即计算
- ✅ 计算完成后显示成功提示

### 3️⃣ **计算方法**

#### **直线法（平均年限法）**
```
年折旧额 = 原值 ÷ 预计使用年限
月折旧额 = 年折旧额 ÷ 12
累计折旧 = 月折旧额 × 已使用月数
资产净值 = 原值 - 累计折旧
折旧率 = (累计折旧 ÷ 原值) × 100%
```

#### **工作量法**
```
单位折旧额 = 原值 ÷ 预计总工作量
累计折旧 = 单位折旧额 × 累计工作量
资产净值 = 原值 - 累计折旧
折旧率 = (累计折旧 ÷ 原值) × 100%
年折旧额 = (累计折旧 ÷ 已使用月数) × 12
```

---

## 🎨 界面设计

### 折旧方法选择卡片

```
┌──────────────────────────────────────────────────────┐
│  🧮 选择折旧计算方法                                  │
│                                                       │
│  ○ 🖥️ 直线法（平均年限法）  ⦿ ⏱️ 工作量法            │
│                                                       │
│  💡 当前使用 直线法 计算所有设备的折旧。               │
│     切换方法后，系统会自动重新计算所有设备的折旧数据。 │
└──────────────────────────────────────────────────────┘
```

### 配色方案

| 元素 | 配色 |
|------|------|
| **卡片背景** | 紫色到靛蓝渐变 (purple-50 → indigo-50) |
| **卡片边框** | 紫色 (purple-200) |
| **图标背景** | 紫色 (purple-600) |
| **直线法图标** | 蓝色 (blue-600) |
| **工作量法图标** | 绿色 (green-600) |
| **提示框** | 白色背景 + 紫色边框 |

---

## 🔄 操作流程

```
用户进入折旧计算tab
    ↓
查看当前折旧数据（默认使用直线法）
    ↓
点击"工作量法"单选按钮
    ↓
系统自动触发重新计算
    ↓
所有设备的折旧数据更新为工作量法计算结果
    ↓
统计卡片（原值、累计折旧、净值、折旧率）自动更新
    ↓
明细表显示更新后的数据
    ↓
显示成功提示："已使用工作量法重新计算所有设备折旧"
```

---

## 📊 数据结构

### 基础设备数据

```typescript
const baseEquipmentData = [
  {
    id: string;
    equipmentCode: string;        // 设备编号
    equipmentName: string;         // 设备名称
    purchaseDate: string;          // 购买日期
    purchasePrice: number;         // 购买原值
    depreciationYears: number;     // 折旧年限
    usedMonths: number;            // 已使用月数
    usageHours: number;            // 累计工作小时
    totalWorkload: number;         // 预计总工作量
  }
];
```

### 计算后的折旧记录

```typescript
interface DepreciationRecord {
  ...baseEquipmentData,
  depreciationMethod: '直线法' | '工作量法';
  annualDepreciation: number;        // 年折旧额
  accumulatedDepreciation: number;   // 累计折旧
  currentValue: number;              // 资产净值
  depreciationRate: number;          // 折旧率
}
```

---

## 💡 计算示例

### 示例设备数据
```
设备：拖拉机
购买原值：¥280,000
折旧年限：10年
已使用月数：31个月
累计工作量：1,250小时
预计总工作量：10,000小时
```

### 直线法计算
```
年折旧额 = 280,000 ÷ 10 = ¥28,000/年
月折旧额 = 28,000 ÷ 12 = ¥2,333.33/月
累计折旧 = 2,333.33 × 31 = ¥72,333
资产净值 = 280,000 - 72,333 = ¥207,667
折旧率 = (72,333 ÷ 280,000) × 100% = 25.8%
```

### 工作量法计算
```
单位折旧额 = 280,000 ÷ 10,000 = ¥28/小时
累计折旧 = 28 × 1,250 = ¥35,000
资产净值 = 280,000 - 35,000 = ¥245,000
折旧率 = (35,000 ÷ 280,000) × 100% = 12.5%
年折旧额 = (35,000 ÷ 31) × 12 = ¥13,548/年
```

---

## 🎯 功能特点

### 1. **默认选中直线法**
- 系统启动时默认使用直线法计算
- 直线法是最常用的折旧方法，符合大部分场景

### 2. **一键切换**
- 点击单选按钮即可切换方法
- 无需刷新页面，无需额外操作

### 3. **自动计算**
- 使用 `useEffect` 监听方法变化
- 切换方法时自动调用计算函数
- 计算完成后自动更新状态

### 4. **全局更新**
- 所有设备的折旧数据同时更新
- 统计卡片自动更新
- 明细表自动更新

### 5. **实时提示**
- 显示当前使用的计算方法
- 提示切换方法会重新计算
- 计算完成显示成功提示

---

## 📱 响应式设计

- **桌面端**：单选按钮横向排列
- **移动端**：单选按钮横向排列（可能换行）
- **卡片布局**：自适应屏幕宽度

---

## 🔧 技术实现

### State管理

```typescript
// 选择的计算方法
const [selectedCalculationMethod, setSelectedCalculationMethod] = 
  useState<'直线法' | '工作量法'>('直线法');

// 折旧记录（可修改）
const [depreciationRecords, setDepreciationRecords] = 
  useState<DepreciationRecord[]>(() => {
    // 初始使用直线法计算
    return baseEquipmentData.map(equipment => {
      // 计算逻辑...
    });
  });
```

### 计算函数

```typescript
const recalculateDepreciation = (method: '直线法' | '工作量法') => {
  const newRecords = baseEquipmentData.map(equipment => {
    if (method === '直线法') {
      // 直线法计算逻辑
    } else {
      // 工作量法计算逻辑
    }
    return {
      ...equipment,
      depreciationMethod: method,
      annualDepreciation,
      accumulatedDepreciation,
      currentValue,
      depreciationRate,
    };
  });
  setDepreciationRecords(newRecords);
  toast.success(`已使用${method}重新计算所有设备折旧`);
};
```

### 自动触发

```typescript
useEffect(() => {
  recalculateDepreciation(selectedCalculationMethod);
}, [selectedCalculationMethod]);
```

---

## 📊 统计数据更新

统计卡片会自动根据重新计算后的数据更新：

| 统计项 | 计算方式 |
|-------|---------|
| **资产总原值** | `depreciationRecords.reduce((sum, r) => sum + r.purchasePrice, 0)` |
| **累计折旧** | `depreciationRecords.reduce((sum, r) => sum + r.accumulatedDepreciation, 0)` |
| **资产净值** | `depreciationRecords.reduce((sum, r) => sum + r.currentValue, 0)` |
| **平均折旧率** | `(累计折旧 ÷ 资产总原值) × 100%` |

---

## 📋 明细表显示

明细表会显示重新计算后的数据：

| 列名 | 说明 |
|------|------|
| **设备编号** | 不变 |
| **设备名称** | 不变 |
| **购买日期** | 不变 |
| **资产原值** | 不变 |
| **折旧方法** | 显示当前选择的方法 |
| **折旧年限** | 不变 |
| **已使用时间** | 不变 |
| **工作量** | 显示累计工作量（工作量法） |
| **年折旧额** | 根据方法重新计算 ✨ |
| **月折旧额** | 根据方法重新计算 ✨ |
| **累计折旧** | 根据方法重新计算 ✨ |
| **资产净值** | 根据方法重新计算 ✨ |
| **折旧进度** | 根据方法重新计算 ✨ |

---

## 🎨 UI/UX设计亮点

### 1. **视觉引导**
- 图标+文字组合，直观易懂
- 不同方法使用不同颜色

### 2. **交互反馈**
- 选中状态清晰可见
- Hover效果提升体验
- Toast提示计算完成

### 3. **信息提示**
- 显示当前使用的方法
- 说明切换后的行为
- 避免用户困惑

### 4. **渐变背景**
- 紫色到靛蓝渐变
- 提升视觉层次
- 突出重要功能

---

## ✅ 功能清单

- [x] 添加折旧方法选择state
- [x] 创建基础设备数据结构
- [x] 将折旧记录改为可修改state
- [x] 实现直线法计算函数
- [x] 实现工作量法计算函数
- [x] 创建重新计算折旧函数
- [x] 添加自动触发机制（useEffect）
- [x] 设计折旧方法选择UI
- [x] 添加单选按钮组
- [x] 实现方法切换功能
- [x] 添加实时提示
- [x] 统计卡片自动更新
- [x] 明细表自动更新
- [x] 默认选中直线法
- [x] Toast成功提示

---

## 🚀 使用场景

### 场景1：默认查看（直线法）
```
1. 用户进入折旧计算tab
2. 系统显示直线法计算的折旧数据
3. 统计显示：原值¥645,000，累计折旧¥132,833，净值¥512,167
```

### 场景2：切换到工作量法
```
1. 用户点击"工作量法"单选按钮
2. 系统自动重新计算所有设备折旧
3. 显示提示："已使用工作量法重新计算所有设备折旧"
4. 统计更新为：原值¥645,000，累计折旧¥98,700，净值¥546,300
5. 明细表显示更新后的数据
```

### 场景3：来回切换对比
```
1. 用户在直线法和工作量法之间切换
2. 系统实时计算并显示不同方法的结果
3. 用户可以对比两种方法的差异
4. 选择最适合的折旧方法
```

---

## 📈 数据对比示例

### 设备：拖拉机（¥280,000）

| 项目 | 直线法 | 工作量法 | 差异 |
|------|-------|---------|------|
| **年折旧额** | ¥28,000 | ¥13,548 | -51.6% |
| **累计折旧** | ¥72,333 | ¥35,000 | -51.6% |
| **资产净值** | ¥207,667 | ¥245,000 | +18.0% |
| **折旧率** | 25.8% | 12.5% | -13.3% |

**结论**：工作量法更能反映实际使用情况，避免过度折旧。

---

## 💡 设计理念

### 1. **简洁直观**
- 单选按钮清晰明了
- 无需额外操作步骤
- 降低用户学习成本

### 2. **自动化**
- 切换即计算
- 无需手动触发
- 提升操作效率

### 3. **透明性**
- 显示当前方法
- 说明计算逻辑
- 提升用户信任

### 4. **灵活性**
- 支持快速切换
- 实时查看结果
- 方便对比分析

---

## 🎯 总结

### 核心价值

1. **✅ 方法选择**：支持直线法和工作量法二选一
2. **✅ 自动计算**：切换方法自动重新计算所有设备
3. **✅ 默认直线法**：符合大部分用户习惯
4. **✅ 同页操作**：无需跳转，体验流畅
5. **✅ 全局更新**：统计+明细表同步更新

### 用户体验

- 📱 **简单**：单选按钮，一键切换
- ⚡ **快速**：自动计算，无需等待
- 💡 **清晰**：实时提示，状态明确
- 🎨 **美观**：渐变设计，视觉舒适

---

**开发完成时间：** 2025年1月22日  
**功能状态：** ✅ 已完成并测试  
**默认状态：** 直线法（选中）
