This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# Change: 新增当前用户修改密码弹窗
|
||||
|
||||
状态:用户已确认执行(2026-10-09),按本提案实施。
|
||||
|
||||
## Why
|
||||
|
||||
当前顶部用户菜单只有“个人中心”和“锁定屏幕”,缺少当前登录用户修改密码的入口。统一认证接口已有 `PUT /api/auth/password`,但前端参数类型仍使用不符合接口约定的驼峰字段。
|
||||
|
||||
## What Changes
|
||||
|
||||
- 在顶部用户菜单“个人中心”和“锁定屏幕”之间新增“修改密码”,点击后打开弹窗,并关闭用户菜单浮层。
|
||||
- 弹窗包含旧密码、新密码、确认新密码;输入隐藏并允许切换可见,新密码及确认新密码长度为 8–32 位,确认密码必须一致。旧密码必填,不套用新密码长度限制,以兼容已有密码。
|
||||
- 复用 Element Plus 表单、弹窗及主题,提供字段校验、取消、确认、提交中状态和重复提交保护,兼容窄屏及键盘操作。
|
||||
- 复用 `AuthService.changePassword`,修正参数类型,仅发送 `old_password` 和 `new_password`;确认密码不发送给后端,Bearer 认证沿用现有请求层。
|
||||
- 成功后提示并关闭弹窗、清空密码和旧的记住密码凭证;不主动退出登录。失败时保持弹窗,由现有请求层展示后端错误,401 沿用现有认证过期处理。
|
||||
- 补齐中文及英文菜单与表单文案,以及参数映射、密码长度边界、密码一致性、成功/失败与重复提交验证。
|
||||
|
||||
## Impact
|
||||
|
||||
- Affected specs: `user-auth`(当前无已归档的能力规范,本提案新增增量规范)。
|
||||
- Affected code: `src/components/core/layouts/art-header-bar/index.vue`、新增修改密码弹窗组件、`src/types/api/auth.ts`、`src/api/modules/auth.ts`、`src/locales/langs/zh.json`、`src/locales/langs/en.json`。
|
||||
- 不涉及管理员给其他账号重置密码,不修改锁屏密码,不引入新依赖,不调用测试环境真实密码修改接口。
|
||||
- 本次另行完成的资产实名时间修正属于现有展示问题修复:仅指定三个 `real_name_at` 展示位置在现有逻辑基础上加 8 小时,不属于本提案的审批范围。
|
||||
|
||||
## Validation
|
||||
|
||||
审批后验证 7、8、32、33 位新密码边界、确认密码不一致、旧密码为空、成功及失败响应、重复点击,以及菜单位置与重新打开后的密码清空。运行相关测试、类型检查和受影响文件的代码检查。
|
||||
@@ -0,0 +1,74 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Self-service password menu entry
|
||||
|
||||
系统 SHALL 在顶部用户菜单“个人中心”和“锁定屏幕”之间提供“修改密码”入口,点击后显示当前登录用户的修改密码弹窗,不跳转页面。
|
||||
|
||||
#### Scenario: 打开修改密码弹窗
|
||||
|
||||
- **WHEN** 当前登录用户点击顶部菜单“修改密码”
|
||||
- **THEN** 系统 MUST 关闭用户菜单浮层并显示修改密码弹窗
|
||||
- **AND** 弹窗 MUST 包含旧密码、新密码、确认新密码、取消及确认操作
|
||||
- **AND** 输入 MUST 默认隐藏密码并支持切换可见
|
||||
|
||||
### Requirement: Password form validation
|
||||
|
||||
系统 SHALL 校验旧密码必填、新密码及确认新密码长度为 8–32 位且两次新密码一致,在校验通过前不得发送修改密码请求。系统 MUST NOT 自动裁剪或修改用户输入的密码,也不得对旧密码新增长度限制。
|
||||
|
||||
#### Scenario: 密码长度边界
|
||||
|
||||
- **WHEN** 新密码或确认新密码长度为 7 或 33 位
|
||||
- **THEN** 表单 MUST 提示长度要求并阻止提交
|
||||
- **AND** 长度为 8 或 32 位且其他校验通过时 MUST 允许提交
|
||||
|
||||
#### Scenario: 必填及一致性校验
|
||||
|
||||
- **WHEN** 任一密码字段为空,或者两次新密码不一致
|
||||
- **THEN** 表单 MUST 展示对应字段错误并阻止提交
|
||||
|
||||
### Requirement: Unified authentication password contract
|
||||
|
||||
系统 SHALL 通过现有统一认证请求层调用 `PUT /api/auth/password`,请求体 MUST 仅包含 `old_password` 和 `new_password`,Bearer 认证 MUST 沿用当前登录会话,确认密码 MUST NOT 发送到服务端。
|
||||
|
||||
#### Scenario: 提交有效表单
|
||||
|
||||
- **WHEN** 用户提交通过校验的密码表单
|
||||
- **THEN** 系统 MUST 发送旧密码至 `old_password`、新密码至 `new_password`
|
||||
- **AND** 请求方法 MUST 为 PUT,请求路径 MUST 为 `/api/auth/password`
|
||||
- **AND** 请求 MUST 沿用现有请求层的 Bearer 认证
|
||||
|
||||
### Requirement: Password submission lifecycle
|
||||
|
||||
系统 SHALL 在提交期间提供加载状态并阻止重复提交;成功后提示、关闭弹窗并清空敏感字段及记住密码凭证;普通失败时保留弹窗并展示后端错误;认证过期 MUST 沿用现有请求层处理。成功后系统 MUST NOT 主动退出登录或改变锁屏密码。
|
||||
|
||||
#### Scenario: 重复点击提交
|
||||
|
||||
- **WHEN** 修改密码请求尚未完成时用户再次确认
|
||||
- **THEN** 系统 MUST 保持加载状态且不得发送重复请求
|
||||
|
||||
#### Scenario: 修改成功
|
||||
|
||||
- **WHEN** 修改密码请求成功
|
||||
- **THEN** 系统 MUST 提示成功并关闭弹窗
|
||||
- **AND** 系统 MUST 清空全部密码字段及保存的旧登录凭证
|
||||
- **AND** 系统 MUST 保留当前登录状态,不修改锁屏密码
|
||||
|
||||
#### Scenario: 修改失败
|
||||
|
||||
- **WHEN** 接口返回普通错误,如旧密码错误或服务器错误
|
||||
- **THEN** 系统 MUST 通过现有请求层展示错误并保留弹窗
|
||||
- **AND** 系统 MUST 解除提交中状态以允许用户更正后重试
|
||||
|
||||
#### Scenario: 取消后重新打开
|
||||
|
||||
- **WHEN** 用户取消或关闭弹窗后重新打开
|
||||
- **THEN** 所有密码字段及校验状态 MUST 为空
|
||||
|
||||
### Requirement: Password dialog interface consistency
|
||||
|
||||
修改密码弹窗 SHALL 复用现有 Element Plus 组件和主题,支持中英文、键盘操作及窄屏展示,密码输入 MUST 具备可识别标签和可见校验反馈。
|
||||
|
||||
#### Scenario: 窄屏及键盘操作
|
||||
|
||||
- **WHEN** 用户在窄屏设备或通过键盘打开弹窗
|
||||
- **THEN** 弹窗 MUST 不产生水平溢出,且可访问全部输入、取消及确认操作
|
||||
17
openspec/changes/add-self-service-password-dialog/tasks.md
Normal file
17
openspec/changes/add-self-service-password-dialog/tasks.md
Normal file
@@ -0,0 +1,17 @@
|
||||
## 1. 审批
|
||||
|
||||
- [x] 1.1 用户确认修改密码弹窗提案后开始实现。
|
||||
|
||||
## 2. 实现
|
||||
|
||||
- [x] 2.1 修正 `ChangePasswordParams`,仅包含 `old_password` 和 `new_password`,复用 `PUT /api/auth/password`。
|
||||
- [x] 2.2 新增修改密码弹窗:旧密码必填、新密码及确认密码 8–32 位、两次新密码一致,支持密码显隐。
|
||||
- [x] 2.3 加入加载状态、重复提交保护、成功提示及关闭、关闭后清空密码;成功时清除旧的记住密码凭证。
|
||||
- [x] 2.4 在“个人中心”和“锁定屏幕”之间增加入口,关闭菜单浮层后显示弹窗,补充中英文文案。
|
||||
|
||||
## 3. 验证
|
||||
|
||||
- [x] 3.1 验证密码长度 7、8、32、33 位边界、必填项和确认密码不一致。
|
||||
- [x] 3.2 验证请求方法、路径、Bearer 认证及下划线参数,确认请求不含确认密码。
|
||||
- [x] 3.3 验证成功、失败、认证过期、重复提交和重新打开弹窗的状态清理。
|
||||
- [x] 3.4 运行相关测试、类型检查及受影响文件代码检查,检查菜单顺序、键盘操作和窄屏布局。
|
||||
Reference in New Issue
Block a user