diff --git a/uniapp/src/components/match-odds-detail/match-odds-detail.vue b/uniapp/src/components/match-odds-detail/match-odds-detail.vue
index 1fb923a..66f0daf 100644
--- a/uniapp/src/components/match-odds-detail/match-odds-detail.vue
+++ b/uniapp/src/components/match-odds-detail/match-odds-detail.vue
@@ -1,72 +1,70 @@
-
-
-
-
- {{ item.label }}
-
+
+
+
+ 全网盘口对比
+ 数据仅供参考 · 实时更新
-
-
-
-
- 赔率加载中...
+ {{ latestUpdateText }}
-
+
+
+ {{ item.label }}
+
+
+
+
+
+ 盘口加载中...
+
+
{{ loadError }}
重新加载
-
-
-
-
-
- {{ platform.platform_name }}
-
- {{ platform.show_type_text }}
-
-
- {{ formatUpdateTime(platform.update_time) }}
+
+
+
+ 来源
+ 主队
+ 盘口
+ 客队
+ 更新时间
-
-
-
- {{ market.label }}
- {{ market.line }}
-
-
-
- {{ item.label }}
- {{ item.value }}
-
-
+
+ {{ row.source }}
+ {{ row.home || '--' }} {{ oddsArrow(row.home) }}
+ {{ row.line || '--' }}
+ {{ row.away || '--' }} {{ oddsArrow(row.away) }}
+ {{ formatUpdateTime(row.updateTime) }}
+
+ {{ showMore ? '收起盘口变化' : '查看盘口变化' }}
+
+
+
+ 暂无{{ activeMarketLabel }}数据
-
-
+
+
+ 近24小时变化
+ 暂无历史盘口数据
+
diff --git a/uniapp/src/pages/match_detail/match_detail.vue b/uniapp/src/pages/match_detail/match_detail.vue
index aa09ddc..38db071 100644
--- a/uniapp/src/pages/match_detail/match_detail.vue
+++ b/uniapp/src/pages/match_detail/match_detail.vue
@@ -1,7 +1,7 @@
-
+
@@ -11,69 +11,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
- {{ match.home_team }}
-
-
- 0
- VS
- 0
-
-
-
- {{ match.away_team }}
-
-
-
-
-
-
-
-
-
+
+ 直播中
+ {{ match.current_minute || '进行中' }}
+
+
+ ⛶
+ 全屏
+
+
+
+ 正在连接直播
+
当前线路暂无可用直播放流
@@ -91,27 +42,32 @@
- {{ activeLiveError }}
-
-
-
-
-
- {{ index + 1 }}
-
-
- {{ item.displayTitle }}
- {{ item.metaText }}
-
-
-
- {{ item.lineKey === activeLiveLineKey ? '当前播放' : item.hasDirectPlay ? '点击切换' : '源站兜底' }}
-
+
+
+ {{ activeLiveError }}
+
+
+
+
+ {{ index + 1 }}
+ {{ item.anchor_name || item.displayTitle }}
+
+
+
@@ -136,6 +92,33 @@
+
+
+
+
+ {{ (match.home_team || '?').slice(0, 1) }}
+
+ {{ match.home_team || '主队' }}
+
+
+
+ {{ match.home_score ?? 0 }}
+ :
+ {{ match.away_score ?? 0 }}
+
+ {{ formatMatchTime(match.match_time) || '未开始' }}
+ {{ match.league_name || '赛事' }}{{ match.round_name ? ` · ${match.round_name}` : '' }}
+ {{ match.current_minute }}
+
+
+
+
+ {{ (match.away_team || '?').slice(0, 1) }}
+
+ {{ match.away_team || '客队' }}
+
+
+
-
+
([])
const activeLiveLineKey = ref('')
const activeLiveError = ref('')
const livePlayerLoading = ref(false)
-const showLiveLineSelector = ref(false)
let liveTextTimer: ReturnType | null = null
+const matchDetailTitle = computed(() => {
+ const homeTeam = String(match.value?.home_team || '').trim()
+ const awayTeam = String(match.value?.away_team || '').trim()
+ return homeTeam && awayTeam ? `${homeTeam} vs ${awayTeam}` : '赛事详情'
+})
+
const thirdPartyLiveUrl = computed(() => String(match.value?.live_url || '').trim())
const liveList = computed(() => {
return Array.isArray(match.value?.live_list) ? match.value.live_list : []
@@ -550,7 +538,7 @@ const liveSourceText = computed(() => {
const tabList = [
{ key: 'live', label: '文字直播' },
{ key: 'data', label: '比赛数据' },
- { key: 'odds', label: '赔率' },
+ { key: 'odds', label: '盘口' },
{ key: 'lineup', label: '阵容' },
{ key: 'recent', label: '近期战绩' },
{ key: 'ai', label: 'AI分析' },
@@ -711,7 +699,6 @@ watch(
activeLiveLineKey.value = ''
activeLiveError.value = ''
livePlayerLoading.value = false
- showLiveLineSelector.value = false
return
}
if (list.some((item) => item.lineKey === activeLiveLineKey.value)) return
@@ -865,20 +852,11 @@ const selectLiveLine = (item: MatchDetailLiveLine) => {
activeLiveLineKey.value = item.lineKey
activeLiveError.value = ''
livePlayerLoading.value = !!item.playUrl
- showLiveLineSelector.value = false
if (item.playUrl) {
triggerLiveAutoPlay()
}
}
-const toggleLiveLineSelector = () => {
- if (!resolvedLiveList.value.length) {
- uni.showToast({ title: '暂无直播线路', icon: 'none' })
- return
- }
- showLiveLineSelector.value = !showLiveLineSelector.value
-}
-
const openActiveLiveSource = () => {
navigateToLiveWebview(activeLiveSourceUrl.value)
}
@@ -1059,140 +1037,99 @@ onUnload(() => {
padding-bottom: 40rpx;
}
-.match-info-wrap {
- margin: 24rpx;
-}
-
-.upcoming-card {
+.detail-scoreboard {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
background: #fff;
- border-radius: 24rpx;
- padding: 32rpx;
-
- &__header {
- margin-bottom: 24rpx;
- }
-
- &__tags {
- display: flex;
- align-items: center;
- gap: 8rpx;
- flex-wrap: wrap;
- }
-
- &__league {
- font-size: 24rpx;
- color: #808080;
- }
-
- &__tag {
- padding: 2rpx 10rpx;
- border-radius: 6rpx;
- font-size: 22rpx;
-
- &--blue {
- background: #e5edff;
-
- text {
- color: #185dff;
- font-size: 22rpx;
- }
- }
- }
-
- &__hot {
- width: 44rpx;
- height: 42rpx;
- border-radius: 10rpx;
- background: #d84293;
- display: flex;
- align-items: center;
- justify-content: center;
-
- text {
- font-size: 24rpx;
- font-weight: 600;
- color: #fff;
- }
- }
-
- &__teams {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 16rpx 0;
- }
+ min-height: 270rpx;
+ padding: 28rpx 38rpx 30rpx;
+ border-bottom: 1rpx solid #eef0f5;
&__team {
- flex: 1;
+ width: 190rpx;
display: flex;
flex-direction: column;
align-items: center;
- gap: 12rpx;
+ gap: 14rpx;
+ min-width: 0;
}
- &__icon {
- width: 64rpx;
- height: 64rpx;
+ &__logo {
+ width: 92rpx;
+ height: 92rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+
+ &--placeholder {
+ border-radius: 50%;
+ background: #eef3ff;
+ color: #1468f5;
+ font-size: 38rpx;
+ font-weight: 700;
+ }
}
&__name {
- font-size: 28rpx;
- font-weight: 600;
- color: #000;
+ width: 100%;
+ font-size: 30rpx;
+ font-weight: 700;
+ color: #121826;
text-align: center;
+ line-height: 1.3;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
&__center {
- display: flex;
- align-items: center;
- gap: 12rpx;
- flex-shrink: 0;
- padding: 0 16rpx;
- }
-
- &__score {
- font-size: 40rpx;
- font-weight: 700;
- color: #000;
- }
-
- &__vs {
- font-size: 24rpx;
- color: #808080;
- }
-
- &__divider {
- height: 2rpx;
- background: #f2f2f2;
- margin: 16rpx 0;
- }
-
- &__footer {
+ flex: 1;
+ min-width: 0;
display: flex;
flex-direction: column;
align-items: center;
- gap: 8rpx;
+ gap: 12rpx;
}
- &__status {
- display: inline-flex;
+ &__score {
+ display: flex;
+ align-items: baseline;
+ gap: 24rpx;
+ font-size: 68rpx;
+ line-height: 1;
+ font-weight: 800;
+ font-variant-numeric: tabular-nums;
+ color: #090d18;
+ }
+
+ &__colon {
+ font-size: 54rpx;
+ }
+
+ &__start-time {
+ min-height: 68rpx;
+ display: flex;
align-items: center;
- justify-content: center;
- height: 50rpx;
- padding: 0 24rpx;
- border-radius: 25rpx;
- background: #e5edff;
-
- text {
- font-size: 24rpx;
- color: #185dff;
- font-weight: 500;
- }
+ font-size: 36rpx;
+ font-weight: 800;
+ color: #1468f5;
+ line-height: 1.2;
}
- &__time {
+ &__meta {
+ font-size: 26rpx;
+ line-height: 1.35;
+ color: #7b8495;
+ text-align: center;
+ }
+
+ &__live-minute {
+ margin-top: -6rpx;
font-size: 24rpx;
- color: #808080;
+ font-weight: 700;
+ color: #12a34a;
}
}