0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Vue實(shí)現(xiàn)登錄功能

jf_96884364 ? 來(lái)源:jf_96884364 ? 作者:jf_96884364 ? 2023-01-13 10:43 ? 次閱讀

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

創(chuàng)建項(xiàng)目

打開cmd,輸入ui命令:

vue ui

若沒(méi)有反應(yīng),可能是版本太低,需要卸載后重裝:

npm uninstall vue-cli -g   #卸載
npm install @vue/cli -g    #安裝

執(zhí)行ui命令成功后,會(huì)出現(xiàn)提示:

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

并會(huì)自動(dòng)打開頁(yè)面:

創(chuàng)建名為SpringAndVue-vue的項(xiàng)目,預(yù)設(shè)選擇“手動(dòng)”;功能開啟 Babel、Router、Vuex、Linter/Formatter;配置選擇“ESLint with error prevention only”;版本建議使用 “vue2.0”。創(chuàng)建新項(xiàng)目。

通過(guò)cd進(jìn)入目錄,啟動(dòng)項(xiàng)目:

npm run serve

2 安裝插件

2.1 element-ui

打開cmd,輸入ui命令:

vue ui

在插件項(xiàng)搜索,并點(diǎn)擊安裝。

vue2.0 選擇安裝 “vue-cli-plugin-element”;vue3.0 選擇安裝 “vue-cli-plugin-element-plus”。

2.2 axios

Terminal安裝axios,每個(gè)新項(xiàng)目都需要安裝:

# vue-cli2.0命令
npm install axios
# vue-cli3.0命令
npm add axios

2.3 mockjs

Terminal安裝mockjs

npm install mockjs

3 添加功能

3.1 login

創(chuàng)建 login.vue頁(yè)面:

<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:''
                },

                // 輸入信息長(zhǎng)度驗(yàn)證
                rules:{
                    name: [
                        { required: true, message: '請(qǐng)輸入用戶名', trigger: 'blur' },
                        { min: 2, max: 5, message: '用戶名長(zhǎng)度在 2 到 5 個(gè)字符', trigger: 'blur' }
                    ],
                    password: [
                        { required: true, message: '請(qǐng)輸密碼', trigger: 'blur' },
                        { min: 2, max: 5, message: '密碼長(zhǎng)度在 2 到 5 個(gè)字符', trigger: 'blur' }
                    ]
                }

            }
        },
        methods:{
            // 登錄后跳轉(zhuǎn)到主頁(yè)
            confirm(){
                this.$refs.loginForm.validate((valid) => {
                    if (valid) { //valid成功為true,失敗為false
                        //去后臺(tái)驗(yàn)證用戶名密碼,并返回token
                        this.$axios.post('/login',this.loginForm).then(res=>{
                            console.log(res.data)
                            if(res.data.state==1){
                                //存儲(chǔ)token到本地
                                this.$store.commit("SET_TOKEN",res.data.vData.token);
                                //跳轉(zhuǎn)到主頁(yè)
                                this.$router.replace('/home');
                            }else{
                                alert('用戶名或密碼錯(cuò)誤!');
                                return false;
                            }
                        });
                    } else {
                        console.log('校驗(yàn)失敗');
                        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中配置一級(jí)路由:

{
    path: '/login',
    name: '登錄',
    component: () =>import(/* webpackChunkName: "user" */'../views/login.vue')
   }

3.3 mockjs 模擬后臺(tái)

在沒(méi)有后端代碼的情況下,可以使用 mockjs 模擬后臺(tái)數(shù)據(jù)。

我們使用 mockjs 模擬后臺(tái)登錄驗(yàn)證,并返回token。

我們?cè)O(shè)置登錄的用戶名和密碼都是admin

在 src 下新建 mock 文件夾,在 mock 文件夾中新建 mock.js ,內(nèi)容如下:

//引入 npm 安裝的 mockjs
const Mock = require('mockjs')   
// 獲取 mock.Random 對(duì)象
const Random = Mock.Random;
// 登錄,此地址與login登錄地址對(duì)應(yīng)
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",//隨機(jī)生成中文名字
        });
    }
    return{
        "state":state,
        "vData":data
    }
});

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

3.4 storejs

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

exportdefaultnew 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 功能實(shí)現(xiàn)

在瀏覽器輸入地址:http://localhost:8080/#/login

可以出現(xiàn)登錄界面:

輸入用戶名和密碼 admin,即可進(jìn)入主頁(yè):

