HaniBlindBox/.kiro/specs/image-upload-feature/requirements.md
2026-01-19 15:05:52 +08:00

94 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Requirements Document
## Introduction
实现后台管理系统的图片上传功能支持本地存储和腾讯云COS存储两种方式。系统需要根据上传配置自动选择存储方式并提供统一的前端上传组件供各业务模块使用。
## Glossary
- **Upload_Service**: 文件上传服务,负责处理文件上传逻辑
- **Storage_Provider**: 存储提供者包括本地存储和腾讯云COS
- **ImageUpload_Component**: 前端图片上传组件
- **Upload_Config**: 上传配置存储在数据库config表中
## Requirements
### Requirement 1: 后端上传接口
**User Story:** As a 管理员, I want to 上传图片到服务器, so that 我可以在各业务模块中使用图片。
#### Acceptance Criteria
1. WHEN 管理员上传图片文件 THEN THE Upload_Service SHALL 接收文件并返回图片URL
2. WHEN 上传的文件不是图片格式 THEN THE Upload_Service SHALL 返回错误提示"只支持图片格式"
3. WHEN 上传的文件超过10MB THEN THE Upload_Service SHALL 返回错误提示"文件大小不能超过10MB"
4. THE Upload_Service SHALL 支持 jpg、jpeg、png、gif、webp 格式的图片
5. THE Upload_Service SHALL 生成唯一的文件名避免文件覆盖
### Requirement 2: 本地存储实现
**User Story:** As a 系统管理员, I want to 将图片存储到服务器本地, so that 无需配置云存储即可使用上传功能。
#### Acceptance Criteria
1. WHEN Upload_Config 的 type 为 "1" THEN THE Storage_Provider SHALL 将文件保存到服务器本地目录
2. THE Storage_Provider SHALL 按日期创建子目录(如 uploads/2026/01/19/
3. THE Storage_Provider SHALL 返回可访问的图片URL路径
4. WHEN 本地存储目录不存在 THEN THE Storage_Provider SHALL 自动创建目录
### Requirement 3: 腾讯云COS存储实现
**User Story:** As a 系统管理员, I want to 将图片上传到腾讯云COS, so that 可以利用CDN加速和更好的存储可靠性。
#### Acceptance Criteria
1. WHEN Upload_Config 的 type 为 "3" THEN THE Storage_Provider SHALL 将文件上传到腾讯云COS
2. THE Storage_Provider SHALL 使用配置中的 Bucket、Region、AccessKeyId、AccessKeySecret 连接COS
3. THE Storage_Provider SHALL 返回配置的 Domain 拼接文件路径作为访问URL
4. IF COS上传失败 THEN THE Storage_Provider SHALL 返回具体的错误信息
5. THE Storage_Provider SHALL 按日期创建COS对象路径如 uploads/2026/01/19/xxx.jpg
### Requirement 4: 存储策略切换
**User Story:** As a 系统管理员, I want to 在上传配置页面切换存储方式, so that 可以灵活选择存储策略。
#### Acceptance Criteria
1. WHEN 管理员修改上传配置 THEN THE Upload_Service SHALL 立即使用新的存储策略
2. THE Upload_Service SHALL 在每次上传时读取最新的配置
3. IF 配置的存储类型无效 THEN THE Upload_Service SHALL 默认使用本地存储
### Requirement 5: 前端上传组件
**User Story:** As a 前端开发者, I want to 使用统一的图片上传组件, so that 可以快速在各业务模块中集成图片上传功能。
#### Acceptance Criteria
1. THE ImageUpload_Component SHALL 支持点击上传和拖拽上传
2. THE ImageUpload_Component SHALL 支持手动输入图片URL
3. THE ImageUpload_Component SHALL 显示上传进度
4. THE ImageUpload_Component SHALL 支持图片预览和删除
5. THE ImageUpload_Component SHALL 通过 v-model 双向绑定图片URL
6. WHEN 上传成功 THEN THE ImageUpload_Component SHALL 自动更新绑定的URL值
7. WHEN 上传失败 THEN THE ImageUpload_Component SHALL 显示错误提示
### Requirement 6: 业务页面改造
**User Story:** As a 管理员, I want to 在各业务表单中直接上传图片, so that 不需要手动复制粘贴图片URL。
#### Acceptance Criteria
1. THE System SHALL 将以下页面的图片输入改为使用 ImageUpload_Component:
- GoodsAddDialog.vue (imgUrl, imgUrlDetail)
- GoodsEditDialog.vue (imgUrl, imgUrlDetail)
- PrizeAddDialog.vue (imgUrl, imgUrlDetail)
- PrizeEditDialog.vue (imgUrl, imgUrlDetail)
- DiamondFormDialog.vue (normalImage, normalSelectImage, firstChargeImage, firstSelectChargeImage)
- FloatBallFormDialog.vue (image, imageBj, imageDetails)
- AdvertFormDialog.vue (imageUrl)
- SignConfigFormDialog.vue (icon)
- WelfareHouseFormDialog.vue (image)
- base.vue (erweima, share_image)
2. THE System SHALL 保持原有的表单验证逻辑不变
3. THE System SHALL 兼容已有的图片URL数据