fix: some
All checks were successful
构建并部署前端到测试环境 / deploy (push) Successful in 55s

This commit is contained in:
luo
2026-10-14 17:08:32 +08:00
parent 16effb69f3
commit 0d77a7d55b
23 changed files with 1113 additions and 89 deletions

View File

@@ -2,26 +2,26 @@
### Requirement: 后台新登录密码统一校验
后台既有设置新登录密码的表单 SHALL 按用户最新确认使用专用统一校验:长度 8~12 位,仅允许 ASCII 英文字母和数字,必须同时包含大写字母、小写字母和数字。特殊符号、空白、中文、emoji 和其他非英文字母数字字符 MUST 拒绝;用户确认 MUST 优先于原对接说明的四类字符规则。
后台既有设置新登录密码的表单 SHALL 按 2026-10-14 用户修正规则校验:长度 8~12 位,大写字母、小写字母、数字、半角特殊符号四类至少包含三类。可打印 ASCII 标点符号 MUST 允许;空白、中文、控制字符、emoji 等非 ASCII 字符 MUST 拒绝,不静默 trim。
#### Scenario: 有效新密码
- **WHEN** 用户在后台本人改密、账号创建、店铺初始账号、企业创建或企业改密入口输入 `Abc12345`
- **THEN** 新密码校验 MUST 通过
- **AND** 新密码/确认密码输入限制及说明 MUST 为 8~12 位,仅英文字母和数字,且大写、小写和数字三类均必需
- **AND** 新密码/确认密码输入限制及说明 MUST 为 8~12 位,四类字符至少包含三类,允许半角特殊符号
- **AND** 需要确认密码的表单 MUST 验证其与新密码一致
#### Scenario: 无效新密码
- **WHEN** 用户输入 7 位、13 位、缺少大写/小写/数字任一类的密码,或包含特殊符号、空白、中文、emoji 等非法字符的密码
- **WHEN** 用户输入 7 位、13 位、只包含两类字符的密码,或包含空白、中文、emoji 等非法字符的密码
- **THEN** 前端 MUST 阻止提交并展示具体规则提示
- **AND** MUST NOT 静默 trim 密码后当作合法值提交
#### Scenario: 字符类别齐全但含特殊符号
#### Scenario: 含特殊符号且满足三类
- **WHEN** 用户输入 `Abc1234!`,长度符合且已包含大写、小写和数字
- **THEN** 前端 MUST 因 `!` 是禁止的特殊符号拒绝该密码
- **AND** MUST 提示只允许英文字母和数字,不能按原四类字符规则放行
- **WHEN** 用户输入 `Admin@12345`、`ABC1234!`、`abc1234!` 或 `Abcdefg!`
- **THEN** 前端 MUST 按至少三类规则放行,不额外要求大写、小写和数字三者同时存在
- **AND** 提示 MUST 不再显示「不允许特殊符号」
#### Scenario: 修改账号未设置新密码
@@ -43,17 +43,65 @@
#### Scenario: 使用旧密码登录和本人改密
- **WHEN** 用户使用仍被后端接受的旧密码登录或填写本人改密 `old_password`
- **THEN** 前端 MUST NOT 对这些旧密码输入套用新的 8~12 位/三类/禁止特殊符号限制
- **THEN** 前端 MUST NOT 对这些旧密码输入套用新的 8~12 位/至少三类限制
- **AND** 本人改密成功后的清理表单、清理登录态和返回登录页行为 MUST 保留
#### Scenario: 非登录密码与 C 端保持不变
#### Scenario: 非登录密码与其余 C 端保持不变
- **WHEN** 实施本批次密码适配
- **THEN** 操作密码、WiFi 密码和通用校验器其他调用行为 MUST 保持不变
- **AND** 本仓库公开扫码注册页面和所有 `/api/c/v1` 服务 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 阻止并行重复提交,避免重复申请和重复失败提示