92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

注冊登錄功能的完善

2021-10-14    前端達人

在前面項目的基礎上繼續,因為我們的項目進來頁面主題就是用戶數據,所以我們想讓它一進來就是高亮狀態,那么我們可以這樣做,同時我們再加上一個菜單:

<template> <div> <el-menu
                        style="width: 200px; min-height: calc(100vh - 50px)" default-active="user" :default-openeds="[1]" class="el-menu-vertical-demo"> <!--這是兩個函數,我們可以先不寫@open="handleOpen"--> <!--@close="handleClose"--> <el-sub-menu index="1"> <template #title>系統管理</template> <el-menu-item index="user" :route-="{path:'/'}">用戶管理</el-menu-item> </el-sub-menu> <el-menu-item index="data" :route-="{path:'/'}">數據管理</el-menu-item> </el-menu> </div> </template> <script> export default { name: "Aside" } </script> <style scoped> </style>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

訪問效果如下:
在這里插入圖片描述
可以看到一進來因為頁面主體是用戶管理界面,所以“用戶管理”菜單欄是默認高亮的,然后還多了一個數據管理的菜單欄。
菜單之間怎么跳轉一會兒再講,我們現在先寫注冊和登錄。
在寫注冊和登錄之前,我們先講一下路由,可以看到我們這個路由文件下的文件中,默認的“/”訪問的是Home文件:
在這里插入圖片描述
Home頁面寫的就是我們這個用戶表的增刪改查,然后Home頁面呢是在我們的App.vue中給它嵌入進去了的,<router-view>就是展示的Home,還有Header啊Aside等
在這里插入圖片描述
首先我們嘗試一下可不可以直接在路由文件下寫上一個Login路由,同時我們在views頁面下創建一個Login.vue,看看能不能成功:
在這里插入圖片描述
注意引入路由的寫法要特別注意,不能直接像下面這樣寫:
在這里插入圖片描述

而應該用引入的方式;
在這里插入圖片描述
現在我們重啟訪問/login:
在這里插入圖片描述
成功;
但是同時我們也看到了問題,我們明明是登錄界面,為什么進到了后臺主頁了,而我們想要的登錄界面應該是一個非常獨立的界面,所以我們的這個路由是有問題的。因為我們之前是直接使用App.vue作為項目的框架,其實這個App.vue在我們的main.js里面是引入進來了的:
在這里插入圖片描述
引進來之后呢直接作為createApp的根節點來使用,所以這個App.vue這個界面呢,不適合用來作為我們的這個后臺骨架來使用:
在這里插入圖片描述
它應該是一個全局的根節點,所以我們需要把App.vue里面的東西把它給挪走,挪到另一個界面,我們要把App.vue呢給它空出來,讓App.vue可以直接訪問我們所有的界面。
怎么做呢?
我們在src目錄下新建一個layout文件夾,這個文件夾呢就用來做我們項目的骨架部分,再在這個文件下建一個Layout組件:
在這里插入圖片描述
然后把之前在App.vue的東西copy過來:
在這里插入圖片描述
然后Header啊Aside啊那些組件我們需要在這個組件里面進行引入,然后App里面的那些原來引入的就刪掉就行了:
在這里插入圖片描述
然后現在我們就完成了遷移,現在我們要去配置一下我們的路由,實現我們后臺的一個訪問。
路由怎么配置呢?非常簡單。
我們來講解一下剛才這個什么意思,App.vue里面我們只寫了一個router-view,而這個router-view呢就作為我們這個全局的一個根節點訪問,
在這里插入圖片描述這個router-view里面既可以是登錄界面也可以是注冊界面也可以是后臺主體,就是根據它是路由進行一個展示。當我們訪問到我們的后臺主體的時候,會進行一個二次的嵌套路由,那這個嵌套路由怎么寫呢?我們先配置登錄頁面的路由和后臺管理布局的路由:
在這里插入圖片描述

此時訪問/和訪問/login都能到達對應的頁面:
在這里插入圖片描述

在這里插入圖片描述
但是訪問/時,Home主體頁面并沒有出來,只出來了/對應的頁面骨架的路由,怎么讓這個Home主體頁面出來呢,這就涉及到了嵌套路由,像下面這樣寫,children屬性是一個數組屬性,意味著其可以嵌套多個路由:
在這里插入圖片描述
訪問/下的home路由,可以看到如下頁面:
在這里插入圖片描述

