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:
@@ -67,6 +67,8 @@ const subtitle = computed(() => {
|
||||
return props.bet.pickLabel || props.bet.leagueName || '';
|
||||
});
|
||||
|
||||
const stakeAmount = computed(() => formatMoney(props.bet.stake, locale.value));
|
||||
|
||||
const returnAmount = computed(() => {
|
||||
if (statusKey.value === 'won') return formatMoney(props.bet.actualReturn, locale.value);
|
||||
if (statusKey.value === 'pending') return formatMoney(props.bet.potentialReturn, locale.value);
|
||||
@@ -94,6 +96,9 @@ function goDetail() {
|
||||
<span class="subtitle">{{ subtitle }} · {{ placedDate }}</span>
|
||||
</div>
|
||||
<div class="card-right">
|
||||
<span class="stake-amt">
|
||||
{{ t('history.stake') }} {{ stakeAmount }}
|
||||
</span>
|
||||
<span class="return-amt" :class="{ highlight: returnHighlight, pending: returnPending, lost: returnLost }">
|
||||
{{ returnAmount }}
|
||||
</span>
|
||||
@@ -176,6 +181,12 @@ function goDetail() {
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.stake-amt {
|
||||
font-size: 11px;
|
||||
color: #666;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.return-amt {
|
||||
font-size: 15px;
|
||||
font-weight: 900;
|
||||
|
||||
Reference in New Issue
Block a user