工作需求,Vue实现登录

加油,新时代打工人!

vue 2.x

Element UI

html 复制代码
<template>
    <div class="body" :style="{'background-image': `url(${require('@/assets/images/login.png')})`}">
        <el-form :rules="rules" ref="loginForm" :model="loginForm" class="loginContainer">
            <h3 class="loginTitle">
            宠物ERP管理系统
            </h3>
            <el-form-item prop="username">
                <el-input type="text" v-model="loginForm.username" placeholder="请输入用户名" >
                </el-input>
            </el-form-item>
            <el-form-item prop="password">
                <el-input type="password" v-model="loginForm.password" placeholder="请输入密码" >
                </el-input>
            </el-form-item>
            <!-- <el-form-item prop="code">
                <el-input type="text" auto-complete="false" v-model="loginForm.code" placeholder="点击图片更换验证码" style="width: 250px;margin-right: 5px">
                </el-input>
                <img :src="captchaUrl">

            </el-form-item> -->
            <el-checkbox v-model="checked" class="loginRemember">记住我</el-checkbox>
            <el-button type="primary" style="width:100%" @click="submitLogin">登录</el-button>
        </el-form>
    </div>
</template>

<script>
import {storageuserlogin} from "@/api/login"
import { setToken, setCookie,getCookie, removeCookie } from "@/utils/auth";
export default {
  name: "Login",
    data(){
      return{
          captchaUrl: "",
          loginForm:{
              username:"",
              password:""
          },
          checked: true,
          rules:{
              username:[{required:true,message:"请输入用户名",trigger:"blur"},{ min: 2, max: 14, message: '长度在 5 到 14 个字符', trigger: 'blur' }
              ],
              password:[{required:true,message:"请输入密码",trigger:"blur"},,{ min: 6,  message: '密码长度要大于6', trigger: 'blur' }]
          }

      }
  },
    created() {
    // 页面加载时检查是否有记住我的记录,并填充到表单中
    // const storedLoginData = localStorage.getItem('loginData');
    // if (storedLoginData) {
    //   const parsedData = JSON.parse(storedLoginData);
    //   this.loginForm.username = parsedData.username;
    //   this.loginForm.password = parsedData.password;
    },
    methods:{
      submitLogin(){
    //           // 处理登录逻辑
    //   const loginData = { username: this.loginForm.username, password: this.loginForm.password };
    //         if (this.checked) {
    //     // 如果记住我被选中,则将登录信息存入localStorage
    //          localStorage.setItem('loginData', JSON.stringify(loginData));
    //         } else {
    //     // 取消记住我时,从localStorage中移除已存储的登录信息
    //            localStorage.removeItem('loginData');
    //         }
            this.$refs["loginForm"].validate(valid => {
                 if(valid){
                 storageuserlogin({
                    ...this.loginForm
                 }).then(res => {
                    if(res.code==0){
                        this.$message({
                            message: "登录成功",
                            type: "success"
                        });
                        setToken(res.data.tokenValue);
                        setCookie("userInfo", res.data.tag);
                        this.$router.push({ path: "/home" });
                    }else{
                        this.$message({
                            message: "登录失败",
                            type: "error"}  )}
             });
        }
    });
      }
    }
};
</script>

<style lang="less" scoped>
    .loginContainer{
        border-radius: 15px;
        background-clip: padding-box;
        text-align: left;
        margin: auto;
        margin-top: 280px;
        width: 350px;
        padding: 15px 35px 15px 35px;
        background: aliceblue;
        border:1px solid blueviolet;
        box-shadow: 0 0 25px #f885ff;
    }
    .loginTitle{
        margin: 0px auto 48px auto;
        text-align: center;
        font-size: 26px;
    }
    .loginRemember{
        text-align: left;
        margin: 0px 0px 15px 0px;
    }
.body {
  width:100%;height:calc(-10px + 100vh);
  background-repeat: no-repeat;
  background-size: cover;
  background-position: center;
  display:flex;
  justify-content:center;
  align-items:center;
}
</style>

效果图

相关推荐
赖龙29 分钟前
pnpm vs npm
前端·npm·node.js
To_OC1 小时前
LC 239 滑动窗口最大值:从暴力超时到单调队列一遍过
javascript·算法·leetcode
学如逆水,不进则退2 小时前
在线免费音频剪辑:NBTools 可视化波形裁剪 MP3/WAV,本地处理免上传
前端·音视频
Mh2 小时前
虚拟滚动真的比普通滚动性能更好吗?
前端·javascript·性能优化
pe7er2 小时前
React + Ant Design 中的 IME (输入法合成)安全输入组件
前端
Super 含3 小时前
Android 启动优化(二):TTID、TTFD 与 Macrobenchmark 启动性能测量
前端
Python私教3 小时前
别急着加 llms.txt:企业官网面向 AI 搜索的工程清单
前端·人工智能·seo
东方小月3 小时前
从零开发一个 Coding Agent(十三):实现安全的 read 文件读取工具
前端·人工智能·全栈
东方小月3 小时前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
FL16238631294 小时前
室内易燃物识别易燃评估室内易燃程度识别分割数据集labelme格式1015张85类别
java·服务器·前端