重新设置抽奖底注金额为1,优化页面样式

This commit is contained in:
2026-03-31 17:23:16 +08:00
parent d54a9c9281
commit 6ed34b97df
24 changed files with 118 additions and 94 deletions

View File

@@ -6,7 +6,11 @@
<ArtTableHeader v-model:columns="columnChecks" :loading="loading" @refresh="refreshData">
<template #left>
<ElSpace wrap>
<ElButton v-permission="'dice:ante_config:index:save'" @click="showDialog('add')" v-ripple>
<ElButton
v-permission="'dice:ante_config:index:save'"
@click="showDialog('add')"
v-ripple
>
<template #icon>
<ArtSvgIcon icon="ri:add-fill" />
</template>
@@ -40,7 +44,7 @@
@pagination:current-change="handleCurrentChange"
>
<template #is_default="{ row }">
<ElTag :type="row.is_default === 1 ? 'success' : 'info'" size="small">
<ElTag :type="row.is_default === 1 ? 'primary' : 'warning'" size="small">
{{ row.is_default === 1 ? $t('page.table.defaultYes') : $t('page.table.defaultNo') }}
</ElTag>
</template>
@@ -111,7 +115,13 @@
{ prop: 'name', label: 'page.table.name', align: 'center' },
{ prop: 'title', label: 'page.table.title', align: 'center' },
{ prop: 'mult', label: 'page.table.mult', align: 'center' },
{ prop: 'is_default', label: 'page.table.isDefault', width: 110, align: 'center', useSlot: true },
{
prop: 'is_default',
label: 'page.table.isDefault',
width: 110,
align: 'center',
useSlot: true
},
{ prop: 'create_time', label: 'page.table.createTime', width: 170, align: 'center' },
{ prop: 'update_time', label: 'page.table.updateTime', width: 170, align: 'center' },
{

View File

@@ -99,6 +99,9 @@
<template #reward_win_coin="{ row }">
<span>{{ formatPlatformCoin(row?.reward_win_coin) }}</span>
</template>
<template #paid_amount="{ row }">
<span>{{ formatPlatformCoin(row?.paid_amount) }}</span>
</template>
<!-- 摇取点数 tag -->
<template #roll_array="{ row }">
<ElTag size="small">
@@ -157,7 +160,7 @@
direction: undefined
})
/** 当前筛选下平台总盈利(付费抽奖次数×100 - 玩家总收益) */
/** 当前筛选下平台总盈利(付费金额 paid_amount 求和 - 玩家总收益) */
const totalWinCoin = ref<number | null>(null)
const listApi = async (params: Record<string, any>) => {
@@ -197,7 +200,7 @@
if (val === '' || val === null || val === undefined) return '-'
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return '-'
return String(Math.trunc(n))
return n.toFixed(2)
}
// 表格配置
@@ -235,7 +238,7 @@
{ prop: 'lottery_type', label: 'page.table.drawType', width: 100, useSlot: true },
{ prop: 'direction', label: 'page.table.direction', width: 90, useSlot: true },
{ prop: 'ante', label: 'page.table.ante', width: 80, align: 'center' },
{ prop: 'paid_amount', label: 'page.table.paidAmount', width: 110, align: 'center' },
{ prop: 'paid_amount', label: 'page.table.paidAmount', width: 110, align: 'center', useSlot: true },
{ prop: 'is_win', label: 'page.table.isBigWin', width: 100, useSlot: true },
{ prop: 'win_coin', label: 'page.table.winCoin', width: 110, useSlot: true },
{ prop: 'super_win_coin', label: 'page.table.superWinCoin', width: 120, useSlot: true },

View File

