{T}

登录注册页设计与表单方案

概述

登录注册页常被当成"补一个页面",但它在管理后台里是多条主线的总入口:既是表单练习场,也是后续高级表单校验、权限控制、统一登录和退出系统的真实落点。设计这类页面时,第一步不是抠视觉细节,而是先想清楚"登录方式如何组织",再把页面结构收敛成视觉区、表单区、辅助入口区三个区块。

本章从产品视角拆解后台登录页的组织规律,落到 Form + Input + Button + Tabs 的基础技术结构,并强调管理后台应优先保证表单第一屏可操作,第三方登录等补充入口用数组驱动渲染而非写死。

学习目标

  • 理解登录注册页是认证、权限、退出口的统一入口,而非孤立展示页
  • 掌握从"登录方式组织顺序"入手设计登录页的思路
  • 能将页面结构收敛为视觉区、表单区、辅助入口区三个区块
  • 认识管理后台登录页应优先保证表单首屏可用
  • Tabs 承载互斥的登录方式,用数组驱动第三方登录入口
  • 区分主路径、辅助路径与补充路径的视觉层级
  • 认识登录页应在接入前清理临时调试页面,避免路由菜单残留噪音
  • 理解登录成功后的跳转与路由守卫是后续权限链路的起点
  • 掌握用配置驱动而非写死来应对第三方登录的增删
  • 形成“先结构后校验、先主路径后补充”的页面落地顺序

一、登录注册页是后续表单、权限与退出口的总入口

它的意义不只是补齐页面,而是给后续主线搭入口:复习页面创建与路由接入、为高级表单校验做准备、为权限控制与统一退出补真实落点,让顶部菜单的"退出"不再是空入口。认证入口页一旦建立在一堆演示页面之上,路由和菜单就会残留噪音,所以接入前应先清理临时调试页面。

登录页越早接入,后续权限链路越容易串起来。不要把它只当成样式页面,它后面会连接很多真实业务能力。

二、先确定登录方式的"组织顺序",再谈视觉细节

观察真实产品登录页,重点不是照抄样式,而是总结登录方式如何被组织。常见做法有扫码 + 手机号同时展示、账号 / 短信通过 Tabs 切换、账号登录放主入口短信放次级、第三方放底部补充。对管理后台、OA、子账号系统,主路径通常是账号密码、手机验证码,第三方作为补充——因为这类系统更强调主账号、子账号、企业统一登录。

登录方式的组织顺序本质是在表达产品优先级,不同系统主登录方式不同,不能机械照搬。管理后台通常更应把"账号登录"放在更靠前的位置。

三、页面结构收敛为三个区块

登录页布局变量很多(图在左还是右、是否独立卡片、注册入口放哪),但都能收敛成三个区块:视觉区(品牌图、插画、欢迎语)、表单区(标题、Tabs、输入框、提交按钮)、辅助入口区(注册、忘记密码、第三方登录)。表单区必须是主角,辅助入口不要抢主路径;标题、插画、品牌词属于可选强化项,不是刚需。

text
Login Page
  ├─ Visual Area    品牌 / 插画
  ├─ Form Area      标题 + Tabs + 输入 + 提交
  └─ Extra Actions  注册 / 忘记密码 / 第三方

四、管理后台优先保证表单第一屏可操作

某些后台框架在移动端让插画占据大半个屏幕,用户还要滚动才能看到登录表单。这种做法在营销页可以接受,但后台登录页不是最优解。更合理的优先级是:用户一打开先看到账号密码主表单,插画作为辅助而非主导视口;移动端优先保留表单、弱化或缩小图像区。

登录页是任务页不是宣传页,移动端输入效率应优先于品牌展示。若必须保留视觉区,也要控制它在移动端的占比。

五、Form + Input + Button + Tabs 已足够承载基础结构

