vue实现登录注册

news/2024/7/10 2:30:37 标签: vue

目录

一、登录页面

二、注册页面

三、配置路由


一、登录页面

<template>
    <div class="login_container" style="background-color: rgb(243,243,243);height: 93.68vh;background-image: url(https://ts1.cn.mm.bing.net/th/id/R-C.f878c96c4179c501a6081ac25291be12?rik=N5jjWCVkYF1qTA&riu=http%3a%2f%2fimg95.699pic.com%2fphoto%2f40129%2f2839.jpg_wh300.jpg!%2ffh%2f300%2fquality%2f90&ehk=dcEzH%2b5aANDDgaScjN2wiRQ8feXvQvU6bSS4hZrmVNM%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1
);background-size: 1880px 1100px">
      <div class="login_box">
        <!-- 头像 -->
        <div class="avatar_box">
          <img src="../assets/img/tomato.png" alt="">
        </div>
        <!-- 登录表单 -->
        <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" class="login_form">
          <!-- 用户名 -->
          <el-form-item prop="username">
            <el-input v-model="loginForm.username" prefix-icon="el-icon-user-solid"
                      placeholder="用户名/邮箱/学号"></el-input>
          </el-form-item>
          <!-- 密码 -->
          <el-form-item prop="password">
            <el-input v-model="loginForm.password" prefix-icon="el-icon-s-goods" type="password"
                      placeholder="密码"></el-input>
          </el-form-item>
          <!-- 按钮 -->
          <el-form-item class="btns">
            <el-button @click="login" type="primary">用户登录</el-button>
            <el-button @click="toRegister">用户注册</el-button>
            <el-button @click="resetLoginForm">管理员登录</el-button>
          </el-form-item>
        </el-form>
      </div>
    </div>
  </template>
<script>

export default {
    data() {
    return {
      loginForm: {
        username: '',
        password: ''
      },
      loginFormRules: {
        username: [
          {required: true, message: '请输入登录信息', trigger: 'blur'},
          {min: 3, max: 8, message: '长度在 3 到 8 个字符', trigger: 'blur'}
        ],
        password: [
          {required: true, message: '请输入密码', trigger: 'blur'},
          {min: 6, max: 12, message: '长度在 6 到 12 个字符', trigger: 'blur'}
        ]
      }
    }
  },
  methods: {
    resetLoginForm() {
      this.$refs.loginFormRef.resetFields();
    },
    login() {
      this.$refs.loginFormRef.validate(async valid => {
        if (!valid) return;
        // const {data: res} = await this.$http.post('login', this.loginForm);
        // if (res.status != 200)
        //   return this.$message.error("登录失败...");  //登录失败弹窗
        // this.$message.success("登录成功");
        // window.sessionStorage.setItem('token', res.data.token);
        this.$router.push('/home');
      })
    },
    toRegister:function(){
        this.$router.push('/register');
    }
  }
}

</script>

<style lang="less" scoped>
.login_container {
  background-color: rgb(232, 234, 242);
  height: 100%;
}

.login_box {
  width: 500px;
  height: 300px;
  background-color: #fff;
  box-shadow: 0 0 5px rgb(219, 219, 219);
  border-radius: 5px;
  //将登录框定位到中间
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);

  .avatar_box {
    height: 130px;
    width: 130px;
    border: 1px solid #eee;
    border-radius: 50%;
    padding: 10px;
    box-shadow: 0 0 10px rgb(165, 165, 165);
    position: absolute;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: #fff;

    img {
      width: 100%;
      height: 100%;
      border-radius: 50%;
    }
  }
}

.btns {
  display: flex;
  justify-content: end;
}

.login_form {
  position: absolute;
  bottom: 0;
  width: 100%;
  padding: 0 40px;
  box-sizing: border-box;
}

.el-button--primary {
  color: #FFF;
  background-color: rgb(6, 101, 208);
  border-color: rgb(6, 101, 208);
}

.el-button--primary:focus,
.el-button--primary:hover {
  background: rgb(5, 83, 171);
  border-color: rgb(5, 83, 171);
  color: #fff;
}

.el-button--primary.is-active,
.el-button--primary:active {
  background: rgb(6, 101, 208);
  border-color: rgb(6, 101, 208);
  color: #fff;
}
</style>

二、注册页面

