4.0 KiB
ADDED Requirements
Requirement: 店铺列表/详情业务用户组字段与筛选
店铺列表查询 MUST 支持 business_user_group_id、business_line、ungrouped 三个新筛选;列表与详情响应 MUST 提供 5 个只读推导字段:business_user_group_id(可空)、business_user_group_code、business_user_group_name、business_user_group_enabled、business_user_group_business_line。组停用仍返回组且 enabled=false(不算未分组);店铺不存组,字段实时推导,前端 MUST NOT 缓存或回写,改动组成员后重新拉取列表。
Scenario: 按业务用户组筛选
- GIVEN 用户在店铺列表选择业务用户组、业务线或勾选"未分组"
- WHEN 发起列表查询
- THEN 前端 MUST 提交 business_user_group_id/business_line/ungrouped 参数
- AND ungrouped=true 表示无负责人或负责人无分组
Scenario: 展示组字段
- GIVEN 店铺属于某启用或停用的业务用户组
- WHEN 渲染列表或详情
- THEN 前端 MUST 展示组名称/编码/业务线
- AND 组停用时 MUST 标记"已停用"且仍展示组归属
Requirement: 勾选批量交接平台业务员
店铺列表 MUST 支持勾选店铺批量交接平台业务员(PUT /api/admin/shops/business-owner/batch,body shop_ids 1-500 去重 + business_owner_account_id)。字段缺失 MUST 按参数错误处理(400);传 null 表示清空负责人;传 ID 表示换绑。任一店铺不存在/已删除/越权或目标非启用业务员时整批不写入,前端 MUST 统一提示"无权限操作该资源或资源不存在";成功响应含 batch_key/shop_count/cleared。
Scenario: 批量换绑
- GIVEN 用户勾选 1-500 家店铺并选择启用业务员
- WHEN 提交批量交接
- THEN 前端 MUST 提交 shop_ids(去重)与 business_owner_account_id
- AND 成功后展示 shop_count 并刷新列表
Scenario: 批量清空负责人
- GIVEN 用户勾选店铺并选择"清空负责人"
- WHEN 提交批量交接
- THEN 前端 MUST 显式提交 business_owner_account_id: null
- AND MUST NOT 省略该字段
Scenario: 整批失败统一提示
- GIVEN 批量交接请求因任一店铺或目标账号不满足条件而被后端拒绝
- WHEN 前端收到 1005
- THEN 前端 MUST 展示统一文案且不写入任何店铺
Requirement: 业务负责人 CSV 导入
店铺列表 MUST 支持通过 CSV 导入批量交接/清空业务负责人。流程 MUST 为:前端自带模板(表头 店铺编码,操作类型,业务员登录账号,备注,操作类型仅"换绑"或"清空")-> POST /api/admin/storage/upload-url(purpose=shop_import)拿预签名 URL 直传(15 分钟有效)-> POST /api/admin/shops/business-owner-imports(file_key)创建异步任务 -> 轮询 GET /api/admin/shops/business-owner-imports/{id} 展示结果。行级失败不等于任务失败:任务 status=3 也可能有失败行,MUST 按 items[] 展示明细;表头/编码不符为任务级失败,items 为空数组,只展示 error_message。
Scenario: 下载模板并上传
- GIVEN 用户进入导入界面
- WHEN 点击下载模板或选择文件
- THEN 前端 MUST 提供表头完全一致的模板文件
- AND 上传后 MUST 以 purpose=shop_import 获取上传地址并直传
Scenario: 创建任务并轮询
- GIVEN 文件上传成功拿到 file_key
- WHEN 提交创建导入任务
- THEN 前端 MUST 携带 file_key 调用创建接口
- AND MUST 轮询任务详情直到 status 为已完成(3)或失败(4)
Scenario: 展示行级失败明细
- GIVEN 任务完成但存在失败行
- WHEN 前端渲染结果
- THEN 前端 MUST 展示 total_count/success_count/fail_count
- AND MUST 按 items[] 展示各行的 line/shop_code/operation_type/status/reason
- AND 失败行保留原负责人
Scenario: 任务级失败提示
- GIVEN 表头或编码不符导致任务级失败
- WHEN 前端渲染结果
- THEN 前端 MUST 只展示 error_message 且明细为空