fix: some
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 独立代理注册页免登录访问
|
||||
代理扫码分销注册页 MUST 独立于登录态提供,未登录可访问,且挂在后台项目内(H5 与 PC 共用同一套表单);注册流程 MUST NOT 复用当前登录态。
|
||||
|
||||
#### Scenario: 未登录访问注册页
|
||||
- **GIVEN** 用户未登录并通过扫码或直接访问注册入口
|
||||
- **WHEN** 其打开注册页面
|
||||
- **THEN** 页面 MUST 正常渲染注册表单
|
||||
- **AND** MUST NOT 跳转到登录页
|
||||
|
||||
#### Scenario: 已登录用户访问注册页
|
||||
- **GIVEN** 用户已登录后台
|
||||
- **WHEN** 其打开注册页面
|
||||
- **THEN** 注册流程 MUST 不携带登录态
|
||||
|
||||
### Requirement: 发送短信验证码
|
||||
注册页 MUST 调用 `POST /api/c/v1/auth/send-code` 发送验证码,请求体 `{ phone, scene }`(`scene` 为 `bind_phone`),响应 `data.cooldown_seconds` MUST 用于 60 秒倒计时;请求 MUST 不携带 Token。
|
||||
|
||||
#### Scenario: 发送验证码并倒计时
|
||||
- **GIVEN** 用户输入手机号
|
||||
- **WHEN** 其点击获取验证码
|
||||
- **THEN** 系统 MUST 调用发送验证码接口
|
||||
- **AND** 按钮 MUST 进入 60 秒倒计时且不可重复点击
|
||||
|
||||
#### Scenario: 注册失败后不复用验证码
|
||||
- **GIVEN** 一次注册提交失败
|
||||
- **WHEN** 用户再次尝试注册
|
||||
- **THEN** 页面 MUST 提示重新获取验证码
|
||||
- **AND** MUST NOT 复用已消费的验证码
|
||||
|
||||
### Requirement: 代理扫码注册提交
|
||||
注册页 MUST 调用 `POST /api/c/v1/agent-distribution-registrations` 提交注册,必填 `distribution_code`(扫码自动带)、`phone`、`code`、`password`、`shop_name`、`shop_code`、`username`,选填 `contact_name`、`province`、`city`、`district`、`address`;成功响应为「待审批」,前端 MUST 展示待审批结束页且不自动登录。
|
||||
|
||||
#### Scenario: 注册成功进入待审批
|
||||
- **GIVEN** 用户填写完整表单并通过校验
|
||||
- **WHEN** 其提交注册
|
||||
- **THEN** 系统 MUST 调用注册接口
|
||||
- **AND** 成功时 MUST 展示「待审批,审核结果将通知你」结束页
|
||||
- **AND** MUST NOT 发放账号凭证或自动登录
|
||||
|
||||
#### Scenario: 注册失败统一提示
|
||||
- **GIVEN** 注册提交失败(无效分销码、上级停用、验证码无效或已消费等)
|
||||
- **WHEN** 注册接口返回失败
|
||||
- **THEN** 页面 MUST 统一提示「分销码不可用」
|
||||
- **AND** MUST NOT 根据错误文案区分原因
|
||||
|
||||
### Requirement: 表单适配与敏感项处理
|
||||
注册表单 MUST 同时适配手机 H5 与 PC:H5 单列、大触控区、软键盘友好、地址使用级联选择器;PC 使用居中卡片或两列布局且字段一致。密码输入 MUST 掩码并展示强度提示;页面 MUST NOT 展示除手机号外的完整个人敏感信息。
|
||||
|
||||
#### Scenario: H5 与 PC 同一表单
|
||||
- **GIVEN** 用户分别在手机与 PC 打开注册页
|
||||
- **WHEN** 其填写注册信息
|
||||
- **THEN** 两端的字段集合 MUST 一致
|
||||
- **AND** 布局 MUST 按端侧自适应
|
||||
|
||||
#### Scenario: 密码强度与掩码
|
||||
- **GIVEN** 用户在密码输入框输入
|
||||
- **WHEN** 其提交表单
|
||||
- **THEN** 输入 MUST 为掩码展示
|
||||
- **AND** MUST 展示密码强度提示
|
||||
@@ -0,0 +1,61 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 提交/替换提现资料资格
|
||||
代理本人 MUST 能提交或替换提现资料资格,调用 `POST /api/admin/shops/{shop_id}/withdrawal-qualifications`,请求体包含 `subject_type`、`subject_code`、`legal_person_id_card` 与合同、身份证正反面、营业执照、门头照、发票等 `*_file_key`,以及 `invoice_title`、`invoice_subject_code`;附件 MUST 先通过对象存储上传接口取得 `file_key` 再提交。
|
||||
|
||||
#### Scenario: 提交资格成功
|
||||
- **GIVEN** 代理本人已登录并选好主体类型
|
||||
- **WHEN** 其上传资料并提交
|
||||
- **THEN** 前端 MUST 先取得全部附件 `file_key`
|
||||
- **AND** 再调用提交接口并在成功后刷新资格列表
|
||||
|
||||
#### Scenario: 替换资格使旧资格失效
|
||||
- **GIVEN** 已存在通过审批的资格
|
||||
- **WHEN** 代理提交合同或法人身份证变更
|
||||
- **THEN** 旧资格 MUST 立即失效
|
||||
- **AND** 新资格 MUST 重新审批通过后方可提现
|
||||
|
||||
### Requirement: 查询提现资料资格
|
||||
代理本人 MUST 能分页查询提现资料资格,调用 `GET /api/admin/shops/{shop_id}/withdrawal-qualifications`(`page` / `page_size` / `status`);响应 MUST 展示脱敏的 `subject_code_masked` 与 `legal_person_id_card_masked`,并展示 `status`、`approval_status`、`invalid_reason`、`invalidated_at` 与各附件 `file_key` 预览。
|
||||
|
||||
#### Scenario: 查看资格版本与审批状态
|
||||
- **GIVEN** 代理本人打开提现资料资格列表
|
||||
- **WHEN** 接口返回资格记录
|
||||
- **THEN** 列表 MUST 展示脱敏证件号与审批状态
|
||||
- **AND** 证件号 MUST NOT 以明文展示
|
||||
|
||||
### Requirement: 作废提现资料资格
|
||||
超级管理员 MUST 能作废提现资料资格,调用 `POST /api/admin/withdrawal-qualifications/{id}/void`,`reason` 必填。
|
||||
|
||||
#### Scenario: 作废资格须填原因
|
||||
- **GIVEN** 超级管理员打开作废弹窗
|
||||
- **WHEN** 其未填写原因直接提交
|
||||
- **THEN** 前端 MUST 阻止提交并提示填写原因
|
||||
|
||||
#### Scenario: 超管作废资格
|
||||
- **GIVEN** 超级管理员选择一条资格
|
||||
- **WHEN** 其填写原因并确认作废
|
||||
- **THEN** 系统 MUST 调用作废接口并在成功后刷新列表
|
||||
|
||||
### Requirement: 重提被驳回的提现
|
||||
代理本人 MUST 能重提被驳回的提现,调用 `PUT /api/admin/shops/{shop_id}/withdrawal-requests/{id}`,请求体包含 `account_name`、`account_number`、`amount`、`withdrawal_method` 与 `invoice_keys`;成功响应返回新提现单(`withdrawal_no`、`actual_amount`、`fee`、`fee_rate`、`status`)。
|
||||
|
||||
#### Scenario: 重提被驳回的提现
|
||||
- **GIVEN** 代理本人的提现申请被驳回
|
||||
- **WHEN** 其修改信息并重新提交
|
||||
- **THEN** 系统 MUST 调用重提接口
|
||||
- **AND** 成功后 MUST 刷新提现记录并展示新单号
|
||||
|
||||
#### Scenario: 非驳回状态不可重提
|
||||
- **GIVEN** 提现申请不是被驳回状态
|
||||
- **WHEN** 代理尝试重提
|
||||
- **THEN** 重提入口 MUST 不可用或不展示
|
||||
|
||||
### Requirement: 提现申请详情
|
||||
代理本人 MUST 能查看提现申请详情,调用 `GET /api/admin/shops/{shop_id}/withdrawal-requests/{id}`;响应包含 `reject_reason`、`anomaly_flag`、`anomaly_name`、`anomaly_reason` 与 `attempts` 尝试记录,前端 MUST 展示这些字段。
|
||||
|
||||
#### Scenario: 查看提现详情
|
||||
- **GIVEN** 代理本人点击提现记录
|
||||
- **WHEN** 详情返回
|
||||
- **THEN** 页面 MUST 展示提现金额、实际到账、手续费、状态
|
||||
- **AND** 展示驳回原因、异常标记与尝试记录
|
||||
@@ -0,0 +1,15 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 店铺数据返回分销码
|
||||
店铺列表、详情与更新接口响应 MUST 包含 `distribution_code` 字段,前端类型 MUST 覆盖该字段并在列表/详情中展示。
|
||||
|
||||
#### Scenario: 店铺详情展示分销码
|
||||
- **GIVEN** 用户打开店铺详情页
|
||||
- **WHEN** 店铺存在 `distribution_code`
|
||||
- **THEN** 页面 MUST 展示分销码
|
||||
- **AND** MUST 以该码生成注册入口二维码
|
||||
|
||||
#### Scenario: 分销码为空
|
||||
- **GIVEN** 店铺尚未分配分销码
|
||||
- **WHEN** 页面展示店铺信息
|
||||
- **THEN** 分销码与二维码区域 MUST 展示空态(`-` 或「未分配」)
|
||||
@@ -0,0 +1,15 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 企微审批场景业务类型扩展
|
||||
企微审批场景的 `business_type` MUST 支持以下枚举:`refund_approval`(退款审批)、`offline_recharge_approval`(员工线下代充值审批)、`employee_collection_approval`(员工代收款核销审批)、`agent_distribution_approval`(代理扫码分销注册审批)、`withdrawal_qualification_approval`(提现资料资格审批)、`commission_withdrawal_approval`(佣金提现终审)。前端类型与场景配置页选项 MUST 与后端枚举一致;`GET /api/admin/wecom/scenes/{business_type}/fields` 允许查询上述任一类型。
|
||||
|
||||
#### Scenario: 场景配置页可选新业务类型
|
||||
- **GIVEN** 超级管理员打开企微审批场景配置页
|
||||
- **WHEN** 其新建场景并选择业务类型
|
||||
- **THEN** 下拉选项 MUST 包含全部六个业务类型
|
||||
- **AND** 新增三个业务类型 MUST 与后端枚举一致
|
||||
|
||||
#### Scenario: 查询新增场景业务字段
|
||||
- **GIVEN** 已选择 `agent_distribution_approval`、`withdrawal_qualification_approval` 或 `commission_withdrawal_approval`
|
||||
- **WHEN** 页面加载业务字段
|
||||
- **THEN** 前端 MUST 调用对应 `business_type` 的字段查询接口
|
||||
Reference in New Issue
Block a user