feat(qr-login): 实现扫码登录功能模块

This commit is contained in:
2025-09-21 22:10:22 +08:00
parent 611f0e3216
commit 16559c76ed
15 changed files with 1329 additions and 54 deletions

View File

@@ -1,9 +1,9 @@
import { useState, useCallback, useRef, useEffect } from 'react';
import Taro from '@tarojs/taro';
import {
confirmWechatQRLogin,
import {
confirmWechatQRLogin,
parseQRContent,
type ConfirmLoginResult
type ConfirmLoginResult
} from '@/api/qr-login';
/**
@@ -25,7 +25,7 @@ export function useQRLogin() {
const [error, setError] = useState<string>('');
const [result, setResult] = useState<ConfirmLoginResult | null>(null);
const [isLoading, setIsLoading] = useState(false);
// 用于取消操作的引用
const cancelRef = useRef<boolean>(false);
@@ -47,7 +47,7 @@ export function useQRLogin() {
try {
reset();
setState(ScanLoginState.SCANNING);
// 检查用户是否已登录
const userId = Taro.getStorageSync('UserId');
if (!userId) {
@@ -79,6 +79,7 @@ export function useQRLogin() {
// 解析二维码内容
const token = parseQRContent(scanResult);
console.log('解析二维码内容2:',token)
if (!token) {
throw new Error('无效的登录二维码');
}
@@ -88,7 +89,7 @@ export function useQRLogin() {
setIsLoading(true);
const confirmResult = await confirmWechatQRLogin(token, parseInt(userId));
console.log(confirmResult,'confirmResult>>>>')
if (cancelRef.current) {
return;
}
@@ -96,7 +97,7 @@ export function useQRLogin() {
if (confirmResult.success) {
setState(ScanLoginState.SUCCESS);
setResult(confirmResult);
// 显示成功提示
Taro.showToast({
title: '登录确认成功',
@@ -112,7 +113,7 @@ export function useQRLogin() {
setState(ScanLoginState.ERROR);
const errorMessage = err.message || '扫码登录失败';
setError(errorMessage);
// 显示错误提示
Taro.showToast({
title: errorMessage,
@@ -156,11 +157,11 @@ export function useQRLogin() {
// 确认登录
const confirmResult = await confirmWechatQRLogin(token, parseInt(userId));
if (confirmResult.success) {
setState(ScanLoginState.SUCCESS);
setResult(confirmResult);
// 显示成功提示
Taro.showToast({
title: '登录确认成功',
@@ -175,7 +176,7 @@ export function useQRLogin() {
setState(ScanLoginState.ERROR);
const errorMessage = err.message || '登录确认失败';
setError(errorMessage);
// 显示错误提示
Taro.showToast({
title: errorMessage,
@@ -209,14 +210,14 @@ export function useQRLogin() {
error,
result,
isLoading,
// 方法
startScan,
cancel,
reset,
handleScanResult,
canScan,
// 便捷状态判断
isIdle: state === ScanLoginState.IDLE,
isScanning: state === ScanLoginState.SCANNING,