# 2026-07-24 工作记录

## 从 guilixu-admin 复制登录模块到 mp-vue
mp-vue 是 Vue3 + Ant Design Vue + ele-admin-pro 模板项目，其登录模块是 guilixu-admin 改造前的旧版。本次把 guilixu-admin 已验证的登录增强功能完整移植过来。

### 新增/修改文件
- `src/views/passport/forget/index.vue`（新建）：忘记密码页，邮箱/手机两种找回，前3次免图形验证码，密码强度校验，调用 resetPassword。
- `src/api/passport/login/model/index.ts`：新增 `TenantOption`、`LoginOutcome`；`LoginResult` 增加 `tenants?`；`LoginParam` 增加 `smsCode?`。
- `src/api/passport/login/index.ts`：新增 `saveLoginState`、`loginBySelectTenant`、`sendSmsCaptchaByAdmin`、`sendEmailCaptcha`；`loginBySuperAdminSms` 改为返回 `LoginOutcome`（多租户 selectTenant / 单租户 ok）。
- `src/utils/request.ts`：请求拦截器支持 `X-Tenant-Skip`（适配 axios 0.27 的 `config.headers.common` 风格），登录前找回场景跳过租户头注入避免串租户。
- `src/api/layout/index.ts` + `model/index.ts`：新增 `resetPassword`（POST /resetPassword，带 X-Tenant-Skip 头）与 `ResetPasswordParam`。
- `src/views/passport/login/index.vue`：发送验证码前3次免图形验证（handleSendCode）；onLoginBySms 处理 LoginOutcome 多租户选择；新增选择租户弹窗；账号登录增加"忘记密码"链接跳 /forget。
- `src/router/routes.ts`：启用 /forget 路由。
- `src/i18n/lang/zh_CN/login.ts` / `en/login.ts`：新增 forgetPage 命名空间。

### 验证
- `vue-tsc`：本次改动文件无类型错误（项目本身存在大量与本次无关的 JSX 解析历史错误）。
- `vite build --outDir dist-verify-mp`：编译打包成功，forget 页 chunk 已生成，无 error/fail。临时产物已移至 /tmp。

### 注意点
- mp-vue 用 axios 0.27.2，request 拦截器头写法与 guilixu-admin（axios 1.x）不同（用 `config.headers.common[...]`），X-Tenant-Skip 判断同时兼容 `config.headers['X-Tenant-Skip']` 与 `config.headers.common['X-Tenant-Skip']`。
- 后端接口 /sendEmailCaptcha、/sendSmsCaptchaByAdmin、/resetPassword、/loginBySelectTenant 需 guilixu-java 已实现（与 website-admin 同源 server.websoft.top，通常已具备）。
