Files
nexus/Project/fonrey/UI_DESIGN/登录管理/登录_UI.md
2026-04-30 18:40:55 +08:00

7.5 KiB
Raw Blame History

登录管理 UI 设计文档PRD v2.0 对齐)

版本v2.0 · 日期2026-04-30
PRD 来源PRD/登录管理/用户登录管理模块PRD.mdv2.0
数据模型来源DATA_MODEL/DATA_MODEL_LOGIN.md
技术约束来源TECH_STACK/登录管理技术方案.mdAGENTS.md


1. 模块目标与覆盖范围

本次 UI 调整目标:将登录管理相关设计与 PRD v2.0 全面对齐,重点修正以下差异:

  1. 登录页从“单一账号密码登录”升级为双登录方式 Tab
    • 手机号 + 密码登录(默认)
    • 手机号 + 短信验证码登录
  2. 删除“忘记用户名”入口(该流程已废弃)
  3. 补齐“重置密码/设置新密码”页面(公共组件,支持两种入口文案)
  4. 保留“微信扫码登录(即将开放)”禁用态入口

2. 页面清单P0

页面 文件 URL 建议 对应 Story/US 状态
Tenant 识别页 UI_DESIGN/登录_UI.html /account/tenant/verify/ Story 1 / US-ACCOUNT-002
登录页(双 Tab UI_DESIGN/登录_账号密码_UI.html /account/login/ Story 2、Story 5、Story 6(禁用态)
设置新密码页(公共组件) UI_DESIGN/登录_重置密码_UI.html /account/password/reset/ Story 3 步骤三 + §5.3.4 (新增)

注:找回密码 Step1/Step2手机号+验证码校验)流程在本轮以登录页入口与重置页组件方式完成设计闭环;后续可独立补全完整 Stepper 页面原型。


3. 设计基线UI System 对齐)

3.1 色彩与组件 Token

  • 背景:neutral-50
  • 主按钮:primary-600 / 700 / 800
  • 错误提示:danger-600
  • 成功提示:success-600
  • 警告提示:warning-600
  • 卡片:bg-white + border-neutral-200 + rounded-xl + shadow-lg

3.2 交互组件

  • 输入框Label 在上,错误提示在下
  • 密码框:支持显示/隐藏
  • 滑块拼图:支持刷新、成功态、失败抖动态
  • 登录方式 Tab默认“密码登录”切换后清空两侧输入并重置滑块
  • CTA 状态disabled / loading / success 跳转