<template>
    <div class="login-wrap" style="background-color: rgb(243,243,243);height: 93.68vh;background-image: url(https://ts1.cn.mm.bing.net/th/id/R-C.f878c96c4179c501a6081ac25291be12?rik=N5jjWCVkYF1qTA&riu=http%3a%2f%2fimg95.699pic.com%2fphoto%2f40129%2f2839.jpg_wh300.jpg!%2ffh%2f300%2fquality%2f90&ehk=dcEzH%2b5aANDDgaScjN2wiRQ8feXvQvU6bSS4hZrmVNM%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1
);background-size: 1880px 1100px">
      <el-form class="login-container">
        <h1 class="title">用户注册</h1>
        <el-form-item>
          <el-input type="text" placeholder="用户账号" v-model="username" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item>
          <el-input type="password" placeholder="用户密码" v-model="password" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item>
          <el-input type="password" placeholder="确认密码" v-model="password1" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="doRegister" style="width: 48%;">注册</el-button>
          <el-button type="primary" @click="toLogin" style="width: 48%;">返回登录</el-button>
        </el-form-item>
      </el-form>
    </div>
  </template>
   
  <script>
    export default {
      name: 'Login',
      data: function() {
        return {
          username: '',
          password: '',
          password1:''
        }
      },
      methods: {
        doRegister:function(){
   
        },
        toLogin:function(){
          this.$router.push('/');
        }
      }
    }
  </script>
   
  <style>
   
   
    .login-container {
      border-radius: 10px;
      margin: 0px auto;
      width: 350px;
      padding: 30px 35px 15px 35px;
      background: #fff;
      border: 1px solid #eaeaea;
      text-align: left;
      box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.1);
      
      position:absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }
   
    .title {
      margin: 0px auto 40px auto;
      text-align: center;
      color: #505458;
    }
  </style>

三、配置路由

在router的index.js中写路由配置

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

const routes = [
    {
        path: '/login',
        name:'Login',
        component:()=>import('../components/Login')
    },
    {
        path:'/',
        redirect:'/login'
    },
    {
        path:'/register',
        name:'Register',
        component:()=>import('../components/Register')
    }

    ]

const router = new VueRouter({
    mode: 'history',
    base: process.env.BASE_URL,
    routes
})

export default router

http://www.niftyadmin.cn/n/4949736.html

相关文章

GaussDB数据库SQL系列-子查询

目录 一、前言 二、GaussDB SQL子查询表达式 1、EXISTS/NOT EXISTS 2、IN/NOT IN 3、ANY/SOME 4、ALL 三、GaussDB SQL子查询实验示例 1、创建实验表 2、EXISTS/NOT EXISTS示例 3、IN/NOT IN 示例 4、ANY/SOME 示例 5、ALL示例 四、注意事项及建议 五、小结 一、…

Matplotlib数据可视化(六)

目录 1.绘制概率图 2.绘制雷达图 3.绘制流向图 4.绘制极坐标图 5.绘制词云图 1.绘制概率图 from scipy.stats import norm fig,ax plt.subplots() plt.rcParams[font.family] [SimHei] np.random.seed() mu 100 sigma 15 x musigma*np.random.randn(437) num_bins …

typeof与instanceof的区别

最近又用到了对一个类型进行类型判断&#xff0c;这里对两种判断方法进行一个总结 相同点&#xff1a; typeof与instanceof都是判断数据类型的方法 区别&#xff1a; typeof会返回一个变量的基本类型&#xff08;特殊 typeof null 会为object 但这只是JavaScript 存在的一个…

两个List合并、去重、排序

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Docker Dockerfile Docker-compose学习笔记

文章目录 Centos环境下安装Docker配置镜像源 Windows环境下安装Docker配置镜像源 使用Dokcer镜像1.获取镜像2.查看镜像信息(1)列出镜像(2)镜像标签(3)镜像详细信息(4)镜像历史 3.搜索镜像4.删除和清理镜像(1)使用标签删除镜像(2)使用ID删除镜像(3)清理镜像 5.创建镜像(1)基于已…

快速入门vue3新特性和新的状态管理库pinia

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 Vue3.3新特性 defineOptions defineModel pinia 介绍 与 Vuex 3.x/4.x 的比较 安装 核心概念 定义…

微服务参数透传实现

说明&#xff1a;在微服务架构中&#xff0c;用户身份经网关验证后&#xff0c;我们可以将用户信息&#xff0c;如ID加入到请求头上。后面的微服务中&#xff0c;可以设置一个拦截器&#xff0c;拦截请求&#xff0c;获取请求头上的用户ID&#xff0c;加入到ThreadLocal中。 最…

剑指Offer48.最长不含重复字符的子字符串 C++

1、题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串&#xff0c;计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字…