优化获取昵称修改状态的时机

This commit is contained in:
2025-12-03 15:44:41 +08:00
parent 7c1a1fafc1
commit b77b4b0536
9 changed files with 160 additions and 128 deletions

View File

@@ -12,7 +12,7 @@ import ListPageContent from "./components/ListPageContent";
import MessagePageContent from "./components/MessagePageContent";
import MyselfPageContent from "./components/MyselfPageContent";
import "./index.scss";
import FamilyContext from '@/context';
import FamilyContext from "@/context";
type TabType = "list" | "message" | "personal";
@@ -22,14 +22,17 @@ const MainPage: React.FC = () => {
const [isDistanceFilterVisible, setIsDistanceFilterVisible] = useState(false);
const [isCityPickerVisible, setIsCityPickerVisible] = useState(false);
const [isFilterPopupVisible, setIsFilterPopupVisible] = useState(false);
const [isShowInputCustomerNavBar, setIsShowInputCustomerNavBar] = useState(false);
const [listPageScrollToTopTrigger, setListPageScrollToTopTrigger] = useState(0);
const [isShowInputCustomerNavBar, setIsShowInputCustomerNavBar] =
useState(false);
const [listPageScrollToTopTrigger, setListPageScrollToTopTrigger] =
useState(0);
const [showAuthError, setShowAuthError] = useState(false);
const [authErrorMessage, setAuthErrorMessage] = useState('');
const [authErrorMessage, setAuthErrorMessage] = useState("");
const { fetchUserInfo } = useUserActions();
const { fetchUserInfo, checkNicknameChangeStatus } = useUserActions();
// 从 store 获取 GuideBar 相关状态和方法
const { showGuideBar, guideBarZIndex, setShowGuideBar, setGuideBarZIndex } = useGlobalState();
const { showGuideBar, guideBarZIndex, setShowGuideBar, setGuideBarZIndex } =
useGlobalState();
// 初始化:自动微信授权并获取用户信息
useEffect(() => {
@@ -38,21 +41,21 @@ const MainPage: React.FC = () => {
if (!hasValidToken) {
try {
console.log('开始微信授权...');
console.log("开始微信授权...");
const loginRes = await wechat_auth_login();
if (loginRes.success && loginRes.token) {
save_login_state(loginRes.token, loginRes.user_info);
console.log('微信授权成功');
console.log("微信授权成功");
} else {
// 显示错误提示
setAuthErrorMessage(loginRes.message || '微信授权失败');
setAuthErrorMessage(loginRes.message || "微信授权失败");
setShowAuthError(true);
return;
}
} catch (error) {
console.error('微信授权异常:', error);
setAuthErrorMessage('微信授权失败,请重试');
console.error("微信授权异常:", error);
setAuthErrorMessage("微信授权失败,请重试");
setShowAuthError(true);
return;
}
@@ -62,8 +65,9 @@ const MainPage: React.FC = () => {
if (tokenManager.hasValidToken()) {
try {
await fetchUserInfo();
await checkNicknameChangeStatus();
} catch (error) {
console.error('获取用户信息失败:', error);
console.error("获取用户信息失败:", error);
}
}
};
@@ -75,29 +79,32 @@ const MainPage: React.FC = () => {
useEffect(() => {
if (showAuthError) {
Taro.showModal({
title: '授权失败',
title: "授权失败",
content: `${authErrorMessage}\n\n请重启小程序后重试`,
showCancel: false,
confirmText: '我知道了',
confirmText: "我知道了",
success: () => {
setShowAuthError(false);
}
},
});
}
}, [showAuthError, authErrorMessage]);
// 处理标签切换
const handleTabChange = useCallback((code: string) => {
if (code === currentTab) {
return;
}
setCurrentTab(code as TabType);
// 切换标签时滚动到顶部
(Taro as any).pageScrollTo({
scrollTop: 0,
duration: 300,
});
}, [currentTab]);
const handleTabChange = useCallback(
(code: string) => {
if (code === currentTab) {
return;
}
setCurrentTab(code as TabType);
// 切换标签时滚动到顶部
(Taro as any).pageScrollTo({
scrollTop: 0,
duration: 300,
});
},
[currentTab]
);
// 处理发布菜单显示/隐藏
const handlePublishMenuVisibleChange = useCallback((visible: boolean) => {
@@ -120,28 +127,31 @@ const MainPage: React.FC = () => {
}, []);
// 处理列表页导航状态变化
const handleListNavStateChange = useCallback((state: {
isShowInputCustomerNavBar?: boolean;
isDistanceFilterVisible?: boolean;
isCityPickerVisible?: boolean;
}) => {
if (state.isShowInputCustomerNavBar !== undefined) {
setIsShowInputCustomerNavBar(state.isShowInputCustomerNavBar);
}
if (state.isDistanceFilterVisible !== undefined) {
setIsDistanceFilterVisible(state.isDistanceFilterVisible);
}
if (state.isCityPickerVisible !== undefined) {
setIsCityPickerVisible(state.isCityPickerVisible);
}
}, []);
const handleListNavStateChange = useCallback(
(state: {
isShowInputCustomerNavBar?: boolean;
isDistanceFilterVisible?: boolean;
isCityPickerVisible?: boolean;
}) => {
if (state.isShowInputCustomerNavBar !== undefined) {
setIsShowInputCustomerNavBar(state.isShowInputCustomerNavBar);
}
if (state.isDistanceFilterVisible !== undefined) {
setIsDistanceFilterVisible(state.isDistanceFilterVisible);
}
if (state.isCityPickerVisible !== undefined) {
setIsCityPickerVisible(state.isCityPickerVisible);
}
},
[]
);
// 滚动到顶部
const scrollToTop = useCallback(() => {
// 如果当前是列表页,触发列表页内部滚动
if (currentTab === "list") {
// 通过状态变化触发 ListPageContent 内部滚动
setListPageScrollToTopTrigger(prev => prev + 1);
setListPageScrollToTopTrigger((prev) => prev + 1);
} else {
// 其他页面使用 pageScrollTo
(Taro as any).pageScrollTo({
@@ -154,13 +164,22 @@ const MainPage: React.FC = () => {
// 动态控制 GuideBar 的 z-index
useEffect(() => {
if (isPublishMenuVisible) {
setGuideBarZIndex('high');
} else if (isDistanceFilterVisible || isCityPickerVisible || isFilterPopupVisible) {
setGuideBarZIndex('low');
setGuideBarZIndex("high");
} else if (
isDistanceFilterVisible ||
isCityPickerVisible ||
isFilterPopupVisible
) {
setGuideBarZIndex("low");
} else {
setGuideBarZIndex('high');
setGuideBarZIndex("high");
}
}, [isPublishMenuVisible, isDistanceFilterVisible, isCityPickerVisible, isFilterPopupVisible]);
}, [
isPublishMenuVisible,
isDistanceFilterVisible,
isCityPickerVisible,
isFilterPopupVisible,
]);
// 渲染自定义导航栏(参考原始页面的实现)
const renderCustomNavbar = () => {
@@ -190,21 +209,15 @@ const MainPage: React.FC = () => {
);
} else if (currentTab === "personal") {
// 我的页:使用 GeneralNavbar 显示标题
return (
<GeneralNavbar
title=""
titlePosition="left"
showBack={false}
/>
);
return <GeneralNavbar title="" titlePosition="left" showBack={false} />;
}
return null;
};
const handleGrandchildTrigger = (value) => {
console.log('[MainPage] handleGrandchildTrigger called with:', value);
console.log("[MainPage] handleGrandchildTrigger called with:", value);
setShowGuideBar(!value);
}
};
return (
<FamilyContext.Provider value={{ handleGrandchildTrigger }}>
@@ -241,21 +254,21 @@ const MainPage: React.FC = () => {
</View>
{/* 底部导航栏 */}
{
showGuideBar ?
<GuideBar
currentPage={currentTab}
guideBarClassName={guideBarZIndex === 'low' ? 'guide-bar-low-z-index' : 'guide-bar-high-z-index'}
onTabChange={handleTabChange}
onPublishMenuVisibleChange={handlePublishMenuVisibleChange}
/> :
null
}
{showGuideBar ? (
<GuideBar
currentPage={currentTab}
guideBarClassName={
guideBarZIndex === "low"
? "guide-bar-low-z-index"
: "guide-bar-high-z-index"
}
onTabChange={handleTabChange}
onPublishMenuVisibleChange={handlePublishMenuVisibleChange}
/>
) : null}
</View>
</FamilyContext.Provider>
);
};
export default MainPage;