前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vue实现登录功能

Vue实现登录功能

作者头像
代码的路
发布2022-08-23 16:12:16
6400
发布2022-08-23 16:12:16
举报
文章被收录于专栏:代码的路代码的路

代码地址:https://github.com/Snowstorm0/vue-login-mock

1 创建项目

打开cmd,输入ui命令:

代码语言:javascript
复制
vue ui

若没有反应,可能是版本太低,需要卸载后重装:

代码语言:javascript
复制
npm uninstall vue-cli -g   #卸载
npm install @vue/cli -g    #安装

执行ui命令成功后,会出现提示:

🚀 Starting GUI... 🌠 Ready on http://localhost:8000

并会自动打开页面:

创建名为SpringAndVue-vue的项目,预设选择“手动”;功能开启 Babel、Router、Vuex、Linter/Formatter;配置选择“ESLint with error prevention only”;版本建议使用 “vue2.0”。创建新项目。

通过cd进入目录,启动项目:

代码语言:javascript
复制
npm run serve

2 安装插件

2.1 element-ui

打开cmd,输入ui命令:

代码语言:javascript
复制
vue ui

在插件项搜索,并点击安装。

vue2.0 选择安装 “vue-cli-plugin-element”;vue3.0 选择安装 “vue-cli-plugin-element-plus”。

2.2 axios

Terminal安装axios,每个新项目都需要安装:

代码语言:javascript
复制
# vue-cli2.0命令
npm install axios
# vue-cli3.0命令
npm add axios

2.3 mockjs

Terminal安装mockjs

代码语言:javascript
复制
npm install mockjs

3 添加功能

3.1 login

创建 login.vue页面:

代码语言:javascript
复制
<template>
    <div class="loginbBody">
        <div class="loginDiv">
            <div class="login-content">
                <h1 class="login-title">用户登录</h1>
                <el-form :model="loginForm" label-width="100px"
                         :rules="rules" ref="loginForm">
                    <el-form-item label="名字" prop="name">
                        <el-input style="width: 200px" type="text" v-model="loginForm.name"
                                  autocomplete="off" size="small"></el-input>
                    </el-form-item>
                    <el-form-item label="密码" prop="password">
                        <el-input style="width: 200px" type="password" v-model="loginForm.password"
                                  show-password autocomplete="off" size="small"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" @click="confirm">确 定</el-button>
                    </el-form-item>
                </el-form>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        name: "login",
        data(){
            return{
                loginForm:{
                    name:'',
                    password:''
                },

                // 输入信息长度验证
                rules:{
                    name: [
                        { required: true, message: '请输入用户名', trigger: 'blur' },
                        { min: 2, max: 5, message: '用户名长度在 2 到 5 个字符', trigger: 'blur' }
                    ],
                    password: [
                        { required: true, message: '请输密码', trigger: 'blur' },
                        { min: 2, max: 5, message: '密码长度在 2 到 5 个字符', trigger: 'blur' }
                    ]
                }

            }
        },
        methods:{
            // 登录后跳转到主页
            confirm(){
                this.$refs.loginForm.validate((valid) => {
                    if (valid) { //valid成功为true,失败为false
                        //去后台验证用户名密码,并返回token
                        this.$axios.post('/login',this.loginForm).then(res=>{
                            console.log(res.data)
                            if(res.data.state==1){
                                //存储token到本地
                                this.$store.commit("SET_TOKEN",res.data.vData.token);
                                //跳转到主页
                                this.$router.replace('/home');
                            }else{
                                alert('用户名或密码错误!');
                                return false;
                            }
                        });
                    } else {
                        console.log('校验失败');
                        return false;
                    }
                });
            }
        }
    }
</script>
<style scoped >
    .loginbBody {
        width: 100%;
        height: 100%;
        background-color: #B3C0D1;
    }
    .loginDiv {
        position: absolute;
        top: 50%;
        left: 50%;
        margin-top: -200px;
        margin-left: -250px;
        width: 450px;
        height: 330px;
        background: #fff;
        border-radius: 5%;

    }
    .login-title {
        margin: 20px 0;
        text-align: center;
    }
    .login-content {
        width: 400px;
        height: 250px;
        position: absolute;
        top: 25px;
        left: 25px;
    }
</style>

3.2 配置路由

在router.js中配置一级路由:

代码语言:javascript
复制
   {
    path: '/login',
    name: '登录',
    component: () => import(/* webpackChunkName: "user" */ '../views/login.vue')
   }

3.3 mockjs 模拟后台

在没有后端代码的情况下,可以使用 mockjs 模拟后台数据。

我们使用 mockjs 模拟后台登录验证,并返回token。

我们设置登录的用户名和密码都是admin

在 src 下新建 mock 文件夹,在 mock 文件夹中新建 mock.js ,内容如下:

代码语言:javascript
复制
//引入 npm 安装的 mockjs
const Mock = require('mockjs')   
// 获取 mock.Random 对象
const Random = Mock.Random;
// 登录,此地址与login登录地址对应
Mock.mock('/login','post', (param)=>{  
    let state=0;
    let body = JSON.parse(param.body);
    console.log(body)
    let data;
    //模拟用户名和密码都是 admin
    if(body.name=='admin'&&body.password=='admin'){
        state=1;
        data = Mock.mock({
            "token": "@guid()",//模拟token
            "name": "@cname",//随机生成中文名字
        });
    }
    return{
        "state":state,
        "vData":data
    }
});

//退出
Mock.mock('/logout','post', ()=>{
    return {state:1}
});

3.4 storejs

在 src/store/index.js 中添加 Vuex.Store 的属性:

代码语言:javascript
复制
export default new Vuex.Store({
  state: {
    token: '',
    username: '代码的路'
  },
  getters: {
  },
  mutations: {
    SET_TOKEN(state, token){
      state.token = token ;
      localStorage.setItem("token",token);
    },
    resetState(state){
      state.token = '';
      localStorage.clear();
  }
  },
  actions: {
  },
  modules: {
  }
})

4 功能实现

在浏览器输入地址:http://localhost:8080/#/login

可以出现登录界面:

输入用户名和密码 admin,即可进入主页:

点击头像出现退出按钮,可以回到登录界面:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 代码的路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 创建项目
  • 2 安装插件
    • 2.1 element-ui
      • 2.2 axios
        • 2.3 mockjs
        • 3 添加功能
          • 3.1 login
            • 3.2 配置路由
              • 3.3 mockjs 模拟后台
                • 3.4 storejs
                • 4 功能实现
                相关产品与服务
                命令行工具
                腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档