# Implementation Tasks

## 1. 基础设施准备

- [ ] 1.1 创建套餐管理类型定义文件（src/types/api/packageManagement.ts）
- [ ] 1.2 创建套餐常量配置文件（src/config/constants/package.ts）
- [ ] 1.3 导出常量配置到 constants/index.ts

## 2. API 服务层实现

### 2.1 套餐系列 API（packageSeries.ts）

- [ ] 2.1.1 实现 getPackageSeries（套餐系列列表）
- [ ] 2.1.2 实现 createPackageSeries（创建套餐系列）
- [ ] 2.1.3 实现 getPackageSeriesDetail（获取套餐系列详情）
- [ ] 2.1.4 实现 updatePackageSeries（更新套餐系列）
- [ ] 2.1.5 实现 deletePackageSeries（删除套餐系列）
- [ ] 2.1.6 实现 updatePackageSeriesStatus（更新套餐系列状态）

### 2.2 套餐管理 API（package.ts）

- [ ] 2.2.1 实现 getPackages（套餐列表）
- [ ] 2.2.2 实现 createPackage（创建套餐）
- [ ] 2.2.3 实现 getPackageDetail（获取套餐详情）
- [ ] 2.2.4 实现 updatePackage（更新套餐）
- [ ] 2.2.5 实现 deletePackage（删除套餐）
- [ ] 2.2.6 实现 updatePackageStatus（更新套餐状态）
- [ ] 2.2.7 实现 updatePackageShelfStatus（更新套餐上架状态）

### 2.3 代理可售套餐 API（myPackage.ts）

- [ ] 2.3.1 实现 getMyPackages（我的可售套餐列表）
- [ ] 2.3.2 实现 getMyPackageDetail（获取可售套餐详情）
- [ ] 2.3.3 实现 getMySeriesAllocations（我的被分配系列列表）

### 2.4 单套餐分配 API（shopPackageAllocation.ts）

- [ ] 2.4.1 实现 getShopPackageAllocations（单套餐分配列表）
- [ ] 2.4.2 实现 createShopPackageAllocation（创建单套餐分配）
- [ ] 2.4.3 实现 getShopPackageAllocationDetail（获取单套餐分配详情）
- [ ] 2.4.4 实现 updateShopPackageAllocation（更新单套餐分配）
- [ ] 2.4.5 实现 deleteShopPackageAllocation（删除单套餐分配）
- [ ] 2.4.6 实现 updateShopPackageAllocationStatus（更新单套餐分配状态）

- [ ] 2.5 在 src/api/modules/index.ts 中导出所有新服务

## 3. 页面实现

### 3.1 套餐系列管理页面（package-series/index.vue）

- [ ] 3.1.1 实现列表展示（表格、分页）
- [ ] 3.1.2 实现搜索栏（系列名称、状态筛选）
- [ ] 3.1.3 实现新增对话框（表单验证）
- [ ] 3.1.4 实现编辑功能（复用新增对话框，根据 dialogType 区分新增/编辑）
- [ ] 3.1.5 实现删除功能（二次确认）
- [ ] 3.1.6 实现状态开关（启用/禁用）
- [ ] 3.1.7 集成 API 服务并处理加载状态

### 3.2 套餐管理页面（package-list/index.vue）

- [ ] 3.2.1 实现列表展示（表格、分页）
- [ ] 3.2.2 实现搜索栏（名称、系列、状态、上架状态、类型筛选）
- [ ] 3.2.3 实现系列下拉选择器（加载套餐系列列表，只显示启用状态）
- [ ] 3.2.4 实现新增对话框（表单验证、系列选择）
- [ ] 3.2.5 实现编辑功能（复用新增对话框，根据 dialogType 区分新增/编辑）
- [ ] 3.2.6 实现删除功能（二次确认）
- [ ] 3.2.7 实现状态开关（启用/禁用）
- [ ] 3.2.8 实现上架状态开关（上架/下架）
- [ ] 3.2.9 集成 API 服务并处理加载状态

### 3.3 代理可售套餐页面（my-packages/index.vue）

- [ ] 3.3.1 创建页面文件和基本结构
- [ ] 3.3.2 实现列表展示（表格、分页）
- [ ] 3.3.3 实现搜索栏（系列、类型筛选）
- [ ] 3.3.4 实现详情对话框（显示成本价、建议售价、利润空间）
- [ ] 3.3.5 实现被分配系列列表Tab（可选）
- [ ] 3.3.6 集成 API 服务并处理加载状态

### 3.4 单套餐分配页面（package-assign/index.vue）

