You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.7 KiB
112 lines
2.7 KiB
<script setup lang="ts">
|
|
import { debounce } from 'feng-uniapp-exploit/utils/index'
|
|
import { getMobile } from '@/api/login'
|
|
|
|
import useUserStore from '@/store/user'
|
|
const userStore = useUserStore()
|
|
|
|
const loginCode = ref('')
|
|
|
|
// 获取微信登录 code
|
|
const getLoginCode = async (): Promise<string> => {
|
|
try {
|
|
const res = await uni.login({ provider: 'weixin' })
|
|
loginCode.value = res.code
|
|
return res.code
|
|
} catch (error) {
|
|
console.error('获取登录code失败:', error)
|
|
throw error
|
|
}
|
|
}
|
|
|
|
// 处理获取手机号
|
|
|
|
interface phoneEvent {
|
|
detail: { errMsg: string; iv: string; encryptedData: string; code: string }
|
|
}
|
|
const onGetPhoneNumber = debounce(async (e: phoneEvent) => {
|
|
if (e.detail.errMsg.includes('fail')) {
|
|
uni.showToast({ title: '用户拒绝授权', icon: 'none' })
|
|
return
|
|
}
|
|
|
|
try {
|
|
if (!loginCode.value) {
|
|
await getLoginCode()
|
|
}
|
|
|
|
if (!userStore.openId) {
|
|
await userStore.getopenid({ code: loginCode.value })
|
|
}
|
|
|
|
getMobile({ openid: userStore.openId, code: e.detail.code })
|
|
.then((res) => {
|
|
const { data: phone } = res as { data: string }
|
|
|
|
userStore.mobile = phone
|
|
|
|
userStore.getUserInfo()
|
|
|
|
onLoginSuccess()
|
|
})
|
|
.catch(() => {
|
|
uni.showToast({ title: '登录失败!', icon: 'none' })
|
|
})
|
|
} catch (error) {
|
|
uni.showToast({ title: '登录失败', icon: 'none' })
|
|
}
|
|
})
|
|
|
|
const onLoginSuccess = () => {
|
|
uni.showToast({
|
|
title: '登录成功',
|
|
icon: 'none',
|
|
success: () => {
|
|
setTimeout(() => {
|
|
userStore.showtoast = false
|
|
uni.reLaunch({ url: '/pages/votingElection/index' })
|
|
}, 1000)
|
|
}
|
|
})
|
|
}
|
|
|
|
onShow(() => {
|
|
if (userStore.mobile) {
|
|
onLoginSuccess()
|
|
}
|
|
})
|
|
</script>
|
|
<template>
|
|
<view class="login">
|
|
<image class="logo-img" src="@/static/logo.png" mode="widthFix" />
|
|
|
|
<view class="btn_box">
|
|
<u-button
|
|
@getphonenumber="onGetPhoneNumber"
|
|
text="手机号快捷签到"
|
|
icon-color="#fff"
|
|
open-type="getPhoneNumber"
|
|
color="linear-gradient(270deg, rgba(232, 123, 7, 1) 0%, rgba(247, 205, 77, 1) 100%)"
|
|
shape="circle"
|
|
/>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<style scoped lang="scss">
|
|
.login {
|
|
width: 100%;
|
|
height: 100vh;
|
|
overflow: hidden;
|
|
position: relative;
|
|
text-align: center;
|
|
box-sizing: border-box;
|
|
padding: 500rpx 30rpx 0;
|
|
background-color: #fff;
|
|
|
|
.logo-img {
|
|
width: 220rpx;
|
|
margin-bottom: 60rpx;
|
|
}
|
|
}
|
|
</style>
|
|
|