Files
luo 0d77a7d55b
All checks were successful
构建并部署前端到测试环境 / deploy (push) Successful in 55s
fix: some
2026-10-14 17:08:32 +08:00

108 lines
6.1 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.
## ADDED Requirements
### Requirement: 后台新登录密码统一校验
后台既有设置新登录密码的表单 SHALL 按 2026-10-14 用户修正规则校验:长度 8~12 位,大写字母、小写字母、数字、半角特殊符号四类至少包含三类。可打印 ASCII 标点符号 MUST 允许;空白、中文、控制字符、emoji 等非 ASCII 字符 MUST 拒绝,不静默 trim。
#### Scenario: 有效新密码
- **WHEN** 用户在后台本人改密、账号创建、店铺初始账号、企业创建或企业改密入口输入 `Abc12345`
- **THEN** 新密码校验 MUST 通过
- **AND** 新密码/确认密码输入限制及说明 MUST 为 8~12 位,四类字符至少包含三类,允许半角特殊符号
- **AND** 需要确认密码的表单 MUST 验证其与新密码一致
#### Scenario: 无效新密码
- **WHEN** 用户输入 7 位、13 位、只包含两类字符的密码,或包含空白、中文、emoji 等非法字符的密码
- **THEN** 前端 MUST 阻止提交并展示具体规则提示
- **AND** MUST NOT 静默 trim 密码后当作合法值提交
#### Scenario: 含特殊符号且满足三类
- **WHEN** 用户输入 `Admin@12345`、`ABC1234!`、`abc1234!` 或 `Abcdefg!`
- **THEN** 前端 MUST 按至少三类规则放行,不额外要求大写、小写和数字三者同时存在
- **AND** 提示 MUST 不再显示「不允许特殊符号」
#### Scenario: 修改账号未设置新密码
- **WHEN** 既有账号修改操作未提供可选 `password`
- **THEN** 页面 MUST NOT 因缺少密码阻止其他字段修改
- **AND** MUST NOT 提交空密码覆盖原值
- **AND** 本批次 MUST NOT 仅为接口清单补建当前没有的账号密码编辑入口
### Requirement: 后台密码接口字段与旧密码兼容
后台密码服务 SHALL 保持各接口规定的请求字段;本人改密和账号独立改密的新密码使用 `new_password`,账号创建/可选修改及企业创建/改密使用 `password`,店铺初始密码使用 `init_password`。后端字段级错误 MUST 以既有 `msg` 或提供的 `message` 展示,不替换为笼统提示,不记录密码。
#### Scenario: 独立修改账号密码
- **WHEN** 既有服务调用 `PUT /api/admin/accounts/{id}/password`
- **THEN** 请求体 MUST 按本批次说明使用 `new_password`,而不是当前旧封装的 `password`
- **AND** 本批次 MUST NOT 将其他账号接口的 `password` 改名
#### Scenario: 使用旧密码登录和本人改密
- **WHEN** 用户使用仍被后端接受的旧密码登录或填写本人改密 `old_password`
- **THEN** 前端 MUST NOT 对这些旧密码输入套用新的 8~12 位/至少三类限制
- **AND** 本人改密成功后的清理表单、清理登录态和返回登录页行为 MUST 保留
#### Scenario: 非登录密码与其余 C 端保持不变
- **WHEN** 实施本批次密码适配
- **THEN** 操作密码、WiFi 密码和通用校验器其他调用行为 MUST 保持不变
- **AND** 除用户明确追加的代理扫码注册密码校验及失败提示外,其余 C 端页面和 `/api/c/v1` 服务 MUST 不修改
#### Scenario: 展示后端字段级原因
- **WHEN** 密码相关请求返回包含具体校验原因的 `msg` 或 `message`
- **THEN** 页面 MUST 展示该原因且不重复弹错
- **AND** 请求、日志和错误反馈 MUST NOT 输出输入的密码值
### Requirement: 本人改密遮罩覆盖整个后台
本人修改密码弹窗 SHALL 使用 `append-to-body` 脱离顶栏堆叠上下文;遮罩 MUST 覆盖左侧菜单、顶栏和内容区,避免白色菜单压在遮罩上层,同时保留原表单、确认和关闭行为。
#### Scenario: 从顶栏打开改密弹窗
- **WHEN** 已登录用户打开本人修改密码弹窗
- **THEN** 弹窗遮罩 MUST 挂载到 body,左侧菜单 MUST 与页面其他背景一起变暗且不可点击
- **AND** 弹窗 MUST 继续支持 375px 视口,规则说明与错误提示不得重叠
### Requirement: 代理扫码注册密码复用统一规则
公开代理扫码注册表单及注册服务 SHALL 按用户明确追加范围复用后台新密码规则:8~12 位,大写字母、小写字母、数字、半角特殊符号至少三类,禁止空格和中文等非法字符,不静默 trim。注册路径、其他字段、短信验证码和免 Token 行为 MUST 保持不变,不扩大到其他 C 端功能。
#### Scenario: 输入有效注册密码
- **WHEN** 用户输入 `Abc12345`、`ABC1234!`、`abc1234!` 或 `Abcdefg!`
- **THEN** 表单及服务 MUST 校验通过,原样发送 `password` 至既有注册接口
- **AND** 页面 MUST 展示完整规则、12 位输入上限和「密码符合规则」反馈
#### Scenario: 输入无效注册密码
- **WHEN** 用户输入过短、过长、仅两类字符,或带空格/中文的密码
- **THEN** 表单及服务 MUST 阻止注册提交
- **AND** 页面 MUST 展示具体校验原因,不能把空格/中文显示为满足规则
- **AND** 规则说明和长错误文本 MUST 正常换行,不覆盖下一个表单项
### Requirement: 代理扫码注册失败仅提示一次
原公开代理注册请求 SHALL 关闭公共错误消息,由扫码注册页面统一处理失败;后台接口、短信及其他请求 MUST 保留原错误处理。错误码 1050/1001 MUST 显示「注册失败, 请联系管理员」,不暴露企业微信审批场景/模板配置细节。
#### Scenario: 企业微信模板错误阻止注册
- **WHEN** 注册接口以业务响应或 HTTP 错误返回 1050/1001
- **THEN** 每次失败 MUST 只显示一次「注册失败, 请联系管理员」
- **AND** 表单 MUST 保留供重试,不能显示提交成功或再显示「分销码不可用」
#### Scenario: 其他注册错误
- **WHEN** 注册失败不是 1050/1001,且后端提供可读 `msg` 或 `message`
- **THEN** 页面 MUST 只提示一次具体业务原因,不一律错误归因于分销码
- **AND** 无业务消息的网络错误 MUST 使用既有安全降级提示,不记录密码
#### Scenario: 注册提交仍在进行
- **WHEN** 用户重复点击提交,且上一次注册请求尚未完成
- **THEN** 页面 MUST 阻止并行重复提交,避免重复申请和重复失败提示