import {useEffect, useState} from "react"; import Taro from '@tarojs/taro' import {Input, Radio, Button} from '@nutui/nutui-react-taro' import {TenantId} from "@/config/app"; import './login.scss'; import {saveStorageByLoginUser} from "@/utils/server"; import {handleInviteRelation, getStoredInviteParams} from "@/utils/invite"; // 微信获取手机号回调参数类型 interface GetPhoneNumberDetail { code?: string; encryptedData?: string; iv?: string; errMsg: string; } interface GetPhoneNumberEvent { detail: GetPhoneNumberDetail; } interface LoginProps { done?: (user: any) => void; [key: string]: any; } // 登录接口返回数据类型 interface LoginResponse { data: { data: { access_token: string; user: any; }; }; } const Login = (props: LoginProps) => { const [isAgree, setIsAgree] = useState(false) const [env, setEnv] = useState() /* 获取用户手机号 */ const handleGetPhoneNumber = ({detail}: GetPhoneNumberEvent) => { const {code, encryptedData, iv} = detail // 获取存储的邀请参数 const inviteParams = getStoredInviteParams() const refereeId = inviteParams?.inviter ? parseInt(inviteParams.inviter) : 0 Taro.login({ success: function () { if (code) { Taro.request({ url: 'https://server.websoft.top/api/wx-login/loginByMpWxPhone', method: 'POST', data: { code, encryptedData, iv, notVerifyPhone: true, refereeId: refereeId, // 使用解析出的推荐人ID sceneType: 'save_referee', tenantId: TenantId }, header: { 'content-type': 'application/json', TenantId }, success: async function (res: LoginResponse) { saveStorageByLoginUser(res.data.data.access_token, res.data.data.user) // 处理邀请关系 if (res.data.data.user?.userId) { try { const inviteSuccess = await handleInviteRelation(res.data.data.user.userId) if (inviteSuccess) { Taro.showToast({ title: '邀请关系建立成功', icon: 'success', duration: 2000 }) } } catch (error) { console.error('处理邀请关系失败:', error) } } props.done?.(res.data.data.user); } }) } else { console.log('登录失败!') } } }) } const reload = () => { Taro.hideTabBar() setEnv(Taro.getEnv()) } useEffect(() => { reload() }, []) return ( <>
登录
{ env === 'WEAPP' && ( <>
) } { env === 'WEB' && ( <>
Taro.navigateTo({url: '/passport/forget'})}>忘记密码 Taro.navigateTo({url: '/passport/setting'})}>服务配置
没有账号? Taro.navigateTo({url: '/passport/register'})} className={'text-blue-600'}>立即注册
setIsAgree(!isAgree)}> setIsAgree(!isAgree)}>登录表示您已阅读并同意 Taro.navigateTo({url: '/passport/agreement'})} className={'text-blue-600'}>《服务协议及隐私政策》
) }
) } export default Login