优化获取昵称修改状态的时机
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user