优化当前彩金池-安全线
This commit is contained in:
@@ -26,7 +26,26 @@
|
||||
"realtime": "Live",
|
||||
"profitCalcHint": "Sum of (win amount including BIGWIN minus 100 ticket cost) per round; 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)."
|
||||
"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 (type=1 read-only)",
|
||||
"killWeightNote": "(Kill weights from pool config type=1; edit in list.)",
|
||||
"btnResetProfit": "Reset Player Total Profit",
|
||||
"btnSaveSafetyLine": "Save Safety Line",
|
||||
"ruleSafetyLineRequired": "Please enter safety line",
|
||||
"msgGetPoolFailed": "Failed to get lottery pool",
|
||||
"msgSaveSuccess": "Saved",
|
||||
"msgResetProfitSuccess": "Player total profit reset to 0",
|
||||
"msgResetFailed": "Reset failed",
|
||||
"ruleNameRequired": "Name is required",
|
||||
"rulePoolTypeRequired": "Please select pool type",
|
||||
"ruleT1Required": "T1 weight is required",
|
||||
"ruleT2Required": "T2 weight is required",
|
||||
"ruleT3Required": "T3 weight is required",
|
||||
"ruleT4Required": "T4 weight is required",
|
||||
"ruleT5Required": "T5 weight is required",
|
||||
"msgWeightsMust100": "Total pool weights must equal 100%",
|
||||
"msgAddSuccess": "Added",
|
||||
"msgUpdateSuccess": "Updated"
|
||||
},
|
||||
"toolbar": {
|
||||
"viewCurrentPool": "View Current Pool"
|
||||
|
||||
@@ -26,7 +26,26 @@
|
||||
"realtime": "实时",
|
||||
"profitCalcHint": "计算方式:每局按“当前中奖金额(含超级大奖 BIGWIN)减去抽奖券费用 100”累加,弹窗打开期间每 2 秒自动刷新",
|
||||
"tierRuleTitle": "抽奖档位规则",
|
||||
"tierRuleContent": "当玩家在当前彩金池的累计盈利 低于安全线 时,按 玩家 的 T*_weight 权重抽取档位;当累计盈利 高于或等于安全线 时,按 当前彩金池 的 T*_weight 权重抽取档位(杀分)。"
|
||||
"tierRuleContent": "当玩家在当前彩金池的累计盈利 低于安全线 时,按 玩家 的 T*_weight 权重抽取档位;当累计盈利 高于或等于安全线 时,按 当前彩金池 的 T*_weight 权重抽取档位(杀分)。",
|
||||
"killScoreWeights": "杀分权重(type=1 只读)",
|
||||
"killWeightNote": "(杀分权重来自奖池配置 type=1,请在列表中编辑对应记录)",
|
||||
"btnResetProfit": "重置玩家累计盈利",
|
||||
"btnSaveSafetyLine": "保存安全线",
|
||||
"ruleSafetyLineRequired": "请输入安全线",
|
||||
"msgGetPoolFailed": "获取彩金池失败",
|
||||
"msgSaveSuccess": "保存成功",
|
||||
"msgResetProfitSuccess": "玩家累计盈利已重置为 0",
|
||||
"msgResetFailed": "重置失败",
|
||||
"ruleNameRequired": "名称必需填写",
|
||||
"rulePoolTypeRequired": "请选择奖池类型",
|
||||
"ruleT1Required": "T1池权重必需填写",
|
||||
"ruleT2Required": "T2池权重必需填写",
|
||||
"ruleT3Required": "T3池权重必需填写",
|
||||
"ruleT4Required": "T4池权重必需填写",
|
||||
"ruleT5Required": "T5池权重必需填写",
|
||||
"msgWeightsMust100": "五个池权重总和必须为100%",
|
||||
"msgAddSuccess": "新增成功",
|
||||
"msgUpdateSuccess": "修改成功"
|
||||
},
|
||||
"toolbar": {
|
||||
"viewCurrentPool": "查看当前彩金池"
|
||||
|
||||
@@ -42,38 +42,28 @@
|
||||
style="width: 100%"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('page.form.t1Weight')" prop="t1_weight">
|
||||
<el-slider v-model="formData.t1_weight" :min="0" :max="100" :step="1" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('page.form.t2Weight')" prop="t2_weight">
|
||||
<el-slider v-model="formData.t2_weight" :min="0" :max="100" :step="1" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('page.form.t3Weight')" prop="t3_weight">
|
||||
<el-slider v-model="formData.t3_weight" :min="0" :max="100" :step="1" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('page.form.t4Weight')" prop="t4_weight">
|
||||
<el-slider v-model="formData.t4_weight" :min="0" :max="100" :step="1" show-input />
|
||||
</el-form-item>
|
||||
<el-form-item :label="$t('page.form.t5Weight')" prop="t5_weight">
|
||||
<el-slider v-model="formData.t5_weight" :min="0" :max="100" :step="1" show-input />
|
||||
<el-form-item :label="$t('page.form.killScoreWeights')">
|
||||
<div class="text-gray-500 text-sm">
|
||||
T1: {{ pool.t1_weight }}% / T2: {{ pool.t2_weight }}% / T3: {{ pool.t3_weight }}% / T4: {{ pool.t4_weight }}% / T5: {{ pool.t5_weight }}%
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<div class="text-gray-500 text-sm">
|
||||
{{ $t('page.form.weightsSumHint') }}<span :class="weightsSum !== 100 ? 'text-red-500' : ''">{{
|
||||
weightsSum
|
||||
}}</span
|
||||
>{{ $t('page.form.weightsSumUnitCurrent') }}
|
||||
>{{ $t('page.form.weightsSumUnitCurrent') }} {{ $t('page.form.killWeightNote') }}
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<template #footer>
|
||||
<el-button @click="handleClose">关闭</el-button>
|
||||
<el-button @click="handleClose">{{ $t('form.close') }}</el-button>
|
||||
<el-button :loading="resetting" :disabled="!pool" @click="handleResetProfit">
|
||||
重置玩家累计盈利
|
||||
{{ $t('page.form.btnResetProfit') }}
|
||||
</el-button>
|
||||
<el-button type="primary" :loading="saving" :disabled="!pool" @click="handleSubmit">
|
||||
保存权重与安全线
|
||||
{{ $t('page.form.btnSaveSafetyLine') }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -83,6 +73,9 @@
|
||||
import api from '../../../api/lottery_pool_config/index'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
interface PoolData {
|
||||
id: number
|
||||
@@ -111,31 +104,18 @@
|
||||
const formRef = ref<FormInstance>()
|
||||
|
||||
const formData = reactive({
|
||||
safety_line: 0,
|
||||
t1_weight: 0,
|
||||
t2_weight: 0,
|
||||
t3_weight: 0,
|
||||
t4_weight: 0,
|
||||
t5_weight: 0
|
||||
safety_line: 0
|
||||
})
|
||||
|
||||
const rules: FormRules = {
|
||||
safety_line: [{ required: true, message: '请输入安全线', trigger: 'blur' }],
|
||||
t1_weight: [{ required: true, message: '请输入T1权重', trigger: 'blur' }],
|
||||
t2_weight: [{ required: true, message: '请输入T2权重', trigger: 'blur' }],
|
||||
t3_weight: [{ required: true, message: '请输入T3权重', trigger: 'blur' }],
|
||||
t4_weight: [{ required: true, message: '请输入T4权重', trigger: 'blur' }],
|
||||
t5_weight: [{ required: true, message: '请输入T5权重', trigger: 'blur' }]
|
||||
}
|
||||
const rules = computed<FormRules>(() => ({
|
||||
safety_line: [{ required: true, message: t('page.form.ruleSafetyLineRequired'), trigger: 'blur' }]
|
||||
}))
|
||||
|
||||
const weightsSum = computed(
|
||||
() =>
|
||||
formData.t1_weight +
|
||||
formData.t2_weight +
|
||||
formData.t3_weight +
|
||||
formData.t4_weight +
|
||||
formData.t5_weight
|
||||
)
|
||||
const weightsSum = computed(() => {
|
||||
const p = pool.value
|
||||
if (!p) return 0
|
||||
return (p.t1_weight ?? 0) + (p.t2_weight ?? 0) + (p.t3_weight ?? 0) + (p.t4_weight ?? 0) + (p.t5_weight ?? 0)
|
||||
})
|
||||
|
||||
const displayProfitAmount = computed(() => {
|
||||
const v = pool.value?.profit_amount
|
||||
@@ -163,14 +143,9 @@
|
||||
if (data && typeof data === 'object') {
|
||||
pool.value = data
|
||||
formData.safety_line = data.safety_line ?? 0
|
||||
formData.t1_weight = data.t1_weight ?? 0
|
||||
formData.t2_weight = data.t2_weight ?? 0
|
||||
formData.t3_weight = data.t3_weight ?? 0
|
||||
formData.t4_weight = data.t4_weight ?? 0
|
||||
formData.t5_weight = data.t5_weight ?? 0
|
||||
}
|
||||
} catch (e: any) {
|
||||
ElMessage.error(e?.message ?? '获取彩金池失败')
|
||||
ElMessage.error(e?.message ?? t('page.form.msgGetPoolFailed'))
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
@@ -200,23 +175,14 @@
|
||||
}
|
||||
|
||||
async function handleSubmit() {
|
||||
if (!formRef.value || !pool.value) return
|
||||
if (weightsSum.value !== 100) {
|
||||
ElMessage.warning('T1~T5 权重合计须为 100%')
|
||||
return
|
||||
}
|
||||
if (!pool.value) return
|
||||
try {
|
||||
await formRef.value.validate()
|
||||
await formRef.value?.validate?.()
|
||||
saving.value = true
|
||||
await api.updateCurrentPool({
|
||||
safety_line: formData.safety_line,
|
||||
t1_weight: formData.t1_weight,
|
||||
t2_weight: formData.t2_weight,
|
||||
t3_weight: formData.t3_weight,
|
||||
t4_weight: formData.t4_weight,
|
||||
t5_weight: formData.t5_weight
|
||||
safety_line: formData.safety_line
|
||||
})
|
||||
ElMessage.success('保存成功')
|
||||
ElMessage.success(t('page.form.msgSaveSuccess'))
|
||||
await loadPool()
|
||||
emit('success')
|
||||
} catch (e: any) {
|
||||
@@ -231,11 +197,11 @@
|
||||
try {
|
||||
resetting.value = true
|
||||
await api.resetProfitAmount()
|
||||
ElMessage.success('玩家累计盈利已重置为 0')
|
||||
ElMessage.success(t('page.form.msgResetProfitSuccess'))
|
||||
await loadPool()
|
||||
emit('success')
|
||||
} catch (e: any) {
|
||||
ElMessage.error(e?.message ?? '重置失败')
|
||||
ElMessage.error(e?.message ?? t('page.form.msgResetFailed'))
|
||||
} finally {
|
||||
resetting.value = false
|
||||
}
|
||||
|
||||
@@ -81,6 +81,9 @@
|
||||
import api from '../../../api/lottery_pool_config/index'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import type { FormInstance, FormRules } from 'element-plus'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
interface Props {
|
||||
modelValue: boolean
|
||||
@@ -122,15 +125,15 @@
|
||||
/**
|
||||
* 表单验证规则
|
||||
*/
|
||||
const rules = reactive<FormRules>({
|
||||
name: [{ required: true, message: '名称必需填写', trigger: 'blur' }],
|
||||
type: [{ required: true, message: '请选择奖池类型', trigger: 'change' }],
|
||||
t1_weight: [{ required: true, message: 'T1池权重必需填写', trigger: 'blur' }],
|
||||
t2_weight: [{ required: true, message: 'T2池权重必需填写', trigger: 'blur' }],
|
||||
t3_weight: [{ required: true, message: 'T3池权重必需填写', trigger: 'blur' }],
|
||||
t4_weight: [{ required: true, message: 'T4池权重必需填写', trigger: 'blur' }],
|
||||
t5_weight: [{ required: true, message: 'T5池权重必需填写', trigger: 'blur' }]
|
||||
})
|
||||
const rules = computed<FormRules>(() => ({
|
||||
name: [{ required: true, message: t('page.form.ruleNameRequired'), trigger: 'blur' }],
|
||||
type: [{ required: true, message: t('page.form.rulePoolTypeRequired'), trigger: 'change' }],
|
||||
t1_weight: [{ required: true, message: t('page.form.ruleT1Required'), trigger: 'blur' }],
|
||||
t2_weight: [{ required: true, message: t('page.form.ruleT2Required'), trigger: 'blur' }],
|
||||
t3_weight: [{ required: true, message: t('page.form.ruleT3Required'), trigger: 'blur' }],
|
||||
t4_weight: [{ required: true, message: t('page.form.ruleT4Required'), trigger: 'blur' }],
|
||||
t5_weight: [{ required: true, message: t('page.form.ruleT5Required'), trigger: 'blur' }]
|
||||
}))
|
||||
|
||||
/**
|
||||
* 初始数据(权重为数字便于输入与校验)
|
||||
@@ -221,15 +224,15 @@
|
||||
try {
|
||||
await formRef.value.validate()
|
||||
if (Math.abs(weightsSum.value - 100) > 0.01) {
|
||||
ElMessage.warning('五个池权重总和必须为100%')
|
||||
ElMessage.warning(t('page.form.msgWeightsMust100'))
|
||||
return
|
||||
}
|
||||
if (props.dialogType === 'add') {
|
||||
await api.save(formData)
|
||||
ElMessage.success('新增成功')
|
||||
ElMessage.success(t('page.form.msgAddSuccess'))
|
||||
} else {
|
||||
await api.update(formData)
|
||||
ElMessage.success('修改成功')
|
||||
ElMessage.success(t('page.form.msgUpdateSuccess'))
|
||||
}
|
||||
emit('success')
|
||||
handleClose()
|
||||
|
||||
Reference in New Issue
Block a user