This commit is contained in:
gpu 2026-01-18 01:36:51 +08:00
parent 71cd3b514b
commit 6df5e64b91

View File

@ -0,0 +1,470 @@
# Implementation Plan: 营销活动管理模块前端迁移
## Overview
本实现计划将营销活动管理模块从老项目PHP ThinkPHP + Layui迁移到新项目ASP.NET Core + Vue 3 + Element Plus。实现分为后端API开发和前端页面开发两个主要部分。
## 任务概览
| 阶段 | 任务数 | 预计工时 |
|------|--------|----------|
| 1. 后端优惠券API开发 | 5 | 3h |
| 2. 后端广告API开发 | 5 | 3h |
| 3. 后端排行榜API开发 | 6 | 4h |
| 4. Checkpoint - 后端API验证 | 1 | 0.5h |
| 5. 前端API层开发 | 3 | 2h |
| 6. 前端优惠券页面开发 | 5 | 4h |
| 7. 前端广告页面开发 | 5 | 4h |
| 8. Checkpoint - 优惠券广告页面验证 | 1 | 0.5h |
| 9. 前端排行榜页面开发 | 6 | 5h |
| 10. 路由和菜单配置 | 2 | 1h |
| 11. Checkpoint - 完整功能验证 | 1 | 0.5h |
| 12. 属性测试 | 5 | 2h |
| 13. Final Checkpoint | 1 | 0.5h |
| **总计** | **46** | **30h** |
---
## Tasks
- [ ] 1. 后端优惠券API开发
- [ ] 1.1 创建优惠券Models
- 在 `HoneyBox.Admin.Business/Models/Coupon/` 创建目录
- 创建 `CouponModels.cs` 定义请求和响应模型
- 定义 `CouponListRequest` 列表查询请求
- 定义 `CouponResponse` 优惠券响应模型
- 定义 `CouponCreateRequest` 新增请求
- 定义 `CouponUpdateRequest` 编辑请求
- 定义 `CouponReceiveListRequest` 领取记录查询请求
- 定义 `CouponReceiveResponse` 领取记录响应模型
- _Requirements: 15.1_
- [ ] 1.2 创建优惠券Service接口
- 在 `HoneyBox.Admin.Business/Services/Interfaces/` 创建 `ICouponService.cs`
- 定义 `GetCouponsAsync` 列表查询方法
- 定义 `GetCouponByIdAsync` 详情查询方法
- 定义 `CreateCouponAsync` 新增方法
- 定义 `UpdateCouponAsync` 编辑方法
- 定义 `DeleteCouponAsync` 删除方法
- 定义 `GetCouponReceivesAsync` 领取记录查询方法
- _Requirements: 15.1, 15.2, 15.3, 15.4, 15.5_
- [ ] 1.3 实现优惠券Service
- 在 `HoneyBox.Admin.Business/Services/` 创建 `CouponService.cs`
- 实现列表查询逻辑,支持关键词和类型筛选
- 实现分页逻辑
- 实现新增优惠券逻辑,验证必填字段
- 实现编辑优惠券逻辑
- 实现删除优惠券逻辑
- 实现领取记录查询逻辑支持用户ID、标题、状态筛选
- _Requirements: 1.1, 1.2, 1.3, 1.4, 2.6, 3.2, 4.1, 4.2, 4.3, 4.4_
- [ ] 1.4 创建优惠券Controller
- 在 `HoneyBox.Admin.Business/Controllers/` 创建 `CouponController.cs`
- 实现 `GET /api/business/coupon` 列表查询接口
- 实现 `GET /api/business/coupon/{id}` 详情查询接口
- 实现 `POST /api/business/coupon` 新增接口
- 实现 `PUT /api/business/coupon/{id}` 编辑接口
- 实现 `DELETE /api/business/coupon/{id}` 删除接口
- 实现 `GET /api/business/coupon/receive` 领取记录查询接口
- _Requirements: 15.1, 15.2, 15.3, 15.4, 15.5_
- [ ] 1.5 注册优惠券服务
- 在 `ServiceCollectionExtensions.cs` 注册 `ICouponService``CouponService`
- _Requirements: 15.1_
- [ ] 2. 后端广告API开发
- [ ] 2.1 创建广告Models
- 在 `HoneyBox.Admin.Business/Models/Advert/` 创建目录
- 创建 `AdvertModels.cs` 定义请求和响应模型
- 定义 `AdvertListRequest` 列表查询请求
- 定义 `AdvertResponse` 广告响应模型
- 定义 `AdvertCreateRequest` 新增请求
- 定义 `AdvertUpdateRequest` 编辑请求
- 定义 `AdvertTypeResponse` 广告类型响应模型
- 定义 `AdvertTypeCreateRequest` 广告类型新增请求
- _Requirements: 15.6_
- [ ] 2.2 创建广告Service接口
- 在 `HoneyBox.Admin.Business/Services/Interfaces/` 创建 `IAdvertService.cs`
- 定义 `GetAdvertsAsync` 列表查询方法
- 定义 `GetAdvertByIdAsync` 详情查询方法
- 定义 `CreateAdvertAsync` 新增方法
- 定义 `UpdateAdvertAsync` 编辑方法
- 定义 `DeleteAdvertAsync` 删除方法
- 定义 `GetAdvertTypesAsync` 类型列表查询方法
- 定义 `CreateAdvertTypeAsync` 类型新增方法
- 定义 `UpdateAdvertTypeAsync` 类型编辑方法
- 定义 `DeleteAdvertTypeAsync` 类型删除方法
- _Requirements: 15.6, 15.7, 15.8, 15.9, 15.10, 15.11, 15.12, 15.13_
- [ ] 2.3 实现广告Service
- 在 `HoneyBox.Admin.Business/Services/` 创建 `AdvertService.cs`
- 实现广告列表查询逻辑,支持类型筛选
- 实现分页逻辑
- 实现新增广告逻辑,验证图片和跳转配置
- 实现编辑广告逻辑
- 实现删除广告逻辑
- 实现广告类型CRUD逻辑
- 实现删除类型时检查关联广告
- _Requirements: 5.1, 5.2, 6.8, 7.2, 8.1, 8.4, 8.6, 8.7_
- [ ] 2.4 创建广告Controller
- 在 `HoneyBox.Admin.Business/Controllers/` 创建 `AdvertController.cs`
- 实现 `GET /api/business/advert` 列表查询接口
- 实现 `GET /api/business/advert/{id}` 详情查询接口
- 实现 `POST /api/business/advert` 新增接口
- 实现 `PUT /api/business/advert/{id}` 编辑接口
- 实现 `DELETE /api/business/advert/{id}` 删除接口
- 实现 `GET /api/business/advert/types` 类型列表查询接口
- 实现 `POST /api/business/advert/types` 类型新增接口
- 实现 `PUT /api/business/advert/types/{id}` 类型编辑接口
- 实现 `DELETE /api/business/advert/types/{id}` 类型删除接口
- _Requirements: 15.6, 15.7, 15.8, 15.9, 15.10, 15.11, 15.12, 15.13_
- [ ] 2.5 注册广告服务
- 在 `ServiceCollectionExtensions.cs` 注册 `IAdvertService``AdvertService`
- _Requirements: 15.6_
- [ ] 3. 后端排行榜API开发
- [ ] 3.1 创建排行榜Models
- 在 `HoneyBox.Admin.Business/Models/Rank/` 创建目录
- 创建 `RankModels.cs` 定义请求和响应模型
- 定义 `RankPrizeListRequest` 奖品列表查询请求
- 定义 `RankPrizeResponse` 奖品响应模型
- 定义 `RankPrizeCreateRequest` 奖品新增请求
- 定义 `RankPrizeUpdateRequest` 奖品编辑请求
- 定义 `RankLogListRequest` 中奖记录查询请求
- 定义 `RankLogResponse` 中奖记录响应模型
- 定义 `UserRankListRequest` 用户排行榜查询请求
- 定义 `UserRankResponse` 用户排行榜响应模型
- _Requirements: 15.14_
- [ ] 3.2 创建排行榜Service接口
- 在 `HoneyBox.Admin.Business/Services/Interfaces/` 创建 `IRankService.cs`
- 定义 `GetWeekPrizesAsync` 周榜奖品列表查询方法
- 定义 `CreateWeekPrizeAsync` 周榜奖品新增方法
- 定义 `UpdateWeekPrizeAsync` 周榜奖品编辑方法
- 定义 `DeleteWeekPrizeAsync` 周榜奖品删除方法
- 定义 `GetWeekLogsAsync` 周榜中奖记录查询方法
- 定义 `GetMonthPrizesAsync` 月榜奖品列表查询方法
- 定义 `CreateMonthPrizeAsync` 月榜奖品新增方法
- 定义 `UpdateMonthPrizeAsync` 月榜奖品编辑方法
- 定义 `DeleteMonthPrizeAsync` 月榜奖品删除方法
- 定义 `GetMonthLogsAsync` 月榜中奖记录查询方法
- 定义 `GetUserRankAsync` 用户排行榜查询方法
- _Requirements: 15.14-15.24_
- [ ] 3.3 实现排行榜Service
- 在 `HoneyBox.Admin.Business/Services/` 创建 `RankService.cs`
- 实现周榜奖品CRUD逻辑验证排名唯一性
- 实现周榜中奖记录查询逻辑支持用户ID和手机号筛选
- 实现月榜奖品CRUD逻辑验证排名唯一性
- 实现月榜中奖记录查询逻辑
- 实现用户排行榜查询逻辑,支持多种排行榜类型
- _Requirements: 9.1-9.6, 10.1-10.4, 11.1-11.6, 12.1-12.4, 13.1-13.6_
- [ ] 3.4 创建排行榜Controller
- 在 `HoneyBox.Admin.Business/Controllers/` 创建 `RankController.cs`
- 实现 `GET /api/business/rank/week` 周榜奖品列表接口
- 实现 `POST /api/business/rank/week` 周榜奖品新增接口
- 实现 `PUT /api/business/rank/week/{id}` 周榜奖品编辑接口
- 实现 `DELETE /api/business/rank/week/{id}` 周榜奖品删除接口
- 实现 `GET /api/business/rank/week/log` 周榜中奖记录接口
- 实现 `GET /api/business/rank/month` 月榜奖品列表接口
- 实现 `POST /api/business/rank/month` 月榜奖品新增接口
- 实现 `PUT /api/business/rank/month/{id}` 月榜奖品编辑接口
- 实现 `DELETE /api/business/rank/month/{id}` 月榜奖品删除接口
- 实现 `GET /api/business/rank/month/log` 月榜中奖记录接口
- 实现 `GET /api/business/rank/user` 用户排行榜接口
- _Requirements: 15.14-15.24_
- [ ] 3.5 注册排行榜服务
- 在 `ServiceCollectionExtensions.cs` 注册 `IRankService``RankService`
- _Requirements: 15.14_
- [ ] 3.6 创建菜单SQL脚本
- 在 `HoneyBox/scripts/` 创建 `seed_marketing_management_menus.sql`
- 添加优惠券管理菜单项
- 添加广告管理菜单项
- 添加排行榜管理菜单项
- 添加相关权限配置
- _Requirements: 14.1-14.11_
- [ ] 4. Checkpoint - 后端API验证
- 确保所有API编译通过
- 使用Swagger测试API基本功能
- 确保权限验证正常工作
- [ ] 5. 前端API层开发
- [ ] 5.1 创建优惠券API模块
- 创建 `src/api/business/coupon.ts`
- 定义所有TypeScript接口CouponListRequest, CouponResponse等
- 实现优惠券列表查询API调用 `getCoupons`
- 实现优惠券详情查询API调用 `getCouponById`
- 实现优惠券新增API调用 `createCoupon`
- 实现优惠券编辑API调用 `updateCoupon`
- 实现优惠券删除API调用 `deleteCoupon`
- 实现优惠券领取记录查询API调用 `getCouponReceives`
- _Requirements: 15.1, 15.2, 15.3, 15.4, 15.5_
- [ ] 5.2 创建广告API模块
- 创建 `src/api/business/advert.ts`
- 定义所有TypeScript接口AdvertListRequest, AdvertResponse等
- 实现广告列表查询API调用 `getAdverts`
- 实现广告详情查询API调用 `getAdvertById`
- 实现广告新增API调用 `createAdvert`
- 实现广告编辑API调用 `updateAdvert`
- 实现广告删除API调用 `deleteAdvert`
- 实现广告类型列表查询API调用 `getAdvertTypes`
- 实现广告类型新增API调用 `createAdvertType`
- 实现广告类型编辑API调用 `updateAdvertType`
- 实现广告类型删除API调用 `deleteAdvertType`
- _Requirements: 15.6-15.13_
- [ ] 5.3 创建排行榜API模块
- 创建 `src/api/business/rank.ts`
- 定义所有TypeScript接口RankPrizeResponse, RankLogResponse等
- 实现周榜奖品CRUD API调用
- 实现周榜中奖记录查询API调用
- 实现月榜奖品CRUD API调用
- 实现月榜中奖记录查询API调用
- 实现用户排行榜查询API调用
- _Requirements: 15.14-15.24_
- [ ] 6. 前端优惠券页面开发
- [ ] 6.1 创建优惠券列表主页面
- 创建 `src/views/business/coupon/list.vue`
- 实现页面布局(搜索区 + 表格区)
- 集成搜索表单和表格组件
- 实现分页逻辑
- 实现新增、编辑、删除操作
- _Requirements: 1.1, 1.4, 1.5_
- [ ] 6.2 创建优惠券搜索表单组件
- 创建 `src/views/business/coupon/components/CouponSearchForm.vue`
- 实现标题关键词输入框
- 实现类型下拉选择(新人优惠券/权益优惠券/满减优惠券)
- 实现搜索和重置按钮
- _Requirements: 1.2, 1.3_
- [ ] 6.3 创建优惠券表格组件
- 创建 `src/views/business/coupon/components/CouponTable.vue`
- 实现表格列配置ID、名称、满减门槛、优惠金额、有效期、类型、时间
- 实现操作按钮(编辑、删除)
- 实现删除确认弹窗
- _Requirements: 1.1, 1.5_
- [ ] 6.4 创建优惠券表单弹窗
- 创建 `src/views/business/coupon/components/CouponFormDialog.vue`
- 实现类型选择(新人优惠券/权益优惠券/满减优惠券)
- 实现使用限制选择(不限制/一番赏/无限赏/擂台赏/全局赏/领主赏/连击赏)
- 实现名称、满减门槛、优惠金额、有效期输入
- 实现表单验证
- 实现提交逻辑
- _Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 3.1, 3.2_
- [ ] 6.5 创建优惠券领取记录页面
- 创建 `src/views/business/coupon/receive.vue`
- 实现页面布局(搜索区 + 表格区)
- 实现用户ID、优惠券标题、状态搜索
- 实现表格列配置ID、用户信息、优惠券名称、满减门槛、优惠金额、状态、过期时间、领取时间
- 实现分页逻辑
- _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5_
- [ ] 7. 前端广告页面开发
- [ ] 7.1 创建广告列表主页面
- 创建 `src/views/business/advert/list.vue`
- 实现页面布局(类型筛选 + 表格区)
- 实现广告类型下拉筛选
- 实现分页逻辑
- 实现新增、编辑、删除操作
- 实现查看全部类型按钮
- _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5_
- [ ] 7.2 创建广告表格组件
- 创建 `src/views/business/advert/components/AdvertTable.vue`
- 实现表格列配置(类型、图片、排序值)
- 实现图片预览功能
- 实现操作按钮(编辑、删除)
- 实现删除确认弹窗
- _Requirements: 5.1, 5.4_
- [ ] 7.3 创建广告表单弹窗
- 创建 `src/views/business/advert/components/AdvertFormDialog.vue`
- 实现广告类型选择(动态加载)
- 实现跳转类型选择(不跳转/优惠券/一番赏/无限赏/连击赏/自定义URL
- 实现条件显示字段优惠券ID/盒子ID/跳转链接)
- 实现图片上传
- 实现排序值输入
- 实现表单验证
- 实现提交逻辑
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 7.1, 7.2_
- [ ] 7.4 创建广告类型管理弹窗
- 创建 `src/views/business/advert/components/AdvertTypeDialog.vue`
- 实现类型列表展示ID、名称、排序
- 实现添加类型功能
- 实现编辑类型功能
- 实现删除类型功能(检查关联广告)
- 实现表单验证(名称必填、名称唯一)
- _Requirements: 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 8.7_
- [ ] 7.5 创建广告类型表单组件
- 创建 `src/views/business/advert/components/AdvertTypeForm.vue`
- 实现类型名称输入
- 实现排序值输入
- 实现表单验证
- _Requirements: 8.2, 8.3_
- [ ] 8. Checkpoint - 优惠券广告页面验证
- 确保优惠券列表页面正常显示
- 确保优惠券新增、编辑、删除功能正常
- 确保优惠券领取记录页面正常显示
- 确保广告列表页面正常显示
- 确保广告新增、编辑、删除功能正常
- 确保广告类型管理功能正常
- 测试搜索和分页功能
- 测试条件显示字段功能
- [ ] 9. 前端排行榜页面开发
- [ ] 9.1 创建周榜奖品列表页面
- 创建 `src/views/business/rank/week.vue`
- 实现页面布局(表格区)
- 实现表格列配置(排名、奖品名称、图片、售价、采购价、奖赏类型)
- 实现图片预览功能
- 实现新增、编辑、删除操作
- _Requirements: 9.1, 9.2, 9.5, 9.6_
- [ ] 9.2 创建排行榜奖品表单弹窗
- 创建 `src/views/business/rank/components/RankPrizeFormDialog.vue`
- 实现排名输入(验证唯一性)
- 实现奖品名称输入
- 实现奖品类型选择
- 实现售价、采购价输入
- 实现图片上传
- 实现表单验证
- 实现提交逻辑
- _Requirements: 9.2, 9.3, 9.4, 9.5_
- [ ] 9.3 创建周榜中奖记录页面
- 创建 `src/views/business/rank/week-log.vue`
- 实现页面布局(搜索区 + 表格区)
- 实现用户UID、手机号搜索
- 实现表格列配置(排名、用户信息、奖品信息、消费金额、统计时间)
- 实现分页逻辑
- _Requirements: 10.1, 10.2, 10.3, 10.4_
- [ ] 9.4 创建月榜奖品列表页面
- 创建 `src/views/business/rank/month.vue`
- 复用周榜奖品列表结构
- 实现月榜奖品CRUD操作
- _Requirements: 11.1, 11.2, 11.5, 11.6_
- [ ] 9.5 创建月榜中奖记录页面
- 创建 `src/views/business/rank/month-log.vue`
- 复用周榜中奖记录结构
- 实现月榜中奖记录查询
- _Requirements: 12.1, 12.2, 12.3, 12.4_
- [ ] 9.6 创建用户排行榜页面
- 创建 `src/views/business/rank/user.vue`
- 实现排行榜类型切换(邀请新人/亏损补贴/达达券/钻石/UU币
- 实现通用排行榜表格(排名、用户信息、数值)
- 实现亏损排行榜特殊字段(消耗金额、达达券金额、出货金额、亏损率)
- 实现分页逻辑
- _Requirements: 13.1, 13.2, 13.3, 13.4, 13.5, 13.6_
- [ ] 10. 路由和菜单配置
- [ ] 10.1 配置路由
- 在 `src/router/modules/business.ts` 添加营销活动路由配置
- 配置优惠券列表路由 `/business/coupon/list`
- 配置优惠券领取记录路由 `/business/coupon/receive`
- 配置广告列表路由 `/business/advert/list`
- 配置周榜奖品路由 `/business/rank/week`
- 配置周榜中奖记录路由 `/business/rank/week-log`
- 配置月榜奖品路由 `/business/rank/month`
- 配置月榜中奖记录路由 `/business/rank/month-log`
- 配置用户排行榜路由 `/business/rank/user`
- 配置权限标识
- _Requirements: 14.1-14.11_
- [ ] 10.2 执行菜单SQL脚本
- 执行 `seed_marketing_management_menus.sql` 添加菜单
- 验证菜单显示正常
- _Requirements: 14.1-14.11_
- [ ] 11. Checkpoint - 完整功能验证
- 确保所有页面正常访问
- 测试完整的优惠券管理流程
- 测试完整的广告管理流程
- 测试完整的排行榜管理流程
- 验证权限控制正常工作
- [ ] 12. 属性测试
- [ ] 12.1 编写搜索参数传递属性测试
- **Property 1: 搜索参数正确传递**
- **Validates: Requirements 1.2, 1.3, 4.2, 4.3, 4.4, 5.2, 10.2, 10.3, 12.2, 12.3, 13.2**
- [ ] 12.2 编写分页参数传递属性测试
- **Property 2: 分页参数正确传递**
- **Validates: Requirements 1.4, 4.5, 5.5, 10.4, 12.4, 13.6**
- [ ] 12.3 编写表单必填字段验证属性测试
- **Property 3: 表单必填字段验证**
- **Validates: Requirements 2.4, 2.5, 6.7, 8.3, 9.4**
- [ ] 12.4 编写条件显示字段属性测试
- **Property 4: 条件显示字段正确切换**
- **Validates: Requirements 6.4, 6.5, 6.6**
- [ ] 12.5 编写API响应格式一致性属性测试
- **Property 5: API响应格式一致性**
- **Validates: Requirements 15.25, 15.26**
- [ ] 13. Final Checkpoint - 最终验证
- 确保所有测试通过
- 确保所有功能正常工作
- 如有问题,询问用户
---
## 验收检查清单
### 功能验收
- [ ] 优惠券列表正常显示,支持搜索、分页
- [ ] 优惠券新增功能正常
- [ ] 优惠券编辑功能正常
- [ ] 优惠券删除功能正常(有二次确认)
- [ ] 优惠券领取记录正常显示,支持搜索、分页
- [ ] 广告列表正常显示,支持类型筛选、分页
- [ ] 广告新增功能正常
- [ ] 广告编辑功能正常
- [ ] 广告删除功能正常(有二次确认)
- [ ] 广告类型管理功能正常
- [ ] 广告跳转类型条件显示正常
- [ ] 周榜奖品列表正常显示
- [ ] 周榜奖品新增、编辑、删除功能正常
- [ ] 周榜中奖记录正常显示,支持搜索、分页
- [ ] 月榜奖品列表正常显示
- [ ] 月榜奖品新增、编辑、删除功能正常
- [ ] 月榜中奖记录正常显示,支持搜索、分页
- [ ] 用户排行榜正常显示,支持类型切换、分页
- [ ] 亏损排行榜特殊字段正常显示
### 非功能验收
- [ ] 分页加载性能正常
- [ ] 图片懒加载生效
- [ ] 表单验证实时反馈
- [ ] 操作提示正确显示
- [ ] 危险操作有二次确认
- [ ] 属性测试全部通过
## Notes
- 每个Checkpoint确保增量验证
- 后端API需要先完成才能进行前端开发
- 属性测试验证通用正确性属性
- 所有任务均为必需任务,确保全面测试覆盖
- 周榜和月榜功能结构相同,可复用组件
- 广告跳转类型的条件显示是核心功能,需要仔细测试