[色子游戏]奖池配置
This commit is contained in:
@@ -110,9 +110,13 @@
|
||||
columnsFactory: () => [
|
||||
{ type: 'selection' },
|
||||
{ prop: 'name', label: '名称' },
|
||||
{ prop: 'weight', label: '权重' },
|
||||
{ prop: 'type', label: '奖池类型' },
|
||||
{ prop: 'safety_line', label: '安全线' },
|
||||
{ prop: 't1_wight', label: 'T1池权重' },
|
||||
{ prop: 't2_wight', label: 'T2池权重' },
|
||||
{ prop: 't3_wight', label: 'T3池权重' },
|
||||
{ prop: 't4_wight', label: 'T4池权重' },
|
||||
{ prop: 't5_wight', label: 'T5池权重' },
|
||||
{ prop: 'operation', label: '操作', width: 100, fixed: 'right', useSlot: true }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:title="dialogType === 'add' ? '新增色子奖池配置' : '编辑色子奖池配置'"
|
||||
width="500px"
|
||||
width="600px"
|
||||
align-center
|
||||
:close-on-click-modal="false"
|
||||
@close="handleClose"
|
||||
@@ -11,17 +11,58 @@
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="权重" prop="weight">
|
||||
<el-slider v-model="formData.weight" placeholder="请输入权重" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
||||
<el-input
|
||||
v-model="formData.remark"
|
||||
type="textarea"
|
||||
:rows="3"
|
||||
placeholder="请输入备注"
|
||||
maxlength="500"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="奖池类型" prop="type">
|
||||
<el-select v-model="formData.type" :options="[]" placeholder="请选择奖池类型" clearable />
|
||||
<el-select
|
||||
v-model="formData.type"
|
||||
placeholder="请选择奖池类型"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option label="正常" :value="0" />
|
||||
<el-option label="强制杀猪" :value="1" />
|
||||
<el-option label="T1高倍率" :value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="安全线" prop="safety_line">
|
||||
<el-input v-model="formData.safety_line" placeholder="请输入安全线" />
|
||||
<el-input-number
|
||||
v-model="formData.safety_line"
|
||||
:min="0"
|
||||
:precision="2"
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="T1池权重(%)" prop="t1_wight">
|
||||
<el-slider v-model="formData.t1_wight" :min="0" :max="100" :step="0.01" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item label="T2池权重(%)" prop="t2_wight">
|
||||
<el-slider v-model="formData.t2_wight" :min="0" :max="100" :step="0.01" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item label="T3池权重(%)" prop="t3_wight">
|
||||
<el-slider v-model="formData.t3_wight" :min="0" :max="100" :step="0.01" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item label="T4池权重(%)" prop="t4_wight">
|
||||
<el-slider v-model="formData.t4_wight" :min="0" :max="100" :step="0.01" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item label="T5池权重(%)" prop="t5_wight">
|
||||
<el-slider v-model="formData.t5_wight" :min="0" :max="100" :step="0.01" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<div class="text-gray-500 text-sm">
|
||||
五个池权重总和:<span :class="weightsSum > 100 ? 'text-red-500' : ''">{{
|
||||
weightsSum
|
||||
}}</span
|
||||
>% / 100%(不可超过100%)
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
@@ -65,26 +106,41 @@
|
||||
set: (value) => emit('update:modelValue', value)
|
||||
})
|
||||
|
||||
/** 五个权重字段名,用于总和校验 */
|
||||
const WEIGHT_KEYS = ['t1_wight', 't2_wight', 't3_wight', 't4_wight', 't5_wight'] as const
|
||||
|
||||
/** 五个池权重总和(用于展示与校验) */
|
||||
const weightsSum = computed(() => {
|
||||
return WEIGHT_KEYS.reduce((sum, key) => sum + Number(formData[key] ?? 0), 0)
|
||||
})
|
||||
|
||||
/**
|
||||
* 表单验证规则
|
||||
*/
|
||||
const rules = reactive<FormRules>({
|
||||
name: [{ required: true, message: '名称必需填写', trigger: 'blur' }],
|
||||
weight: [{ required: true, message: '权重必需填写', trigger: 'blur' }],
|
||||
remark: [{ required: true, message: '备注必需填写', trigger: 'blur' }],
|
||||
type: [{ required: true, message: '奖池类型必需填写', trigger: 'blur' }],
|
||||
type: [{ required: true, message: '请选择奖池类型', trigger: 'change' }],
|
||||
t1_wight: [{ required: true, message: 'T1池权重必需填写', trigger: 'blur' }],
|
||||
t2_wight: [{ required: true, message: 'T2池权重必需填写', trigger: 'blur' }],
|
||||
t3_wight: [{ required: true, message: 'T3池权重必需填写', trigger: 'blur' }],
|
||||
t4_wight: [{ required: true, message: 'T4池权重必需填写', trigger: 'blur' }],
|
||||
t5_wight: [{ required: true, message: 'T5池权重必需填写', trigger: 'blur' }]
|
||||
})
|
||||
|
||||
/**
|
||||
* 初始数据
|
||||
* 初始数据(权重为数字便于输入与校验)
|
||||
*/
|
||||
const initialFormData = {
|
||||
id: null,
|
||||
id: null as number | null,
|
||||
name: '',
|
||||
weight: '0.00',
|
||||
remark: '',
|
||||
type: null,
|
||||
safety_line: '0.00',
|
||||
type: null as number | null,
|
||||
safety_line: 0 as number,
|
||||
t1_wight: 0 as number,
|
||||
t2_wight: 0 as number,
|
||||
t3_wight: 0 as number,
|
||||
t4_wight: 0 as number,
|
||||
t5_wight: 0 as number
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -118,14 +174,23 @@
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化表单数据
|
||||
* 初始化表单数据(数值字段转为 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 = [
|
||||
'type',
|
||||
'safety_line',
|
||||
't1_wight',
|
||||
't2_wight',
|
||||
't3_wight',
|
||||
't4_wight',
|
||||
't5_wight'
|
||||
]
|
||||
for (const key in formData) {
|
||||
if (props.data[key] != null && props.data[key] !== undefined) {
|
||||
const val = props.data[key]
|
||||
;(formData as any)[key] = numKeys.includes(key) ? Number(val) : val
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -145,6 +210,10 @@
|
||||
if (!formRef.value) return
|
||||
try {
|
||||
await formRef.value.validate()
|
||||
if (weightsSum.value > 100) {
|
||||
ElMessage.warning('五个池权重总和不能超过100%')
|
||||
return
|
||||
}
|
||||
if (props.dialogType === 'add') {
|
||||
await api.save(formData)
|
||||
ElMessage.success('新增成功')
|
||||
|
||||
@@ -15,7 +15,12 @@
|
||||
</el-col>
|
||||
<el-col v-bind="setSpan(6)">
|
||||
<el-form-item label="奖池类型" prop="type">
|
||||
<el-select v-model="formData.type" :options="[]" placeholder="请选择奖池类型" clearable />
|
||||
<el-select
|
||||
v-model="formData.type"
|
||||
:options="typeOptions"
|
||||
placeholder="请选择奖池类型"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</sa-search-bar>
|
||||
@@ -35,6 +40,11 @@
|
||||
// 展开/收起
|
||||
const isExpanded = ref<boolean>(false)
|
||||
|
||||
const typeOptions = [
|
||||
{ name: '0', value: '正常' },
|
||||
{ name: '1', value: '强制杀猪' },
|
||||
{ name: '2', value: 'T1高倍率' }
|
||||
]
|
||||
// 表单数据双向绑定
|
||||
const searchBarRef = ref()
|
||||
const formData = computed({
|
||||
|
||||
Reference in New Issue
Block a user