详情区分运动
This commit is contained in:
@@ -1,15 +1,16 @@
|
||||
import { BasketballScoreTable } from "@/components/match-detail/basketball/basketball-score-table";
|
||||
import { FootballScoreTable } from "@/components/match-detail/football/football-score-table";
|
||||
import { LeagueInfo } from "@/components/match-detail/league-info";
|
||||
import { MatchInfoCard } from "@/components/match-detail/match-info-card";
|
||||
import { MatchTabs } from "@/components/match-detail/match-tabs";
|
||||
import { ScoreHeader } from "@/components/match-detail/score-header";
|
||||
import { ScoreTable } from "@/components/match-detail/score-table";
|
||||
import { ThemedText } from "@/components/themed-text";
|
||||
import { ThemedView } from "@/components/themed-view";
|
||||
import { Colors } from "@/constants/theme";
|
||||
import { useTheme } from "@/context/ThemeContext";
|
||||
import { fetchMatchDetail } from "@/lib/api";
|
||||
import { MatchDetailData } from "@/types/api";
|
||||
import { Stack, useLocalSearchParams, useRouter } from "expo-router";
|
||||
import { useLocalSearchParams, useRouter } from "expo-router";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import {
|
||||
@@ -40,6 +41,30 @@ export default function MatchDetailScreen() {
|
||||
}
|
||||
}, [id]);
|
||||
|
||||
// 当数据加载完成且 sportId 变化时,检查并重置 activeTab
|
||||
useEffect(() => {
|
||||
if (data?.match?.sportId) {
|
||||
const sportId = data.match.sportId;
|
||||
let validTabs: string[] = [];
|
||||
|
||||
if (sportId === 1) {
|
||||
// 足球
|
||||
validTabs = ["info", "stats", "odds", "h2h", "chat"];
|
||||
} else if (sportId === 2) {
|
||||
// 篮球
|
||||
validTabs = ["info", "h2h", "chat"];
|
||||
} else {
|
||||
// 默认
|
||||
validTabs = ["info", "h2h", "chat"];
|
||||
}
|
||||
|
||||
// 如果当前 activeTab 不在有效标签列表中,重置为第一个
|
||||
if (!validTabs.includes(activeTab)) {
|
||||
setActiveTab(validTabs[0]);
|
||||
}
|
||||
}
|
||||
}, [data?.match?.sportId]);
|
||||
|
||||
const loadMatchDetail = async () => {
|
||||
try {
|
||||
setLoading(true);
|
||||
@@ -73,13 +98,51 @@ export default function MatchDetailScreen() {
|
||||
}
|
||||
|
||||
const renderTabContent = () => {
|
||||
const sportId = data?.match?.sportId || 1;
|
||||
|
||||
switch (activeTab) {
|
||||
case "info":
|
||||
// 根据 sportId 显示不同的详情组件
|
||||
if (sportId === 1) {
|
||||
// 足球:显示 FootballScoreTable (半场/全场) 和 MatchInfoCard
|
||||
return (
|
||||
<>
|
||||
<FootballScoreTable data={data} isDark={isDark} />
|
||||
<MatchInfoCard data={data} isDark={isDark} />
|
||||
</>
|
||||
);
|
||||
} else if (sportId === 2) {
|
||||
// 篮球:显示 BasketballScoreTable (4节) 和 MatchInfoCard
|
||||
return (
|
||||
<>
|
||||
<BasketballScoreTable data={data} isDark={isDark} />
|
||||
<MatchInfoCard data={data} isDark={isDark} />
|
||||
</>
|
||||
);
|
||||
} else {
|
||||
// 默认使用足球组件
|
||||
return (
|
||||
<>
|
||||
<FootballScoreTable data={data} isDark={isDark} />
|
||||
<MatchInfoCard data={data} isDark={isDark} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
case "stats":
|
||||
return (
|
||||
<>
|
||||
<ScoreTable data={data} isDark={isDark} />
|
||||
<MatchInfoCard data={data} isDark={isDark} />
|
||||
</>
|
||||
<View style={styles.emptyContent}>
|
||||
<ThemedText style={styles.emptyText}>
|
||||
{t("detail.empty_stats")}
|
||||
</ThemedText>
|
||||
</View>
|
||||
);
|
||||
case "odds":
|
||||
return (
|
||||
<View style={styles.emptyContent}>
|
||||
<ThemedText style={styles.emptyText}>
|
||||
{t("detail.empty_odds")}
|
||||
</ThemedText>
|
||||
</View>
|
||||
);
|
||||
case "h2h":
|
||||
return (
|
||||
@@ -115,6 +178,7 @@ export default function MatchDetailScreen() {
|
||||
activeTab={activeTab}
|
||||
onTabChange={setActiveTab}
|
||||
isDark={isDark}
|
||||
sportId={data.match.sportId}
|
||||
/>
|
||||
|
||||
{renderTabContent()}
|
||||
|
||||
Reference in New Issue
Block a user