VUE通用后台管理系统(一)登录

先看效果

 1)安装vue脚手架,项目配置,项目启动,这一步不做过多赘述,假设你已经成功启动了项目
2)配置路由

1.src/router/index.js中进行路由设置,代码如下

import Vue from 'vue'
import Router from "vue-router";
Vue.use(Router);

import Login from "@/views/Login/login"

const routes = [
  //匹配空路由跳转到登录页
  {
    path: '',
    redirect: "/login",//重定向
  },

  //登录
  {
    path: '/login',
    name: 'login',
    component: Login,
  }
]

const router = new Router({
  mode: 'history',
  routes
})

export default router
3)登录界面

1.创建 src/views/Login/login.vue文件

2.在网上或者本地随便找一找图片,当做登录页背景图,在login.vue中引入

        src/views/Login目录下login.vue的代码如下

<template>
  <div>
    <div class="bg_box">
      <img class="bg_img"
        src="../../assets/bg2.png" alt="加载失败"
        referrer="no-referrer|origin|unsafe-url" width="100%;" height="605px;" />
    </div>
  </div>
</template>

<script>

</script>

<style lang="less" scoped>
.bg_img {
  object-fit: fill; // 填充,撑满
}

</style>

此时,在浏览器网址栏输入 localhost://[你的端口号,默认是8080],会自动跳转到login页面

就可以看到引入的背景图

3.创建src/views/Login/index.vue文件,为登录组件

以下是index.vue代码

<template>
  <div class="LoginForm-Panel" v-loading="loading">
    <div class="login">
      <div class="login-title">
        <span>账号登录</span>
        <span>忘记密码</span>
      </div>

      <el-form :rules="rules" :model="loginForm" ref="loginForm">
        <el-form-item prop="userName">
          <el-input v-model="loginForm.userName" prefix-icon="el-icon-user" placeholder="请输入用户名"></el-input>
        </el-form-item>
        <el-form-item prop="password">
          <el-input type="password" show-password v-model="loginForm.password" prefix-icon="el-icon-lock"
            placeholder="请输入密码"></el-input>
        </el-form-item>
        <el-form-item prop="validateCode">
          <el-input v-model.trim="loginForm.validateCode" auto-complete="off" placeholder="请输入验证码"
            @keyup.enter.native="handleLogin" :validate-event="false" prefix-icon="el-icon-lock">
          </el-input>
          <div class="login-code" @click="validateCode">
            <img :src="codeURL" class="login-code-img" />
          </div>
        </el-form-item>
        <span style="font-size: 10px; display: flex; flex-direction: row-reverse; width: 100%;  margin-top: 40px; margin-bottom: 10px; text-align: right;">没有账号?点我立即注册</span>
        <el-button style="width: 100%;" type="primary" @click="login(loginForm)">登录</el-button>
      </el-form>
    </div>
  </div>
</template>


<script>
export default {

  created() {
    console.log("created ---------------");
  },

  data() {
    return {
      loading: false,//页面加载状态
      codeURL: null, //验证码图片
      loginForm: { //表单项
        userName: "",
        password: "",
        validateCode: "",
      },
      rules: { //验证规则
        userName: [{ required: true, message: "请输入用户名" }],
        password: [{ required: true, message: "请输入密码" }],
        validateCode: [{ required: true, message: "请输入验证码" }],
      },
    };
  },
};
</script>


<style lang="less">
.login {
  padding: 20px;

  .login-title {
    font-size: 14px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 40px;
    height: 40px;
    line-height: 1.5;

    a {
      outline: none;
    }
  }

}

.el-form-item__content {
  display: flex;
}

.login-code {
  margin-left: 5px;
  width: 33%;
  height: 100%;

  img {
    cursor: pointer;
    vertical-align: middle;
    height: 100%;
  }
}</style>

4.在login.vue中进行引入注册 index.vue,并在页面上展示

        login.vue中添加以下代码

