当前位置:   article > 正文

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

vue的后端管理系统

先看效果

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

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

  1. import Vue from 'vue'
  2. import Router from "vue-router";
  3. Vue.use(Router);
  4. import Login from "@/views/Login/login"
  5. const routes = [
  6. //匹配空路由跳转到登录页
  7. {
  8. path: '',
  9. redirect: "/login",//重定向
  10. },
  11. //登录
  12. {
  13. path: '/login',
  14. name: 'login',
  15. component: Login,
  16. }
  17. ]
  18. const router = new Router({
  19. mode: 'history',
  20. routes
  21. })
  22. export default router
3)登录界面

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

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

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

  1. <template>
  2. <div>
  3. <div class="bg_box">
  4. <img class="bg_img"
  5. src="../../assets/bg2.png" alt="加载失败"
  6. referrer="no-referrer|origin|unsafe-url" width="100%;" height="605px;" />
  7. </div>
  8. </div>
  9. </template>
  10. <script>
  11. </script>
  12. <style lang="less" scoped>
  13. .bg_img {
  14. object-fit: fill; // 填充,撑满
  15. }
  16. </style>

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

就可以看到引入的背景图

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

以下是index.vue代码

  1. <template>
  2. <div class="LoginForm-Panel" v-loading="loading">
  3. <div class="login">
  4. <div class="login-title">
  5. <span>账号登录</span>
  6. <span>忘记密码</span>
  7. </div>
  8. <el-form :rules="rules" :model="loginForm" ref="loginForm">
  9. <el-form-item prop="userName">
  10. <el-input v-model="loginForm.userName" prefix-icon="el-icon-user" placeholder="请输入用户名"></el-input>
  11. </el-form-item>
  12. <el-form-item prop="password">
  13. <el-input type="password" show-password v-model="loginForm.password" prefix-icon="el-icon-lock"
  14. placeholder="请输入密码"></el-input>
  15. </el-form-item>
  16. <el-form-item prop="validateCode">
  17. <el-input v-model.trim="loginForm.validateCode" auto-complete="off" placeholder="请输入验证码"
  18. @keyup.enter.native="handleLogin" :validate-event="false" prefix-icon="el-icon-lock">
  19. </el-input>
  20. <div class="login-code" @click="validateCode">
  21. <img :src="codeURL" class="login-code-img" />
  22. </div>
  23. </el-form-item>
  24. <span style="font-size: 10px; display: flex; flex-direction: row-reverse; width: 100%; margin-top: 40px; margin-bottom: 10px; text-align: right;">没有账号?点我立即注册</span>
  25. <el-button style="width: 100%;" type="primary" @click="login(loginForm)">登录</el-button>
  26. </el-form>
  27. </div>
  28. </div>
  29. </template>
  30. <script>
  31. export default {
  32. created() {
  33. console.log("created ---------------");
  34. },
  35. data() {
  36. return {
  37. loading: false,//页面加载状态
  38. codeURL: null, //验证码图片
  39. loginForm: { //表单项
  40. userName: "",
  41. password: "",
  42. validateCode: "",
  43. },
  44. rules: { //验证规则
  45. userName: [{ required: true, message: "请输入用户名" }],
  46. password: [{ required: true, message: "请输入密码" }],
  47. validateCode: [{ required: true, message: "请输入验证码" }],
  48. },
  49. };
  50. },
  51. };
  52. </script>
  53. <style lang="less">
  54. .login {
  55. padding: 20px;
  56. .login-title {
  57. font-size: 14px;
  58. display: flex;
  59. justify-content: space-between;
  60. align-items: center;
  61. margin-bottom: 40px;
  62. height: 40px;
  63. line-height: 1.5;
  64. a {
  65. outline: none;
  66. }
  67. }
  68. }
  69. .el-form-item__content {
  70. display: flex;
  71. }
  72. .login-code {
  73. margin-left: 5px;
  74. width: 33%;
  75. height: 100%;
  76. img {
  77. cursor: pointer;
  78. vertical-align: middle;
  79. height: 100%;
  80. }
  81. }</style>

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

        login.vue中添加以下代码

  1. <script>
  2. //引入
  3. import login from "@/views/Login/index";
  4. export default {
  5. //注册
  6. components: {
  7. login
  8. }
  9. }
  10. </script>

template中展示

添加样式

  1. <style lang="less" scoped>
  2. .bg_img {
  3. object-fit: fill; // 填充,撑满
  4. }
  5. .login_position {
  6. border-radius: 6px;
  7. position: absolute;
  8. top: 80px;
  9. right: 100px;
  10. background-color: #fff;
  11. }
  12. </style>

