文章目录
- 前言
- 一、搭建界面
- 二、数据绑定
- 1.定义响应数据
- 2.绑定数据
- 三、数据校验
- 1. 定义校验规则
- 2. 表单校验
- 3. 展示
- 四、注册接口调用
- 1. user.js
- 2. Login.vue
- 五、展示
- 总结
前言
本章内容主要包含:
- 注册界面搭建
- 数据绑定
- 表单校验
- 调用后端接口
一、搭建界面
<script setup>
import { User, Lock } from '@element-plus/icons-vue'
import { ref } from 'vue'
//控制注册与登录表单的显示, 默认显示注册
const isRegister = ref(false)
</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="registerFormRef" 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-input name="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>
二、数据绑定
1.定义响应数据
//用于注册的数据模型
const registerData = ref({username: '',password: '',rePassword: ''
})
2.绑定数据
<!-- 注册表单 -->
<el-form ref="form" size="large" autocomplete="off" v-if="isRegister" v-model="registerData"><el-form-item><h1>注册</h1></el-form-item><el-form-item><el-input :prefix-icon="User" placeholder="请输入用户名" v-model="registerData.username"></el-input></el-form-item><el-form-item><el-input :prefix-icon="Lock" type="password" placeholder="请输入密码" v-model="registerData.password"></el-input></el-form-item><el-form-item><el-input :prefix-icon="Lock" type="password" placeholder="请输入再次密码" v-model="registerData.rePassword"></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>
三、数据校验
1. 定义校验规则
//自定义确认密码的校验函数
const rePasswordValid = (rule, value, callback) => {console.log(value);if (value == null || value === '') {callback(new Error('请再次确认密码'))} else if (value !== registerData.value.password) {callback(new Error('两次输入密码不一致'))} else {callback()}
}
//用于注册的表单校验模型
const registerDataRules = ref({username: [{ required: true, message: '请输入用户名', trigger: 'blur' },{ min: 5, max: 16, message: '用户名的长度必须为5~16位', trigger: 'blur' }],password: [{ required: true, message: '请输入密码', trigger: 'blur' },{ min: 5, max: 16, message: '密码长度必须为5~16位', trigger: 'blur' }],rePassword: [{ validator: rePasswordValid, trigger: 'blur' }]
})
2. 表单校验
Form 组件提供了表单验证的功能,只需为 rules 属性传入约定的验证规则,并将 form-Item 的 prop 属性设置为需要验证的特殊键值即可。
<!-- 注册表单 -->
<el-form ref="registerFormRef" size="large" autocomplete="off" v-if="isRegister" :model="registerData" :rules="registerDataRules"><el-form-item><h1>注册</h1></el-form-item><el-form-item prop="username"><el-input :prefix-icon="User" placeholder="请输入用户名" v-model="registerData.username"></el-input></el-form-item><el-form-item prop="password"><el-input :prefix-icon="Lock" type="password" placeholder="请输入密码" v-model="registerData.password"></el-input></el-form-item><el-form-item prop="rePassword"><el-input :prefix-icon="Lock" type="password" placeholder="请输入再次密码" v-model="registerData.rePassword"></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>
3. 展示
四、注册接口调用
1. user.js
import request from '@/utils/request.js'export const registerService = (registerData)=>{var params = new URLSearchParams()for (let key in registerData) {params.append(key, registerData[key])}return request.post('/user/register', params)
}
2. Login.vue
import { ElMessage } from 'element-plus'
import { User, Lock } from '@element-plus/icons-vue'
import { ref } from 'vue'
import { registerService } from '@/api/user.js'//注册按钮点击事件
const registerFormRef = ref(null)
const registerUser =async () => {let result =await registerService(registerData.value)let message = result.messageif (result.code == 0) {ElMessage.success(message ? message : '注册成功!')} else {ElMessage.error(message ? message : '注册失败!')}
}
const register = () => {if (!registerFormRef) returnconst valid = registerFormRef.value.validate((valid, fields) => {if (valid) {registerUser();}})
}
五、展示
总结
回到顶部