重新设置抽奖底注金额为1,优化页面样式
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
"poolName": "Pool Name",
|
||||
"playerProfit": "Player Total Profit (profit_amount):",
|
||||
"realtime": "Live",
|
||||
"profitCalcHint": "Profit per round: paid = win_coin (incl. BIGWIN) - paid_amount (= ante×100); free = win_coin. Refreshes every 2s while open.",
|
||||
"profitCalcHint": "Profit per round: paid = win_coin (incl. BIGWIN) - paid_amount (= ante×1); free = win_coin. Refreshes every 2s while open.",
|
||||
"tierRuleTitle": "Tier Rule",
|
||||
"tierRuleContent": "When player profit in this pool is below safety line, use player T*_weight; when above or equal, use pool T*_weight (kill).",
|
||||
"killScoreWeights": "Kill weights",
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"poolName": "池子名称",
|
||||
"playerProfit": "玩家累计盈利(profit_amount):",
|
||||
"realtime": "实时",
|
||||
"profitCalcHint": "计算方式:付费每局按“赢取平台币 win_coin(含 BIGWIN)减去付费金额 压注金额paid_amount(= 压注倍数ante×100)”累加;免费每局按“玩家赢得平台币win_coin”累加。弹窗打开期间每 2 秒自动刷新",
|
||||
"profitCalcHint": "计算方式:付费每局按“赢取平台币 win_coin(含 BIGWIN)减去付费金额 压注金额paid_amount(= 压注倍数ante×1)”累加;免费每局按“玩家赢得平台币win_coin”累加。弹窗打开期间每 2 秒自动刷新",
|
||||
"tierRuleTitle": "抽奖档位规则",
|
||||
"tierRuleContent": "当玩家在当前彩金池的累计盈利 低于安全线 时,按 玩家 的 T*_weight 权重抽取档位;当累计盈利 高于或等于安全线 时,按 当前彩金池 的 T*_weight 权重抽取档位(杀分)。",
|
||||
"killScoreWeights": "杀分权重",
|
||||
|
||||
@@ -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' },
|
||||
{
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
{
|
||||
prop: 'coin',
|
||||
label: 'page.table.coin',
|
||||
width: 100,
|
||||
width: 110,
|
||||
align: 'center',
|
||||
useSlot: true
|
||||
},
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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 ?? ''
|
||||
}
|
||||
|
||||
|
||||
@@ -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' }
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user