3 changed files with 482 additions and 78 deletions
@ -1,111 +1,396 @@ |
|||||
<template> |
<template> |
||||
<view class="login"> |
<view> |
||||
<!-- 常规方式登录 --> |
|
||||
<Main :isParty="isParty" :partyData="partyData" /> |
</view> |
||||
</view> |
|
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import Main from './components/main' |
export default { |
||||
import MpWeixin from './components/mp-weixin' |
data() { |
||||
import SettingKeyEnum from '@/common/enum/setting/Key' |
return { |
||||
import SettingModel from '@/common/model/Setting' |
|
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style> |
||||
|
|
||||
|
</style> |
||||
|
<template> |
||||
|
<view class="container"> |
||||
|
|
||||
|
<!-- 页面头部 --> |
||||
|
<view class="header"> |
||||
|
<view class="title"> |
||||
|
<text>登录</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 表单 --> |
||||
|
<view class="login-form"> |
||||
|
<!-- 手机号 --> |
||||
|
<view class="form-item"> |
||||
|
<input class="form-item--input" type="number" v-model="mobile" maxlength="11" autocomplete="off" placeholder="请输入手机号码" /> |
||||
|
</view> |
||||
|
<!-- 密码 --> |
||||
|
<view class="form-item"> |
||||
|
<input class="form-item--input" type="password" v-model="vpass" autocomplete="off" placeholder="请输入密码" /> |
||||
|
</view> |
||||
|
<!-- 选择机构、个人 --> |
||||
|
<radio-group @change="radioChange"> |
||||
|
<view class="form-item"> |
||||
|
<radio class="radio" color="#4399ff" value="企业" :checked="utchk1"/> 机构 |
||||
|
|
||||
|
</view> |
||||
|
<view class="form-item"> |
||||
|
<radio class="radio" color="#4399ff" value="个人" :checked="utchk2"/> 个人 |
||||
|
</view> |
||||
|
</radio-group> |
||||
|
|
||||
|
<!-- 登录按钮 --> |
||||
|
<view class="login-button" @click="handleLogin"> |
||||
|
<text>登录</text> |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 找回密码 注册 --> |
||||
|
<view class="fdreg"> |
||||
|
<text class="findpass" @click="fdpass">找回密码</text> |
||||
|
<text class="regnow" @click="register">立即注册</text> |
||||
|
</view> |
||||
|
<!-- 隐私政策等 --> |
||||
|
<view class="privacy"> |
||||
|
<checkbox :checked="isTick" color="#4399ff" class="ckbox" @click="readpri"></checkbox> |
||||
|
<view class=""> |
||||
|
我已阅读并同意网站的 《<text class="atxt" @click="gotopage('private')">隐私政策</text> 》和 |
||||
|
《<text class="atxt" @click="gotopage('prototal')">用户注册协议</text>》 |
||||
|
</view> |
||||
|
</view> |
||||
|
<!-- 协议弹框 --> |
||||
|
<whpop v-model="showPopup" :maskCloseAble="true" :mkey="murl"></whpop> |
||||
|
|
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import store from '@/store' |
||||
|
import * as LoginApi from '@/api/login' |
||||
|
import * as Verify from '@/utils/verify' |
||||
|
|
||||
|
// 校验登录 |
||||
|
import { checkLogin, showError } from '@/core/app' |
||||
|
import whpop from './components/WhPopup' |
||||
|
|
||||
export default { |
export default { |
||||
components: { |
components: { |
||||
Main, |
// nothing |
||||
MpWeixin |
whpop |
||||
}, |
}, |
||||
|
|
||||
data() { |
data() { |
||||
return { |
return { |
||||
// 数据加载完成 [防止在微信小程序端onLoad和view渲染同步进行] |
// 正在加载 |
||||
isLoad: false, |
isLoading: false, |
||||
// 是否显示微信小程序授权登录 |
// 手机号 |
||||
isMpWeixinAuth: false, |
mobile: '', |
||||
// 是否存在第三方用户信息 |
// 密码 |
||||
isParty: false, |
vpass:"", |
||||
// 第三方用户信息数据 |
// 阅读标志 |
||||
partyData: {} |
isTick:false, |
||||
|
// user type |
||||
|
userType:"", |
||||
|
// 用户类型选择 |
||||
|
utchk1:true, |
||||
|
utchk2:false, |
||||
|
// 需要打开的链接 |
||||
|
murl:"", |
||||
|
// 显示/隐藏弹窗 |
||||
|
showPopup: false, |
||||
} |
} |
||||
}, |
}, |
||||
|
|
||||
/** |
/** |
||||
* 生命周期函数--监听页面加载 |
* 生命周期函数--监听页面加载 |
||||
*/ |
*/ |
||||
async onLoad(options) { |
created() { |
||||
console.log('login onLoad') |
// console.log('main created') |
||||
// 设置当前是否显示微信小程序授权登录 |
|
||||
// await this.setShowUserInfo() |
|
||||
// 数据加载完成 |
|
||||
this.isLoad = true |
|
||||
console.log('isLoad', true) |
|
||||
}, |
}, |
||||
|
|
||||
|
mounted() { |
||||
|
// 监听返回事件,点击系统返回时 |
||||
|
if(window.history && window.history.pushState){ |
||||
|
console.log(window.history) |
||||
|
window.addEventListener('popstate',this.goback,false) |
||||
|
} |
||||
|
}, |
||||
methods: { |
methods: { |
||||
|
|
||||
/** |
goback(){ |
||||
* 设置当前是否显示微信小程序授权登录 |
console.log("6666666666666666666") |
||||
* - 条件1: 只有微信小程序才显示获取用户信息按钮 |
// let path = this.$route.path |
||||
* - 条件2: 后台设置是否已开启该选项 [后台-客户端-注册设置] |
// this.$toast(path) |
||||
*/ |
this.onNavigateBack(1) |
||||
async setShowUserInfo() { |
}, |
||||
console.log('setShowUserInfo start') |
// 账户类型 |
||||
|
radioChange(evt) { |
||||
|
this.userType = evt.detail.value |
||||
|
if(this.userType=="企业"){ |
||||
|
this.utchk2=false |
||||
|
this.utchk1=true; |
||||
|
}else{ |
||||
|
this.utchk2=true |
||||
|
this.utchk1=false; |
||||
|
} |
||||
|
}, |
||||
|
// 判断是否阅读了政策协议 |
||||
|
readpri(e){ |
||||
|
this.isTick=!this.isTick |
||||
|
}, |
||||
|
|
||||
|
// 表单验证 |
||||
|
formValidation() { |
||||
const app = this |
const app = this |
||||
// 判断当前客户端是微信小程序, 并且支持getUserProfile接口 |
// 验证提交登录 |
||||
const isMpWeixin = app.platform === 'MP-WEIXIN' && wx.canIUse('getUserProfile') |
if (!app.validteMobile(app.mobile) ||!app.validtePass(app.vpass)) { |
||||
|
return false |
||||
// 获取后台设置 |
} |
||||
// await SettingModel.item(SettingKeyEnum.REGISTER.value, false) |
// 处理用户类型 |
||||
// .then(setting => { |
if(app.utchk1){ |
||||
// app.isMpWeixinAuth = isMpWeixin && setting.isOauthMpweixin |
this.userType="企业" |
||||
// console.log('setShowUserInfo complete') |
} |
||||
// }) |
if(app.utchk2){ |
||||
|
this.userType ="个人" |
||||
|
} |
||||
|
// 检查是否阅读了协议 |
||||
|
if(!app.isTick){ |
||||
|
this.$toast("请勾选《隐私保护政策》和《用户注册协议》") |
||||
|
return false |
||||
|
} |
||||
|
return true |
||||
}, |
}, |
||||
|
|
||||
//返回操作 |
// 验证密码 |
||||
goBack(){ |
validtePass(str){ |
||||
// 获取url历史记录 |
if (Verify.isEmpty(str)) { |
||||
let history = store.state.urlHistory; |
this.$toast('请先输入登录密码') |
||||
console.log(history,"history"); |
return false |
||||
|
} |
||||
// 判断历史记录的长度 |
return true; |
||||
// if(history.length > 1) { |
|
||||
// // 如果历史记录长度大于1,则跳转到倒数第三个历史记录的url |
|
||||
// router.push(history[history.length - 3]); |
|
||||
// } else { |
|
||||
// // 否则,跳转到首页 |
|
||||
// router.push('/'); |
|
||||
// } |
|
||||
|
|
||||
// // 再次执行以下两行代码,确保后退按钮可以再次触发popstate事件 |
|
||||
// window.history.pushState('forward', null, ''); |
|
||||
// window.history.forward(1); |
|
||||
// this.$router.replace({path: '/'}); |
|
||||
}, |
}, |
||||
|
|
||||
// 获取到用户信息的回调函数 |
// 验证手机号 |
||||
onGetUserInfoSuccess({ oauth, code, userInfo }) { |
validteMobile(str) { |
||||
// 记录第三方用户信息数据 |
if (Verify.isEmpty(str)) { |
||||
this.partyData = { oauth, code, userInfo } |
this.$toast('请先输入手机号') |
||||
// 显示注册页面 |
return false |
||||
this.onShowRegister() |
} |
||||
|
if (!Verify.isMobile(str)) { |
||||
|
this.$toast('请输入正确格式的手机号') |
||||
|
return false |
||||
|
} |
||||
|
return true |
||||
}, |
}, |
||||
|
|
||||
// 显示注册页面 |
// 点击登录 |
||||
onShowRegister() { |
handleLogin() { |
||||
// 是否显示微信小程序授权登录 |
const app = this |
||||
this.isMpWeixinAuth = false |
if (!app.isLoading && app.formValidation()) { |
||||
// 已获取到了第三方用户信息 |
app.submitLogin() |
||||
// this.isParty = true |
} |
||||
} |
}, |
||||
} |
|
||||
|
// 确认登录 |
||||
|
submitLogin() { |
||||
|
const app = this |
||||
|
app.isLoading = true |
||||
|
|
||||
|
store.dispatch('Login', { |
||||
|
loginName: app.mobile, |
||||
|
loginType: "0", |
||||
|
password: this.$md5(app.vpass).toUpperCase(), // 转成大写 |
||||
|
userType: app.userType |
||||
|
}) |
||||
|
.then(result => { |
||||
|
// 显示登录成功 |
||||
|
app.$toast("登录成功") |
||||
|
//app.$toast(result.message) |
||||
|
// 相应全局事件订阅: 刷新上级页面数据 |
||||
|
uni.$emit('syncRefresh', true) |
||||
|
// 跳转回原页面 |
||||
|
setTimeout(() => app.onNavigateBack(1), 2000) |
||||
|
}) |
||||
|
.catch(err => { |
||||
|
console.log("err",err) |
||||
|
// 跳转回原页面 |
||||
|
if (err.result.data.isBack) { |
||||
|
setTimeout(() => app.onNavigateBack(1), 2000) |
||||
|
} |
||||
|
}) |
||||
|
.finally(() => app.isLoading = false) |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 登录成功-跳转回原页面 |
||||
|
*/ |
||||
|
onNavigateBack(delta = 1) { |
||||
|
const pages = getCurrentPages() |
||||
|
if (pages.length > 1) { |
||||
|
uni.navigateBack({ |
||||
|
delta: Number(delta || 1) |
||||
|
}) |
||||
|
} else { |
||||
|
//this.$navTo('pages/user/index') |
||||
|
this.$navTo('pages/index/index') |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 阅读注册协议和隐私 |
||||
|
*/ |
||||
|
gotopage(str){ |
||||
|
//this.$toast(str) |
||||
|
this.murl = str |
||||
|
this.showPopup = ! this.showPopup |
||||
|
}, |
||||
|
/** |
||||
|
* 跳转到注册 |
||||
|
*/ |
||||
|
register(){ |
||||
|
this.$navTo("pages/reg/reg") |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
fdpass(){ |
||||
|
this.$navTo("pages/findpass/findpass") |
||||
|
}, |
||||
|
|
||||
|
}, |
||||
|
//退出页面 |
||||
|
destroyed(){ |
||||
|
//销毁监听 |
||||
|
window.removeEventListener('popstate',this.goback,false) |
||||
|
} |
||||
|
|
||||
} |
} |
||||
</script> |
</script> |
||||
|
|
||||
<style lang="scss" scoped> |
<style lang="scss" scoped> |
||||
|
.container { |
||||
|
padding: 100rpx 60rpx; |
||||
|
min-height: 100vh; |
||||
|
background-color: #fff; |
||||
|
} |
||||
|
|
||||
|
// 页面头部 |
||||
|
.header { |
||||
|
margin-bottom: 60rpx; |
||||
|
|
||||
|
.title { |
||||
|
color: #191919; |
||||
|
font-size: 54rpx; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
// 输入框元素 |
||||
|
.form-item { |
||||
|
display: flex; |
||||
|
padding: 18rpx; |
||||
|
border-bottom: 1rpx solid #f3f1f2; |
||||
|
margin-bottom: 30rpx; |
||||
|
height: 96rpx; |
||||
|
|
||||
|
&--input { |
||||
|
font-size: 28rpx; |
||||
|
letter-spacing: 1rpx; |
||||
|
flex: 1; |
||||
|
height: 100%; |
||||
|
} |
||||
|
|
||||
|
&--parts { |
||||
|
min-width: 100rpx; |
||||
|
height: 100%; |
||||
|
} |
||||
|
|
||||
|
&--radgrp{ |
||||
|
display: flex; |
||||
|
flex:1; |
||||
|
height: 100%; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
// 短信验证码 |
||||
|
.captcha-sms { |
||||
|
font-size: 28rpx; |
||||
|
line-height: 50rpx; |
||||
|
padding-right: 20rpx; |
||||
|
|
||||
|
.activate { |
||||
|
color: #cea26a; |
||||
|
} |
||||
|
|
||||
|
.un-activate { |
||||
|
color: #9e9e9e; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 登录按钮 |
||||
|
.login-button { |
||||
|
width: 100%; |
||||
|
height: 86rpx; |
||||
|
margin-top: 80rpx; |
||||
|
background: linear-gradient(to right, #242e4b, #242e4b); |
||||
|
color: #fff; |
||||
|
// border-radius: 80rpx; |
||||
|
box-shadow: 0px 10px 20px 0px rgba(0, 0, 0, 0.1); |
||||
|
letter-spacing: 5rpx; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
} |
||||
|
// 找回密码和 立即注册 |
||||
|
.fdreg{ |
||||
|
display: flex; |
||||
|
margin-top: 26rpx; |
||||
|
line-height: 1.4; |
||||
|
min-height: 26rpx; |
||||
|
color:#ff0000; |
||||
|
padding-left: 32rpx; |
||||
|
padding-right: 32rpx; |
||||
|
|
||||
|
text{ |
||||
|
display: block; |
||||
|
// display: flex; |
||||
|
float: left; |
||||
|
width: 46%; |
||||
|
line-height: 1.4; |
||||
|
} |
||||
|
|
||||
|
.findpass{ |
||||
|
text-align: left; |
||||
|
} |
||||
|
.regnow{ |
||||
|
text-align: right; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.privacy{ |
||||
|
display: flex; |
||||
|
margin-top: 10rpx; |
||||
|
|
||||
|
.ckbox{ |
||||
|
border-radius: 50%; |
||||
|
} |
||||
|
|
||||
|
.atxt{ |
||||
|
color: #4399ff; |
||||
|
} |
||||
|
} |
||||
</style> |
</style> |
||||
|
|||||
@ -0,0 +1,111 @@ |
|||||
|
<template> |
||||
|
<view class="login"> |
||||
|
<!-- 常规方式登录 --> |
||||
|
<Main :isParty="isParty" :partyData="partyData" /> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import Main from './components/main' |
||||
|
import MpWeixin from './components/mp-weixin' |
||||
|
import SettingKeyEnum from '@/common/enum/setting/Key' |
||||
|
import SettingModel from '@/common/model/Setting' |
||||
|
|
||||
|
|
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
Main, |
||||
|
MpWeixin |
||||
|
}, |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
// 数据加载完成 [防止在微信小程序端onLoad和view渲染同步进行] |
||||
|
isLoad: false, |
||||
|
// 是否显示微信小程序授权登录 |
||||
|
isMpWeixinAuth: false, |
||||
|
// 是否存在第三方用户信息 |
||||
|
isParty: false, |
||||
|
// 第三方用户信息数据 |
||||
|
partyData: {} |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面加载 |
||||
|
*/ |
||||
|
async onLoad(options) { |
||||
|
console.log('login onLoad') |
||||
|
// 设置当前是否显示微信小程序授权登录 |
||||
|
// await this.setShowUserInfo() |
||||
|
// 数据加载完成 |
||||
|
this.isLoad = true |
||||
|
console.log('isLoad', true) |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
|
||||
|
/** |
||||
|
* 设置当前是否显示微信小程序授权登录 |
||||
|
* - 条件1: 只有微信小程序才显示获取用户信息按钮 |
||||
|
* - 条件2: 后台设置是否已开启该选项 [后台-客户端-注册设置] |
||||
|
*/ |
||||
|
async setShowUserInfo() { |
||||
|
console.log('setShowUserInfo start') |
||||
|
const app = this |
||||
|
// 判断当前客户端是微信小程序, 并且支持getUserProfile接口 |
||||
|
const isMpWeixin = app.platform === 'MP-WEIXIN' && wx.canIUse('getUserProfile') |
||||
|
|
||||
|
// 获取后台设置 |
||||
|
// await SettingModel.item(SettingKeyEnum.REGISTER.value, false) |
||||
|
// .then(setting => { |
||||
|
// app.isMpWeixinAuth = isMpWeixin && setting.isOauthMpweixin |
||||
|
// console.log('setShowUserInfo complete') |
||||
|
// }) |
||||
|
}, |
||||
|
|
||||
|
//返回操作 |
||||
|
goBack(){ |
||||
|
// 获取url历史记录 |
||||
|
let history = store.state.urlHistory; |
||||
|
console.log(history,"history"); |
||||
|
|
||||
|
// 判断历史记录的长度 |
||||
|
// if(history.length > 1) { |
||||
|
// // 如果历史记录长度大于1,则跳转到倒数第三个历史记录的url |
||||
|
// router.push(history[history.length - 3]); |
||||
|
// } else { |
||||
|
// // 否则,跳转到首页 |
||||
|
// router.push('/'); |
||||
|
// } |
||||
|
|
||||
|
// // 再次执行以下两行代码,确保后退按钮可以再次触发popstate事件 |
||||
|
// window.history.pushState('forward', null, ''); |
||||
|
// window.history.forward(1); |
||||
|
// this.$router.replace({path: '/'}); |
||||
|
}, |
||||
|
|
||||
|
// 获取到用户信息的回调函数 |
||||
|
onGetUserInfoSuccess({ oauth, code, userInfo }) { |
||||
|
// 记录第三方用户信息数据 |
||||
|
this.partyData = { oauth, code, userInfo } |
||||
|
// 显示注册页面 |
||||
|
this.onShowRegister() |
||||
|
}, |
||||
|
|
||||
|
// 显示注册页面 |
||||
|
onShowRegister() { |
||||
|
// 是否显示微信小程序授权登录 |
||||
|
this.isMpWeixinAuth = false |
||||
|
// 已获取到了第三方用户信息 |
||||
|
// this.isParty = true |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
|
||||
|
</style> |
||||
Loading…
Reference in new issue