<script>
//引入
import login from "@/views/Login/index";

export default {
//注册
  components: {
    login
  }
}
</script>

template中展示

添加样式

<style lang="less" scoped>
.bg_img {
  object-fit: fill; // 填充,撑满
}

.login_position {
  border-radius: 6px;
  position: absolute;
  top: 80px;
  right: 100px;
  background-color: #fff;
}
</style>

4)实现功能

走到这一步,页面上应该可以看到效果了

但也只是有 页面效果而已,实际功能并未完善

1.json-server模拟后端数据

因为登录,注册,验证码这些功能都需要后端支持,所以需要模拟后台数据,我个人喜欢用json-server

可以直接在项目目录下,进入cmd命令行,输入 npm  i  json-server --save 进行安装

随便在哪个地方创建一个data.json文件,甚至在电脑桌面也行

data.json中写入以下代码

{
  "userList": [
    {
      "userName": "123",
      "passward": "123",
      "id": 1
    },
    {
      "userName": "admin",
      "password": "admin",
      "id": 2
    }
  ],
  "validateCode":[
    {
      "id":1,
      "img":"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAaAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD22eaO2t5J5W2xxqXdsZwAMk1nW/iTSbq2nuIbvfHBt3ny3zljhQBjLEngAZJOAOSKi8T3ctvo10kccUgkt5A4LsHC4C7lVVbcBuGScAcZIHI4rwdcwWdzLcS2Nxdy+ZHHAImU7XYMMhWYZO3d8wBKrvyQC2XpZsiU2qsYdGehz6gttZxTzQyrLLhY7YbTKzkZ2DBwTwcnO0AEkgAmvOr2+1u2+IGlWF/qt8IJIHnREt4pZoMq46JGVZ/k5IU7QzKCRlm7Gyvo0mN5qMF7/aDLsZEspnS3XqY0YIQRkDLj75APQKq8nqmp2TfGLRLpp1ihjsmWRpwYihxNwwbBU8jr1yPUUlJG3K+qL3iPxBpep6Utjaagbi7tZ1EySoY5MhWBJUqvOeuBgE9siiy8TfYfDttp9jG8l+dyg7chSztjA7t0wOnP4Vp+M7iC68O281vNHNE1yNrxsGU4VxwR71zVvaX2lWllr1rh0JbPy52HJXDD0I7+/bjLbT2M5XUjThSbwxqNg11Zx3eoak5RZHuCPKYkAg/Kcn5hlvqPc9Hb6841/wDsa/tFt7h4/MgaOXzElHOedoI6HqOx9s8trusRaxqXhme1C+etyQ0Ltja26PAJweD64/DPFaBL/wDCwre41lVtHEHl2PltujlOCCC5A5+c8YHb23BjztSaT0ujs6KKKDqOX8Sa3oU2izxG5s7yV1ZYY0kRyr7ThuThcDJz17DJIB57wN9rS4u5bLT7a5kwiNJNN5ZiU7jwQjEglRkDuF+o7rW/+QBqP/XrL/6Ca4rwFp9lff2h9ss7e42eXt86MPtzuzjI46CrUU00jkqfx4fM6PV9c1vSrEzJ4be+lDDK2lzvUKeO6hy2ccBCMHOeorngt5q/j6y8TDR9Ut7CytmhYTwKshb58kIW3FQJM5UEkrgA13lrZ2tlGY7S2hgjJ3FYkCAn1wO/Aqaoatpc6rHL6nHoWqkvNZ38cxYFp4tLmEjYGMFjGSR0/IUyGHwxb2gtZr6W1BBDR3VxJaNKD3KEpu9N2OgxniuroqOVh7173PPr/wANCTUdOvvD6zXNqsvmvNDPEyqAw4j3HkjB65HT3rWvtM1TXfEOn3MtstjZafIJF811aSU5BPCkgcqB17556Dq6KsydFO/mFFFFBsf/2Q==",
      "code":"IJKB"
    },
    {
      "id":2,
      "img":"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",
      "code":"SJDU"
    },
    {
      "id":3,
      "img":"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",
      "code":"2UX2"
    },
    {
      "id":4,
      "img":"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAaAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2S4iuvMEttOoIGDDIoKN+I+ZT2zyB/dNc1aeL5T4pn02/SCC1CN5TosjbnU4b5iANoIkycADaeeMnqrieK1tpbiZtsUSF3bBOFAyTxXmJ1lrVPDt1dz+VdW9w8twd0T7o523s2xWLD5T/AHB97jHGc27HVTgtWdx4h8QpoelQ38cK3SSyKi7ZNoIKkgg4Oen602bxJGnhIa9FB5q7FJi3lcMWCkZx2Oecc4rl/HMU39lR3B01bKKS5BI+0fOzFWyWjUFMnn5gxOMfQYGoQHRo9U0OUxytE6SpKWbGDt6IWADYI+YAkDcOQcjKU2m7HFKrJNneS+Kb+4gs30XQpNSaaLzJsTeVHCcL8okZdrnJIIByCpyPTL1Tx1rujfZxf+EvLe5k8uGNdSR3kb0VVUk9u3ceorQ0jVo00SwsLMyNMtugkHzPKpKg/KrA8c8MxEa7l5I4rl9D05/Gni/U9RvSGs7FPstvMGWYGQNkshZNjg/OeV+USLgDC46aTTV2tjZSuty74v1RU8Q6HJbX1/b2VzcbbmUXUkUMiAxg7fmAChSTuUAHdkE84vjz59dt5PDk2pStauBdwahdyLAqlWPzJITKGOV2naV784NZ3jPSrW18SeFUj88ma72vI9xI8hG+PADsxYAZOMHgkkck11ei6DJpWu6xd+Zvt7zyPKDzPJINikNuLZPU8cnj0qdDTW2pu0UUUgMnxJYXuqaHPY2LxxyzYUu8jIAucnoDnOMY9CfocrVfDl9e+E7XSbaHTLdkx5iYcqpBzujbGQTznIJO489z1dFFilJq1jlPEGj654g0qGzlj06GRJFkaRbhyGIUg4Xy+Bz6msrxV4e1rWXtbj7Er3yRiOQwTL5LLycjeVZTknjBGCPmyDXoFFS4J7mUqale/U5W1EuleHXtotPubLU2tBGtwYPP3yhMAkx7ztUkYDDpwBgYEHguGz8L+HIrG7Z4ZjI8lxO8E0cRYnAO+RVA+UKO3I9Tz2NFaJ2VhqNtjm77QtP8TXttqSaxPJ9jl3QfZZImSJ/lJ/gOfuqcEn8q6KJGjiRGkaRlUAu2MsfU4AGfoBTqKkoKKKKAP//Z",
      "code":"AN7F"
    },
    {
      "id":5,
      "img":"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",
      "code":"S5TJ"
    },
    {
      "id":6,
      "img":"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",
      "code":"MMCM"
    },
    {
      "id":7, 
      "img":"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAaAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD17UMpB532m6hVPvC2iEjNkgfd2MT+ArG/tmx/sj+1v7d1D7Dv2ed9lGM9P+eWcZ4z0zxnNdJXnljppsfEc3hJxCulzXA1FA5G6WMf8ssHduG5Vz0OEY96ubaeg6dOE079Py6m1rmo3GnaEL631G+LyOI41mt0TB5zuVoww4U/p2rn0bXZNMTVk1W6eWTzJ1hWRdoRGAZiGYcZPRVYdBxmu11/SBrWkyWoZVlBDxM2cBh649QSPxzXn1m+q/Yr+KFomtLOGS3+0uNqKj4dhGxxv8zCYODwVxt3ZPLXUuf3r2t07maXYTUPGet22jpeQ6lmYTCGSFrVSOQxD7wAB0xt68E5xwOgGu30Y8iSfUvM7Xt5bxWFq564zIrODjjG0kkZ4HI4XVIZF8HzTlf3b38KK2epEcpP/oQ/OvcK66XNLDwk93clpXOD/t6/j1S1ik11biO4O0W+npBOQx4A84le+DzGBzjnBNdFHrqW17Z6Ze297FPOu1JrgRYkIHco2NxPYDqRwMisHxtaQNrOilbdTJcTFZCiJvk5QAHdweOBu4/CpdDssa/fRDTrQraNDgXFvDHLHuG4sGiXBIxwPpyMHOSlLn5b/wBWuSt7I7OiiiugsgvLy30+zlu7uVYoIl3O7dAP6n2715nLfxf2fbeMVu7f+0/t8kpti6K7Q/LGYemWIUKc4GA5OMkE+p0wRRiZpRGolZQrOByQMkAn0GT+Z9aicXLqbUqihfT/AIbsc81ofF+jGaa7CWNym6CGHnb/ANdTnDkY5UYAJYfMQrCoPA8k0h+261czwu/mSJtwWbbtDZLHnAAzjoMV19FTKjCeskZOV9jjPFvg6XWLC1sdKtdPt1gKkTyOQ+Bu+ThCSMtnO7rnjvTdV8N67q0UVgZ4bXS5HU3cRvnuHdQwOUaSPKnjpnHTgc57WiumNRxSS6COL8VRXcniDS57aK8uRbTB3TyG8uPlDwyoSc4OfvYx07VfXUZ73VbJbDTbyxM8ge8uJrPaSqBsIxI5zjrnjIx3A6Wiub2erd9yOXUKKKK1LP/Z",
      "code":"X9LE"
    },
    {
      "id":8, 
      "img":"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",
      "code":"AUP7"
    },
    {
      "id":9, 
      "img":"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAaAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1TX9W1W00K7urLTnikiTJaZlYqCQCyqhYHAyTkgDrzyK5a4OqWPhoeJE8SzvNP5bpA8m9AxyGRRwvckrtO3bgHgk9t4h1R9F0G61CONZJIgNqscDJYKCfYZz/AIVw9xop0fwxY+JLSVTdKYrqeJ1AhfcTgiMDAYeYAMYwASMGsmdNJKy9fv8AI6CHxOmj6ObvxA2oQTeSr+XcQIA7Y6RlBjJOfkYhgFJIABNc9p2qePfF6yahpc1npdgGKRLKgIk5PIJRiSOATwMjgZzUnxOuvt3gHS7zZs8+4il2Zzt3ROcZ79a57T/A9vqXw6fXZtQuftMUE0kMfBjREZiUweeSGOQRgt0ODlmL3PR9Pudc0nwzqFx4g8i6u7NZJEeEhRMgQMOwwc7l+6OnQ9TneAptUgk1jRtYllnu7GdGM0k5l3K68AZ5Awuf+BdAa4XT/E97q/g6fQ9Q+1XHnXsEP24nzWjV23Y2j53P7tsAZznGRgA9RbX1vp3xFi1K4uoLqHVLBkS7som8qSRWHyj533NiMLhTkkqMZOTtFLkf9bf0zNvU9ForjPFsr6jY2a3Nu9npxu13TSyBZSu1iWCYOBtyRuIbIxsq/o+neGk1Vjp0LR31sNxSQyq6hhjO1+vB9O49RWaWlzRLS50lFFFSIyLj+2Lq2lt5tM05opUKOv8AaEgypGCOIaxR4fuYrJbG6sp59LVyy2NpfKwySSASyRsVBOfvk5C8Ht2NFME2tmc/q4bW9KuNOvNA1MwTrhtktuCCCCCD5vUEA+nHOa88l+HOs6XaXDxarpltZyIoea7AilQMMFSwDbM5Kna+GBxznFex014o5GRnRWaNtyEjJU4IyPQ4JH4mi/YV2jybTfh1qVreRXuj38ySQtuS4uYjbZP+yh3NjqCHC57bgauX3hTxKL7+0Y2uJ9ZEgkW8haCNFOFX/ZaQFVAwQoHPDAnPp9FL3u415q55pcJrN7dQJrVwl/8AaJibW1/s6UIhXBYFGeLK4IGX3jAYZHzZ0raO4g+IVlAIbWLyrXy5RYkhCgVgpZcDZ/B8pLY+Xk8Vt+M/l8MXMy8SxPG8bjqjb1GQex5PPvWf4B/0nTbm9n/e3bXDIZ5PmkK7U43HnHtWib5dTXmujrqKKKzMj//Z",
      "code":"86A5"
    },
    {
      "id":10,
      "img":"/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAaAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1jWriW00HUbmBtk0NrJIjYBwwUkHB96848O6v428TfafsWs28f2fbv86FBndnGMRn+6a9C8R/8ivq3/XlN/6Aa88+GP8AaBTVlsBbBmMG6S4LEIMv0Ufe4z/Evat72VzJ6ySNOy8Ya5o2stpXiOCKURqW86JMPICfldeisvbop/EEV3OnX8Wp2EV5ArrHJnAcAHgkdifSvOfiHcXVrf6SL28tZmAlJSCFoiqnaMsC7ZBxx0+6evaXw3O3kXcPkxSpEpndZbyaJSgGGyqKyuOmQR+Y6Er2uhre1zrr/wAV2Gn6k9hNFOZUKgsAgXkAjksMde9SS+KNNjW32/aZHuSot0+zunm5IA2lwF7jnNeXkC+1SGMwkJcTgGK3wvBb7qZOB1wM8dK7vxDq1jbaQsWp6ZfWECFWieOS2V4ypGDGBITxkDgcA1lJu7S6FpK12N8Xazf6fY219b2T2sqTGMSTshJDI3ACscjgHkgZVeD2wrO58Wa1Ym4ishcpJlPOeZkVu3+r8wIR2+7g4Oc81b1LU7LxtaJFbajIIophI8UGnzTNECrAbyqnLH0BAHzctgGsW9fU/C5tzp+sXjQDIVJoJIACc5xHIMMOc5GcE84JGcpcyd9bGsI3W2vmepabE0OmWyPbxW0nlgyQwqAiORlgAOOpNFVtA1ePW9GgvVK+YRtlVf4HHUYyceozzgiiuhO6MWrMn1a0kv8ARr6ziKiSe3kiUseAWUgZ9ua83sfDHijwt5gs9Y063e5xmNQ0rybc/dXyyTjcc4H1r1So0ghjmkmSJFllx5jqoDPjgZPfFUmS1c840zwDql/qw1TXrhTIzFpUkVZCzZ4xg7duMYzwCMFSvXP17TJdK1aaCTbtYmSNhjlCTg4AAB46YA444xXrdFHMFkjy06QZdAtLq0tPt91FP5s0aIsiBDgCNwDlj8oO0dAxyBkZ6W2k0+xsltfC7W0t/dushZI0ACgjJlCgBFC8YwDk8DJJrq440ijWONFREAVVUYAA6ACnVlytu99xp6K5ja9/byfZ59E8iTy93nW8uP3ucBcHjpyeo/HpXJarpPjHxLNDFfW0FrAmSAsoEYbn5iAzEnt7e2TXo1FEoc27LjPl2RT0nTo9J0q2sYjlYUwW5+ZupPU4ySTj3oq5RVpW0Jbuf//Z",
      "code":"DVC5"
    }
  ]
}

