---
url: /docs/guide/uniapp/pages/login.md
---
# pages/login — 手机号登录

> `src/pages/login/index.vue` · 513 行 · Vue3 setup · [调用 API：oauth](../api/oauth.md)

## 职责

C 端唯一登录入口：手机号 + 短信验证码 + 图形验证码 + 协议勾选。登录成功按 `isNewUser` 分流（true → 弹三页向导；false → 进首页）。

## 数据与依赖

| 项 | 值 |
|---|---|
| API | `getCaptcha` / `sendSmsCode` / `smsLogin`（[oauth](../api/oauth.md)） |
| utils | `device`（clientId 生成）/ `storage`（token/user 持久化）/ `validUtil`（手机号校验）/ `ToastUtil` |
| 协议 | 《用户协议》《隐私协议》→ navigateTo `pages/agreement`（勾选后 `agreementAccepted: true`） |

## 关键逻辑

1. 进入页面自动拉图形验证码（`captchaId` + 图）；请求失败显示转圈（**无自动重试** — 重启 App 或重进刷新）
2. 「获取验证码」→ 校验手机号 + 图形码 → 58s 倒计时；图形码一次性
3. 登录成功：`storage.token/refreshToken/tokenExpires/user` 四写 → `isNewUser === true` 时向导弹窗（`v-model` qm-profile-setup-popup）→ 否则 reLaunch 首页
4. 401 链：本页请求 auth:'none'，不走 rotate

## 关联

* 未注册手机号验证后自动注册（服务端语义，前端无独立注册页）
* 向导弹窗行为详见 [components/qm-profile-setup-popup](../components/qm-profile-setup-popup.md)

## 变更记录（git）

| 日期 | 作者 | 说明 |
|---|---|---|
| 2026-09-17 | 外星动物 | feat: C 端协议页 + 登录页协议跳转 + personal-form 接真 API |
| 2026-09-17 | inkforge-deploy | （另有 3 次登录链迭代 — 详见 git log） |

> 生成：`scripts/gen_uniapp_docs.py`（重跑刷新）
