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

View File

@@ -28,7 +28,7 @@ use think\model\relation\BelongsTo;
* @property $lottery_id 奖池 * @property $lottery_id 奖池
* @property $start_index 起始索引 * @property $start_index 起始索引
* @property $target_index 结束索引 * @property $target_index 结束索引
* @property $roll_array 摇取点数,格式:[1,2,3,4,5,6] * @property $roll_array 摇取点数,格式:[1,2,3,4,5]5个点数
* @property $lottery_name 奖池名 * @property $lottery_name 奖池名
* @property $create_time 创建时间 * @property $create_time 创建时间
* @property $update_time 修改时间 * @property $update_time 修改时间

View File

@@ -64,7 +64,7 @@ class DicePlayRecordValidate extends BaseValidate
]; ];
/** /**
* 验证 roll_array必须为 6 个元素,每个值在 16 之间 * 验证 roll_array必须为 5 个元素,每个值在 16 之间
* @param mixed $value * @param mixed $value
* @param mixed $rule * @param mixed $rule
* @param array $data * @param array $data
@@ -80,8 +80,8 @@ class DicePlayRecordValidate extends BaseValidate
if (!is_array($value)) { if (!is_array($value)) {
return '摇取点数必须为数组'; return '摇取点数必须为数组';
} }
if (count($value) !== 6) { if (count($value) !== 5) {
return '摇取点数必须为 6 个数'; return '摇取点数必须为 5 个数';
} }
foreach ($value as $i => $n) { foreach ($value as $i => $n) {
$v = is_numeric($n) ? (int) $n : null; $v = is_numeric($n) ? (int) $n : null;