@@ -171,7 +171,7 @@
roll_number: undefined
})
// 当前筛选下平台总盈利(付费抽奖次数×100 - 玩家总收益)
// 当前筛选下平台总盈利(付费金额 paid_amount 求和 - 玩家总收益)
const totalWinCoin = ref<number | null>(null)
const listApi = async (params: Record<string, any>) => {
@@ -203,7 +203,7 @@
if (val === '' || val === null || val === undefined) return '-'
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return '-'
return String(Math.trunc(n))
return n.toFixed(2)
}
const handleClearAll = async () => {

View File

@@ -167,7 +167,7 @@
{
prop: 'coin',
label: 'page.table.coin',
width: 100,
width: 110,
align: 'center',
useSlot: true
},

View File

@@ -146,11 +146,11 @@
return player?.username ?? row.player_id ?? '-'
}
function formatInteger(val: unknown): string {
function formatMoney2(val: unknown): string {
if (val === '' || val === null || val === undefined) return '-'
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return '-'
return String(Math.trunc(n))
return n.toFixed(2)
}
// 表格配置
@@ -202,14 +202,14 @@
label: 'page.table.walletBefore',
width: 110,
align: 'center',
formatter: (row: Record<string, any>) => formatInteger(row?.wallet_before)
formatter: (row: Record<string, any>) => formatMoney2(row?.wallet_before)
},
{
prop: 'wallet_after',
label: 'page.table.walletAfter',
width: 110,
align: 'center',
formatter: (row: Record<string, any>) => formatInteger(row?.wallet_after)
formatter: (row: Record<string, any>) => formatMoney2(row?.wallet_after)
},
{
prop: 'remark',

View File

@@ -45,7 +45,8 @@
<el-input-number
v-model="formData.coin"
:placeholder="$t('page.form.placeholderCoinChange')"
:precision="0"
:precision="2"
:step="1"
style="width: 100%"
@change="onCoinChange"
:disabled="dialogType === 'edit'"
@@ -55,7 +56,7 @@
<el-input-number
v-model="formData.wallet_before"
:placeholder="$t('page.form.placeholderWalletBefore')"
:precision="0"
:precision="2"
disabled
style="width: 100%"
/>
@@ -64,7 +65,7 @@
<el-input-number
v-model="formData.wallet_after"
:placeholder="$t('page.form.placeholderWalletAfter')"
:precision="0"
:precision="2"
disabled
style="width: 100%"
/>
@@ -178,7 +179,7 @@
function calcWalletAfter() {
const before = Number(formData.wallet_before) || 0
const coin = Number(formData.coin) || 0
formData.wallet_after = Math.trunc(before + coin)
formData.wallet_after = Number((before + coin).toFixed(2))
}
watch(
@@ -204,11 +205,11 @@
}
}
function normalizeInteger(val: unknown, fallback: number): number {
function normalizeMoney2(val: unknown, fallback: number): number {
if (val === '' || val === null || val === undefined) return fallback
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return fallback
return Math.trunc(n)
return Number(n.toFixed(2))
}
const initForm = () => {
@@ -218,9 +219,9 @@
formData.player_id =
props.data.player_id != null && props.data.player_id !== '' ? Number(props.data.player_id) : null
formData.type = props.data.type != null && props.data.type !== '' ? Number(props.data.type) : null
formData.coin = normalizeInteger(props.data.coin, 0)
formData.wallet_before = normalizeInteger(props.data.wallet_before, 0)
formData.wallet_after = normalizeInteger(props.data.wallet_after, 0)
formData.coin = normalizeMoney2(props.data.coin, 0)
formData.wallet_before = normalizeMoney2(props.data.wallet_before, 0)
formData.wallet_after = normalizeMoney2(props.data.wallet_after, 0)
formData.remark = props.data.remark ?? ''
}

View File

@@ -70,11 +70,11 @@
return api.list({ ...params, direction: currentDirection.value })
}
function formatInteger(val: unknown): string {
function formatMoney2(val: unknown): string {
if (val === '' || val === null || val === undefined) return '-'
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return '-'
return String(Math.trunc(n))
return n.toFixed(2)
}
const handleSearch = (params: Record<string, any>) => {
@@ -129,7 +129,7 @@
label: 'page.table.realEv',
width: 110,
align: 'center',
formatter: (row: Record<string, any>) => formatInteger(row?.real_ev)
formatter: (row: Record<string, any>) => formatMoney2(row?.real_ev)
},
{ prop: 'remark', label: 'page.table.remark', minWidth: 80, align: 'center', showOverflowTooltip: true },
{ prop: 'weight', label: 'page.table.weight', width: 110, align: 'center' }

View File

@@ -62,7 +62,7 @@
show-overflow-tooltip
>
<template #default="{ row }">
<span>{{ formatInteger(row?.real_ev) }}</span>
<span>{{ formatMoney2(row?.real_ev) }}</span>
</template>
</el-table-column>
<el-table-column
@@ -254,11 +254,11 @@
import api from '../../../api/reward/index'
import ArtBarChart from '@/components/core/charts/art-bar-chart/index.vue'
import { ElMessage } from 'element-plus'
function formatInteger(val: unknown): string {
function formatMoney2(val: unknown): string {
if (val === '' || val === null || val === undefined) return '-'
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return '-'
return String(Math.trunc(n))
return n.toFixed(2)
}
import { useI18n } from 'vue-i18n'

View File

@@ -56,7 +56,7 @@
show-overflow-tooltip
>
<template #default="{ row }">
<span>{{ formatInteger(row?.real_ev) }}</span>
<span>{{ formatMoney2(row?.real_ev) }}</span>
</template>
</el-table-column>
<el-table-column
@@ -319,11 +319,11 @@
import ArtBarChart from '@/components/core/charts/art-bar-chart/index.vue'
import { ElMessage } from 'element-plus'
import { useI18n } from 'vue-i18n'
function formatInteger(val: unknown): string {
function formatMoney2(val: unknown): string {
if (val === '' || val === null || val === undefined) return '-'
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return '-'
return String(Math.trunc(n))
return n.toFixed(2)
}

View File

@@ -81,13 +81,14 @@
@change="handleRealEvChange(row)"
controls-position="right"
size="small"
:step="1"
class="full-width"
/>
</template>
</ElTableColumn>
<ElTableColumn :label="$t('page.configPage.colRealReward')" min-width="130" align="center">
<template #default="{ row }">
<span>{{ calcRealReward(row.real_ev) }}</span>
<span>{{ formatMoney2(calcRealReward(row.real_ev)) }}</span>
</template>
</ElTableColumn>
<ElTableColumn :label="$t('page.configPage.colTier')" width="100" align="center">
@@ -171,6 +172,7 @@
@change="handleRealEvChange(row)"
controls-position="right"
size="small"
:step="1"
class="full-width"
/>
</template>
@@ -501,11 +503,18 @@
typeof row.real_ev === 'number' && !Number.isNaN(row.real_ev)
? row.real_ev
: Number(row.real_ev)
const text = Number.isNaN(n) ? '' : String(n)
const text = Number.isNaN(n) ? '' : Number(n).toFixed(2)
row.ui_text = text
row.ui_text_en = text
}
function formatMoney2(val: unknown): string {
if (val === '' || val === null || val === undefined) return '-'
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return '-'
return n.toFixed(2)
}
async function handleCreateRewardReference() {
try {
await ElMessageBox.confirm(

View File

@@ -278,13 +278,13 @@ function uiTextByTierWhenStandards(
if (tier === 'T5') {
return { ui_text: '再来一次', ui_text_en: 'Once again' }
}
const value = String(realEv)
const value = Number.isFinite(realEv) ? realEv.toFixed(2) : String(realEv)
return { ui_text: value, ui_text_en: value }
}
/** 展示文案:直接使用真实结算值(中英文相同) */
function uiTextFromRealEv(realEv: number): { ui_text: string; ui_text_en: string } {
const value = String(realEv)
const value = Number.isFinite(realEv) ? realEv.toFixed(2) : String(realEv)
return { ui_text: value, ui_text_en: value }
}

View File

@@ -149,7 +149,7 @@
if (v === null || v === undefined || v === '') return dash
const n = Number(v)
if (Number.isNaN(n)) return dash
return String(n)
return n.toFixed(2)
}
/** 链式再来一次1=是新库字段JSON 旧数据用 tier_weights_snapshot.chain_free_mode */