目录
1. 登录注册页面 [element-plus 表单 & 表单校验]
1.1 注册登录 静态结构 & 基本切换
2. 注册功能
2.1 实现注册校验
2.2 注册前的预校验
2.3 封装 api 实现注册功能
3. 登录功能
3.1 实现登录校验
3.2 登录前的预校验 & 登录成功
1. 登录注册页面 [element-plus 表单 & 表单校验]
- 注册登录 静态结构 & 基本切换
- 注册功能 (校验 + 注册)
- 登录功能 (校验 + 登录 + 存token)
1.1 注册登录 静态结构 & 基本切换
① 安装 element-plus 图标库
- pnpm i @element-plus/icons-vue
② 静态结构准备
-
Layout 布局组件
-
el-row 表示一行,一行分为 24 份
-
:span="12" 代表一行中,占 12 份
-
:span="6" 代表一行中,占 6 份
-
:offset="3" 代表在一行中,左侧 margin 份数
-
-
Form 表单
- Icon 图标
<script setup>
import { User, Lock } from '@element-plus/icons-vue'
import { ref } from 'vue'
const isRegister = ref(true)
</script><template><el-row class="login-page"><el-col :span="12" class="bg"></el-col><el-col :span="6" :offset="3" class="form"><el-form ref="form" size="large" autocomplete="off" v-if="isRegister"><el-form-item><h1>注册</h1></el-form-item><el-form-item><el-input :prefix-icon="User" placeholder="请输入用户名"></el-input></el-form-item><el-form-item><el-input:prefix-icon="Lock"type="password"placeholder="请输入密码"></el-input></el-form-item><el-form-item><el-input:prefix-icon="Lock"type="password"placeholder="请输入再次密码"></el-input></el-form-item><el-form-item><el-button class="button" type="primary" auto-insert-space>注册</el-button></el-form-item><el-form-item class="flex"><el-link type="info" :underline="false" @click="isRegister = false">← 返回</el-link></el-form-item></el-form><el-form ref="form" size="large" autocomplete="off" v-else><el-form-item><h1>登录</h1></el-form-item><el-form-item><el-input :prefix-icon="User" placeholder="请输入用户名"></el-input></el-form-item><el-form-item><el-inputname="password":prefix-icon="Lock"type="password"placeholder="请输入密码"></el-input></el-form-item><el-form-item class="flex"><div class="flex"><el-checkbox>记住我</el-checkbox><el-link type="primary" :underline="false">忘记密码?</el-link></div></el-form-item><el-form-item><el-button class="button" type="primary" auto-insert-space>登录</el-button></el-form-item><el-form-item class="flex"><el-link type="info" :underline="false" @click="isRegister = true">注册 →</el-link></el-form-item></el-form></el-col></el-row>
</template><style lang="scss" scoped>
.login-page {height: 100vh;background-color: #fff;.bg {background: url('@/assets/logo2.png') no-repeat 60% center / 240px auto,url('@/assets/login_bg.jpg') no-repeat center / cover;border-radius: 0 20px 20px 0;}.form {display: flex;flex-direction: column;justify-content: center;user-select: none;.title {margin: 0 auto;}.button {width: 100%;}.flex {width: 100%;display: flex;justify-content: space-between;}}
}
</style>
2. 注册功能
2.1 实现注册校验
【需求】注册页面基本校验
-
用户名非空,长度校验 5-10位
-
密码非空,长度校验 6-15 位
-
再次输入密码,非空,长度校验 6-15 位
- 【进阶】再次输入密码需要自定义校验规则,和密码框值一致(可选)
① model 属性绑定 form 数据对象
② v-model 绑定 form 数据对象的子属性
③ rules 配置校验规则
整个表单的校验规则
- 1. 非空校验 required: true, message 消息提示,trigger 触发校验的时机 blur 或者是 change
- 2. 长度校验 min: xxx, max: xxx
- 3. 正则校验 pattern: 正则校验 \S 非空字符
- 4. 自定义校验 => 自定义校验规则函数 validator
- validator(rule, value, callback)
- (1) rule 当前校验规则相关的信息
- (2) value 所校验的表单元素目前的表单值
- (3) callback 无论成功还是失败,都需要 callback 回调函数
- callback() 校验成功
- callback(new Error(错误消息)) 校验失败
- validator(rule, value, callback)
const rules = {username: [{ required: true, message: '请输入用户名', trigger: 'blur' },{ min: 5, max: 10, message: '用户名必须是 5-10 位字符', trigger: 'blur' }],password: [{ required: true, message: '请输入密码', trigger: 'blur' },{pattern: /^\S{6,15}$/,message: '密码必须是 6-15 位的非空字符',trigger: 'blur'}],repassword: [{ required: true, message: '请输入密码', trigger: 'blur' },{pattern: /^\S{6,15}$/,message: '密码必须是 6-15 位的非空字符',trigger: 'blur'},{validator: (rule, value, callback) => {// 判断的 value 和当前 form 中收集的 password 是否一致if (value !== formModel.value.password) {callback(new Error('两次输入的密码不一致'))} else {callback() // 校验通过,也需要执行 callback}},trigger: 'blur'}]
}
④ prop 绑定校验规则
2.2 注册前的预校验
需求:
- 点击注册按钮,注册之前,需要先校验
① 通过 ref 获取到 表单组件
② 注册之前进行校验
validate | 对整个表单的内容进行验证。 接收一个回调函数,或返回 Promise 。 | Function |
2.3 封装 api 实现注册功能
需求:
- 封装注册api,进行注册,注册成功切换到登录
① 新建 api/user/user.js 封装
② 在 api/inde.js 下统一导出管理
③ 页面中调用
3. 登录功能
3.1 实现登录校验
【需求说明】给输入框添加表单校验
-
用户名不能为空,用户名必须是5-10位的字符,失去焦点 和 修改内容时触发校验
-
密码不能为空,密码必须是6-15位的字符,失去焦点 和 修改内容时触发校验
操作步骤:
① model 属性绑定 form 数据对象,直接绑定之前提供好的数据对象即可
② rules 配置校验规则,共用注册的规则即可
③ v-model 绑定 form 数据对象的子属性
④ prop 绑定校验规则
⑤ 切换的时候重置
3.2 登录前的预校验 & 登录成功
【需求说明1】登录之前的预校验
-
登录请求之前,需要对用户的输入内容,进行校验
-
校验通过才发送请求
【需求说明2】登录功能
-
封装登录API,点击按钮发送登录请求
-
登录成功存储token,存入pinia 和 持久化本地storage
-
跳转到首页,给提示
【测试账号】
-
登录的测试账号: shuaipeng
-
登录测试密码: 123456
实现步骤:
① 注册事件,进行登录前的预校验 (获取到组件调用方法)
② 封装接口 API
③ 调用方法将 token 存入 pinia 并 自动持久化本地