用uniapp寫一個(gè)好看的登錄頁(yè)面
uniapp好看的登錄頁(yè)面
本登錄方式有兩種
1.賬號(hào)和密碼登錄
2.賬號(hào)和驗(yàn)證碼登錄
1.登錄頁(yè)面的代碼
<template> <view class="login"> <view class="login-title">體育場(chǎng)館預(yù)約</view> <view class="login-content"> <view class="login-username"> <i class="el-icon-user"></i> <input type="text" placeholder="請(qǐng)輸入賬號(hào)" v-model="phone"> </view> <view class="login-password"> <i class="el-icon-key"></i> <input type="safe-password" name="" id="" placeholder="請(qǐng)輸入密碼" v-model="password"> </view> </view> <view class="button"><button @click="onsubmit">登錄</button></view> <view class="login-botton"> <view class="login-password" @click="findPassword">找回密碼</view> <span>|</span> <view class="login-zhuce" @click="Registration">注冊(cè)賬號(hào)</view> </view> <!-- 其他的登錄方式 --> <view class="login-other"> <view class="login-top"> 其他的登錄方式 </view> <view class="login-icon"> <image src="../../static/index/QQ.png" mode="widthFix"></image> <image src="../../static/index/weixin.png" mode="widthFix"></image> </view> </view> </view> </template> <script> import { mapMutations } from 'vuex'; export default { data() { return { phone:'', password:'', rules: { phone: [{ required: true, message: '請(qǐng)輸入手機(jī)號(hào)', rule: '/^1[23456789]\d{9}$/' }], password: [{ required: true, message: '請(qǐng)輸入密碼', trigger: 'blur' }] } }; }, methods: { // ...mapMutations(['user_Login']), //登錄 onsubmit() { if(this.phone==''||this.password==''){ uni.showToast({ title:"內(nèi)容不能為空哦!", icon:"none" }) }else{ let data={ phone:this.phone, password:this.password } uni.request({ url: '/api/login/loginUser', method: 'POST', data: data, success: res => { console.log(res.data.data.data); if (res.data.code == 200) { this.$store.commit("userLogin",res.data.data.data ); localStorage.setItem('status',true) //頁(yè)面跳轉(zhuǎn) this.$router.push('/pages/index/index'); uni.showToast({ title: res.data.data.msg, icon: 'none' }); } else { uni.showToast({ title: res.data.data.msg, icon: 'none' }); } } }); } }, Registration() { console.log('hah '); uni.navigateTo({ url: '../../pages/login/registration' }); }, findPassword() { console.log('hah '); this.$router.push('/pages/login/findPassword'); }, loginOther(){ uni.share({ provider: "weixin", scene: "WXSceneSession", type: 1, summary: "我正在使用HBuilderX開發(fā)uni-app,趕緊跟我一起來(lái)體驗(yàn)!", success: function (res) { console.log("success:" + JSON.stringify(res)); }, fail: function (err) { console.log("fail:" + JSON.stringify(err)); } }); } } }; </script> <style lang="less"> .login { // background-image: linear-gradient(120deg, #05ee28, #6a3dad); background-color: #fff; width: 100%; background-position: center; background-size: cover; // background-color: #464646; margin:0px; background-size:100% 100%; background-attachment:fixed; height: 1535rpx; opacity: 0.8; .login-title { padding-top: 150rpx; display: flex; justify-content: flex-start; margin-left: 50rpx; font-weight: 700; font-size: 40rpx; color: #11cd6e; letter-spacing: 5rpx; margin-bottom: 50rpx; } .login-content{ .login-username{ display: flex; align-items: center; margin: 0 50rpx; border-bottom: 1rpx solid gainsboro; input{ padding: 10rpx; height: 60rpx; width: 80%; } i { color: #11c53e; padding-right: 20rpx; font-size: 50rpx; } } .login-password{ display: flex; align-items: center; margin: 0 50rpx; border-bottom: 1rpx solid gainsboro; margin-top: 50rpx; input{ padding: 10rpx; height: 60rpx; width: 80%; } i { color: #11c53e; padding-right: 20rpx; font-size: 50rpx; } } } .button{ margin-top: 120rpx; button{ background-color:#11c53e; width: 90%; height: 85rpx; text-align: center; line-height: 85rpx; color: #fff; } } .login-botton{ display: flex; justify-content: center; margin-top: 100rpx; .login-password{ padding: 0 15rpx; color: #11c53e; } .login-zhuce{ padding: 0 15rpx; color: #11c53e; } } .login-other{ position: absolute; bottom: 100rpx; left: 37%; display: flex; flex-direction: column; justify-content: center; .login-top{ text-align:center; } .login-icon{ display: flex; justify-content: space-between; margin-top: 50rpx; image{ width: 80rpx; } } } } </style>
2.注冊(cè)頁(yè)面
<template> <view class="registration"> <view class="registration-content"> <view class="login-username"> <i class="el-icon-mobile"></i> <input type="text" name="" id="" placeholder="請(qǐng)輸入手機(jī)號(hào)" v-model="phone" /> </view> <view class="login-code"> <i class="el-icon-cpu"></i> <input type="text" placeholder="請(qǐng)輸入驗(yàn)證碼" v-model="userCode" /> <button type="warning" :disabled="disabled" @click="sendCode">{{ codeMsg }}</button> </view> </view> <view class="login-button"><button @click="login">下一步</button></view> <view class="registration-botton"><view class="registration-password" @click="goBack">密碼登陸</view></view> </view> </template> <script> export default { data() { return { phone: '', userCode: '', disabled: false, codeNum: 10, codeMsg: '獲取驗(yàn)證碼', code: '', rules: { phone: { rule: '/^1[23456789]\d{9}$/', meg: '手機(jī)的格式不對(duì)' } } }; }, methods: { sendCode() { if (this.phone == '') { uni.showToast({ title: '手機(jī)號(hào)不能為空', icon: 'none' }); } else if (this.phone != '') { var reg = /^1[3456789]\d{9}$/; if (!reg.test(this.phone)) { uni.showToast({ title: '輸入有效的手機(jī)號(hào)', icon: 'none' }); } else { //禁用按鈕 this.disabled = true; //發(fā)送請(qǐng)求 uni.request({ url: '/api/login/code', method: 'POST', data: { phone: this.phone }, success: res => { console.log('11', res.data.data); if (res.data.data.success) { this.code = res.data.data.data; } } }); //倒計(jì)時(shí) let timer = setInterval(() => { --this.codeNum; this.codeMsg = `重新發(fā)送 ${this.codeNum}`; }, 1000); //判斷定時(shí)器停止 setTimeout(() => { clearInterval(timer); (this.disabled = false), (this.codeMsg = '獲取驗(yàn)證碼'), (this.codeNum = 10); }, 10000); } } }, //登錄 login() { if (this.code == '' || this.phone == '') { uni.showToast({ title: '手機(jī)號(hào)不能為空', icon: 'none' }); } else if (this.userCode == this.code) { //驗(yàn)證碼正確 uni.request({ url: '/api/login/addUser', method: 'POST', data: { phone: this.phone }, success: res => { //code 200 注冊(cè)成功 if (res.data.code == 200) { uni.showToast({ title: res.data.data.msg, icon: 'none' }); //給vuex添加數(shù)據(jù) this.$store.commit('userLogin', res.data.data.data); //路由跳轉(zhuǎn) this.$router.push('/pages/index/index'); } else { uni.showToast({ title: res.data.data.msg, icon: 'none' }); } } }); } }, //密碼登錄 goBack() { this.$router.push('/pages/login/login'); }, validate(key) { let bool = true; if (!this.rules[key].rule.test(this[key])) { uni.showToast({ title: this.rules[key].meg, icon: 'none' }); bool = false; return false; } return bool; } } }; </script> <style lang="less"> .registration { width: 100%; background-position: center; background-size: cover; background-color: #fff; margin: 0px; background-size: 100% 100%; background-attachment: fixed; opacity: 0.8; // margin-top: 100rpx; .registration-content{ display: flex; flex-direction: column; margin: 0 50rpx; input{ padding: 10rpx; width:60%; height: 70rpx; } i { color: #11c53e; padding-right: 20rpx; font-size: 50rpx; } .login-username{ display: flex; align-items: center; border-bottom: 1rpx solid gainsboro; margin-top: 30rpx; } .login-code{ display: flex; align-items: center; border-bottom: 1rpx solid gainsboro; margin-top: 30rpx; button{ width:250rpx; height: 85rpx; font-size: 30rpx; line-height: 85rpx; background-color: #11c53e; color: #fff; } } } .login-button{ margin-top: 150rpx; width: 90%; margin-left: 5%; button{ background-color: #11c53e; color: #fff; } } } .registration-botton { display: flex; margin-top: 50rpx; justify-content: space-between; .registration-password { padding-left: 40rpx; color: #fff; } .registration-zhuce { padding-right: 40rpx; color: #fff; } } </style>
總結(jié)
到此這篇關(guān)于用uniapp寫一個(gè)好看的登錄頁(yè)面的文章就介紹到這了,更多相關(guān)uniapp登錄頁(yè)面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue實(shí)現(xiàn)簡(jiǎn)單可擴(kuò)展甘特圖的方法詳解
Ganttastic是一個(gè)小型的Vue.js組件,用于在Web應(yīng)用程序上呈現(xiàn)一個(gè)可配置的、可拖動(dòng)的甘特圖。本文就將用它來(lái)實(shí)現(xiàn)簡(jiǎn)單可擴(kuò)展的甘特圖,感興趣的可以嘗試一下2022-11-11vue+elementui+vuex+sessionStorage實(shí)現(xiàn)歷史標(biāo)簽菜單的示例代碼
本文主要介紹了vue+elementui+vuex+sessionStorage實(shí)現(xiàn)歷史標(biāo)簽菜單的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Vue在自定義指令綁定的處理函數(shù)中傳遞參數(shù)
這篇文章主要介紹了Vue在自定義指令綁定的處理函數(shù)中傳遞參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03vue中如何實(shí)時(shí)監(jiān)聽本地存儲(chǔ)
這篇文章主要介紹了vue中如何實(shí)時(shí)監(jiān)聽本地存儲(chǔ),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04vue使用mpegts.js實(shí)現(xiàn)播放flv的直播視頻流
這篇文章主要為大家詳細(xì)介紹了vue如何使用mpegts.js實(shí)現(xiàn)播放flv的直播視頻流,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-01-01