[色子游戏]玩家抽奖记录-优化抽奖roll_array记录五个色子

This commit is contained in:
2026-03-04 13:43:56 +08:00
parent 6d2b74a899
commit 33e3603932
3 changed files with 18 additions and 18 deletions

View File

@@ -108,7 +108,7 @@
<el-form-item label="摇取点数" prop="rollArrayItems">
<div class="roll-array-wrap">
<el-input-number
v-for="(_, i) in 6"
v-for="(_, i) in 5"
:key="i"
v-model="formData.rollArrayItems[i]"
:min="1"
@@ -120,7 +120,7 @@
:disabled="dialogType === 'edit'"
/>
</div>
<div class="roll-array-hint">固定 6 个数每个 16</div>
<div class="roll-array-hint">固定 5 个数每个 16</div>
</el-form-item>
<el-form-item label="奖励配置" prop="reward_config_id">
<el-select
@@ -191,13 +191,13 @@
rollArrayItems: [
{
validator: (_rule: any, value: (number | null)[], callback: (e?: Error) => void) => {
if (!value || value.length !== 6) {
callback(new Error('摇取点数必须为 6 个数'))
if (!value || value.length !== 5) {
callback(new Error('摇取点数必须为 5 个数'))
return
}
const ok = value.every((n) => n != null && n >= 1 && n <= 6)
if (!ok) {
callback(new Error('摇取点数必须填写 6 个数,每个 16'))
callback(new Error('摇取点数必须填写 5 个数,每个 16'))
return
}
callback()
@@ -226,8 +226,8 @@
reward_config_id: null as number | null
}
/** 摇取点数固定 6 位 [n0..n5],每项 16 */
const rollArrayItemsDefault = (): (number | null)[] => [null, null, null, null, null, null]
/** 摇取点数固定 5 位 [n0..n4],每项 16 */
const rollArrayItemsDefault = (): (number | null)[] => [null, null, null, null, null]
const formData = reactive({
...initialFormData,
@@ -297,26 +297,26 @@
})
}
/** 将接口的 roll_array 转为固定 6 项数组,不足补 null */
/** 将接口的 roll_array 转为固定 5 项数组,不足补 null */
function parseRollArrayToItems(val: unknown): (number | null)[] {
let arr: number[] = []
if (Array.isArray(val)) {
arr = val.map((n) => (typeof n === 'number' && !Number.isNaN(n) ? n : 0)).slice(0, 6)
arr = val.map((n) => (typeof n === 'number' && !Number.isNaN(n) ? n : 0)).slice(0, 5)
} else if (typeof val === 'string') {
try {
const parsed = JSON.parse(val)
arr = Array.isArray(parsed) ? parsed.slice(0, 6).map((n: any) => Number(n) || 0) : []
arr = Array.isArray(parsed) ? parsed.slice(0, 5).map((n: any) => Number(n) || 0) : []
} catch {
arr = val
.split(',')
.map((n) => parseInt(n, 10))
.filter((n) => !Number.isNaN(n))
.slice(0, 6)
.slice(0, 5)
}
}
const items: (number | null)[] = [...arr]
while (items.length < 6) items.push(null)
return items.slice(0, 6)
while (items.length < 5) items.push(null)
return items.slice(0, 5)
}
const handleClose = () => {
@@ -329,7 +329,7 @@
try {
await formRef.value.validate()
const payload = { ...formData } as Record<string, unknown>
// 将 6 个输入值拼成 [1,2,3,4,5,6] 格式,确保每项为 16 的整数
// 将 5 个输入值拼成 [1,2,3,4,5] 格式,确保每项为 16 的整数
const items = formData.rollArrayItems
payload.roll_array = items.map((n) => {
const v = n != null ? Number(n) : 1