# 页面名:login(登录页) > PRD 参考:`apps/miniprogram/doc/prd.md` 第七节 7.1;P3 认证系统 > 已实现:是(`apps/miniprogram/miniprogram/pages/login/`) ## 页面说明 微信授权登录入口页。用户需勾选协议后才能点击登录按钮。登录后根据用户状态跳转到不同页面。 ## 视觉元素(忠于原型 HTML) - 顶部 Logo:台球图标 SVG(需转为图片资源 `/assets/icons/logo-billiard.svg`) - 应用名称文字 - 微信登录按钮:渐变背景,含微信图标 SVG - 底部协议勾选区域:勾选框 + 协议链接文字 ## 状态变量 | 变量名 | 类型 | 初始值 | 说明 | |--------|------|--------|------| | agreed | boolean | false | 协议勾选状态 | | loading | boolean | false | 登录请求中 | ## 用户操作 → 响应 | 操作 | 触发条件 | 响应行为 | 目标状态 | |------|----------|----------|----------| | 点击协议勾选框 | 无 | 切换 agreed | agreed=!agreed | | 点击"使用微信登录" | agreed=true | 调用 wx.login() 获取 code → POST /api/xcx-auth/login | loading=true | | 点击"使用微信登录" | agreed=false | 无响应(按钮禁用态) | 不变 | | 登录成功(status=new) | API 返回 | 跳转 apply 页面 | redirectTo apply | | 登录成功(status=pending) | API 返回 | 跳转 reviewing 页面 | redirectTo reviewing | | 登录成功(status=approved) | API 返回 | 跳转默认首页(task-list 或 board-finance) | switchTab | | 登录成功(status=rejected) | API 返回 | 跳转 no-permission 页面 | redirectTo no-permission | | 登录成功(status=disabled) | API 返回 | 跳转 no-permission 页面 | redirectTo no-permission | | 登录失败 | API 报错 | Toast 提示错误信息 | loading=false | ## 页面状态枚举 | 状态名 | 视觉表现 | 触发条件 | |--------|----------|----------| | 默认态 | 按钮灰色禁用,协议未勾选 | agreed=false | | 可登录态 | 按钮蓝色渐变+阴影,协议已勾选 | agreed=true | | 加载中 | 按钮显示 loading 动画 | loading=true | ## 后端 API 依赖 | API | 方法 | 说明 | |-----|------|------| | `/api/xcx-auth/login` | POST | 微信登录(code → JWT + user_status) | ## 页面导航 - 来源:小程序启动 / 退出账号后 / reviewing/no-permission 点击"更换登录账号" - 去向:apply / reviewing / no-permission / task-list / board-finance ## 全局组件 - 无底部 TabBar - 无 AI 悬浮按钮