优化游玩记录DicePlayRecord
This commit is contained in:
@@ -117,6 +117,8 @@
|
||||
is_win: undefined,
|
||||
win_coin_min: undefined,
|
||||
win_coin_max: undefined,
|
||||
roll_number_min: undefined,
|
||||
roll_number_max: undefined,
|
||||
reward_ui_text: undefined,
|
||||
reward_tier: undefined,
|
||||
direction: undefined
|
||||
@@ -190,6 +192,7 @@
|
||||
{ prop: 'start_index', label: '起始索引', width: 90 },
|
||||
{ prop: 'target_index', label: '终点索引', width: 90 },
|
||||
{ prop: 'roll_array', label: '摇取点数', width: 140, useSlot: true },
|
||||
{ prop: 'roll_number', label: '摇取点数和', width: 110, sortable: true },
|
||||
{
|
||||
prop: 'reward_config_id',
|
||||
label: '奖励配置',
|
||||
|
||||
@@ -142,6 +142,17 @@
|
||||
</div>
|
||||
<div class="roll-array-hint">固定 5 个数,每个 1~6</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="摇取点数和" prop="roll_number">
|
||||
<el-input-number
|
||||
v-model="formData.roll_number"
|
||||
placeholder="5 个色子点数之和(5~30)"
|
||||
:min="5"
|
||||
:max="30"
|
||||
:precision="0"
|
||||
style="width: 100%"
|
||||
:disabled="dialogType === 'edit'"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="奖励配置" prop="reward_config_id">
|
||||
<el-select
|
||||
v-model="formData.reward_config_id"
|
||||
@@ -245,6 +256,7 @@
|
||||
start_index: null as number | null,
|
||||
target_index: null as number | null,
|
||||
roll_array: null as string | number[] | null,
|
||||
roll_number: null as number | null,
|
||||
reward_config_id: null as number | null
|
||||
}
|
||||
|
||||
@@ -306,6 +318,7 @@
|
||||
'start_index',
|
||||
'target_index',
|
||||
'roll_array',
|
||||
'roll_number',
|
||||
'reward_config_id'
|
||||
]
|
||||
keys.forEach((key) => {
|
||||
@@ -319,6 +332,10 @@
|
||||
}
|
||||
}
|
||||
})
|
||||
// 若后端未返回 roll_number,根据摇取点数计算
|
||||
if (formData.roll_number == null && formData.rollArrayItems.length === 5) {
|
||||
formData.roll_number = formData.rollArrayItems.reduce((s, n) => s + (n ?? 0), 0) || null
|
||||
}
|
||||
}
|
||||
|
||||
/** 将接口的 roll_array 转为固定 5 项数组,不足补 null */
|
||||
@@ -355,10 +372,12 @@
|
||||
const payload = { ...formData } as Record<string, unknown>
|
||||
// 将 5 个输入值拼成 [1,2,3,4,5] 格式,确保每项为 1~6 的整数
|
||||
const items = formData.rollArrayItems
|
||||
payload.roll_array = items.map((n) => {
|
||||
const rollArray = items.map((n) => {
|
||||
const v = n != null ? Number(n) : 1
|
||||
return Math.min(6, Math.max(1, Number.isNaN(v) ? 1 : Math.floor(v)))
|
||||
})
|
||||
payload.roll_array = rollArray
|
||||
payload.roll_number = formData.roll_number ?? rollArray.reduce((s, n) => s + n, 0)
|
||||
delete payload.rollArrayItems
|
||||
if (props.dialogType === 'add') {
|
||||
delete payload.id
|
||||
|
||||
@@ -63,6 +63,31 @@
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col v-bind="setSpan(6)">
|
||||
<el-form-item label="摇取点数和" prop="roll_number_min">
|
||||
<div class="range-wrap">
|
||||
<el-input-number
|
||||
v-model="formData.roll_number_min"
|
||||
placeholder="最小"
|
||||
:min="5"
|
||||
:max="30"
|
||||
:precision="0"
|
||||
controls-position="right"
|
||||
class="range-input"
|
||||
/>
|
||||
<span class="range-sep">至</span>
|
||||
<el-input-number
|
||||
v-model="formData.roll_number_max"
|
||||
placeholder="最大"
|
||||
:min="5"
|
||||
:max="30"
|
||||
:precision="0"
|
||||
controls-position="right"
|
||||
class="range-input"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col v-bind="setSpan(6)">
|
||||
<el-form-item label="奖励配置" prop="reward_ui_text">
|
||||
<el-input v-model="formData.reward_ui_text" placeholder="前端显示文本模糊" clearable />
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
{ prop: 'ui_text', label: '前端显示文本', align: 'center' },
|
||||
{ prop: 'real_ev', label: '真实资金结算', align: 'center' },
|
||||
{ prop: 'tier', label: '所属档位', sortable: true, align: 'center' },
|
||||
{ prop: 'weight', label: '权重(%)', width: 100, align: 'center' },
|
||||
// { prop: 'create_time', label: '创建时间', sortable: true, align: 'center' },
|
||||
{
|
||||
prop: 'operation',
|
||||
|
||||
@@ -34,8 +34,12 @@
|
||||
<el-option label="T3" value="T3" />
|
||||
<el-option label="T4" value="T4" />
|
||||
<el-option label="T5" value="T5" />
|
||||
<el-option label="BIGWIN(超级大奖)" value="BIGWIN" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.tier === 'BIGWIN'" label="权重(%)" prop="weight">
|
||||
<el-slider v-model="formData.weight" :min="0" :max="100" :step="0.01" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
v-model="formData.remark"
|
||||
@@ -95,7 +99,24 @@
|
||||
grid_number: [{ required: true, message: '色子点数必需填写', trigger: 'blur' }],
|
||||
ui_text: [{ required: true, message: '前端显示文本必需填写', trigger: 'blur' }],
|
||||
real_ev: [{ required: true, message: '真实资金结算必需填写', trigger: 'blur' }],
|
||||
tier: [{ required: true, message: '所属档位必需填写', trigger: 'blur' }]
|
||||
tier: [{ required: true, message: '所属档位必需填写', trigger: 'blur' }],
|
||||
weight: [
|
||||
{
|
||||
validator: (_rule: unknown, value: number | null, callback: (e?: Error) => void) => {
|
||||
if (formData.tier !== 'BIGWIN') {
|
||||
callback()
|
||||
return
|
||||
}
|
||||
const n = value != null ? Number(value) : NaN
|
||||
if (Number.isNaN(n) || n < 0 || n > 100) {
|
||||
callback(new Error('权重仅 BIGWIN 可设定,且必须为 0-100%'))
|
||||
return
|
||||
}
|
||||
callback()
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
/**
|
||||
@@ -107,6 +128,7 @@
|
||||
ui_text: '',
|
||||
real_ev: '',
|
||||
tier: '',
|
||||
weight: 0 as number,
|
||||
remark: ''
|
||||
}
|
||||
|
||||
@@ -141,14 +163,21 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化表单数据
|
||||
* 初始化表单数据(数值字段转为 number,便于滑块/输入框正确回显)
|
||||
*/
|
||||
const initForm = () => {
|
||||
if (props.data) {
|
||||
for (const key in formData) {
|
||||
if (props.data[key] != null && props.data[key] != undefined) {
|
||||
;(formData as any)[key] = props.data[key]
|
||||
}
|
||||
if (!props.data) return
|
||||
const numKeys = ['id', 'grid_number', 'real_ev', 'weight']
|
||||
for (const key of Object.keys(formData)) {
|
||||
if (!(key in props.data)) continue
|
||||
const val = props.data[key]
|
||||
if (val == null || val === undefined) continue
|
||||
if (numKeys.includes(key)) {
|
||||
const numVal = Number(val)
|
||||
;(formData as Record<string, unknown>)[key] =
|
||||
key === 'id' ? numVal || null : Number.isNaN(numVal) ? 0 : numVal
|
||||
} else {
|
||||
;(formData as Record<string, unknown>)[key] = val ?? ''
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -168,11 +197,18 @@
|
||||
if (!formRef.value) return
|
||||
try {
|
||||
await formRef.value.validate()
|
||||
const payload = { ...formData }
|
||||
if (payload.tier !== 'BIGWIN') {
|
||||
payload.weight = 0
|
||||
} else {
|
||||
const w = Number(payload.weight)
|
||||
payload.weight = Number.isNaN(w) ? 0 : Math.max(0, Math.min(100, w))
|
||||
}
|
||||
if (props.dialogType === 'add') {
|
||||
await api.save(formData)
|
||||
await api.save(payload)
|
||||
ElMessage.success('新增成功')
|
||||
} else {
|
||||
await api.update(formData)
|
||||
await api.update(payload)
|
||||
ElMessage.success('修改成功')
|
||||
}
|
||||
emit('success')
|
||||
|
||||
Reference in New Issue
Block a user