vue3的大致使用


<template><div class="login_wrap"><div class="form_wrap">
<!--            账号输入-->
<el-form ref="formRef"  :model="user"  class="demo-dynamic" >
<!--prop要跟属性名称对应--><el-form-item prop="id"    :rules="[ { required: true, message: '账号不能为空', trigger: 'blur',}, ]"><el-input style="height: 50px;font-size: 30px" v-model="user.id" ><template #prepend>账号</template></el-input></el-form-item>
<!--密码输入--><el-form-item prop="password"  class="password-input"  :rules="[ { required: true, message: '密码不能为空', trigger: 'blur',}, ]"><el-input type="password" style="height: 50px;font-size: 30px" v-model="user.password" ><template #prepend>密码</template></el-input></el-form-item>
<!--    验证码--><el-form-item prop="identifyingcode.inputverificationcodenumber" :rules="[ { required: true, message: '验证码不能为空', trigger: 'blur',}, ]"><el-input style="height: 50px;font-size: 30px"  v-model="user.identifyingcode.inputverificationcodenumber" ><template #prepend>验证码</template></el-input></el-form-item><el-form-item><div style="font-size: 30px"> 用户角色:</div><el-select v-model="user.role"><el-optionv-for="item in option.role":key="item":label="item":value="item"/></el-select></el-form-item><canvas class='code' ref="codeimg"  @click="codetrigger"></canvas></el-form><el-button type="primary"  style="width: 100px;height: 40px" @click='lgintrigger' class="login-btn">登录</el-button></div></div><div class="information">作者:甘世涛<br/>版权所有  违者必究<br/>前端框架:vue <br/>    后端框架springboot</div>
</template><script>import {useRouter} from "vue-router";import {useStore} from "vuex";import {get,post} from "@/util/service";import { reactive, onMounted, ref, toRefs } from 'vue'import { ElMessage} from 'element-plus'export default {setup(){   const router=useRouter()const store=useStore()const codeimg = ref(null)//获取div对象 ref属性为codeimg的对象  这个对象是验证码let userrole=""const data = reactive ({option:{role:['管理员','教师','学生']},user:{//用户id:"",//用户账号password:"",//用户密码role:"",//用户角色identifyingcode: {//验证码pool: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', // 随机生成A-F 1-9的验证码// pool: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890', // 字符串width: 360,height: 200,verificationcodenumber: "",/*随机生成的验证码*/inputverificationcodenumber:""/*键盘输入的验证码*/}},shishi:"",})onMounted(() => {//初始化函数data.user.identifyingcode.verificationcodenumber = draw() // 初始化绘制图片验证码})const codetrigger = () => {data.user.identifyingcode.verificationcodenumber = draw()  // 点击图片重新绘制}// 随机数const randomNum = (min, max) => {return parseInt(Math.random() * (max - min) + min)}const randomColor = (min, max) => { // 随机颜色const r = randomNum(min, max)const g = randomNum(min, max)const b = randomNum(min, max)return `rgb(${r},${g},${b})`}const draw = () => {// 绘制图片const ctx = codeimg.value.getContext('2d')// 3.填充背景颜色,背景颜色要浅一点ctx.fillStyle = randomColor(180, 230) // 填充颜色颜色不要太深ctx.fillRect(0, 0, data.user.identifyingcode.width, data.user.identifyingcode.height)// 填充的位置let verificationcodenumber = ''//存储四个验证码for (let i = 0; i < 4; i++) {               // 4.随机产生字符串,并且随机旋转const text = data.user.identifyingcode.pool[randomNum(0, data.user.identifyingcode.pool.length)]  // 随机的四个字verificationcodenumber += textconst fontSize = randomNum(100, 200) // 随机的字体大小const deg = randomNum(-30, 30) // 字体随机的旋转角度ctx.font = fontSize + 'px SimSun'//宋体ctx.textBaseline = 'top'ctx.fillStyle = randomColor(80, 150)/* 用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。restore:用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。*/ctx.save()ctx.translate(60 * i + 15, 15)//平移ctx.rotate((deg * Math.PI) / 180)//旋转ctx.fillText(text, -15 + 5, -15)//填充文本ctx.restore()}// 5.随机产生5条干扰线,干扰线的颜色要浅一点for (let i = 0; i < 5; i++) {ctx.beginPath()ctx.moveTo(randomNum(0, data.user.identifyingcode.width), randomNum(0, data.user.identifyingcode.height))ctx.lineTo(randomNum(0, data.user.identifyingcode.width), randomNum(0, data.user.identifyingcode.height))ctx.strokeStyle = randomColor(180, 230)ctx.closePath()ctx.stroke()}// 6.随机产生40个干扰的小点for (let i = 0; i < 40; i++) {ctx.beginPath()ctx.arc(randomNum(0, data.user.identifyingcode.width), randomNum(0, data.user.identifyingcode.height), 1, 0, 2 * Math.PI)ctx.closePath()ctx.fillStyle = randomColor(150, 200)ctx.fill()}return verificationcodenumber}onMounted( async () => {})const lgintrigger=async () => {if (data.user.role === "" && data.user.accountnumber === "" || data.user.password === "" || data.user.identifyingcode.inputverificationcodenumber === "") {ElMessage.error("输入信息不能为空")return}if (data.user.identifyingcode.inputverificationcodenumber !== data.user.identifyingcode.verificationcodenumber) {ElMessage.error("验证码不正确")return}let flag;localStorage.setItem('userrole', data.user.role)//当前用户角色localStorage.setItem('id', data.user.id)//当前用户角色var formdata = new FormData()formdata.append("id", data.user.id)formdata.append("password", data.user.password)if (data.user.role === "管理员") {await  post("/admin/login", formdata).then(res => {if (res) {localStorage.setItem('userrole', data.user.role)//当前用户角色router.push('/home')} else {alert("不存在该账号和密码")}})} else if (data.user.role === "教师") {await post("/teacher/login", formdata).then(res => {if (res) {localStorage.setItem('id', data.user.id)//当前用户编号localStorage.setItem('userrole', data.user.role)//当前用户角色router.push('/home')} else {alert("不存在该账号和密码")}})} else {await post("/student/login", formdata).then(res => {if (res) {localStorage.setItem('id', data.user.id)//当前用户编号localStorage.setItem('userrole', data.user.role)//当前用户角色router.push('/home')} else {alert("不存在该账号和密码")}})}}return{...toRefs(data),lgintrigger,codeimg,codetrigger}//}}</script><style scoped>
.login_wrap{width: 100%;height: 80vh;background: rgb(0,186,255,100);background-image: url("../assets/shouye.png");/*position: relative;*/
}.information{width: 100%;height: 80vh;background: rgb(0,100,255,100);font-size: 30px;text-align: center;
}
/*这个是包括登录还有验证码一系列的框*/
.form_wrap{width: 500px;height: 380px;position: fixed;top:50%;left: 50%;transform: translate(-50%,-50%);background: #fff;padding:10px 10px;/*子组件内部变距*/border-radius: 5px;border-radius: 7%;}
.form_wrap button{}
.form_wrap el-input{height: 900px;
}
/*这个是登录按钮*/
.login-btn
{ position: fixed;display: block;margin: 0px auto;top:80%;left:40%;
}/*这个是角色选择 角色的名称  有三种  admin student teacher*/
#rolename
{position: fixed;top:4%;left: 10%;}/*}*/
/*鼠标移动到验证码显示一个手*/
.code {cursor: pointer;width: 160px;height: 50px;
}
</style>

vue3启动
在这里插入图片描述
dev代表启动的环境

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/283041.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能强化学习:智能体自我进化的探索与挑战

导言 人工智能强化学习作为一种模仿人类学习方式的技术&#xff0c;近年来在机器学习领域取得了令人瞩目的进展。强化学习作为一种通过智能体与环境的交互学习的技术&#xff0c;与其他模型的融合不仅可以提升学习效果&#xff0c;还能在更广泛的领域中实现智能体的决策。本文将…

2.初始化Server、Common工程

1.初始化项目结构 1.1 工程依赖关系 1.2 根pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation…

电子元器件-MOS管

MOS管 工作原理NMOS选型封装VgsthRdsonCgs 工作原理 链接: 另类方式讲解晶体管 MOS管的全称&#xff1a; 当给栅极高电平时&#xff0c;这个MOS就会导通&#xff0c;给低电平时就会截止 MOS的构造 纯净的硅是不到点的&#xff0c;因为硅原子的最外层是8个电子&#xff0c;…

紫光FPGA DDR3 IP使用和注意事项(axi4协议)

紫光DDR3 IP使用 对于紫光ddr3 IP核的使用需要注意事情。 阅读ddr ip手册&#xff1a; 1、注意&#xff1a;对于写地址通道&#xff0c;axi_awvalid要一直拉高&#xff0c;axi_awready才会拉高。使用的芯片型号时PG2L100H-6FBG676&#xff0c;不同的型号IP核接口和axi的握手协…

Ubuntu18.04安装ffmpeg

前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_C…

Android hilt使用

一&#xff0c;添加依赖库 添加依赖库app build.gradle.kts implementation("com.google.dagger:hilt-android:2.49")annotationProcessor("com.google.dagger:hilt-android:2.49")annotationProcessor("com.google.dagger:hilt-compiler:2.49"…

Mac如何安装stable diffusion

今天跟大家一起在Mac电脑上安装下stable diffusion&#xff0c;在midjourney等模型收费的情况下如何用自己的电脑算力用上免费的画图大模型呢&#xff1f;来吧一起实操起来 一、安装homebrew 官网地址&#xff1a;Homebrew — The Missing Package Manager for macOS (or Lin…

NBA得分数据可视化

简介 这是上学期的一些课外活动内容&#xff0c;将 NBA 得分数据进行可视化&#xff0c;并进行后续的探索性分析和建模&#xff08;本文未介绍&#xff09;。主要研究动机来源于这篇论文&#xff1a; 该论文使用二元的伽马过程来刻画 NBA 主客场得分数据&#xff0c;并且考虑了…

机器学习算法---时间序列

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

数据科学知识库

​ 我的博客是一个技术分享平台&#xff0c;涵盖了机器学习、数据可视化、大数据分析、数学统计学、推荐算法、Linux命令及环境搭建&#xff0c;以及Kafka、Flask、FastAPI、Docker等组件的使用教程。 在这个信息时代&#xff0c;数据已经成为了一种新的资源&#xff0c;而机…

【idea】解决sprintboot项目创建遇到的问题

目录 一、报错Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found 二、报错java: 错误: 无效的源发行版&#xff1a;17 三、java: 无法访问org.springframework.web.bind.annotation.CrossOrigin 四、整合mybatis的时候&#xff0c;报java.lang.Ill…

WPF Icon矢量库 MahApps.Metro.IconPacks

文章目录 前言MahApps.Metro.IconPacksIconPacks.Browser简单使用简单使用案例代码Icon版本个人推荐 Icon自定义版权问题 前言 为了更快的进行开发&#xff0c;我找到了一个WPF的矢量图库。这样我们就不用去网上找别人的矢量库了 MahApps.Metro.IconPacks MahApps.Metro.Icon…