修改用户授权调用位置和逻辑
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user