txw/docs/superpowers/specs/2026-04-28-修改密码功能设计.md

148 lines
3.7 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.

# 修改密码功能设计
## 1. 概述
为碳信网平台添加普通用户自助修改密码功能,采用前后端分离架构。
- **普通用户修改密码**:位于 `txw-mhzc`(用户中心),入口在个人中心左侧菜单
- **管理员重置密码**:已存在于 `txw-yygl`,无需改动
---
## 2. 后端接口
### 2.1 新增接口
**POST `/sso/auth/changePassword`**
请求体:
```json
{
"oldPassword": "MD5加密字符串",
"newPassword": "MD5加密字符串",
"confirmPassword": "MD5加密字符串"
}
```
响应(统一 `CommonResult`
```json
{
"code": 1,
"data": null,
"msg": "密码修改成功"
}
```
### 2.2 密码复杂度规则
**中等级别**
- 长度6-20 位
- 必须包含:字母 + 数字
### 2.3 校验流程
1. **格式校验**新密码长度6-20位需同时包含字母和数字
2. **一致性校验**newPassword === confirmPassword
3. **身份校验**authenticate(username, oldPassword) 验证旧密码正确性
4. **防重名校验**newPassword !== oldPassword
### 2.4 错误码
| 场景 | msg |
|------|-----|
| 密码格式不符 | 密码长度6-20位需包含字母和数字 |
| 两次密码不一致 | 两次输入的新密码不一致 |
| 旧密码错误 | 原密码输入错误 |
| 新旧密码相同 | 新密码不能与原密码相同 |
### 2.5 涉及文件
| 文件 | 改动 |
|------|------|
| `AuthService.java` | 新增 `changePassword` 接口声明 |
| `AuthServiceImpl.java` | 实现 `changePassword` 逻辑 |
| `AuthController.java` | 新增 `/auth/changePassword` 路由 |
| `AuthLoginReqVO.java` | 建议复用或新建 `ChangePasswordReqVO` |
---
## 3. 前端页面txw-mhzc-web
### 3.1 路由
| 路由路径 | 组件 | 菜单标题 |
|---------|------|---------|
| `/yhzx/zhanghugl` | `ChangePassword.vue` | 账号管理 |
### 3.2 工作台入口
`txw-mhzc-web/src/pages/index/views/gzt/index.vue` 新增快捷操作按钮"修改密码",点击跳转 `/yhzx/zhanghugl`
### 3.3 用户中心左侧菜单
`yhzx` 路由的 children 中新增:
```js
{ path: 'zhanghugl', component: zhanghugl, name: 'zhanghugl', meta: { title: '账号管理' } }
```
### 3.4 修改密码页面 `ChangePassword.vue`
**页面元素**
- 旧密码输入框(密码类型)
- 新密码输入框(密码类型)
- 确认密码输入框(密码类型)
- 确认按钮
**交互逻辑**
- 输入框下方实时显示密码格式提示
- 提交前统一校验
- 成功后给出提示并可跳转其他页面
- 失败回显错误信息
### 3.5 API 调用
```js
// txw-mhzc-web/src/pages/index/api/sso.js
export const changePassword = (params) => {
return fetchSso({
url: '/sso/auth/changePassword',
data: JSON.stringify(params),
method: 'post',
loading: true,
});
};
```
### 3.6 涉及文件
| 文件 | 改动 |
|------|------|
| `router/routes.js` | 新增 `zhanghugl` 路由 |
| `views/gzt/index.vue` | 新增修改密码快捷入口 |
| `views/yhzx/zhanghugl/index.vue` | 新建修改密码页面 |
| `api/sso.js` | 新建,封装 changePassword API |
---
## 4. yygl 管理员重置密码(已有,无需改动)
| 文件 | 说明 |
|------|------|
| `txw-yygl-web/.../yhgl/index.vue` | "重置密码"按钮,调用 `resetPassword(yhUuid)` |
| `txw-yygl-web/.../api/htgl.js` | `resetPassword` 接口已实现 |
| `txw-mhzc/.../UserController.java` | `resetPassword` 接口已实现,重置为配置默认密码 |
---
## 5. 数据库字段
用户表 `dlmm` 字段存储 MD5 加密后的密码。
---
## 6. 备注
- 旧密码传输前已在前端做 MD5 加密(与现有登录流程一致)
- 新密码传输前在前端做 MD5 加密
- 此设计与现有 `authenticate``isPasswordMatch` 逻辑保持一致