From 9c10f681a6086d30f5b1b3d2c4758e08122a7a8b Mon Sep 17 00:00:00 2001 From: Ultrame <1019265060@qq.com> Date: Sun, 16 Nov 2025 19:40:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=B9=E7=AA=97=E8=A2=ABGu?= =?UTF-8?q?ideBar=E9=81=AE=E6=8C=A1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/UserInfo/index.tsx | 16 +++++- src/context/index.ts | 13 +++++ src/main_pages/index.tsx | 95 ++++++++++++++++++------------- 3 files changed, 82 insertions(+), 42 deletions(-) create mode 100644 src/context/index.ts diff --git a/src/components/UserInfo/index.tsx b/src/components/UserInfo/index.tsx index ff8b0af..fb9885f 100644 --- a/src/components/UserInfo/index.tsx +++ b/src/components/UserInfo/index.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from "react"; +import React, { useState, useEffect, useRef, useContext } from "react"; import Taro, { useDidShow } from "@tarojs/taro"; import { View, Text, Image, Button } from "@tarojs/components"; import "./index.scss"; @@ -10,6 +10,7 @@ import { useUserActions } from "@/store/userStore"; import { UserInfoType } from "@/services/userService"; import { useCities, useProfessions } from "@/store/pickerOptionsStore"; import { formatNtrpDisplay } from "@/utils/helper"; +import FamilyContext from '@/context'; // 用户信息接口 // export interface UserInfo { @@ -71,6 +72,7 @@ const UserInfoCardComponent: React.FC = ({ set_user_info, onTab, }) => { + const { handleGrandchildTrigger } = useContext(FamilyContext); const { updateUserInfo } = useUserActions(); // 使用 useRef 记录上一次的 user_info,只在真正变化时打印 @@ -102,6 +104,14 @@ const UserInfoCardComponent: React.FC = ({ set_form_data({ ...user_info }); }); + useEffect(() => { + const visibles = [gender_picker_visible, location_picker_visible, ntrp_picker_visible, occupation_picker_visible] + const showGuideBar = visibles.every(item => !item) + if (showGuideBar) { + handleGrandchildTrigger(false) + } + }, [gender_picker_visible, location_picker_visible, ntrp_picker_visible, occupation_picker_visible]) + // 职业数据 const professions = useProfessions(); @@ -132,6 +142,7 @@ const UserInfoCardComponent: React.FC = ({ // }; // 处理编辑弹窗 const handle_open_edit_modal = (field: string) => { + handleGrandchildTrigger(true) if (field === "gender") { setGenderPickerVisible(true); return; @@ -150,9 +161,11 @@ const UserInfoCardComponent: React.FC = ({ } if (field === "nickname") { // 手动输入 + handleGrandchildTrigger(true) setEditingField(field); setEditModalVisible(true); } else { + handleGrandchildTrigger(true) setEditingField(field); setEditModalVisible(true); } @@ -256,6 +269,7 @@ const UserInfoCardComponent: React.FC = ({ handle_field_edit("occupation", `${country} ${province} ${city}`); }; const handle_edit_modal_cancel = () => { + handleGrandchildTrigger(false); setEditModalVisible(false); setEditingField(""); }; diff --git a/src/context/index.ts b/src/context/index.ts new file mode 100644 index 0000000..4e8eec6 --- /dev/null +++ b/src/context/index.ts @@ -0,0 +1,13 @@ +import React from 'react'; + +// 定义Context类型 +interface FamilyContextType { + handleGrandchildTrigger: (data: any) => void; +} + +// 创建Context对象 +const FamilyContext = React.createContext < FamilyContextType > ({ + handleGrandchildTrigger: () => { } +}); + +export default FamilyContext; diff --git a/src/main_pages/index.tsx b/src/main_pages/index.tsx index 9337f12..02f4ed6 100644 --- a/src/main_pages/index.tsx +++ b/src/main_pages/index.tsx @@ -10,6 +10,7 @@ import ListPageContent from "./components/ListPageContent"; import MessagePageContent from "./components/MessagePageContent"; import MyselfPageContent from "./components/MyselfPageContent"; import "./index.scss"; +import FamilyContext from '@/context'; type TabType = "list" | "message" | "personal"; @@ -22,6 +23,7 @@ const MainPage: React.FC = () => { const [isFilterPopupVisible, setIsFilterPopupVisible] = useState(false); const [isShowInputCustomerNavBar, setIsShowInputCustomerNavBar] = useState(false); const [listPageScrollToTopTrigger, setListPageScrollToTopTrigger] = useState(0); + const [showGuideBar, setShowGuideBar] = useState(true); const { fetchUserInfo } = useUserActions(); @@ -135,8 +137,8 @@ const MainPage: React.FC = () => { } else if (currentTab === "message") { // 消息页:使用 GeneralNavbar(与原始消息页一致,显示用户头像和标题) return ( - { } else if (currentTab === "personal") { // 我的页:使用 GeneralNavbar 显示标题 return ( - { return null; }; + const handleGrandchildTrigger = (value) => { + setShowGuideBar(!value) + } + return ( - - {/* 自定义导航栏 */} - {renderCustomNavbar()} + + + {/* 自定义导航栏 */} + {renderCustomNavbar()} + + {/* 列表页内容 */} + + + + + {/* 消息页内容 */} + + + + + {/* 我的页内容 */} + + + + + {/* 底部导航栏 */} + { + showGuideBar ? + : + null + } - {/* 列表页内容 */} - - - - {/* 消息页内容 */} - - - - - {/* 我的页内容 */} - - - - - {/* 底部导航栏 */} - - + ); };