fix(player-desktop): 移除分类及标签的表情符号、修复首页快速下注缺少赔率数据及缺失翻译键的问题
This commit is contained in:
@@ -189,8 +189,8 @@ export class PlayerController {
|
|||||||
const [banners, announcements, allMatches, upcomingMatches, inboxEnabled] = await Promise.all([
|
const [banners, announcements, allMatches, upcomingMatches, inboxEnabled] = await Promise.all([
|
||||||
this.content.listActive('BANNER', locale),
|
this.content.listActive('BANNER', locale),
|
||||||
this.content.listActiveAnnouncements(locale),
|
this.content.listActiveAnnouncements(locale),
|
||||||
this.matches.listPublished(locale, undefined, { includeMarkets: false }),
|
this.matches.listPublished(locale, undefined, { includeMarkets: true }),
|
||||||
this.matches.listUpcomingPublished(locale),
|
this.matches.listUpcomingPublished(locale, { includeMarkets: true }),
|
||||||
this.systemConfig.getInboxFeatureEnabled(),
|
this.systemConfig.getInboxFeatureEnabled(),
|
||||||
]);
|
]);
|
||||||
const timeZone = safeTimeZone(headerTimeZone);
|
const timeZone = safeTimeZone(headerTimeZone);
|
||||||
|
|||||||
@@ -1592,17 +1592,42 @@ export class MatchesService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 首页卡片快速下注所需的核心玩法类型 */
|
||||||
|
private static readonly HOME_CARD_MARKET_TYPES = [
|
||||||
|
'FT_1X2',
|
||||||
|
'FT_HANDICAP',
|
||||||
|
'FT_OVER_UNDER',
|
||||||
|
] as const;
|
||||||
|
|
||||||
/** 未来 N 天内开赛的已发布赛事(按开赛时间升序,不限 isHot) */
|
/** 未来 N 天内开赛的已发布赛事(按开赛时间升序,不限 isHot) */
|
||||||
async listUpcomingPublished(
|
async listUpcomingPublished(
|
||||||
locale = 'en-US',
|
locale = 'en-US',
|
||||||
options?: { limit?: number; days?: number },
|
options?: { limit?: number; days?: number; includeMarkets?: boolean },
|
||||||
) {
|
) {
|
||||||
const limit = options?.limit ?? 50;
|
const limit = options?.limit ?? 50;
|
||||||
const days = options?.days ?? 3;
|
const days = options?.days ?? 3;
|
||||||
|
const includeMarkets = options?.includeMarkets ?? false;
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const end = new Date(now);
|
const end = new Date(now);
|
||||||
end.setDate(end.getDate() + days);
|
end.setDate(end.getDate() + days);
|
||||||
|
|
||||||
|
const marketsRelation = includeMarkets
|
||||||
|
? {
|
||||||
|
where: {
|
||||||
|
status: { in: ['OPEN', 'SUSPENDED', 'CLOSED'] },
|
||||||
|
showOnPlayer: true,
|
||||||
|
marketType: { in: [...MatchesService.HOME_CARD_MARKET_TYPES] },
|
||||||
|
},
|
||||||
|
include: {
|
||||||
|
selections: {
|
||||||
|
where: { status: { in: ['OPEN', 'SUSPENDED', 'CLOSED'] } },
|
||||||
|
orderBy: { sortOrder: 'asc' as const },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
orderBy: { sortOrder: 'asc' as const },
|
||||||
|
}
|
||||||
|
: this.playerMarketStatusInclude;
|
||||||
|
|
||||||
const matches = await this.prisma.match.findMany({
|
const matches = await this.prisma.match.findMany({
|
||||||
where: {
|
where: {
|
||||||
status: { in: ['PUBLISHED', 'CLOSED', 'PENDING_SETTLEMENT'] },
|
status: { in: ['PUBLISHED', 'CLOSED', 'PENDING_SETTLEMENT'] },
|
||||||
@@ -1625,14 +1650,14 @@ export class MatchesService {
|
|||||||
homeTeam: true,
|
homeTeam: true,
|
||||||
awayTeam: true,
|
awayTeam: true,
|
||||||
score: true,
|
score: true,
|
||||||
markets: this.playerMarketStatusInclude,
|
markets: marketsRelation,
|
||||||
},
|
},
|
||||||
orderBy: [{ startTime: 'asc' }, { displayOrder: 'asc' }],
|
orderBy: [{ startTime: 'asc' }, { displayOrder: 'asc' }],
|
||||||
take: limit,
|
take: limit,
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
matches.map((m) => this.enrichMatch(m, locale, { omitMarkets: true })),
|
matches.map((m) => this.enrichMatch(m, locale, { omitMarkets: !includeMarkets })),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ import { useI18n } from 'vue-i18n';
|
|||||||
type SportCategory = 'football' | 'basketball' | 'tennis';
|
type SportCategory = 'football' | 'basketball' | 'tennis';
|
||||||
|
|
||||||
const SPORT_CATEGORIES = [
|
const SPORT_CATEGORIES = [
|
||||||
{ id: 'football' as const, icon: '⚽', labelKey: 'bet.sport_football', enabled: true },
|
{ id: 'football' as const, icon: '', labelKey: 'bet.sport_football', enabled: true },
|
||||||
{ id: 'basketball' as const, icon: '🏀', labelKey: 'bet.sport_basketball', enabled: false },
|
{ id: 'basketball' as const, icon: '', labelKey: 'bet.sport_basketball', enabled: false },
|
||||||
{ id: 'tennis' as const, icon: '🎾', labelKey: 'bet.sport_tennis', enabled: false },
|
{ id: 'tennis' as const, icon: '', labelKey: 'bet.sport_tennis', enabled: false },
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
@@ -34,7 +34,7 @@ function selectSport(id: SportCategory, enabled: boolean) {
|
|||||||
:aria-current="sport.enabled && activeSport === sport.id ? 'page' : undefined"
|
:aria-current="sport.enabled && activeSport === sport.id ? 'page' : undefined"
|
||||||
@click="selectSport(sport.id, sport.enabled)"
|
@click="selectSport(sport.id, sport.enabled)"
|
||||||
>
|
>
|
||||||
<span class="sport-category-icon" aria-hidden="true">{{ sport.icon }}</span>
|
<span v-if="sport.icon" class="sport-category-icon" aria-hidden="true">{{ sport.icon }}</span>
|
||||||
<span class="sport-category-label">{{ t(sport.labelKey) }}</span>
|
<span class="sport-category-label">{{ t(sport.labelKey) }}</span>
|
||||||
<span v-if="!sport.enabled" class="sport-category-soon">{{ t('bet.sport_coming_soon') }}</span>
|
<span v-if="!sport.enabled" class="sport-category-soon">{{ t('bet.sport_coming_soon') }}</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -405,6 +405,7 @@ export default {
|
|||||||
correct_score: 'Correct score',
|
correct_score: 'Correct score',
|
||||||
no_markets: 'No markets available',
|
no_markets: 'No markets available',
|
||||||
no_markets_filtered: 'No markets match the current filter',
|
no_markets_filtered: 'No markets match the current filter',
|
||||||
|
no_market_odds: 'No odds available',
|
||||||
popover_title: 'Confirm bet',
|
popover_title: 'Confirm bet',
|
||||||
place_now: 'Bet now',
|
place_now: 'Bet now',
|
||||||
add_to_single: 'Add to singles',
|
add_to_single: 'Add to singles',
|
||||||
|
|||||||
@@ -417,6 +417,7 @@ export default {
|
|||||||
correct_score: 'Skor tepat',
|
correct_score: 'Skor tepat',
|
||||||
no_markets: 'Tiada pasaran tersedia',
|
no_markets: 'Tiada pasaran tersedia',
|
||||||
no_markets_filtered: 'Tiada pasaran sepadan dengan penapis semasa',
|
no_markets_filtered: 'Tiada pasaran sepadan dengan penapis semasa',
|
||||||
|
no_market_odds: 'Tiada odds pasaran',
|
||||||
popover_title: 'Sahkan pertaruhan',
|
popover_title: 'Sahkan pertaruhan',
|
||||||
place_now: 'Pertaruhan sekarang',
|
place_now: 'Pertaruhan sekarang',
|
||||||
add_to_single: 'Tambah tunggal',
|
add_to_single: 'Tambah tunggal',
|
||||||
|
|||||||
@@ -405,6 +405,7 @@ export default {
|
|||||||
correct_score: '波胆',
|
correct_score: '波胆',
|
||||||
no_markets: '暂无可用盘口',
|
no_markets: '暂无可用盘口',
|
||||||
no_markets_filtered: '当前筛选下暂无盘口',
|
no_markets_filtered: '当前筛选下暂无盘口',
|
||||||
|
no_market_odds: '暂无盘口赔率',
|
||||||
popover_title: '确认投注',
|
popover_title: '确认投注',
|
||||||
place_now: '立即下注',
|
place_now: '立即下注',
|
||||||
add_to_single: '加入单关',
|
add_to_single: '加入单关',
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ void loadParlayMatches(true);
|
|||||||
:class="{ active: mainTab === 'matches' }"
|
:class="{ active: mainTab === 'matches' }"
|
||||||
@click="setMainTab('matches')"
|
@click="setMainTab('matches')"
|
||||||
>
|
>
|
||||||
⚽ {{ t('bet.tab_matches') }}
|
{{ t('bet.tab_matches') }}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@@ -139,7 +139,7 @@ void loadParlayMatches(true);
|
|||||||
:class="{ active: mainTab === 'outright' }"
|
:class="{ active: mainTab === 'outright' }"
|
||||||
@click="setMainTab('outright')"
|
@click="setMainTab('outright')"
|
||||||
>
|
>
|
||||||
🏆 {{ t('bet.tab_outright') }}
|
{{ t('bet.tab_outright') }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
|
|||||||
Reference in New Issue
Block a user