优化平台币显示样式不显示小数点,优化中大奖计算

This commit is contained in:
2026-03-26 13:58:45 +08:00
parent d793a511ee
commit 748ee12a52
10 changed files with 95 additions and 26 deletions

View File

@@ -4,6 +4,7 @@
"platformTotalProfit": "Platform Total Profit"
},
"search": {
"rewardConfigRecordId": "Weight Test Record ID",
"drawType": "Draw Type",
"direction": "Direction",
"isBigWin": "Is Big Win",
@@ -21,6 +22,7 @@
},
"table": {
"id": "ID",
"rewardConfigRecordId": "Weight Test Record ID",
"player": "Player",
"lotteryPoolConfig": "Lottery Pool Config",
"drawType": "Draw Type",

View File

@@ -4,6 +4,7 @@
"platformTotalProfit": "平台总盈利"
},
"search": {
"rewardConfigRecordId": "测试记录ID",
"drawType": "抽奖类型",
"direction": "方向",
"isBigWin": "是否中大奖",
@@ -21,6 +22,7 @@
},
"table": {
"id": "ID",
"rewardConfigRecordId": "测试记录ID",
"player": "玩家",
"lotteryPoolConfig": "彩金池配置",
"drawType": "抽奖类型",

View File

@@ -10,7 +10,7 @@ export default {
* @returns 数据列表
*/
list(params: Record<string, any>) {
return request.get<Api.Common.ApiPage>({
return request.get<Api.Common.ApiPage & { total_win_coin?: number }>({
url: '/core/dice/play_record_test/DicePlayRecordTest/index',
params
})

View File

@@ -8,7 +8,7 @@
<ArtTableHeader v-model:columns="columnChecks" :loading="loading" @refresh="refreshData">
<template #left>
<span v-if="totalWinCoin !== null" class="table-summary-inline">
{{ $t('page.toolbar.platformTotalProfit') }}<strong>{{ totalWinCoin }}</strong>
{{ $t('page.toolbar.platformTotalProfit') }}<strong>{{ formatPlatformCoin(totalWinCoin) }}</strong>
</span>
<ElSpace wrap class="table-toolbar-buttons">
<ElButton
@@ -101,6 +101,16 @@
<template #reward_config_id="{ row }">
<ElTag size="small">{{ rewardTierFormatter(row) }}</ElTag>
</template>
<!-- 平台币相关统一整数显示 -->
<template #win_coin="{ row }">
<span>{{ formatPlatformCoin(row?.win_coin) }}</span>
</template>
<template #super_win_coin="{ row }">
<span>{{ formatPlatformCoin(row?.super_win_coin) }}</span>
</template>
<template #reward_win_coin="{ row }">
<span>{{ formatPlatformCoin(row?.reward_win_coin) }}</span>
</template>
<!-- 状态 -->
<template #status="{ row }">
<ElTag size="small" :type="row.status === 1 ? 'success' : 'info'">
@@ -147,6 +157,7 @@
// 搜索表单(与 play_record 对齐:方向、赢取平台币范围、是否中大奖、中奖档位、点数和)
const searchForm = ref<Record<string, unknown>>({
reward_config_record_id: undefined,
lottery_type: undefined,
direction: undefined,
is_win: undefined,
@@ -163,7 +174,7 @@
const listApi = async (params: Record<string, any>) => {
const res = await api.list(params)
totalWinCoin.value = (res as any)?.total_win_coin ?? null
totalWinCoin.value = res?.total_win_coin ?? null
return res
}
@@ -187,6 +198,13 @@
return String(val)
}
function formatPlatformCoin(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))
}
const handleClearAll = async () => {
try {
await ElMessageBox.confirm('确定清空所有玩家抽奖测试数据?', '提示', {
@@ -228,6 +246,11 @@
columnsFactory: () => [
{ type: 'selection' },
{ prop: 'id', label: 'page.table.id', width: 80 },
{
prop: 'reward_config_record_id',
label: 'page.table.rewardConfigRecordId',
width: 120
},
{
prop: 'lottery_config_id',
label: 'page.table.lotteryPoolConfig',
@@ -238,9 +261,9 @@
{ prop: 'is_win', label: 'page.table.isBigWin', width: 100, useSlot: true },
{ prop: 'paid_amount', label: 'page.table.paidAmount', width: 130 },
{ prop: 'ante', label: 'page.table.ante', width: 90 },
{ prop: 'win_coin', label: 'page.table.winCoin', width: 110 },
{ prop: 'super_win_coin', label: 'page.table.superWinCoin', width: 120 },
{ prop: 'reward_win_coin', label: 'page.table.rewardWinCoin', width: 140 },
{ prop: 'win_coin', label: 'page.table.winCoin', width: 110, useSlot: true },
{ prop: 'super_win_coin', label: 'page.table.superWinCoin', width: 120, useSlot: true },
{ prop: 'reward_win_coin', label: 'page.table.rewardWinCoin', width: 140, useSlot: true },
{ prop: 'direction', label: 'page.table.direction', width: 90, useSlot: true },
{ prop: 'start_index', label: 'page.table.startIndex', width: 90 },
{ prop: 'target_index', label: 'page.table.targetIndex', width: 90 },

View File

@@ -56,7 +56,7 @@
<el-input-number
v-model="formData.win_coin"
:placeholder="$t('page.form.placeholderWinCoin')"
:precision="2"
:precision="0"
controls-position="right"
style="width: 100%"
/>
@@ -98,10 +98,22 @@
<sa-radio v-model="formData.status" dict="data_status" />
</el-form-item>
<el-form-item :label="$t('page.table.superWinCoin')" prop="super_win_coin">
<el-input v-model="formData.super_win_coin" :placeholder="$t('page.form.placeholderSuperWinCoin')" />
<el-input-number
v-model="formData.super_win_coin"
:placeholder="$t('page.form.placeholderSuperWinCoin')"
:precision="0"
controls-position="right"
style="width: 100%"
/>
</el-form-item>
<el-form-item :label="$t('page.table.rewardWinCoin')" prop="reward_win_coin">
<el-input v-model="formData.reward_win_coin" :placeholder="$t('page.form.placeholderRewardWinCoin')" />
<el-input-number
v-model="formData.reward_win_coin"
:placeholder="$t('page.form.placeholderRewardWinCoin')"
:precision="0"
controls-position="right"
style="width: 100%"
/>
</el-form-item>
<el-form-item :label="$t('page.form.labelAdminId')" prop="admin_id">
<el-input v-model="formData.admin_id" :placeholder="$t('page.form.placeholderAdminId')" />
@@ -182,8 +194,8 @@
roll_number: null,
roll_array: '',
status: 1,
super_win_coin: '0.00',
reward_win_coin: '0.00',
super_win_coin: 0,
reward_win_coin: 0,
admin_id: null
}
@@ -220,6 +232,13 @@
/**
* 初始化表单数据
*/
function normalizePlatformCoin(val: unknown): number {
if (val === '' || val === null || val === undefined) return 0
const n = typeof val === 'number' ? val : Number(val)
if (!Number.isFinite(n)) return 0
return Math.trunc(n)
}
const initForm = () => {
if (props.data) {
for (const key in formData) {
@@ -228,9 +247,9 @@
;(formData as Record<string, unknown>)[key] = props.data[key]
}
}
if (typeof formData.win_coin === 'string') {
formData.win_coin = parseFloat(formData.win_coin) || 0
}
formData.win_coin = normalizePlatformCoin(formData.win_coin)
formData.super_win_coin = normalizePlatformCoin(formData.super_win_coin)
formData.reward_win_coin = normalizePlatformCoin(formData.reward_win_coin)
}
}
@@ -247,8 +266,8 @@
saiType: 'all',
tier: tier
})
const list = (res as any)?.data ?? (Array.isArray(res) ? res : [])
const first = Array.isArray(list) ? list[0] : (list?.data?.[0] ?? list?.[0])
const list = res?.data
const first = Array.isArray(list) && list.length > 0 ? list[0] : undefined
if (first && first.id != null) {
formData.reward_config_id = first.id
} else {

View File

@@ -8,6 +8,18 @@
@search="handleSearch"
@expand="handleExpand"
>
<el-col v-bind="setSpan(6)">
<el-form-item :label="$t('page.search.rewardConfigRecordId')" prop="reward_config_record_id">
<el-input-number
v-model="formData.reward_config_record_id"
:placeholder="$t('table.searchBar.all')"
:precision="0"
:step="1"
controls-position="right"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col v-bind="setSpan(6)">
<el-form-item :label="$t('page.search.drawType')" prop="lottery_type">
<el-select v-model="formData.lottery_type" :placeholder="$t('table.searchBar.all')" clearable style="width: 100%">
@@ -60,7 +72,7 @@
<el-input-number
v-model="formData.win_coin_min"
:placeholder="$t('table.searchBar.min')"
:precision="2"
:precision="0"
controls-position="right"
class="range-input"
/>
@@ -68,7 +80,7 @@
<el-input-number
v-model="formData.win_coin_max"
:placeholder="$t('table.searchBar.max')"
:precision="2"
:precision="0"
controls-position="right"
class="range-input"
/>