2.6 KiB
页面需求
-
输入:账号、密码;按钮:登录
-
交互:输入校验(必填、长度/格式)、回车提交、禁用按钮(加载中/校验失败)、错误提示、明文/密文切换
-
布局:简约卡片居中、品牌标题、副文、响应式(桌面)、浅色渐变背景
现状与集成点
-
已存在页面骨架:
src/views/login/index.vue(中心卡片+标题,待补表单) -
路由:登录路由目前注释(
src/router/index.ts),默认首页为/的BrowserLayout(标签页界面)
实现步骤
- 表单与校验
-
在
src/views/login/index.vue中添加账号/密码输入框与登录按钮 -
使用
ref/reactive管理表单;规则:-
账号:必填、长度 4-32、允许邮箱/手机号/用户名(简单格式校验)
-
密码:必填、长度 ≥ 6
-
-
按钮禁用条件:
!valid || loading -
支持
Enter键触发提交 -
密码框添加“显示/隐藏”切换
- 反馈与跳转
-
登录过程显示
loading(按钮文案切换为“登录中…”) -
失败显示错误提示(红色文本);成功暂时跳转到
/(浏览器标签页界面) -
留出接口占位:
login(account, password)(后续接入真实 API)
- 样式
-
Tailwind 构建简约风格:卡片圆角阴影、输入框边框、聚焦效果、按钮主色(蓝色)
-
响应式:移动端输入宽度 100%,桌面端
max-w-md保持卡片紧凑
- 路由接入
-
在
src/router/index.ts增加登录路由:/login→views/login/index.vue -
暂不改默认首页;如需登录守卫,可后续将
/login作为默认或在未认证时重定向到/login
代码改动概览(不执行,仅说明)
-
src/views/login/index.vue-
模板:两个输入框(账号、密码)、显示/隐藏密码按钮、登录按钮、错误提示区域
-
逻辑:
form、errors、validate()、onSubmit()、loading、togglePassword();成功后:router.push('/') -
样式:Tailwind 类名添加于容器/卡片/输入/按钮
-
-
src/router/index.ts-
添加:
{ path: '/login', name: 'Login', component: () => import('@/views/login/index.vue') }
-
验证
-
输入为空时按钮禁用;填入合法后启用
-
按
Enter能提交;失败提示文案显示;成功跳转到首页 -
移动端/桌面端居中显示良好
后续可选
-
接入真实认证 API(axios),保存 token(Pinia/LocalStorage),路由守卫控制访问
-
增加“记住我”、忘记密码、国际化
请确认以上方案,确认后我将直接补全 index.vue 表单与交互,并注册 /login 路由。