import React, { useState, useEffect } from 'react'; import { View, Text } from '@tarojs/components'; import { Button, Loading, Card } from '@nutui/nutui-react-taro'; import { Success, Failure, Tips, User } from '@nutui/icons-react-taro'; import Taro, { useRouter } from '@tarojs/taro'; import { confirmQRLogin } from '@/api/qr-login'; import { useUser } from '@/hooks/useUser'; /** * 扫码登录确认页面 * 用于处理从二维码跳转过来的登录确认 */ const QRConfirmPage: React.FC = () => { const router = useRouter(); const { user, getDisplayName } = useUser(); const [loading, setLoading] = useState(false); const [confirmed, setConfirmed] = useState(false); const [error, setError] = useState(''); const [token, setToken] = useState(''); useEffect(() => { // 从URL参数中获取token const { qrCodeKey, token: urlToken } = router.params; const loginToken = qrCodeKey || urlToken; if (loginToken) { setToken(loginToken); } else { setError('无效的登录链接'); } }, [router.params]); // 确认登录 const handleConfirmLogin = async () => { if (!token) { setError('缺少登录token'); return; } if (!user?.userId) { setError('请先登录小程序'); return; } try { setLoading(true); setError(''); const result = await confirmQRLogin({ token, userId: user.userId, platform: 'wechat', wechatInfo: { nickname: user.nickname, avatar: user.avatar } }); if (result.success) { setConfirmed(true); Taro.showToast({ title: '登录确认成功', icon: 'success', duration: 2000 }); // 3秒后自动返回 setTimeout(() => { Taro.navigateBack(); }, 3000); } else { setError(result.message || '登录确认失败'); } } catch (err: any) { setError(err.message || '登录确认失败'); } finally { setLoading(false); } }; // 取消登录 const handleCancel = () => { Taro.navigateBack(); }; // 重试 const handleRetry = () => { setError(''); setConfirmed(false); handleConfirmLogin(); }; return ( {/* 主要内容卡片 */} {/* 图标 */} {loading ? ( ) : confirmed ? ( ) : error ? ( ) : ( )} {/* 标题 */} {loading ? '正在确认登录...' : confirmed ? '登录确认成功' : error ? '登录确认失败' : '确认登录'} {/* 描述 */} {loading ? '请稍候,正在为您确认登录' : confirmed ? '您已成功确认登录,网页端将自动登录' : error ? error : `确认使用 ${getDisplayName()} 登录网页端?`} {/* 用户信息 */} {!loading && !confirmed && !error && user && ( {user.nickname || user.username || '用户'} ID: {user.userId} )} {/* 操作按钮 */} {loading ? ( ) : confirmed ? ( ) : error ? ( ) : ( )} {/* 安全提示 */} 安全提示 请确认这是您本人的登录操作。如果不是,请点击取消并检查账户安全。 ); }; export default QRConfirmPage;