3.3 主题策略

  • 本模块静态原型仅提供 Light 模式展示(data-theme="light"
  • 不提供主题切换控件

4. 页面规范

4.1 Tenant 识别页(登录_UI.html

页面结构

  • 左侧品牌区Logo、产品价值描述
  • 右侧Tenant 识别卡片
    • 标题:欢迎使用 Fonrey 房睿
    • 副标题:请输入您公司的专属识别码以继续
    • 字段公司识别码12位纯数字
    • 按钮:确认
    • 错误区:固定高度,避免布局抖动
    • 帮助文案:联系 Tenant Admin 获取识别码

校验与状态

  • 输入仅保留数字,超长截断为 12 位
  • 少于 12 位提交:提示“识别码须为 12 位数字”
  • 成功:缓存 tenant 信息并跳转登录页(双 Tab
  • 失败提示“识别码无效请联系您的Tenant Admin租户管理员获取正确的识别码”
  • 网络异常:提示“网络连接失败,请检查网络后重试”

接口映射

  • POST /api/auth/tenant/verify/
  • Request{ tenant_code }

4.2 登录页(登录_账号密码_UI.html

顶部信息

  • 显示当前租户名:正在登录:{tenant_name}
  • 提供“切换公司”入口 + 二次确认弹窗
  • 可显示 Session 过期提示条

登录方式 Tab核心

Tab 默认 字段组成
密码登录 手机号 + 密码 + 滑块验证 + 登录
验证码登录 - 手机号 + 滑块验证 + 短信验证码 + 登录

Tab 切换规则

  • 切换后:
    • 清空当前 Tab 输入
    • 清空错误提示
    • 重置滑块状态
    • 清空短信验证码倒计时状态

密码登录Story 2

  • 手机号11 位数字,自动过滤非数字
  • 密码:必填,显示/隐藏切换
  • 滑块:必须先通过
  • 登录按钮:三项满足后可点击
  • 失败提示:统一“手机号或密码错误,请重新输入”
  • 锁定提示:“账号已被临时锁定,请 30 分钟后重试,或联系管理员解锁”
  • 停用提示:“账号已停用,请联系您的管理员”

验证码登录Story 5

  • 手机号11 位数字
  • 获取验证码按钮:
    • 需先通过滑块后才可点击
    • 点击后进入 60s 冷却
  • 验证码输入6 位数字
  • 登录按钮:手机号 + 验证码均满足后可点击
  • 验证失败提示:
    • “验证码有误,请重新输入”
    • 过期:“验证码已过期,请重新获取”

其他入口

  • 忘记密码(保留)
  • 微信扫码登录(即将开放,禁用态)
  • 删除“忘记用户名”入口

接口映射

  • POST /api/auth/login/
  • POST /api/auth/login/phone/
  • POST /api/auth/logout/
  • POST /api/auth/recover/password/request/
  • POST /api/auth/recover/password/verify/
  • POST /api/auth/recover/password/reset/

4.3 设置新密码页(登录_重置密码_UI.html

本页面是公共组件页面,支持两种业务上下文:

模式 标题 提示文案 按钮文案 提交后行为
initial(首次登录强制修改) 欢迎使用 Fonrey请先设置您的登录密码 您当前使用的是初始密码,为保障账号安全,请立即设置新密码后开始使用 确认并进入系统 保持 Session进入首页
recover(找回密码步骤三) 重置您的登录密码 请输入您的新密码,设置完成后请使用新密码重新登录 确认重置密码 使所有 Session 失效,跳转登录页并提示

字段与校验

  • 新密码
  • 确认新密码
  • 实时强度校验(逐条):
    • 长度 ≥ 8
    • 包含字母
    • 包含数字
  • 一致性校验:两次输入必须一致

强制约束initial 模式)

  • 不显示“跳过”
  • 不允许返回业务页面
  • 页面仅保留密码设置流程

5. 状态矩阵

页面 状态 说明
Tenant 识别页 idle/loading/success/error/network_error 完整覆盖 Story 1
登录页-密码 Tab default/captcha_pass/submitting/credential_error/locked/disabled/session_expired 完整覆盖 Story 2
登录页-验证码 Tab default/captcha_required/otp_sending/otp_countdown/otp_error/otp_expired/submitting 完整覆盖 Story 5
设置新密码页 default/strength_checking/mismatch_error/submitting/success 覆盖 Story 3 Step3 + §5.3.4

6. 可访问性与实现约束

  1. 输入框均有 Label不仅依赖 placeholder
  2. 错误文案使用 aria-describedby 关联字段
  3. 图标按钮(显示密码/刷新验证码)提供 aria-label
  4. 支持键盘 Tab 顺序与 Enter 提交
  5. 静态原型以原生 JS + Alpine 为主,确保 file:// 可直接评审

7. 本轮交付与验收清单

交付文件

  • UI_DESIGN/登录管理/登录_UI.md(本文档)
  • UI_DESIGN/登录_UI.htmlTenant 识别)
  • UI_DESIGN/登录_账号密码_UI.html(双 Tab 登录)
  • UI_DESIGN/登录_重置密码_UI.html(新增:公共设置新密码页)

验收项

  • 登录页存在“密码登录 / 验证码登录”双 Tab 且可切换
  • Tab 切换后输入与滑块状态已重置
  • 密码登录按手机号校验11位数字
  • 验证码登录需先滑块通过才能“获取验证码”
  • “忘记用户名”入口已移除,“忘记密码”入口保留
  • 新增“设置新密码”页面并覆盖 initial/recover 两种上下文
  • 微信扫码登录为禁用“即将开放”态
  • 关键交互无控制台报错