init
This commit is contained in:
85
pages/login/login.vue
Normal file
85
pages/login/login.vue
Normal file
@@ -0,0 +1,85 @@
|
||||
<template>
|
||||
<u-popup v-model="show" mode="bottom" border-radius="20">
|
||||
<view class="p-30">
|
||||
|
||||
<view class="text-center u-font-32 u-m-b-20">
|
||||
微信授权登录
|
||||
</view>
|
||||
|
||||
<button
|
||||
class="u-button bg-green text-white"
|
||||
open-type="getPhoneNumber"
|
||||
@getphonenumber="onGetPhone"
|
||||
>
|
||||
使用微信手机号授权登录
|
||||
</button>
|
||||
|
||||
</view>
|
||||
</u-popup>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
show: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
open() {
|
||||
this.show = true
|
||||
},
|
||||
|
||||
// 微信授权手机号
|
||||
onGetPhone(e) {
|
||||
const { code } = e.detail
|
||||
if (!code) {
|
||||
this.$mytip.toast("授权失败")
|
||||
return
|
||||
}
|
||||
this.doLogin(code)
|
||||
},
|
||||
|
||||
// 登录逻辑
|
||||
async doLogin(code) {
|
||||
uni.showLoading({ title: "登录中...", mask: true })
|
||||
|
||||
try {
|
||||
// ① 调后端:通过微信 code => openid + 手机号信息
|
||||
const authRes = await this.$u.get(`/api/weChatAuth?code=${code}`)
|
||||
|
||||
// authRes: { openid, hasPhone: true/false, phoneList: [...] }
|
||||
|
||||
if (!authRes.hasPhone) {
|
||||
// ② 未绑定手机号 → 让用户选择手机号
|
||||
this.showPhoneSelector(authRes.phoneList, authRes.openid)
|
||||
return
|
||||
}
|
||||
|
||||
// ③ 已有绑定手机号 → 直接登录
|
||||
await this.loginWithOpenId(authRes.openid)
|
||||
|
||||
} catch (err) {
|
||||
this.$mytip.toast("登录失败")
|
||||
}
|
||||
},
|
||||
|
||||
// 提示选择手机号
|
||||
showPhoneSelector(phoneList, openid) {
|
||||
this.show = false
|
||||
this.$emit("choosePhone", { phoneList, openid })
|
||||
},
|
||||
|
||||
// 通过 openid 登录
|
||||
async loginWithOpenId(openid) {
|
||||
const loginRes = await this.$u.post('/api/weChatLoginByOpenId', { openid })
|
||||
|
||||
this.$u.vuex('vuex_token', loginRes.token)
|
||||
this.$u.vuex('vuex_user', loginRes.loginUser)
|
||||
|
||||
uni.hideLoading()
|
||||
uni.switchTab({ url: '/pages/index/index' })
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user