vue-router給我們提供了重定向屬性,可以讓我們在訪問某個路由頁面時自動重定向到一個我們指定的路由頁面:
在這里插入圖片描述
現在我們直接訪問/試試,可以看到依然是訪問的home頁面:
在這里插入圖片描述
現在路由問題解決之后我們就可以去寫我們的登錄頁面了。

<template> <!--將整個瀏覽器頁面放在一個大div里
    width: 100%表示這個讓div撐滿全屏
    height: 100vh同上,一個撐滿高度一個撐滿寬度--> <div style="width: 100%; height: 100vh;background: darkslateblue; overflow: hidden"> <!--margin: 參數1 參數2; 參數1表示上下距離,參數2表示左右距離,auto表示自動匹配
        如果頁面產生了空白,就在外層最大的div上加一個overflow,設置為hidden即可--> <div style="width: 400px; margin: 150px auto"> <!--font-size表示字體大小,text-align表示字體居中--> <div style="color: #cccccc; font-size: 30px; text-align: center; padding: 30px 0"> 歡迎登錄 </div> <!--然后去element上copy一個表單--> <el-form ref="form" :model="form" size="normal"> <el-form-item> <el-input prefix-icon="el-icon-user-solid" v-model="form.username"></el-input> </el-form-item> </el-form> <el-form ref="form" :model="form" size="normal"> <el-form-item> <el-input prefix-icon="el-icon-lock" v-model="form.password" show-password></el-input> </el-form-item> </el-form> <el-form ref="form" :model="form" size="normal"> <el-button style="width: 100%" type="primary" @click="login">登錄</el-button> </el-form> </div> </div> </template> <script> import request from "../utils/request"; export default { name: "Login", data(){ return{ form:{} } }, methods: { login() { request.post("/api/user/login",this.form).then(res => { if(res.code === "0"){ this.$messageBox({ type: "success", message: "登錄成功" }) //    登錄成功之后進行頁面跳轉,跳轉到主頁 this.$router.push("/") }else{ this.$messageBox({ type: "error", message: res.msg }) } }) } } } </script> <style scoped> </style>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

然后現在去寫我們后端的接口:

 //用戶登錄 @PostMapping("/login") public Result login(@RequestBody User user){ User res = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getUsername,user.getUsername()).eq(User::getPassword,user.getPassword())); if(res != null){ //登錄成功 return Result.success(); }else{ //登錄失敗 return Result.error("-1","用戶名或密碼錯誤"); } }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

現在數據庫中的數據有:
在這里插入圖片描述
我們試著訪問登錄:
在這里插入圖片描述
可以看到登錄成功:
在這里插入圖片描述
然后我們再去我們的網頁頭部右側的用戶信息欄寫一下退出系統的操作:
在這里插入圖片描述
點擊則路由跳轉到登錄頁面。
然后還有注冊頁面,也一起寫了,注冊頁面其實邏輯和登錄界面差不多,我們copy一個登錄組件進行更改即可。
在這里插入圖片描述
然后進行更改就行了,注冊不過就比登錄多了一個確認密碼的操作。

<template> <!--將整個瀏覽器頁面放在一個大div里
    width: 100%表示這個讓div撐滿全屏
    height: 100vh同上,一個撐滿高度一個撐滿寬度--> <div style="width: 100%; height: 100vh;background: darkslateblue; overflow: hidden"> <!--margin: 參數1 參數2; 參數1表示上下距離,參數2表示左右距離,auto表示自動匹配
        如果頁面產生了空白,就在外層最大的div上加一個overflow,設置為hidden即可--> <div style="width: 400px; margin: 150px auto"> <!--font-size表示字體大小,text-align表示字體居中--> <div style="color: #cccccc; font-size: 30px; text-align: center; padding: 30px 0"> 歡迎登錄 </div> <!--然后去element上copy一個表單--> <el-form ref="form" :model="form" size="normal" :rules="rules"> <el-form-item prop="username"> <el-input prefix-icon="el-icon-user-solid" v-model="form.username"></el-input> </el-form-item> <el-form-item prop="password"> <el-input prefix-icon="el-icon-lock" v-model="form.password" show-password></el-input> </el-form-item> </el-form> <el-form ref="form" :model="form" size="normal"> <el-button style="width: 100%" type="primary" @click="login">登錄</el-button> </el-form> </div> </div> </template> <script> import request from "../utils/request"; export default { name: "Login", data(){ return{ form:{}, rules:{ username:[ {required: true,message:"請輸入用戶名",trigger:'blur'}, ], password:[ {required: true,message:"請輸入密碼",trigger:'blur'}, ] } } }, methods: { login() { //發送請求之前先加這個判斷,不為空且滿足規則時才發送請求 this.$refs['form'].validate((valid) => { if (valid) { request.post("/api/user/login",this.form).then(res => { if(res.code === "0"){ this.$messageBox({ type: "success", message: "登錄成功" }) //    登錄成功之后進行頁面跳轉,跳轉到主頁 this.$router.push("/") }else{ this.$messageBox({ type: "error", message: res.msg }) } }) } }) } } } </script> <style scoped> </style>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

其中我們還要注意在請求數據之前要先判斷表單內部是否數據符合要求,否則不予請求,同樣在Login頁面內也要加入該判斷:

<template> <!--將整個瀏覽器頁面放在一個大div里
    width: 100%表示這個讓div撐滿全屏
    height: 100vh同上,一個撐滿高度一個撐滿寬度--> <div style="width: 100%; height: 100vh;background: darkslateblue; overflow: hidden"> <!--margin: 參數1 參數2; 參數1表示上下距離,參數2表示左右距離,auto表示自動匹配
        如果頁面產生了空白,就在外層最大的div上加一個overflow,設置為hidden即可--> <div style="width: 400px; margin: 150px auto"> <!--font-size表示字體大小,text-align表示字體居中--> <div style="color: #cccccc; font-size: 30px; text-align: center; padding: 30px 0"> 歡迎登錄 </div> <!--然后去element上copy一個表單--> <el-form ref="form" :model="form" size="normal" :rules="rules"> <el-form-item prop="username"> <el-input prefix-icon="el-icon-user-solid" v-model="form.username"></el-input> </el-form-item> <el-form-item prop="password"> <el-input prefix-icon="el-icon-lock" v-model="form.password" show-password></el-input> </el-form-item> </el-form> <el-form ref="form" :model="form" size="normal"> <el-button style="width: 100%" type="primary" @click="login">登錄</el-button> </el-form> </div> </div> </template> <script> import request from "../utils/request"; export default { name: "Login", data(){ return{ form:{}, rules:{ username:[ {required: true,message:"請輸入用戶名",trigger:'blur'}, ], password:[ {required: true,message:"請輸入密碼",trigger:'blur'}, ] } } }, methods: { login() { //發送請求之前先加這個判斷,不為空且滿足規則時才發送請求 this.$refs['form'].validate((valid) => { if (valid) { request.post("/api/user/login",this.form).then(res => { if(res.code === "0"){ this.$messageBox({ type: "success", message: "登錄成功" }) //    登錄成功之后進行頁面跳轉,跳轉到主頁 this.$router.push("/") }else{ this.$messageBox({ type: "error", message: res.msg }) } }) } }) } } } </script> <style scoped> </style>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76

然后現在去后端寫register的接口:

//用戶注冊 @PostMapping("/register") public Result register(@RequestBody User user){ User res = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getUsername,user.getUsername())); if(res != null){ //說明用戶名重復 return Result.success(); } //該用戶不存在,予以注冊 if(user.getPassword() == null){ user.setPassword("123456"); } userMapper.insert(user); return Result.success(); }  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

就此我們的注冊頁面也寫完啦。

1





























































藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請掃碼藍小助,報下信息,藍小助會請您入群。歡迎您加入噢~~希望得到建議咨詢、商務合作,也請與我們聯系。

分享此文一切功德,皆悉回向給文章原作者及眾讀者.

轉自:csdn
免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
国产精品白丝久久av网站| 中文字幕亚洲图片| 视频在线观看入口黄最新永久免费国产| 麻豆精品传媒视频| 六月丁香综合| 日韩妆和欧美的一区二区| 亚洲伊人影院| 日本三级在线观看网站| 欧美一区二区三区四区在线观看地址| 色综合中文网| 欧美福利专区| 538prom精品视频线放| 国产精品卡一卡二| 久久99在线观看| 国产精品久久三区| 国产91色综合久久免费分享| 国产91露脸中文字幕在线| 快播亚洲色图| 国产剧情日韩欧美| 最新黄网在线观看| 日韩一区二区三区精品视频第3页| 高潮久久久久久久久久久久久久| 午夜精品影院在线观看| 麻豆av福利av久久av| 日本高清+成人网在线观看| 天堂网av成人| 偷拍视频一区二区三区| 思思99re6国产在线播放| 久久你懂得1024| 欧美日韩国产综合一区二区| 蜜桃麻豆影像在线观看| 欧美疯狂做受xxxx高潮| 成人av免费在线播放| 欧美色播在线播放| 欧美日韩在线第一页| 亚洲精品国产a久久久久久| 亚洲精品在线免费观看视频| 欧美性猛交丰臀xxxxx网站| 伊人久久大香线蕉av不卡| 亚洲欧美中文字幕在线一区| 精品国产一区二区三区久久狼5月| 亚洲欧美国产高清va在线播| 丁香五精品蜜臀久久久久99网站| 99久久综合狠狠综合久久止| 欧美喷水一区二区| 日韩免费在线看| 正在播放亚洲一区| 美洲精品一卡2卡三卡4卡四卡| 亚洲色图av在线| 日韩在线激情| 99精品视频免费观看| 亚洲国产裸拍裸体视频在线观看乱了中文| 欧美网站免费| 欧美一级爆毛片| 在线一区二区三区四区五区| 亚洲精品ww久久久久久p站| 国产片在线观看| 久久精品国产理论片免费| 日韩欧美二区| 亚洲天堂男人的天堂| 欧美另类暴力丝袜| av在线免费网址| 中文字幕欧美一| 日韩极品一区| 尤物tv在线精品| 青青草国产免费一区二区下载| 911久久香蕉国产线看观看| 97超碰蝌蚪网人人做人人爽| 亚洲欧美国产毛片在线| 国产女人在线视频| 亚洲高清视频一区二区| 亚洲瘦老头同性70tv| 欧美福利在线播放网址导航| yellow中文字幕久久| **网站欧美大片在线观看| 久久影视一区| 一区二区三区中文在线观看| 一区二区视频免费完整版观看| 狠狠色综合一区二区| 激情综合网天天干| 欧美日韩国产综合一区二区三区| 日本一道高清亚洲日美韩| 久久久久国产一区二区三区四区| 日本一区免费| 久久99视频免费| 亚洲一级电影视频| 欧美日韩国产精品一区二区不卡中文| 成年人在线视频免费观看| 精品中文字幕在线2019| 亚洲一区二区三区中文字幕在线| 超碰在线97国产| 僵尸再翻生在线观看| 日韩不卡视频在线观看| 九色综合狠狠综合久久| 欧美日韩国产区一| 日韩欧美成人午夜| 久久国产手机看片| 久久女同互慰一区二区三区| 欧美二区不卡| 日本不卡视频一二三区| 国产成人av在线影院| 国产精品乱子乱xxxx| 日韩高清二区| 最近2019年中文视频免费在线观看| 91精品国产高清自在线看超| 亚洲欧美不卡| 亚洲欧洲一二区| 亚洲精品999| 亚洲欧美日韩高清| 日韩亚洲一区二区| 亚洲激情专区| 性欧美暴力猛交另类hd| 色婷婷精品久久二区二区蜜臂av| 国产精品亚洲自拍| 久久er热在这里只有精品66| 91九色蝌蚪国产| 亚洲欧美国产高清va在线播| 日本韩国在线视频爽| 蜜臂av日日欢夜夜爽一区| 精品在线播放免费| 粉嫩av四季av绯色av第一区| 丁香激情综合五月| 精精国产xxxx视频在线中文版| 亚洲精品视频啊美女在线直播| 欧美性猛交xxxx免费看漫画| 九九99久久精品在免费线bt| 欧美精品一区二区三区在线播放| 日韩极品少妇| 成人a在线视频免费观看| 毛片在线导航| 国产精品入口日韩视频大尺度| 日本aⅴ免费视频一区二区三区| 国产伦精品一区二区三区视频孕妇| 精品国模在线视频| 在线成人www免费观看视频| 国产伦乱精品| 国产精品美女久久久久aⅴ国产馆| 黑丝一区二区三区| 51社区在线成人免费视频| 国产精品 欧美在线| 国产精品v欧美精品v日韩精品| 欧美日韩在线精品| 国产精品h片在线播放| 国产一区二区在线电影| 亚洲天堂av综合网| 欧美寡妇偷汉性猛交| 日本在线播放一区二区三区| 成人av激情人伦小说| 国产精品久久久久久久裸模| 日韩黄色在线观看| 免费人成在线观看播放视频| 69久久99精品久久久久婷婷| 亚洲第一中文字幕在线观看| 国产精品免费电影| 亚洲精品一区中文| 91精品国产91久久久久| 91精品国产入口在线| 亚洲少妇30p| 欧美人与性动xxxx| 国产亚洲视频中文字幕视频| 国产免费一区二区三区在线观看| 日韩高清欧美激情| 一区二区三区加勒比av| 日韩精品一级毛片在线播放|