工作需求,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>

效果图

相关推荐
前端工作日常4 分钟前
我学习到的AG-UI的概念
前端
韩师傅9 分钟前
前端开发消亡史:AI也无法掩盖没有设计创造力的真相
前端·人工智能·后端
XiaoYu200224 分钟前
第12章 支付宝SDK
前端
双向331 小时前
RAG的下一站:检索增强生成如何重塑企业知识中枢?
前端
拖拉斯旋风1 小时前
从零开始:使用 Ollama 在本地部署开源大模型并集成到 React 应用
前端·javascript·ollama
asing1 小时前
🤯 为什么我的收银台在鸿蒙系统“第一次返回”死活拦不住?一次差点背锅的排查实录
前端·harmonyos
德育处主任1 小时前
『NAS』在群晖部署图片压缩工具-Squoosh
前端·javascript·docker
Hao_Harrision1 小时前
50天50个小项目 (React19 + Tailwindcss V4) ✨| ThreeDBackgroundBoxes(3D背景盒子组件)
前端·3d·typescript·react·tailwindcss·vite7
加个鸡腿儿1 小时前
经验分享2:SSR 项目中响应式组件的闪动陷阱与修复实践
前端·css·架构
心.c1 小时前
如何基于 RAG 技术,搭建一个专属的智能 Agent 平台
开发语言·前端·vue.js