點(diǎn)擊頭像出現(xiàn)退出按鈕,可以回到登錄界面:

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    719

    瀏覽量

    22627
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    481

    瀏覽量

    17304
  • vue
    vue
    +關(guān)注

    關(guān)注

    0

    文章

    58

    瀏覽量

    8086
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    幾種實(shí)現(xiàn)vue的數(shù)據(jù)雙向綁定的方法介紹

    vue的數(shù)據(jù)雙向綁定的實(shí)現(xiàn)
    發(fā)表于 07-29 08:33

    vue-router的概念和用法

    vue:前端路由和vue-router
    發(fā)表于 03-06 13:28

    基于TypeScript實(shí)現(xiàn)Vue3.0指令組件拖拽

    最近在用vue3重構(gòu)后臺(tái)的一個(gè)功能。一個(gè)彈窗組件,彈出一個(gè)表單。然后點(diǎn)擊提交。早上運(yùn)維突然跑過(guò)來(lái)問(wèn)我,為啥彈窗擋住了下邊的表格的數(shù)據(jù),我添加的時(shí)候,都沒(méi)法對(duì)照表格來(lái)看了。你必須給我解決一下。我參考了
    發(fā)表于 11-04 06:58

    vue-cli-----vue實(shí)例中template:'<App/>是什么意思?

    哪位大神知道vue-cli-----vue實(shí)例中template:'是什么意思嗎?
    發(fā)表于 11-05 07:02

    請(qǐng)問(wèn)鴻蒙里面怎樣實(shí)現(xiàn)類似vue中v-html這一功能呢?

    請(qǐng)問(wèn)鴻蒙里面怎樣實(shí)現(xiàn)類似vue中v-html這一功能呢,我試了下不支持模板字符串,有的功能需要文本高亮,這時(shí)候需要對(duì)返回?cái)?shù)據(jù)進(jìn)行解析成帶標(biāo)簽的字符串,
    發(fā)表于 05-30 11:46

    vue-img-cutter Vue圖片裁剪插件

    ./oschina_soft/gitee-vue-img-cutter.zip
    發(fā)表于 05-31 15:21 ?0次下載
    <b class='flag-5'>vue</b>-img-cutter <b class='flag-5'>Vue</b>圖片裁剪插件

    手動(dòng)實(shí)現(xiàn)SpringBoot日志鏈路追蹤

    基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等
    的頭像 發(fā)表于 12-15 15:04 ?1277次閱讀

    SpringBoot 實(shí)現(xiàn)異步記錄復(fù)雜日志

    基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等
    發(fā)表于 12-22 10:35 ?533次閱讀

    SpringBoot+ElasticSearch實(shí)現(xiàn)模糊查詢功能

    基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等
    的頭像 發(fā)表于 12-30 14:00 ?1210次閱讀

    Linux安裝Vue環(huán)境

    Linux安裝Vue環(huán)境
    的頭像 發(fā)表于 01-13 14:09 ?1105次閱讀

    Vue入門Vue的生命周期

    .生命周期 4.1生命周期是什么 Vue的生命周期, 就是Vue實(shí)例從創(chuàng)建到銷毀的過(guò)程.
    的頭像 發(fā)表于 02-06 16:16 ?979次閱讀
    <b class='flag-5'>Vue</b>入門<b class='flag-5'>Vue</b>的生命周期

    Vue入門之Vue定義

    Vue (讀音 /vju?/,類似于 view) 是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架。 Vue 的核心庫(kù)只關(guān)注視圖層,也就是只處理頁(yè)面。 Vue提供的一套JS框架,通常稱為
    的頭像 發(fā)表于 02-06 16:41 ?1231次閱讀
    <b class='flag-5'>Vue</b>入門之<b class='flag-5'>Vue</b>定義

    SpringBoot+Vue實(shí)現(xiàn)網(wǎng)頁(yè)版人臉登錄、人臉識(shí)別案例解析

    Springboot,Mysql,JWT,VUE 2.X 等等技術(shù)實(shí)現(xiàn),主要功能點(diǎn):人臉列表CRUD,日志列表CRUD,基于自建人臉庫(kù)通過(guò)base64編碼方式存儲(chǔ)人臉圖片,通過(guò)調(diào)用騰訊云人臉對(duì)比API場(chǎng)景
    發(fā)表于 02-23 15:36 ?1223次閱讀

    在iOS中集成Vue是什么

    上一節(jié)Vue在非瀏覽器環(huán)境下的嘗試我們利用了weex在vue中的dom實(shí)現(xiàn)成功的在非瀏覽器環(huán)境中Vue的實(shí)例,接下來(lái)我們將Vue集成到iOS
    的頭像 發(fā)表于 03-03 09:56 ?792次閱讀
    在iOS中集成<b class='flag-5'>Vue</b>是什么

    SpringBoot+Vue實(shí)現(xiàn)網(wǎng)頁(yè)版人臉登錄、人臉識(shí)別

    技術(shù)點(diǎn):Springboot,Mysql,JWT,VUE 2.X 等等技術(shù)實(shí)現(xiàn),主要功能點(diǎn):人臉列表CRUD,日志列表CRUD,基于自建人臉庫(kù)通過(guò)base64編碼方式存儲(chǔ)人臉圖片,通過(guò)調(diào)用騰訊云人臉對(duì)比API場(chǎng)景
    的頭像 發(fā)表于 03-07 09:27 ?1215次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品