# Implementation Plan: 图片上传功能 ## Overview 实现后台管理系统的图片上传功能,包括后端上传接口(支持本地存储和腾讯云COS)、前端上传组件优化、以及业务页面改造。 ## Tasks - [x] 1. 后端基础设施搭建 - [x] 1.1 创建上传相关的数据模型 - 创建 `UploadResponse` 响应模型 - 创建 `UploadResult` 内部结果模型 - 位置: `HoneyBox.Admin.Business/Models/Upload/` - _Requirements: 1.1_ - [x] 1.2 创建存储提供者接口 IStorageProvider - 定义 `StorageType` 属性 - 定义 `UploadAsync` 方法 - 定义 `DeleteAsync` 方法 - 位置: `HoneyBox.Admin.Business/Services/Interfaces/` - _Requirements: 2.1, 3.1_ - [x] 1.3 创建上传服务接口 IUploadService - 定义 `UploadImageAsync` 方法 - 定义 `UploadImagesAsync` 方法 - 位置: `HoneyBox.Admin.Business/Services/Interfaces/` - _Requirements: 1.1_ - [x] 2. 本地存储实现 - [x] 2.1 实现 LocalStorageProvider - 实现文件保存到 wwwroot/uploads/{yyyy}/{MM}/{dd}/ - 实现目录自动创建 - 实现唯一文件名生成 - 返回相对URL路径 - 位置: `HoneyBox.Admin.Business/Services/Storage/` - _Requirements: 2.1, 2.2, 2.3, 2.4, 1.5_ - [x] 2.2 编写 LocalStorageProvider 单元测试 - 测试目录创建 - 测试文件保存 - 测试URL生成格式 - **Property 4: 存储策略一致性 - 本地存储URL格式** - **Validates: Requirements 2.3** - [x] 3. 腾讯云COS存储实现 - [x] 3.1 添加腾讯云COS SDK依赖 - 添加 `Tencent.QCloud.Cos.Sdk` NuGet包 - _Requirements: 3.1_ - [x] 3.2 实现 TencentCosProvider - 从配置读取COS参数 - 实现文件上传到COS - 实现按日期创建对象路径 - 返回Domain拼接的完整URL - 位置: `HoneyBox.Admin.Business/Services/Storage/` - _Requirements: 3.1, 3.2, 3.3, 3.5_ - [x] 3.3 编写 TencentCosProvider 单元测试 - 测试配置读取 - 测试URL生成格式 - 测试错误处理 - **Property 4: 存储策略一致性 - COS URL格式** - **Validates: Requirements 3.3, 3.4** - [x] 4. 上传服务实现 - [x] 4.1 实现 UploadService - 实现文件格式验证(jpg, jpeg, png, gif, webp) - 实现文件大小验证(最大10MB) - 实现根据配置选择存储提供者 - 实现默认使用本地存储的降级逻辑 - 位置: `HoneyBox.Admin.Business/Services/` - _Requirements: 1.2, 1.3, 1.4, 4.1, 4.2, 4.3_ - [x] 4.2 编写 UploadService 单元测试 - **Property 1: 文件格式验证** - **Property 2: 文件大小验证** - **Property 3: 文件名唯一性** - **Validates: Requirements 1.2, 1.3, 1.4, 1.5** - [x] 5. 上传API控制器 - [x] 5.1 创建 UploadController - 实现 POST /api/admin/upload/image 单文件上传 - 实现 POST /api/admin/upload/images 批量上传 - 添加权限验证 - 位置: `HoneyBox.Admin.Business/Controllers/` - _Requirements: 1.1_ - [x] 5.2 注册服务到依赖注入容器 - 注册 IUploadService - 注册 IStorageProvider 实现 - 位置: `HoneyBox.Admin.Business/Modules/` - _Requirements: 4.1_ - [x] 6. Checkpoint - 后端功能验证 - 确保所有后端测试通过 - 使用Postman或Swagger测试上传接口 - 验证本地存储和COS存储都能正常工作 - 如有问题请询问用户 - [x] 7. 前端上传组件优化 - [x] 7.1 优化 ImageUpload 组件 - 添加文件类型前端校验 - 添加文件大小前端校验 - 优化上传失败的错误提示 - 位置: `admin-web/src/components/ImageUpload/index.vue` - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_ - [x] 8. 业务页面改造 - 商品管理 - [x] 8.1 改造 GoodsAddDialog.vue - 将 imgUrl 输入改为 ImageUpload 组件 - 将 imgUrlDetail 输入改为 ImageUpload 组件 - 删除原有的 image-upload-wrapper 样式 - _Requirements: 6.1, 6.2, 6.3_ - [x] 8.2 改造 GoodsEditDialog.vue - 将 imgUrl 输入改为 ImageUpload 组件 - 将 imgUrlDetail 输入改为 ImageUpload 组件 - 删除原有的 image-upload-wrapper 样式 - _Requirements: 6.1, 6.2, 6.3_ - [x] 8.3 改造 PrizeAddDialog.vue - 将 imgUrl 输入改为 ImageUpload 组件 - 将 imgUrlDetail 输入改为 ImageUpload 组件 - _Requirements: 6.1, 6.2, 6.3_ - [x] 8.4 改造 PrizeEditDialog.vue - 将 imgUrl 输入改为 ImageUpload 组件 - 将 imgUrlDetail 输入改为 ImageUpload 组件 - _Requirements: 6.1, 6.2, 6.3_ - [x] 9. 业务页面改造 - 钻石充值 - [x] 9.1 改造 DiamondFormDialog.vue - 将 normalImage 输入改为 ImageUpload 组件 - 将 normalSelectImage 输入改为 ImageUpload 组件 - 将 firstChargeImage 输入改为 ImageUpload 组件 - 将 firstSelectChargeImage 输入改为 ImageUpload 组件 - _Requirements: 6.1, 6.2, 6.3_ - [x] 10. 业务页面改造 - 内容辅助模块 - [x] 10.1 改造 FloatBallFormDialog.vue - 将 image 输入改为 ImageUpload 组件 - 将 imageBj 输入改为 ImageUpload 组件 - 将 imageDetails 输入改为 ImageUpload 组件 - _Requirements: 6.1, 6.2, 6.3_ - [x] 10.2 改造 AdvertFormDialog.vue - 将 imageUrl 输入改为 ImageUpload 组件 - _Requirements: 6.1, 6.2, 6.3_ - [x] 10.3 改造 WelfareHouseFormDialog.vue - 将 image 输入改为 ImageUpload 组件 - _Requirements: 6.1, 6.2, 6.3_ - [x] 11. 业务页面改造 - 系统配置 - [x] 11.1 改造 SignConfigFormDialog.vue - 将 icon 输入改为 ImageUpload 组件 - _Requirements: 6.1, 6.2, 6.3_ - [x] 11.2 改造 base.vue (基础配置) - 将 erweima 输入改为 ImageUpload 组件 - 将 share_image 输入改为 ImageUpload 组件 - _Requirements: 6.1, 6.2, 6.3_ - [x] 12. Final Checkpoint - 完整功能验证 - 确保所有改造的页面正常工作 - 验证图片上传、预览、删除功能 - 验证已有图片URL数据能正常显示 - 如有问题请询问用户 ## Notes - 所有任务均为必需,包括测试任务 - 后端使用策略模式,方便后续扩展其他存储提供者(如阿里云OSS) - 前端 ImageUpload 组件已创建基础版本,需要根据后端接口进行优化 - 业务页面改造时需保持原有表单验证逻辑不变