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

@@ -314,7 +314,7 @@ body::-webkit-scrollbar {
}
.admin-list-page > .list-panel {
border: 1px solid rgba(255, 255, 255, 0.06);
background: rgba(18, 18, 18, 0.85);
background: #121212;
padding: 0 10px 10px;
}
.admin-list-page > .data-card .el-card__body {
@@ -379,7 +379,6 @@ body {
border-color: var(--border) !important;
border-radius: var(--radius) !important;
box-shadow: var(--shadow) !important;
backdrop-filter: blur(10px);
}
.el-card__header {
border-bottom-color: #1e1e1e !important;
@@ -394,7 +393,7 @@ body {
.el-table::before { background-color: #222 !important; }
.el-table th.el-table__cell {
background: rgba(255,255,255,0.02) !important;
color: #555 !important;
color: #888 !important;
font-size: 11px; font-weight: 700;
letter-spacing: 0.06em; text-transform: uppercase;
border-bottom-color: #1e1e1e !important;
@@ -535,7 +534,69 @@ body {
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.16) inset, 0 2px 10px rgba(0, 0, 0, 0.4), 0 0 16px rgba(47, 181, 106, 0.25) !important;
}
.el-form-item__label { color: var(--text-muted) !important; font-size: 11px !important; font-weight: 600 !important; letter-spacing: 0.04em !important; }
.el-form-item__label { color: #aaa !important; font-size: 12px !important; font-weight: 600 !important; letter-spacing: 0.02em !important; }
/* ── Dialog / overlay实心背景避免噪点透底发糊 ── */
.el-overlay {
background-color: rgba(0, 0, 0, 0.72) !important;
backdrop-filter: none !important;
}
.el-dialog {
background: #1a1a1a !important;
border: 1px solid #333 !important;
border-radius: var(--radius) !important;
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.65) !important;
}
.el-dialog__header {
border-bottom: 1px solid #2a2a2a !important;
padding: 16px 20px 14px !important;
margin-right: 0 !important;
}
.el-dialog__title {
font-size: 16px !important;
font-weight: 700 !important;
color: #f0f0f0 !important;
letter-spacing: 0.02em !important;
}
.el-dialog__headerbtn .el-dialog__close {
color: #888 !important;
}
.el-dialog__headerbtn:hover .el-dialog__close {
color: #fff !important;
}
.el-dialog__body {
padding: 18px 20px !important;
font-size: 14px !important;
color: #ddd !important;
}
.el-dialog__footer {
border-top: 1px solid #2a2a2a !important;
padding: 12px 20px 16px !important;
}
.el-dialog .el-form-item__label {
font-size: 13px !important;
color: #aaa !important;
}
.el-dialog .el-descriptions__label {
color: #888 !important;
font-size: 12px !important;
font-weight: 600 !important;
background: #141414 !important;
}
.el-dialog .el-descriptions__content {
color: #e0e0e0 !important;
font-size: 13px !important;
background: #1a1a1a !important;
}
.el-dialog .el-descriptions__cell {
border-color: #2a2a2a !important;
}
.user-edit-dialog .el-dialog__body,
.agent-edit-dialog .el-dialog__body,
.create-account-dialog .el-dialog__body {
max-height: min(70vh, 640px);
overflow-y: auto;
}
.el-statistic__head { color: #555 !important; font-size: 11px !important; font-weight: 700 !important; letter-spacing: 0.06em !important; text-transform: uppercase !important; }
.el-statistic__content .el-statistic__number { font-size: 26px !important; font-weight: 800 !important; color: #fff !important; }