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
免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。

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

日歷

鏈接

個人資料

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

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
久久97久久97精品免视看| 久久久久中文字幕| 97国产真实伦对白精彩视频8| 啪一啪鲁一鲁2019在线视频| 在线观看视频亚洲| 日韩成人高清在线| 欧美一级高清免费播放| 日韩电影中文字幕一区| 国产精品美乳一区二区免费| 成人乱人伦精品视频在线观看| 国产日韩av高清| 在线观看日韩视频| 91精品国产91久久久久福利| 2019中文字幕全在线观看| 欧美三级xxx| 精品久久久久久亚洲国产300| 亚洲毛茸茸少妇高潮呻吟| 国产成人一区二区三区小说| 亚洲免费视频观看| 亚洲第一页自拍| 日韩欧美成人网| 欧美国产第二页| 亚洲黄色www网站| 91精品视频大全| www.日韩不卡电影av| 97超碰蝌蚪网人人做人人爽| 欧美性受xxxx白人性爽| 日韩精品免费综合视频在线播放| 午夜精品久久久久久久99热| 午夜精品在线观看| 久久亚洲精品小早川怜子66| 色香阁99久久精品久久久| 中文字幕亚洲欧美日韩2019| 爱福利视频一区| 中文在线不卡视频| 亚洲区bt下载| 欧美日韩中国免费专区在线看| 国产日韩欧美视频在线| 国产a级全部精品| 久久久av亚洲男天堂| 精品动漫一区二区| 日韩欧美国产一区二区| 欧美黑人巨大xxx极品| 中文字幕日韩av电影| 亚洲男人天天操| www日韩中文字幕在线看| 中文字幕精品一区二区精品| 懂色av一区二区三区| 91精品国产综合久久香蕉最新版| 国产精品久久久久久久久借妻| 中文字幕精品视频| 2023亚洲男人天堂| 久久精品中文字幕电影| 国内精品400部情侣激情| 韩剧1988在线观看免费完整版| 色999日韩欧美国产| 精品国产一区二区三区久久狼黑人| 538国产精品视频一区二区| 一区二区三区动漫| 国产综合在线观看视频| 狠狠久久亚洲欧美专区| 欧美电影《睫毛膏》| 国产成人一区三区| 丁香五六月婷婷久久激情| 一本色道久久综合亚洲精品小说| 日韩国产高清污视频在线观看| 久久91超碰青草是什么| 久久久久久有精品国产| 日韩亚洲欧美中文高清在线| 亚洲视频在线免费看| 国产综合久久久久久| 亚洲最大福利视频网| 日韩一级裸体免费视频| 欧美激情亚洲自拍| 色系列之999| 中国日韩欧美久久久久久久久| 亚洲91精品在线观看| 日韩视频在线免费观看| 日韩在线观看av| 97久久伊人激情网| 成人疯狂猛交xxx| 最近2019中文字幕大全第二页| 欧美精品第一页在线播放| 欧美一性一乱一交一视频| 色视频www在线播放国产成人| 国产精品久久一区| 亚洲一区二区自拍| 亚洲mm色国产网站| 日本久久久久久久久| 超碰91人人草人人干| 4438全国成人免费| 国产精品美女av| 国产精品视频中文字幕91| 欧美高清自拍一区| 亚洲最大的网站| 久久天天躁狠狠躁夜夜躁2014| 色偷偷偷亚洲综合网另类| 欧美成人免费网| 欧美在线一级视频| 欧美猛男性生活免费| 成人福利在线视频| 欧美久久精品一级黑人c片| 精品女同一区二区三区在线播放| 97超级碰碰人国产在线观看| 久久久久久久久久亚洲| 91亚洲精品视频| 欧美日韩国产一区二区三区| 91网站免费观看| 不卡毛片在线看| 久久国内精品一国内精品| 国产v综合ⅴ日韩v欧美大片| 亚洲sss综合天堂久久| 欧美成人性色生活仑片| 亚洲精品乱码久久久久久按摩观| 久久免费视频在线| 亚洲成色777777在线观看影院| 亚洲美女av在线播放| 伊人激情综合网| 国产精品免费视频xxxx| 欧美日韩一区二区在线| 91在线免费观看网站| 欧美激情女人20p| 久久69精品久久久久久久电影好| 91久久中文字幕| 久久久在线免费观看| 欧美激情视频一区二区三区不卡| 欧美乱大交做爰xxxⅹ性3| 国产精品免费一区二区三区都可以| 亚洲国产精品久久久久秋霞蜜臀| 欧美大荫蒂xxx| 北条麻妃在线一区二区| 国产一区二区三区精品久久久| 亚洲欧美在线播放| 欧美人与性动交a欧美精品| 欧美片一区二区三区| 97在线看免费观看视频在线观看| 日韩免费观看在线观看| 九九久久精品一区| 精品国产精品三级精品av网址| 精品久久在线播放| 色噜噜久久综合伊人一本| 91在线免费网站| 国产成+人+综合+亚洲欧美丁香花| 日韩精品中文字幕有码专区| 日本一区二区在线免费播放| 亚洲电影免费观看高清完整版| 91手机视频在线观看| 亚洲国产日韩欧美在线图片| 国产精品福利网站| 日韩国产一区三区| 久久久欧美精品| 欧美理论电影在线观看| 国产精品人成电影在线观看| 亚洲一区中文字幕在线观看| 亚洲日本中文字幕免费在线不卡| 欧美日韩国产精品一区二区不卡中文| 国产在线精品自拍| 亚洲精品不卡在线| 在线视频日本亚洲性| 亚洲性夜色噜噜噜7777| 精品久久久国产精品999| 97国产精品视频| 精品日韩美女的视频高清| 亚洲性av网站|