# 修改密码功能设计 ## 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` 逻辑保持一致