修改用户授权调用位置和逻辑

This commit is contained in:
张成
2025-11-18 08:00:38 +08:00
parent 4568e758a7
commit 988f57aa5e
12 changed files with 343 additions and 81 deletions

View File

@@ -1,8 +1,9 @@
import React, { useState, useEffect, useCallback } from "react";
import { View } from "@tarojs/components";
import Taro from "@tarojs/taro";
import { check_login_status, silentLogin } from "@/services/loginService";
import { wechat_auth_login, save_login_state } from "@/services/loginService";
import { useUserActions } from "@/store/userStore";
import tokenManager from "@/utils/tokenManager";
import GuideBar from "@/components/GuideBar";
import { GeneralNavbar } from "@/components";
import HomeNavbar from "@/components/HomeNavbar";
@@ -24,41 +25,66 @@ const MainPage: React.FC = () => {
const [isShowInputCustomerNavBar, setIsShowInputCustomerNavBar] = useState(false);
const [listPageScrollToTopTrigger, setListPageScrollToTopTrigger] = useState(0);
const [showGuideBar, setShowGuideBar] = useState(true);
const [showAuthError, setShowAuthError] = useState(false);
const [authErrorMessage, setAuthErrorMessage] = useState('');
const { fetchUserInfo } = useUserActions();
// 初始化:尝试静默登录并获取用户信息
// 初始化:自动微信授权并获取用户信息
useEffect(() => {
const init = async () => {
// 先检查是否已登录
const login_status = check_login_status();
if (login_status) {
// 已登录,获取用户信息
const hasValidToken = tokenManager.hasValidToken();
if (!hasValidToken) {
try {
console.log('开始微信授权...');
const loginRes = await wechat_auth_login();
if (loginRes.success && loginRes.token) {
save_login_state(loginRes.token, loginRes.user_info);
console.log('微信授权成功');
} else {
// 显示错误提示
setAuthErrorMessage(loginRes.message || '微信授权失败');
setShowAuthError(true);
return;
}
} catch (error) {
console.error('微信授权异常:', error);
setAuthErrorMessage('微信授权失败,请重试');
setShowAuthError(true);
return;
}
}
// 如果有有效token获取用户详细信息
if (tokenManager.hasValidToken()) {
try {
await fetchUserInfo();
} catch (error) {
console.error('获取用户信息失败:', error);
}
} else {
// 未登录,尝试静默登录
try {
const loginResult = await silentLogin();
if (loginResult.success) {
// 静默登录成功,获取用户信息
fetchUserInfo().catch((error) => {
console.error('获取用户信息失败:', error);
});
}
} catch (error) {
console.error('静默登录失败:', error);
// 静默登录失败不影响使用
}
}
};
init();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []); // fetchUserInfo 是稳定的函数引用,不需要加入依赖项
// 显示授权错误提示
useEffect(() => {
if (showAuthError) {
Taro.showModal({
title: '授权失败',
content: `${authErrorMessage}\n\n请重启小程序后重试`,
showCancel: false,
confirmText: '我知道了',
success: () => {
setShowAuthError(false);
}
});
}
}, [showAuthError, authErrorMessage]);
// 处理标签切换
const handleTabChange = useCallback((code: string) => {
if (code === currentTab) {