import React from 'react'; import Taro from '@tarojs/taro'; import { View, Text, Image, Button } from '@tarojs/components'; import './index.scss'; // 用户信息接口 export interface UserInfo { id: string; nickname: string; avatar: string; join_date: string; stats: { following: number; friends: number; hosted: number; participated: number; }; personal_profile: string; location: string; occupation: string; ntrp_level: string; phone?: string; gender?: string; latitude?: number, longitude?: number, } // 用户信息卡片组件属性 interface UserInfoCardProps { user_info: UserInfo; is_current_user: boolean; is_following?: boolean; on_follow?: () => void; on_message?: () => void; on_share?: () => void; } // 处理编辑用户信息 const on_edit = () => { Taro.navigateTo({ url: '/pages/userInfo/edit/index' }); }; // 用户信息卡片组件 export const UserInfoCard: React.FC = ({ user_info, is_current_user, is_following = false, on_follow, on_message, on_share }) => { return ( {/* 头像和基本信息 */} {user_info.nickname} {user_info.join_date} {/* 统计数据 */} {user_info.stats.following} 关注 {user_info.stats.friends} 球友 {user_info.stats.hosted} 主办 {user_info.stats.participated} 参加 {/* 只有非当前用户才显示关注按钮 */} {!is_current_user && on_follow && ( )} {/* 只有非当前用户才显示消息按钮 */} {!is_current_user && on_message && ( )} {/* 只有当前用户才显示分享按钮 */} {is_current_user && on_share && ( )} {/* 标签和简介 */} {user_info.gender === "0" && ( )} {user_info.gender === "1" && ( )} {user_info.ntrp_level || '未设置'} {user_info.occupation || '未设置'} {user_info.location || '未设置'} {user_info.personal_profile} ); }; // 球局记录接口 export interface GameRecord { id: string; title: string; date: string; time: string; duration: string; location: string; type: string; distance: string; participants: { avatar: string; nickname: string; }[]; max_participants: number; current_participants: number; level_range: string; game_type: string; images: string[]; } // 球局卡片组件属性 interface GameCardProps { game: GameRecord; on_click: (game_id: string) => void; on_participant_click?: (participant_id: string) => void; } // 球局卡片组件 export const GameCard: React.FC = ({ game, on_click, on_participant_click }) => { return ( on_click(game.id)} > {/* 球局标题和类型 */} {game.title} {/* 球局时间 */} {game.date} {game.time} {game.duration} {/* 球局地点和类型 */} {game.location} · {game.type} · {game.distance} {/* 球局图片 */} {game.images.map((image, index) => ( ))} {/* 球局信息标签 */} {game.participants.map((participant, index) => ( { e.stopPropagation(); on_participant_click?.(participant.nickname); }} /> ))} 报名人数 {game.current_participants}/{game.max_participants} {game.level_range} {game.game_type} ); }; // 球局标签页组件属性 interface GameTabsProps { active_tab: 'hosted' | 'participated'; on_tab_change: (tab: 'hosted' | 'participated') => void; is_current_user: boolean; } // 球局标签页组件 export const GameTabs: React.FC = ({ active_tab, on_tab_change, is_current_user }) => { const hosted_text = is_current_user ? '我主办的' : '他主办的'; const participated_text = is_current_user ? '我参与的' : '他参与的'; return ( on_tab_change('hosted')}> {hosted_text} on_tab_change('participated')}> {participated_text} ); };