7 changed files with 153 additions and 199 deletions
@ -1,106 +0,0 @@ |
|||||
<template> |
|
||||
<view class="login-container"> |
|
||||
<uni-icons type="contact-filled" size="100" color="#AFAFAF"></uni-icons> |
|
||||
<button type="primary" class="btn-login" open-type="getUserInfo" @getuserinfo="getUserInfo">一键登录</button> |
|
||||
<text class="tips-text">登录后尽享更多权益</text> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import { mapMutations, mapState } from 'vuex' |
|
||||
|
|
||||
export default { |
|
||||
data() { |
|
||||
return { |
|
||||
|
|
||||
}; |
|
||||
}, |
|
||||
computed: { |
|
||||
...mapState('m_user', ['redirectInfo']) |
|
||||
}, |
|
||||
methods: { |
|
||||
...mapMutations('m_user', ['updateUserInfo', 'updateToken', 'updateRedirectInfo']), |
|
||||
// 用户授权之后,获取用户的基本信息 |
|
||||
getUserInfo(e) { |
|
||||
console.log(e) |
|
||||
|
|
||||
if (e.detail.errMsg === 'getUserInfo:fail auth deny') return uni.$showMsg('您取消了登录授权!') |
|
||||
|
|
||||
console.log(e.detail.userInfo) |
|
||||
this.updateUserInfo(e.detail.userInfo) |
|
||||
|
|
||||
this.getToken(e.detail) |
|
||||
}, |
|
||||
async getToken(info) { |
|
||||
// 获取 code 对应的值 |
|
||||
const [err, res] = await uni.login().catch(err => err) |
|
||||
|
|
||||
if (err || res.errMsg !== 'login:ok') return uni.$showMsg('登录失败!') |
|
||||
|
|
||||
// 准备参数 |
|
||||
const query = { |
|
||||
code: res.code, |
|
||||
encryptedData: info.encryptedData, |
|
||||
iv: info.iv, |
|
||||
rawData: info.rawData, |
|
||||
signature: info.signature |
|
||||
} |
|
||||
|
|
||||
const { data: loginResult } = await uni.$http.post('/api/public/v1/users/wxlogin', query) |
|
||||
if (loginResult.meta.status !== 200) return uni.$showMsg('登录失败!') |
|
||||
|
|
||||
// 直接把 token 保存到 vuex 中 |
|
||||
this.updateToken(loginResult.message.token) |
|
||||
this.navigateBack() |
|
||||
}, |
|
||||
navigateBack() { |
|
||||
if (this.redirectInfo && this.redirectInfo.openType === 'switchTab') { |
|
||||
uni.switchTab({ |
|
||||
url: this.redirectInfo.from, |
|
||||
complete: () => { |
|
||||
this.updateRedirectInfo(null) |
|
||||
} |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
.login-container { |
|
||||
height: 750rpx; |
|
||||
background-color: #F8F8F8; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
position: relative; |
|
||||
overflow: hidden; |
|
||||
|
|
||||
&::after { |
|
||||
content: ' '; |
|
||||
display: block; |
|
||||
width: 100%; |
|
||||
height: 40px; |
|
||||
background-color: white; |
|
||||
position: absolute; |
|
||||
bottom: 0; |
|
||||
left: 0; |
|
||||
border-radius: 100%; |
|
||||
transform: translateY(50%); |
|
||||
} |
|
||||
|
|
||||
.btn-login { |
|
||||
width: 90%; |
|
||||
border-radius: 100px; |
|
||||
margin: 15px 0; |
|
||||
background-color: #C00000; |
|
||||
} |
|
||||
|
|
||||
.tips-text { |
|
||||
font-size: 12px; |
|
||||
color: gray; |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -1,74 +0,0 @@ |
|||||
<template> |
|
||||
<view class="search"> |
|
||||
<view class="search-title">请选择演练场景</view> |
|
||||
<view class="my-search-container" @click="searchBoxHandler"> |
|
||||
<view class="my-search-box" :style="{ 'border-radius': radius + 'px' }"> |
|
||||
<uni-search-bar @confirm="search" @input="input"></uni-search-bar> |
|
||||
<!-- 使用 uni-ui 提供的图标组件 --> |
|
||||
<uni-icons type="search" size="17" color="" ></uni-icons> |
|
||||
<text class="placeholder">搜索场景</text> |
|
||||
</view> |
|
||||
</view> |
|
||||
</view> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
props: { |
|
||||
// 背景颜色 |
|
||||
bgcolor: { |
|
||||
type: String, |
|
||||
default: 'white' |
|
||||
}, |
|
||||
// 圆角尺寸 |
|
||||
radius: { |
|
||||
type: Number, |
|
||||
default: 4 // px |
|
||||
} |
|
||||
}, |
|
||||
data() { |
|
||||
return { |
|
||||
|
|
||||
} |
|
||||
}, |
|
||||
methods: { |
|
||||
searchBoxHandler() { |
|
||||
this.$emit('click') |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss"> |
|
||||
.search-title{ |
|
||||
font-family: 'Courier New', Courier, monospace; |
|
||||
color: #67676a; |
|
||||
margin-left: 8px; |
|
||||
margin-top: 6px; |
|
||||
} |
|
||||
.my-search-container { |
|
||||
|
|
||||
height: 50px; |
|
||||
// background-color: #C00000; |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
padding: 0 10px; |
|
||||
|
|
||||
.my-search-box { |
|
||||
height: 36px; |
|
||||
border: 0.5px solid #969696; |
|
||||
background-color: #FFFFFF; |
|
||||
// border-radius: 18px; |
|
||||
width: 100%; |
|
||||
display: flex; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
|
|
||||
.placeholder { |
|
||||
font-size: 12px; |
|
||||
margin-left: 4px; |
|
||||
color: #969696; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
||||
@ -0,0 +1,110 @@ |
|||||
|
<template> |
||||
|
<view class="login-container"> |
||||
|
<uni-icons type="contact-filled" size="100" color="#AFAFAF"></uni-icons> |
||||
|
<button type="primary" class="btn-login" open-type="getUserInfo" @getuserinfo="getUserInfo">一键登录</button> |
||||
|
<text class="tips-text">登录后尽享更多权益</text> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapMutations, mapState } from 'vuex' |
||||
|
|
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
|
||||
|
}; |
||||
|
}, |
||||
|
computed: { |
||||
|
...mapState('m_user', ['redirectInfo']) |
||||
|
}, |
||||
|
methods:{ |
||||
|
...mapMutations('m_user', ['updateUserInfo', 'updateToken', 'updateRedirectInfo']), |
||||
|
getUserInfo(e) { |
||||
|
console.log(e) |
||||
|
|
||||
|
if (e.detail.errMsg === 'getUserInfo:fail auth deny') return uni.$showMsg('您取消了登录授权!') |
||||
|
|
||||
|
// console.log(e.detail.userInfo) |
||||
|
// this.updateToken("11111") |
||||
|
// uni.switchTab({ |
||||
|
// url: '/pages/index/index' |
||||
|
// }) |
||||
|
console.log(e.detail.userInfo) |
||||
|
this.updateUserInfo(e.detail.userInfo) |
||||
|
|
||||
|
this.getToken(e.detail) |
||||
|
}, |
||||
|
async getToken(info) { |
||||
|
// 获取 code 对应的值 |
||||
|
const [err, res] = await uni.login().catch(err => err) |
||||
|
|
||||
|
if (err || res.errMsg !== 'login:ok') return uni.$showMsg('登录失败!') |
||||
|
|
||||
|
// 准备参数 |
||||
|
const query = { |
||||
|
code: res.code, |
||||
|
encryptedData: info.encryptedData, |
||||
|
iv: info.iv, |
||||
|
rawData: info.rawData, |
||||
|
signature: info.signature |
||||
|
} |
||||
|
|
||||
|
const { data: loginResult } = await uni.$http.post('/small/wechat/login', query) |
||||
|
if (loginResult.meta.status !== 200) return uni.$showMsg('登录失败!') |
||||
|
|
||||
|
// 直接把 token 保存到 vuex 中 |
||||
|
this.updateToken(loginResult.data) |
||||
|
//this.navigateBack() |
||||
|
}, |
||||
|
navigateBack() { |
||||
|
if (this.redirectInfo && this.redirectInfo.openType === 'switchTab') { |
||||
|
uni.switchTab({ |
||||
|
url: this.redirectInfo.from, |
||||
|
complete: () => { |
||||
|
this.updateRedirectInfo(null) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss"> |
||||
|
.login-container { |
||||
|
height: 750rpx; |
||||
|
background-color: #F8F8F8; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
|
||||
|
&::after { |
||||
|
content: ' '; |
||||
|
display: block; |
||||
|
width: 100%; |
||||
|
height: 40px; |
||||
|
background-color: white; |
||||
|
position: absolute; |
||||
|
bottom: 0; |
||||
|
left: 0; |
||||
|
border-radius: 100%; |
||||
|
transform: translateY(50%); |
||||
|
} |
||||
|
|
||||
|
.btn-login { |
||||
|
width: 90%; |
||||
|
border-radius: 100px; |
||||
|
margin: 15px 0; |
||||
|
background-color: #aba9d0; |
||||
|
} |
||||
|
|
||||
|
.tips-text { |
||||
|
font-size: 12px; |
||||
|
color: gray; |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
Loading…
Reference in new issue