Files
template-10519/src/passport/wxLogin.tsx
2025-07-31 10:07:13 +08:00

109 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {useEffect, useState} from "react";
import Taro from '@tarojs/taro'
import {Radio, Button} from '@nutui/nutui-react-taro'
import {createWxLoginHandler} from '@/utils/wxLogin'
import {TenantId} from "@/utils/config";
const Login = () => {
const [isAgree, setIsAgree] = useState(false)
const reload = () => {
Taro.hideTabBar()
};
const showAuthModal = () => {
Taro.showModal({
title: '授权提示',
content: '需要获取您的用户信息',
confirmText: '去授权',
cancelText: '取消',
success: (res) => {
if (res.confirm) {
// 用户点击确认,打开授权设置页面
openSetting();
}
}
});
};
const openSetting = () => {
// Taro.openSetting调起客户端小程序设置界面返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。
Taro.openSetting({
success: (res) => {
if (res.authSetting['scope.userInfo']) {
// 用户授权成功,可以获取用户信息
reload();
} else {
// 用户拒绝授权,提示授权失败
Taro.showToast({
title: '授权失败',
icon: 'none'
});
}
}
});
};
// 创建微信登录处理函数
const handleGetPhoneNumber = createWxLoginHandler({
onSuccess: (user) => {
console.log('登录成功:', user);
// 可以在这里添加额外的成功处理逻辑
},
onError: (error) => {
console.error('登录失败:', error);
},
showToast: true,
navigateBack: true,
tenantId: TenantId
});
useEffect(() => {
reload()
// Taro.getSetting获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。
Taro.getSetting({
success: (res) => {
if (res.authSetting['scope.userInfo']) {
// 用户已经授权过,可以直接获取用户信息
console.log('用户已经授权过,可以直接获取用户信息')
reload();
} else {
// 用户未授权,需要弹出授权窗口
console.log('用户未授权,需要弹出授权窗口')
showAuthModal();
}
}
});
}, []);
return (
<>
<div className={'flex flex-col justify-center px-5 pt-5'}>
<div className={'text-3xl text-center py-5 font-normal my-10'}></div>
<>
<div className={'flex justify-center my-5 rounded-lg'} style={{
backgroundColor: isAgree ? '#9a23d4' : '#c0c4cc',
}}>
<Button
type="info" size={'large'}
className={'w-full rounded-lg p-2'}
disabled={!isAgree}
open-type="getPhoneNumber"
onGetPhoneNumber={handleGetPhoneNumber}></Button>
</div>
</>
<div className={'my-2 flex text-sm items-center px-1'}>
<Radio style={{color: '#333333'}} checked={isAgree} onClick={() => setIsAgree(!isAgree)}></Radio>
<span className={'text-gray-400'} onClick={() => setIsAgree(!isAgree)}></span><a
onClick={() => Taro.navigateTo({url: '/passport/agreement'})}
className={'text-purple-700'}></a>
</div>
</div>
</>
)
}
export default Login