登录注册页本质就是 FormInputButton 加点击事件;支持多种登录方式时再加 Tabs 承载互斥的登录方式。Tabs 更适合承载互斥选项,而不是手写条件块到处切换。先把表单基础结构跑通,再谈校验、权限和接口联调。

Vue SFC
<el-form>
  <el-tabs v-model="activeTab" stretch>
    <el-tab-pane label="账号登录" name="account">
      <el-input v-model="accountForm.username" />
      <el-input v-model="accountForm.password" type="password" show-password />
    </el-tab-pane>
    <el-tab-pane label="手机号登录" name="phone">
      <el-input v-model="phoneForm.phone" />
      <el-input v-model="phoneForm.code" />
    </el-tab-pane>
  </el-tabs>
  <el-button type="primary" class="w-full">登录</el-button>
</el-form>

六、辅助路径要分层,不与主提交流程抢焦点

不同产品把"免费注册"放在顶部、底部或右下角,本质是在做层级区分。登录页优先级通常是:主登录方式 → 忘记密码 / 注册 → 第三方登录。辅助入口必须有,但不应压过登录按钮的主视觉地位;注册入口位置可变,语义上始终是次级路径;第三方登录更适合独立成区,而不是混进主表单。

七、其他登录方式用数组驱动渲染

第三方登录支持的入口差别很大(微信、GitHub、企业微信、飞书、钉钉),若全部写死,后续增删很麻烦。让页面传一个配置数组进来,图标和链接都成为配置项,后续更易与权限、环境开关联动。即便当前只支持一种,也建议一开始按数组结构设计。

ts
const otherLoginMethods = [
  { icon: "i-logos-github-icon", label: "GitHub", href: "#" },
  { icon: "i-logos-wechat", label: "微信", href: "#" }
]

八、切换动画是锦上添花,不应干扰首屏输入效率

切换登录方式时加滑入、浮入动画本身没问题,但角色应是强化切换感、帮助理解当前模式,而不是增加等待感或让首屏交互拖沓。登录页属于强任务型页面,动画优先级低于输入效率;若加入切换动画,建议只包裹表单内容区而非整页,服务结构理解而非为了酷炫牺牲可用性。

九、登录成功后的跳转与路由守卫铺垫

登录页不是终点,而是权限链路的起点。登录成功后要决定跳去哪:回到来源页、去首页、还是去首次引导页,这个决策要提前想清楚。更重要的是,登录页应和路由守卫形成呼应——未登录访问受保护路由时跳回登录页,登录后带回来源。这套机制不一定要在登录页里全写完,但要在设计阶段就预留 redirect 参数与守卫触发的接口,否则后面补权限会反复改登录页。

ts
// 登录成功后回跳来源页,无则回首页
const redirect = (route.query.redirect as string) || "/"
router.replace(redirect)

常见问题

问题原因解决方案
登录页看起来很复杂,不知从哪下手当成完整业务系统而非基础表单页先拆成"登录方式组织 + 表单结构 + 辅助入口"三部分
移动端要滚动很久才看到表单把插画区当主内容优先保证表单进首屏,视觉区降级处理
账号登录、短信登录写在一个表单里越来越乱不同方式字段和行为混在一起Tabs 切换并拆成两套表单模型
第三方登录越加越乱每种方式都手写一套按钮改成数组驱动渲染
注册入口不知道放哪与主登录流程放同一视觉层级保持注册为次级入口,标题旁或表单底部均可
登录页动画很酷但很难用切换动画优先级过高动画只做轻量辅助,不干扰首屏输入效率
登录后不知道跳哪没规划 redirect用 route.query.redirect 回跳来源页
临时调试页面残留路由接入前没清理登录页接入前先删临时页面
守卫和登录页脱节二者设计时没呼应预留 redirect 与守卫触发接口
登录方式字段混在一起没用 Tabs 拆模型每种方式独立表单模型
第三方入口难维护写死按钮数组驱动渲染
动画影响输入动画优先级过高只包表单区,轻量辅助

延伸阅读