- [ ] 3.4.1 创建页面文件和基本结构
- [ ] 3.4.2 实现列表展示（表格、分页）
- [ ] 3.4.3 实现搜索栏（店铺、套餐、状态筛选）
- [ ] 3.4.4 实现套餐下拉选择器（加载套餐列表，只显示启用且上架的套餐）
- [ ] 3.4.5 实现店铺下拉选择器（使用 ShopService 加载店铺列表）
- [ ] 3.4.6 实现新增对话框（套餐选择、店铺选择、成本价输入）
- [ ] 3.4.7 实现编辑功能（单独对话框或复用新增对话框，只允许修改成本价）
- [ ] 3.4.8 实现删除功能（二次确认）
- [ ] 3.4.9 实现状态管理（启用/禁用开关）
- [ ] 3.4.10 集成 API 服务并处理加载状态

## 4. 路由配置

- [ ] 4.1 在 asyncRoutes.ts 中添加 my-packages 路由配置
- [ ] 4.2 验证路由权限配置正确

## 5. 集成测试

### 5.1 套餐系列管理测试

- [ ] 5.1.1 测试列表查询（空列表、有数据、分页）
- [ ] 5.1.2 测试搜索功能（名称模糊搜索、状态筛选）
- [ ] 5.1.3 测试新增功能（成功、编码重复、字段验证）
- [ ] 5.1.4 测试编辑功能（成功、字段验证）
- [ ] 5.1.5 测试删除功能（成功、有关联套餐时禁止删除）
- [ ] 5.1.6 测试状态切换（启用→禁用、禁用→启用）
- [ ] 5.1.7 测试权限控制（未登录、无权限）

### 5.2 套餐管理测试

- [ ] 5.2.1 测试列表查询（空列表、有数据、分页）
- [ ] 5.2.2 测试多条件筛选（名称、系列、状态、上架状态、类型）
- [ ] 5.2.3 测试系列下拉选择器（只显示启用状态的系列）
- [ ] 5.2.4 测试新增功能（成功、编码重复、时长验证、流量验证）
- [ ] 5.2.5 测试编辑功能（成功、字段验证）
- [ ] 5.2.6 测试删除功能（成功、已分配时禁止删除）
- [ ] 5.2.7 测试状态切换（启用→禁用、禁用→启用）
- [ ] 5.2.8 测试上架状态切换（上架→下架、下架→上架）
- [ ] 5.2.9 测试权限控制（未登录、无权限）

### 5.3 代理可售套餐测试

- [ ] 5.3.1 测试列表查询（空列表、有数据、分页）
- [ ] 5.3.2 测试筛选功能（按系列、按类型）
- [ ] 5.3.3 测试详情查询（显示成本价、建议售价、利润空间、价格来源）
- [ ] 5.3.4 测试数据隔离（只能看到分配给自己的套餐）
- [ ] 5.3.5 测试被分配系列列表（如果实现）
- [ ] 5.3.6 测试权限控制（非代理商用户无法访问）

### 5.4 单套餐分配测试

- [ ] 5.4.1 测试列表查询（空列表、有数据、分页）
- [ ] 5.4.2 测试筛选功能（按店铺、按套餐、按状态）
- [ ] 5.4.3 测试套餐下拉选择器（只显示启用且上架的套餐）
- [ ] 5.4.4 测试店铺下拉选择器（加载店铺列表）
- [ ] 5.4.5 测试新增功能（成功、重复分配、成本价验证）
- [ ] 5.4.6 测试编辑功能（修改成本价）
- [ ] 5.4.7 测试删除功能（成功、有订单时的处理）
- [ ] 5.4.8 测试状态切换（启用→禁用、禁用→启用）
- [ ] 5.4.9 测试价格覆盖规则（单套餐分配优先于系列分配）
- [ ] 5.4.10 测试权限控制（仅管理员可操作）

### 5.5 通用功能测试

- [ ] 5.5.1 测试所有页面的表单验证（必填、长度、格式）
- [ ] 5.5.2 测试所有页面的 loading 状态（列表、提交、删除）
- [ ] 5.5.3 测试所有页面的错误处理（网络错误、业务错误）
- [ ] 5.5.4 测试所有页面的二次确认（删除操作）
- [ ] 5.5.5 测试分页功能（换页、改变每页数量）
- [ ] 5.5.6 测试刷新功能（列表刷新）
- [ ] 5.5.7 测试列显示/隐藏功能
- [ ] 5.5.8 测试状态值映射（前端0/1与后端1/2的转换）

## 6. 代码优化和文档

- [ ] 6.1 代码格式化和 ESLint 检查
- [ ] 6.2 添加必要的注释
- [ ] 6.3 更新 API 文档（如需要）
- [ ] 6.4 提交代码并创建 PR

## 注意事项

- 所有页面需参考 `/system/role` 页面的组件化结构
- 使用统一的 `CommonStatus` 常量（需要注意文档中的状态值映射）
- API 字段使用下划线命名（如 `series_name`），前端类型使用驼峰命名
- 所有删除操作需要二次确认
- 所有表单需要完整的验证规则
- 统一使用 Element Plus 的 Message 和 MessageBox 组件