userList为用户列表,validateCode为验证码,这里是写死的一些数据

直接在你的data.json文件所在目录下cmd进入命令行

输入 json-server  data.json

如果出现了这个

就说明json-server服务启动了,可以正常访问

在浏览器网址栏输入其中的地址

2,配置axios请求

项目目录下安装axios, npm i axios --save

安装成功之后,在src/utils目录下新建request.js文件

代码如下

import axios from "axios";


const HTTP = axios.create({
  "baseURL": "http://localhost:3000/",//请求url公共部分 , 3000为端口号
  "timeout": 3000,//超时时间
})

//请求拦截器
HTTP.interceptors.request.use(config => {
  //请求头添加token
  const token = "token"
  config.headers = Object.assign(config.headers, { token })
  return config
})


//响应拦截器
HTTP.interceptors.response.use(res => {
  //请求头添加token
  return new Promise((resolve, reject) => {
    if (res.status >= 200 || res.status < 300) {
    // 添加code码
      resolve({ data: res.data, code: 0 })
    } else {
      reject({code : 2 , error :"系统错误,请稍后再试"})
    }
  })
})

export default HTTP

3,接口配置

在src/api目录下新建servers.js文件

代码如下

import request from "@/utils/request"


//登录
export function login(params) {
  return request({
    url: "/userList",
    method: "get",
    data: params
  })
}
//刷新验证码
export function getValidateCode() {
  //随机ID  1-10
  let id = Math.floor(Math.random() * (10)) + 1;

  return request({
    url: `/validateCode?id=${id}`,
    method: "GET"
  })
}

