feat: refactor agent manager, media library, and player UX

- Split admin users page into player/tier-1/tier-2 tabs with affiliation labels and context-specific create dialogs

- Add media library with uploaded_files migration, list/delete unused files API, and admin nav route

- Enforce player username format (alphanumeric 3-32) on frontend and backend via shared package

- Improve admin dialog/panel styling; refine player parlay and match bet card kickoff display

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-09 17:56:28 +08:00
parent d5e7c8edb3
commit df20444be9
27 changed files with 2136 additions and 563 deletions

View File

@@ -11,6 +11,27 @@ export const PARLAY_MARKET_TYPES = [
export type ParlayMarketType = (typeof PARLAY_MARKET_TYPES)[number]['key'];
/** 按全场 / 半场分组headerKey 对应 bet.ft / bet.ht */
export const PARLAY_MARKET_GROUPS = [
{
headerKey: 'ft',
columns: [
{ key: 'FT_HANDICAP', labelKey: 'parlay_lbl_handicap' },
{ key: 'FT_OVER_UNDER', labelKey: 'parlay_lbl_ou' },
{ key: 'FT_1X2', labelKey: 'parlay_lbl_1x2' },
{ key: 'FT_ODD_EVEN', labelKey: 'parlay_lbl_oe' },
],
},
{
headerKey: 'ht',
columns: [
{ key: 'HT_HANDICAP', labelKey: 'parlay_lbl_handicap' },
{ key: 'HT_OVER_UNDER', labelKey: 'parlay_lbl_ou' },
{ key: 'HT_1X2', labelKey: 'parlay_lbl_1x2' },
],
},
] as const;
/** 选项简称 i18n key串关格内展示 */
export const PARLAY_SELECTION_KEYS: Record<string, string> = {
HOME: 'parlay_sel_home',