4)实现功能

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

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

1.json-server模拟后端数据

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

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

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

data.json中写入以下代码

  1. {
  2. "userList": [
  3. {
  4. "userName": "123",
  5. "passward": "123",
  6. "id": 1
  7. },
  8. {
  9. "userName": "admin",
  10. "password": "admin",
  11. "id": 2
  12. }
  13. ],
  14. "validateCode":[
  15. {
  16. "id":1,
  17. "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==",
  18. "code":"IJKB"
  19. },
  20. {
  21. "id":2,
  22. "img":"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",
  23. "code":"SJDU"
  24. },
  25. {
  26. "id":3,
  27. "img":"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",
  28. "code":"2UX2"
  29. },
  30. {
  31. "id":4,
  32. "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",
  33. "code":"AN7F"
  34. },
  35. {
  36. "id":5,
  37. "img":"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",
  38. "code":"S5TJ"
  39. },
  40. {
  41. "id":6,
  42. "img":"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",
  43. "code":"MMCM"
  44. },
  45. {
  46. "id":7,
  47. "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",
  48. "code":"X9LE"
  49. },
  50. {
  51. "id":8,
  52. "img":"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",
  53. "code":"AUP7"
  54. },
  55. {
  56. "id":9,
  57. "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",
  58. "code":"86A5"
  59. },
  60. {
  61. "id":10,
  62. "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",
  63. "code":"DVC5"
  64. }
  65. ]
  66. }

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

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

输入 json-server  data.json

如果出现了这个

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

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

2,配置axios请求

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

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

代码如下

  1. import axios from "axios";
  2. const HTTP = axios.create({
  3. "baseURL": "http://localhost:3000/",//请求url公共部分 , 3000为端口号
  4. "timeout": 3000,//超时时间
  5. })
  6. //请求拦截器
  7. HTTP.interceptors.request.use(config => {
  8. //请求头添加token
  9. const token = "token"
  10. config.headers = Object.assign(config.headers, { token })
  11. return config
  12. })
  13. //响应拦截器
  14. HTTP.interceptors.response.use(res => {
  15. //请求头添加token
  16. return new Promise((resolve, reject) => {
  17. if (res.status >= 200 || res.status < 300) {
  18. // 添加code码
  19. resolve({ data: res.data, code: 0 })
  20. } else {
  21. reject({code : 2 , error :"系统错误,请稍后再试"})
  22. }
  23. })
  24. })
  25. export default HTTP

3,接口配置

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

代码如下

  1. import request from "@/utils/request"
  2. //登录
  3. export function login(params) {
  4. return request({
  5. url: "/userList",
  6. method: "get",
  7. data: params
  8. })
  9. }
  10. //刷新验证码
  11. export function getValidateCode() {
  12. //随机ID 1-10
  13. let id = Math.floor(Math.random() * (10)) + 1;
  14. return request({
  15. url: `/validateCode?id=${id}`,
  16. method: "GET"
  17. })
  18. }

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

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

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

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

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

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

  1. created() {
  2. this.setLoading(true)
  3. //setTimeout模拟网络延迟
  4. setTimeout(() => {
  5. //接口调用
  6. getValidateCode().then((res) => {
  7. this.codeURL = `data:image/png;base64,${res.data[0].img}`;
  8. });
  9. this.setLoading(false)
  10. }, 500)
  11. },

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

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

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

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

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

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

效果

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

<el-button style="width: 100%;" type="primary" @click="login(loginForm)">登录</el-button>
  1. login() {
  2. this.$refs.loginForm.validate((val) => {
  3. if (val) {
  4. this.setLoading(true)
  5. setTimeout(() => {
  6. const { userName, password, validateCode } = this.loginForm;
  7. //验证码效验
  8. verifyCode(validateCode).then((res) => {
  9. console.log(res);
  10. if (res.data.length !== 0) {
  11. //用户名密码效验
  12. login({ userName, password }).then((res2) => {
  13. if (res2.data.some(item => item.userName === userName && item.password === password)) {
  14. this.$router.push("/home");
  15. } else {
  16. this.errorMessage("用户名或密码错误,请重试")
  17. }
  18. setTimeout(() => {
  19. this.setLoading(false)
  20. } , 200)
  21. });
  22. } else {
  23. this.errorMessage("验证码错误")
  24. }
  25. console.log(res);
  26. });
  27. }, 500);
  28. }
  29. });
  30. },
  31. errorMessage(message) {
  32. this.validateCode()
  33. this.$message({
  34. message,
  35. type: "error",
  36. center:true
  37. });
  38. this.$refs.loginForm.resetFields();
  39. },

至此,登录功能已完成

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号