Files
one-pipe-system/openspec/changes/add-business-user-group-management/specs/shop-management/spec.md
2026-09-17 12:16:20 +08:00

4.0 KiB
Raw Blame History

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/batchbody 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-urlpurpose=shop_import拿预签名 URL 直传15 分钟有效)-> POST /api/admin/shops/business-owner-importsfile_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 且明细为空