import React, { useState, useEffect } from "react"; import { View, Text, Image, ScrollView } from "@tarojs/components"; import Taro, { useDidShow } from "@tarojs/taro"; import "./index.scss"; import GuideBar from "@/components/GuideBar"; import { UserInfoCard, UserInfo } from "@/components/UserInfo/index"; import { UserService } from "@/services/userService"; import ListContainer from "@/container/listContainer"; import { TennisMatch } from "@/../types/list/types"; import { withAuth } from "@/components"; const MyselfPage: React.FC = () => { // 获取页面参数 const instance = Taro.getCurrentInstance(); const user_id = instance.router?.params?.userid || ""; // 判断是否为当前用户 const is_current_user = !user_id; // 用户信息状态 const [user_info, set_user_info] = useState({ id: "", nickname: "加载中...", avatar: require("@/static/userInfo/default_avatar.svg"), join_date: "加载中...", stats: { following: 0, friends: 0, hosted: 0, participated: 0, }, bio: "加载中...", city: "加载中...", occupation: "加载中...", ntrp_level: "NTRP 3.0", personal_profile: "加载中...", gender: '', country: '', province: '', }); // 球局记录状态 const [game_records, set_game_records] = useState([]); // 往期球局 const [ended_game_records, setEndedGameRecords] = useState([]); const [loading, set_loading] = useState(true); // 关注状态 const [is_following, setIsFollowing] = useState(false); // 当前激活的标签页 const [active_tab, setActiveTab] = useState<"hosted" | "participated">( "hosted", ); // 加载用户数据 const load_user_data = async () => { try { set_loading(true); // 获取用户信息(包含统计数据) const user_data = await UserService.get_user_info(); set_user_info(user_data); // let games_data; // if (active_tab === "hosted") { // games_data = await UserService.get_hosted_games(user_id); // } else { // games_data = await UserService.get_participated_games(user_id); // } // set_game_records(games_data); } catch (error) { console.error("加载用户数据失败:", error); Taro.showToast({ title: "加载失败,请重试", icon: "error", duration: 2000, }); } finally { set_loading(false); } }; useEffect(() => { if (user_info.id) { load_game_data(); // 在 user_info 更新后调用 } }, [user_info]); // 页面加载时获取数据 // useEffect(() => { // load_user_data(); // }, [user_id]); useDidShow(() => { load_user_data(); // 确保从编辑页面返回时刷新数据 }); // 切换标签页时重新加载球局数据 useEffect(() => { if (!loading) { load_game_data(); } }, [active_tab]); // 分类球局数据 const classifyGameRecords = ( game_records: TennisMatch[] ): { notEndGames: TennisMatch[]; finishedGames: TennisMatch[] } => { const now = new Date().getTime(); return game_records.reduce( (result, cur) => { let { end_time } = cur; end_time = end_time.replace(/\s/, "T"); new Date(end_time).getTime() > now ? result.notEndGames.push(cur) : result.finishedGames.push(cur); return result; }, { notEndGames: [] as TennisMatch[], finishedGames: [] as TennisMatch[], } ); }; // 加载球局数据 const load_game_data = async () => { try { let games_data; if (active_tab === "hosted") { games_data = await UserService.get_hosted_games(user_info.id); } else { games_data = await UserService.get_participated_games(user_info.id); } const sorted_games = games_data.sort((a, b) => { return new Date(a.original_start_time.replace(/\s/, 'T')).getTime() - new Date(b.original_start_time.replace(/\s/, 'T')).getTime(); }); const { notEndGames, finishedGames } = classifyGameRecords(sorted_games); set_game_records(notEndGames); setEndedGameRecords(finishedGames); // set_game_records(games_data); } catch (error) { console.error("加载球局数据失败:", error); } }; // 处理关注/取消关注 const handle_follow = async () => { try { const new_following_state = await UserService.toggle_follow( user_id, is_following, ); setIsFollowing(new_following_state); Taro.showToast({ title: new_following_state ? "关注成功" : "已取消关注", icon: "success", duration: 1500, }); } catch (error) { console.error("关注操作失败:", error); Taro.showToast({ title: "操作失败,请重试", icon: "error", duration: 2000, }); } }; // 处理球局订单 const handle_game_orders = () => { Taro.navigateTo({ url: "/order_pages/orderList/index", }); }; // 处理钱包 const handle_wallet = () => { Taro.navigateTo({ url: "/user_pages/wallet/index", }); }; return ( {/* 主要内容 */} {/* 用户信息区域 */} {loading ? ( 加载中... ) : ( )} {/* 球局订单和收藏功能 */} 球局订单 钱包 {/* 球局类型标签页 */} setActiveTab("hosted")} > 我主办的 setActiveTab("participated")} > 我参与的 {/* 球局列表 */} { }} /> {/* 往期球局 */} 往期球局 {/* 5月29日 / 星期六 */} {/* 球局列表 */} {/* */} { }} /> {/* */} {/* 球局卡片 */} {/* {game_records.map((game) => ( ))} */} ); }; export default withAuth(MyselfPage);