deploy: auto commit repo-root changes 2026-07-14 09:42:08
This commit is contained in:
@@ -53,18 +53,18 @@
|
||||
<text class="mc__teng">{{ match.home_team_en || '' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mc__odds-item">
|
||||
<view v-if="homeWinOdds" class="mc__odds-item">
|
||||
<text class="mc__odds-label">主胜</text>
|
||||
<text class="mc__odds-val">{{ match.home_odds || '0.00' }}</text>
|
||||
<text class="mc__odds-val">{{ homeWinOdds }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mc__row mc__row--mid">
|
||||
<view class="mc__vs-center">
|
||||
<text class="mc__vs-text">VS</text>
|
||||
</view>
|
||||
<view class="mc__odds-item">
|
||||
<text class="mc__odds-label">平局</text>
|
||||
<text class="mc__odds-val">{{ match.draw_odds || '0.00' }}</text>
|
||||
<view v-if="drawOdds" class="mc__odds-item">
|
||||
<text class="mc__odds-label">平</text>
|
||||
<text class="mc__odds-val">{{ drawOdds }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mc__row">
|
||||
@@ -75,9 +75,9 @@
|
||||
<text class="mc__teng">{{ match.away_team_en || '' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mc__odds-item">
|
||||
<view v-if="awayWinOdds" class="mc__odds-item">
|
||||
<text class="mc__odds-label">客胜</text>
|
||||
<text class="mc__odds-val">{{ match.away_odds || '0.00' }}</text>
|
||||
<text class="mc__odds-val">{{ awayWinOdds }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -142,6 +142,16 @@ const liveStyle = computed(() => {
|
||||
|
||||
const cardType = computed(() => statusTypeMap[props.match.status] || 'other')
|
||||
|
||||
const normalizeMoneylineOdds = (value: unknown) => {
|
||||
const text = String(value ?? '').trim()
|
||||
const number = Number(text)
|
||||
return text && Number.isFinite(number) && number > 0 ? text : ''
|
||||
}
|
||||
|
||||
const homeWinOdds = computed(() => normalizeMoneylineOdds(props.match?.home_odds))
|
||||
const drawOdds = computed(() => normalizeMoneylineOdds(props.match?.draw_odds))
|
||||
const awayWinOdds = computed(() => normalizeMoneylineOdds(props.match?.away_odds))
|
||||
|
||||
const canShowLiveAi = computed(() => {
|
||||
return !!props.showLiveAi && ['live', 'upcoming'].includes(cardType.value) && !!props.match?.id
|
||||
})
|
||||
|
||||
@@ -230,30 +230,42 @@ onMounted(() => {
|
||||
}
|
||||
|
||||
.match-odds-detail__tabs-inner {
|
||||
display: inline-flex;
|
||||
gap: 12rpx;
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
display: flex;
|
||||
gap: 24rpx;
|
||||
}
|
||||
|
||||
.match-odds-detail__tab {
|
||||
position: relative;
|
||||
flex: 1 0 112rpx;
|
||||
min-width: 112rpx;
|
||||
height: 58rpx;
|
||||
padding: 0 22rpx;
|
||||
height: 64rpx;
|
||||
padding: 0;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
border: 1rpx solid #e2e8f0;
|
||||
border-radius: 8rpx;
|
||||
background: #ffffff;
|
||||
color: #64748b;
|
||||
font-size: 24rpx;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.match-odds-detail__tab--active {
|
||||
border-color: #2563eb;
|
||||
background: #2563eb;
|
||||
color: #ffffff;
|
||||
color: #2563eb;
|
||||
font-weight: 600;
|
||||
|
||||
&::after {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
bottom: 0;
|
||||
width: 32rpx;
|
||||
height: 4rpx;
|
||||
border-radius: 2rpx;
|
||||
background: #2563eb;
|
||||
content: '';
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
.match-odds-detail__state {
|
||||
|
||||
@@ -136,13 +136,15 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="detail-tabs">
|
||||
<view v-for="tab in tabList" :key="tab.key" class="detail-tabs__item"
|
||||
:class="{ 'detail-tabs__item--active': activeTab === tab.key }" @tap="activeTab = tab.key">
|
||||
<text>{{ tab.label }}</text>
|
||||
<view v-if="tab.key === 'live' && match.status === 1" class="detail-tabs__dot"></view>
|
||||
<scroll-view scroll-x class="detail-tabs" show-scrollbar="false">
|
||||
<view class="detail-tabs__inner">
|
||||
<view v-for="tab in tabList" :key="tab.key" class="detail-tabs__item"
|
||||
:class="{ 'detail-tabs__item--active': activeTab === tab.key }" @tap="activeTab = tab.key">
|
||||
<text>{{ tab.label }}</text>
|
||||
<view v-if="tab.key === 'live' && match.status === 1" class="detail-tabs__dot"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<!-- Tab 内容区:固定高度可滚动 -->
|
||||
<view class="detail-tab-body">
|
||||
@@ -2147,21 +2149,32 @@ onUnload(() => {
|
||||
|
||||
/* ====== Tab 导航栏 ====== */
|
||||
.detail-tabs {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
background: #fff;
|
||||
border-bottom: 1rpx solid #f0f0f0;
|
||||
padding: 0 12rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
&__inner {
|
||||
min-width: 100%;
|
||||
padding: 0 24rpx;
|
||||
display: inline-flex;
|
||||
align-items: stretch;
|
||||
justify-content: space-between;
|
||||
gap: 32rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
&__item {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex: 0 0 auto;
|
||||
padding: 20rpx 0;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 6rpx;
|
||||
padding: 20rpx 0;
|
||||
font-size: 26rpx;
|
||||
color: #999;
|
||||
position: relative;
|
||||
white-space: nowrap;
|
||||
transition: color 0.2s;
|
||||
|
||||
&--active {
|
||||
@@ -2183,6 +2196,9 @@ onUnload(() => {
|
||||
}
|
||||
|
||||
&__dot {
|
||||
position: absolute;
|
||||
top: 18rpx;
|
||||
right: -14rpx;
|
||||
width: 10rpx;
|
||||
height: 10rpx;
|
||||
border-radius: 50%;
|
||||
|
||||
Reference in New Issue
Block a user