feat(admin): 从已有玩家升级代理、修复 i18n 与过期 .js 冲突

- 新建一级代理改为选择已有玩家;新建用户可选一级代理

- 操作日志/注单等扁平 key 翻译;清理 src 内误生成 .js,Vite 优先解析 .ts

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-03 15:42:15 +08:00
parent cbfa18d1d3
commit 3b739982a1
27 changed files with 625 additions and 165 deletions

View File

@@ -7,11 +7,10 @@ export type AdminLocale = 'zh-CN' | 'en-US' | 'ms-MY';
export const ADMIN_LOCALES: {
code: AdminLocale;
label: string;
flag: string;
}[] = [
{ code: 'zh-CN', label: '中文', flag: '🇨🇳' },
{ code: 'en-US', label: 'English', flag: '🇺🇸' },
{ code: 'ms-MY', label: 'Bahasa Melayu', flag: '🇲🇾' },
{ code: 'zh-CN', label: '中文' },
{ code: 'en-US', label: 'English' },
{ code: 'ms-MY', label: 'Bahasa Melayu' },
];
const zh: Record<string, string> = {
@@ -458,32 +457,9 @@ const ms: Record<string, string> = {
...adminPagesMs,
};
const messages: Record<AdminLocale, Record<string, string>> = {
/** vue-i18n 文案表(扁平 key与原先 adminT 一致) */
export const adminMessages: Record<AdminLocale, Record<string, string>> = {
'zh-CN': zh,
'en-US': en,
'ms-MY': ms,
};
export function adminT(locale: AdminLocale, key: string, params?: Record<string, string | number>): string {
const chain = [locale, 'en-US', 'zh-CN'];
const seen = new Set<string>();
let raw = key;
for (const loc of chain) {
if (seen.has(loc)) continue;
seen.add(loc);
const v = messages[loc as AdminLocale]?.[key];
if (v) {
raw = v;
break;
}
}
if (!params) return raw;
return Object.entries(params).reduce(
(s, [k, v]) => s.replace(new RegExp(`\\{${k}\\}`, 'g'), String(v)),
raw,
);
}
export function adminLocaleTag(locale: AdminLocale): string {
return locale;
}