Files
one-pipe-system/openspec/changes/add-package-management-system/specs/package-management/spec.md
sexygoat 841cf0442b
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 3m30s
fetch(add): 订单管理-企业设备
2026-01-29 15:43:45 +08:00

160 lines
4.7 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.
# Package Management Specification
## ADDED Requirements
### Requirement: 套餐列表查询
系统 SHALL 提供套餐列表查询功能,支持分页和多条件筛选。
#### Scenario: 查询所有套餐
- **WHEN** 用户访问套餐管理页面
- **THEN** 系统显示套餐列表包含套餐编码、套餐名称、系列ID、套餐类型、流量、价格、状态、上架状态等
- **AND** 支持按套餐名称模糊搜索
- **AND** 支持按系列ID筛选
- **AND** 支持按状态筛选(启用/禁用)
- **AND** 支持按上架状态筛选(上架/下架)
- **AND** 支持按套餐类型筛选formal/addon
- **AND** 支持分页每页最多100条记录
#### Scenario: 多条件组合查询
- **WHEN** 用户同时使用多个筛选条件
- **THEN** 系统返回满足所有条件的套餐列表
### Requirement: 创建套餐
系统 SHALL 允许管理员创建新的套餐。
#### Scenario: 成功创建套餐
- **WHEN** 用户填写必填字段(套餐编码、套餐名称、套餐类型、套餐时长、套餐价格)
- **AND** 可选填写系列ID、流量信息、成本价、建议售价等
- **AND** 提交表单
- **THEN** 系统创建套餐,默认状态为启用,默认上架状态为下架
- **AND** 返回创建的套餐详情
#### Scenario: 套餐编码唯一性验证
- **WHEN** 用户使用已存在的套餐编码创建套餐
- **THEN** 系统返回错误提示"套餐编码已存在"
#### Scenario: 验证套餐时长范围
- **WHEN** 套餐时长小于1个月或大于120个月
- **THEN** 系统返回验证错误"套餐时长必须在1-120个月之间"
#### Scenario: 流量类型与流量额度关系
- **WHEN** 流量类型为真流量real
- **THEN** 真流量额度real_data_mb必须大于0
- **AND** 总流量额度data_amount_mb等于真流量额度
- **WHEN** 流量类型为虚流量virtual
- **THEN** 虚流量额度virtual_data_mb必须大于0
- **AND** 真流量额度和虚流量额度之和等于总流量额度
### Requirement: 查看套餐详情
系统 SHALL 允许用户查看单个套餐的详细信息。
#### Scenario: 查询存在的套餐
- **WHEN** 用户通过套餐ID查询详情
- **THEN** 系统返回该套餐的完整信息,包括所有字段
#### Scenario: 查询不存在的套餐
- **WHEN** 用户查询不存在的套餐ID
- **THEN** 系统返回404错误
### Requirement: 更新套餐
系统 SHALL 允许管理员更新套餐信息。
#### Scenario: 成功更新套餐
- **WHEN** 用户修改套餐的可变字段(名称、时长、价格、流量等)
- **AND** 提交更新
- **THEN** 系统更新套餐信息
- **AND** 返回更新后的套餐详情
#### Scenario: 套餐编码不可修改
- **WHEN** 用户尝试修改套餐编码
- **THEN** 系统忽略该字段,不允许修改
### Requirement: 删除套餐
系统 SHALL 允许管理员删除套餐。
#### Scenario: 成功删除套餐
- **WHEN** 用户删除未被使用的套餐
- **THEN** 系统删除该套餐
- **AND** 返回成功状态
#### Scenario: 删除被分配的套餐
- **WHEN** 用户删除已被分配给代理商的套餐
- **THEN** 系统返回错误提示"该套餐已被分配,无法删除"
### Requirement: 套餐状态管理
系统 SHALL 支持套餐启用/禁用状态管理。
#### Scenario: 启用套餐
- **WHEN** 用户将禁用状态的套餐切换为启用
- **THEN** 系统更新状态为启用status=1
#### Scenario: 禁用套餐
- **WHEN** 用户将启用状态的套餐切换为禁用
- **THEN** 系统更新状态为禁用status=2
- **AND** 该套餐将不可用于新的分配或充值
### Requirement: 套餐上架状态管理
系统 SHALL 支持套餐上架/下架状态管理。
#### Scenario: 上架套餐
- **WHEN** 用户将下架状态的套餐切换为上架
- **THEN** 系统更新上架状态为上架shelf_status=1
- **AND** 该套餐将对代理商可见
#### Scenario: 下架套餐
- **WHEN** 用户将上架状态的套餐切换为下架
- **THEN** 系统更新上架状态为下架shelf_status=2
- **AND** 该套餐将对代理商不可见
### Requirement: 套餐类型支持
系统 SHALL 支持两种套餐类型。
#### Scenario: 正式套餐
- **WHEN** 创建套餐类型为 formal 的套餐
- **THEN** 系统记录为正式套餐
#### Scenario: 附加套餐
- **WHEN** 创建套餐类型为 addon 的套餐
- **THEN** 系统记录为附加套餐
### Requirement: 权限控制
系统 SHALL 对套餐管理功能实施权限控制。
#### Scenario: 未认证用户访问
- **WHEN** 未登录用户访问套餐管理接口
- **THEN** 系统返回401未认证错误
#### Scenario: 无权限用户访问
- **WHEN** 已登录但无权限的用户访问套餐管理接口
- **THEN** 系统返回403无权访问错误