当前位置: 首页 > news >正文

vue开发用户注册功能

文章目录

  • 一、开发步骤
  • 二、效果图
  • 三、搭建页面
    • 创建views/Login.vue
    • 在App.vue中导入Login.vue
  • 四、数据绑定
  • 五、表单校验
  • 六、访问后端 API 接口,完成注册
  • 七、完整的Login.vue代码
  • 八、参考资料


一、开发步骤

在这里插入图片描述

二、效果图

在这里插入图片描述

三、搭建页面

创建views/Login.vue

完整内容在后面

在App.vue中导入Login.vue

<script setup>import LoginVue from '@/views/Login.vue'</script><template><LoginVue/>
</template><style scoped></style>

四、数据绑定

vue注册用户使用v-model实现数据双向绑定

五、表单校验


vue使用rules实现表单校验——校验用户名和密码

六、访问后端 API 接口,完成注册


vue访问后端接口,实现用户注册

七、完整的Login.vue代码

<script setup>
import { User, Lock } from '@element-plus/icons-vue'
import { ref } from 'vue'
//控制注册与登录表单的显示, 默认显示注册
const isRegister = ref(false)
//定义数据模型
const registerData = ref({username: '',password: '',confirmPassword: ''
})//校验密码的函数
const validateConfirmPassword = (rule, value, callback) => {if (value === '') {callback(new Error('请再次输入密码'))} else if (value !== registerData.value.password) {callback(new Error('两次密码不一致'))} else {callback()}
}//定义表单校验规则
const rules = {username: [{ required: true, message: '请输入用户名', trigger: 'blur' },{ min: 5, max: 16, message: '长度在 516 个字符', trigger: 'blur' }],password: [{ required: true, message: '请输入密码', trigger: 'blur' },{ min: 5, max: 16, message: '长度在 516 个字符', trigger: 'blur'}],confirmPassword: [{validator: validateConfirmPassword, trigger: 'blur'}]
}//调用后台接口完成注册
import { userRegisterService } from '@/api/user.js'
const register = async () => {let result = await userRegisterService(registerData.value)if (result.code === 0) {//注册成功alert(result.msg ? result.msg : '注册成功')} else {//注册失败alert('注册失败')}alert(result.msg ? result.msg : '注册成功')
}
</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" :model="registerData" :rules="rules"><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="confirmPassword"><el-input :prefix-icon="Lock" type="password" placeholder="请输入再次密码" v-model="registerData.confirmPassword"></el-input></el-form-item><!-- 注册按钮 --><el-form-item><el-button class="button" type="primary" auto-insert-space @click="register">注册</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>

八、参考资料

https://www.bilibili.com/video/BV14z4y1N7pg?spm_id_from=333.788.player.switch&vd_source=0467ab39cc5ec5940fee22a0e7797575&p=74

http://www.xdnf.cn/news/378415.html

相关文章:

  • 【入门】数字走向I
  • 求数组中的两数之和--暴力/哈希表
  • 构建休闲企业服务实训室:融合凯禾瑞华产品打造产教融合新生态
  • 红黑树删除的实现与四种情况的证明
  • 北京导游资格证备考单选题题库及答案【2025年】
  • 大型旋转机械信号分解算法模块
  • 猿人学第十二题-js入门
  • c++——二叉树进阶
  • SAP Commerce(Hybris)开发实战(一)
  • 《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-《打砖块:向量反射与实时物理模拟》MATLAB教程
  • Python-77:古生物DNA序列血缘分析
  • 网络世界的“快递站”:深入浅出OSI七层模型
  • Python 包管理新选择:uv
  • 便签软件哪个好用?2025年桌面记事本便签软件推荐大全
  • 【ospf综合实验】
  • ffmpeg 写入avpacket时候,即av_interleaved_write_frame方法是如何不需要 业务层释放avpacket的 逻辑分析
  • 【LeetCode 热题 100】206. 反转链表
  • 洛谷P7528 [USACO21OPEN] Portals G
  • Android开发-Activity启停
  • Halcon之计算抓取螺母的位姿
  • 《Python星球日记》 第54天:卷积神经网络进阶
  • Python 核心概念速查清单
  • LeetCode --- 448 周赛
  • Java Bean容器详解:核心功能与最佳使用实践
  • 自动泊车技术—相机模型
  • OSPF综合实验报告
  • SpringCloud之Ribbon基础认识-服务负载均衡
  • vue3 无缝列表循环
  • 深圳SMT贴片加工厂制造流程解析
  • PaddleOCR本地部署