4,页面中引入接口,并发送获取验证码请求

在src/views/Login/index.vue中引入:srcipt标签中 第一行添加以下代码

import { login, getValidateCode} from "@/api/servers";

methods中添加页面加载状态事件

  methods: {
    //设置页面加载状态
    setLoading(bool) {
      this.loading = bool
    },

created生命周期中进行网络请求,获取验证码

  created() {
    this.setLoading(true)
    //setTimeout模拟网络延迟
    setTimeout(() => {
      //接口调用
      getValidateCode().then((res) => {
        this.codeURL = `data:image/png;base64,${res.data[0].img}`;
      });
      this.setLoading(false)
    }, 500)
  },

有不太清楚的可以console.log(res)以下,看模拟后台返回的是什么数据

给codeURL赋值这一步,不懂的可以看看base64编码解码相关的内容

到这一步,每次刷新页面,就可以随机刷新一个图形验证码

给包裹这个img的div标签绑定一个点击事件

<div class="login-code" @click="validateCode">
            <img :src="codeURL" class="login-code-img" />
          </div>

点击验证码可以再次刷新,所以代码需要优化一下

效果

5,给登录按钮绑定点击事件,并进行登录验证

<el-button style="width: 100%;" type="primary" @click="login(loginForm)">登录</el-button>
    login() {
      this.$refs.loginForm.validate((val) => {
        if (val) {
          this.setLoading(true)
          setTimeout(() => {
            const { userName, password, validateCode } = this.loginForm;
            //验证码效验
            verifyCode(validateCode).then((res) => {
              console.log(res);
              if (res.data.length !== 0) {
                //用户名密码效验
                login({ userName, password }).then((res2) => {
                  if (res2.data.some(item => item.userName === userName && item.password === password)) {
                    this.$router.push("/home");
                  } else {
                    this.errorMessage("用户名或密码错误,请重试")
                  }
                  setTimeout(() => {
                    this.setLoading(false)
                   } , 200)
                });
              } else {
                this.errorMessage("验证码错误")
              }
              console.log(res);
            });
          }, 500);
        }
      });
    },
    errorMessage(message) {
      this.validateCode()
      this.$message({
        message,
        type: "error",
        center:true
      });
      this.$refs.loginForm.resetFields();
    },

至此,登录功能已完成

完结撒花----------------------------------------------------------------------------------------------------------------------------------------------------!!!

猜你喜欢

转载自blog.csdn.net/qq_45600228/article/details/131705465