管理端新增冠军盘列表/编辑、展开懒加载与 ECharts 修复;各列表页去掉重复标题。玩家端支持多赛事冠军盘、分批加载与语言切换刷新。API 扩展 outright CRUD 与列表性能优化。 Co-authored-by: Cursor <cursoragent@cursor.com>
175 lines
3.1 KiB
TypeScript
175 lines
3.1 KiB
TypeScript
/** 球队 code / 名称 → ISO 3166-1(flagcdn.com),含世界杯 48 强 */
|
||
const CODE_TO_ISO: Record<string, string> = {
|
||
// 世界杯 2026 48 强
|
||
FRA: 'fr',
|
||
ESP: 'es',
|
||
ENG: 'gb-eng',
|
||
BRA: 'br',
|
||
ARG: 'ar',
|
||
POR: 'pt',
|
||
GER: 'de',
|
||
NED: 'nl',
|
||
NOR: 'no',
|
||
BEL: 'be',
|
||
COL: 'co',
|
||
JPN: 'jp',
|
||
URU: 'uy',
|
||
USA: 'us',
|
||
MAR: 'ma',
|
||
CRO: 'hr',
|
||
MEX: 'mx',
|
||
SUI: 'ch',
|
||
TUR: 'tr',
|
||
SEN: 'sn',
|
||
KOR: 'kr',
|
||
AUT: 'at',
|
||
ECU: 'ec',
|
||
SWE: 'se',
|
||
IRN: 'ir',
|
||
GHA: 'gh',
|
||
ALG: 'dz',
|
||
BIH: 'ba',
|
||
EGY: 'eg',
|
||
TUN: 'tn',
|
||
CAN: 'ca',
|
||
PAN: 'pa',
|
||
AUS: 'au',
|
||
CZE: 'cz',
|
||
KSA: 'sa',
|
||
NZL: 'nz',
|
||
COD: 'cd',
|
||
UZB: 'uz',
|
||
IRQ: 'iq',
|
||
RSA: 'za',
|
||
CIV: 'ci',
|
||
JOR: 'jo',
|
||
PAR: 'py',
|
||
HAI: 'ht',
|
||
QAT: 'qa',
|
||
CPV: 'cv',
|
||
CUW: 'cw',
|
||
SCO: 'gb-sct',
|
||
// 俱乐部 / 演示联赛
|
||
MUN: 'gb',
|
||
CHE: 'gb',
|
||
LIV: 'gb',
|
||
MCI: 'gb',
|
||
};
|
||
|
||
const NAME_TO_ISO: Record<string, string> = {
|
||
France: 'fr',
|
||
Spain: 'es',
|
||
England: 'gb-eng',
|
||
Brazil: 'br',
|
||
Argentina: 'ar',
|
||
Portugal: 'pt',
|
||
Germany: 'de',
|
||
Netherlands: 'nl',
|
||
Norway: 'no',
|
||
Belgium: 'be',
|
||
Colombia: 'co',
|
||
Japan: 'jp',
|
||
Uruguay: 'uy',
|
||
USA: 'us',
|
||
'United States': 'us',
|
||
Morocco: 'ma',
|
||
Croatia: 'hr',
|
||
Mexico: 'mx',
|
||
Switzerland: 'ch',
|
||
Turkey: 'tr',
|
||
Senegal: 'sn',
|
||
'South Korea': 'kr',
|
||
Austria: 'at',
|
||
Ecuador: 'ec',
|
||
Sweden: 'se',
|
||
Iran: 'ir',
|
||
Ghana: 'gh',
|
||
Algeria: 'dz',
|
||
Bosnia: 'ba',
|
||
Egypt: 'eg',
|
||
Tunisia: 'tn',
|
||
Canada: 'ca',
|
||
Panama: 'pa',
|
||
Australia: 'au',
|
||
Czech: 'cz',
|
||
'Czech Republic': 'cz',
|
||
'Saudi Arabia': 'sa',
|
||
'New Zealand': 'nz',
|
||
'DR Congo': 'cd',
|
||
Uzbekistan: 'uz',
|
||
Iraq: 'iq',
|
||
'South Africa': 'za',
|
||
'Ivory Coast': 'ci',
|
||
Jordan: 'jo',
|
||
Paraguay: 'py',
|
||
Haiti: 'ht',
|
||
Qatar: 'qa',
|
||
'Cape Verde': 'cv',
|
||
Curacao: 'cw',
|
||
Scotland: 'gb-sct',
|
||
法国: 'fr',
|
||
西班牙: 'es',
|
||
英格兰: 'gb-eng',
|
||
巴西: 'br',
|
||
阿根廷: 'ar',
|
||
葡萄牙: 'pt',
|
||
德国: 'de',
|
||
荷兰: 'nl',
|
||
挪威: 'no',
|
||
比利时: 'be',
|
||
哥伦比亚: 'co',
|
||
日本: 'jp',
|
||
乌拉圭: 'uy',
|
||
美国: 'us',
|
||
摩洛哥: 'ma',
|
||
克罗地亚: 'hr',
|
||
墨西哥: 'mx',
|
||
瑞士: 'ch',
|
||
土耳其: 'tr',
|
||
塞内加尔: 'sn',
|
||
韩国: 'kr',
|
||
奥地利: 'at',
|
||
厄瓜多尔: 'ec',
|
||
瑞典: 'se',
|
||
伊朗: 'ir',
|
||
加纳: 'gh',
|
||
阿尔及利亚: 'dz',
|
||
波黑: 'ba',
|
||
埃及: 'eg',
|
||
突尼斯: 'tn',
|
||
加拿大: 'ca',
|
||
巴拿马: 'pa',
|
||
澳大利亚: 'au',
|
||
捷克: 'cz',
|
||
沙特阿拉伯: 'sa',
|
||
新西兰: 'nz',
|
||
'刚果(金)': 'cd',
|
||
乌兹别克斯坦: 'uz',
|
||
伊拉克: 'iq',
|
||
南非: 'za',
|
||
科特迪瓦: 'ci',
|
||
约旦: 'jo',
|
||
巴拉圭: 'py',
|
||
海地: 'ht',
|
||
卡塔尔: 'qa',
|
||
佛得角: 'cv',
|
||
库拉索: 'cw',
|
||
苏格兰: 'gb-sct',
|
||
曼联: 'gb',
|
||
切尔西: 'gb',
|
||
};
|
||
|
||
export function teamFlagUrl(code?: string, name?: string): string {
|
||
const key = (code ?? '').toUpperCase();
|
||
if (key && CODE_TO_ISO[key]) {
|
||
return `https://flagcdn.com/w40/${CODE_TO_ISO[key]}.png`;
|
||
}
|
||
if (name && NAME_TO_ISO[name]) {
|
||
return `https://flagcdn.com/w40/${NAME_TO_ISO[name]}.png`;
|
||
}
|
||
if (key.length === 2) {
|
||
return `https://flagcdn.com/w40/${key.toLowerCase()}.png`;
|
||
}
|
||
return '';
|
||
}
|