1.新增默认彩金池配置

2.优化关联彩金池配置的名称显示
3.优化一键测试权重
4.优化底注配置
This commit is contained in:
2026-06-04 12:29:23 +08:00
parent dfb37dd33a
commit 8c6c122dc2
6 changed files with 58 additions and 65 deletions

View File

@@ -12,6 +12,19 @@ export type LotteryPoolConfigOption = LotteryPoolOption & {
t5_weight: number
}
/** 规范化接口返回的彩金池配置(含权重) */
export function parseLotteryPoolConfigOption(raw: Record<string, unknown>): LotteryPoolConfigOption {
const base = normalizeLotteryPoolOption(raw)
return {
...base,
t1_weight: Number(raw.t1_weight ?? 0),
t2_weight: Number(raw.t2_weight ?? 0),
t3_weight: Number(raw.t3_weight ?? 0),
t4_weight: Number(raw.t4_weight ?? 0),
t5_weight: Number(raw.t5_weight ?? 0)
}
}
/**
* 色子奖池配置 API 接口
*/
@@ -39,17 +52,7 @@ export default {
})
const rows = Array.isArray(res) ? res : (Array.isArray((res as any)?.data) ? (res as any).data : [])
if (!Array.isArray(rows)) return []
return rows.map((r: Record<string, unknown>) => {
const base = normalizeLotteryPoolOption(r)
return {
...base,
t1_weight: Number(r.t1_weight ?? 0),
t2_weight: Number(r.t2_weight ?? 0),
t3_weight: Number(r.t3_weight ?? 0),
t4_weight: Number(r.t4_weight ?? 0),
t5_weight: Number(r.t5_weight ?? 0)
}
})
return rows.map((r: Record<string, unknown>) => parseLotteryPoolConfigOption(r))
},
/**

View File

@@ -1,5 +1,5 @@
import request from '@/utils/http'
import { normalizeLotteryPoolOption } from '@/views/plugin/dice/utils/lotteryPoolDisplay'
import { normalizeLotteryPoolOption, type LotteryPoolOption } from '@/views/plugin/dice/utils/lotteryPoolDisplay'
/**
* 大富翁-玩家 API接口
@@ -87,7 +87,7 @@ export default {
/**
* 获取彩金池配置选项,供 lottery_config_id 下拉使用(含奖池名称 display_name
*/
async getLotteryConfigOptions(params?: Record<string, unknown>) {
async getLotteryConfigOptions(params?: Record<string, unknown>): Promise<LotteryPoolOption[]> {
const res = await request.get<any>({
url: '/core/dice/player/DicePlayer/getLotteryConfigOptions',
params

View File

@@ -183,9 +183,16 @@
<script setup lang="ts">
import api from '../../../api/player/index'
import lotteryConfigApi from '../../../api/lottery_pool_config/index'
import lotteryConfigApi, {
parseLotteryPoolConfigOption,
type LotteryPoolConfigOption
} from '../../../api/lottery_pool_config/index'
import { useI18n } from 'vue-i18n'
import { lotteryPoolDisplayLabel, lotteryPoolOptionLabel } from '@/views/plugin/dice/utils/lotteryPoolDisplay'
import {
lotteryPoolDisplayLabel,
lotteryPoolOptionLabel,
type LotteryPoolOption
} from '@/views/plugin/dice/utils/lotteryPoolDisplay'
import { getChannelDeptRequestParams, withChannelDeptParams } from '@/composables/useChannelDeptScope'
import { isSuperAdminUser } from '@/utils/channelLayout'
import { ElMessage } from 'element-plus'
@@ -273,7 +280,7 @@
const formData = reactive({ ...initialFormData })
/** 彩金池配置下拉选项DiceLotteryConfig id、name */
const lotteryConfigOptions = ref<Array<{ id: number; name: string }>>([])
const lotteryConfigOptions = ref<LotteryPoolOption[]>([])
/** 彩金池选项加载中 */
const lotteryConfigLoading = ref(false)
/** 后台管理员下拉选项SystemUser */
@@ -299,7 +306,21 @@
/** 管理员选项加载中 */
const systemUserOptionsLoading = ref(false)
/** 当前选中的 DiceLotteryConfig 完整数据(用于展示) */
const currentLotteryConfig = ref<Record<string, any> | null>(null)
const currentLotteryConfig = ref<LotteryPoolConfigOption | null>(null)
function isRecord(value: unknown): value is Record<string, unknown> {
return value !== null && typeof value === 'object'
}
function extractReadPayload(res: unknown): Record<string, unknown> | null {
if (!isRecord(res)) {
return null
}
if (isRecord(res.data)) {
return res.data
}
return res
}
function lotteryConfigTypeText(name: unknown): string {
const n = String(name ?? '')
@@ -324,8 +345,9 @@
}
try {
const res = await lotteryConfigApi.read(id)
const row = (res as any)?.data ?? (res as any)
if (row && typeof row === 'object') {
const payload = extractReadPayload(res)
if (payload) {
const row = parseLotteryPoolConfigOption(payload)
currentLotteryConfig.value = row
WEIGHT_FIELDS.forEach((key) => {
;(formData as any)[key] = Number(row[key] ?? 0)
@@ -353,8 +375,9 @@
}
try {
const res = await lotteryConfigApi.read(lotteryConfigId)
const row = (res as any)?.data ?? (res as any)
if (row && typeof row === 'object') {
const payload = extractReadPayload(res)
if (payload) {
const row = parseLotteryPoolConfigOption(payload)
WEIGHT_FIELDS.forEach((key) => {
;(formData as any)[key] = Number(row[key] ?? 0)
})

View File

@@ -65,7 +65,7 @@
<script setup lang="ts">
import api from '../../../api/player/index'
import { lotteryPoolOptionLabel } from '@/views/plugin/dice/utils/lotteryPoolDisplay'
import { lotteryPoolOptionLabel, type LotteryPoolOption } from '@/views/plugin/dice/utils/lotteryPoolDisplay'
interface Props {
modelValue: Record<string, any>
@@ -78,7 +78,7 @@
const props = defineProps<Props>()
const emit = defineEmits<Emits>()
const isExpanded = ref<boolean>(false)
const lotteryConfigOptions = ref<Array<{ id: number; name: string }>>([])
const lotteryConfigOptions = ref<LotteryPoolOption[]>([])
/** 从玩家控制器获取 DiceLotteryPoolConfig id/name 列表,用于 lottery_config_id 筛选 */
onMounted(async () => {

View File

@@ -226,7 +226,7 @@
<script setup lang="ts">
import api from '../../../api/reward/index'
import anteConfigApi from '../../../api/ante_config/index'
import lotteryPoolApi from '../../../api/lottery_pool_config/index'
import lotteryPoolApi, { type LotteryPoolConfigOption } from '../../../api/lottery_pool_config/index'
import { ElMessage } from 'element-plus'
import { useI18n } from 'vue-i18n'
import {
@@ -272,18 +272,7 @@
kill_mode_enabled: false,
test_safety_line: 0
})
type LotteryPoolOption = {
id: number
name: string
remark?: string
display_name?: string
t1_weight?: number
t2_weight?: number
t3_weight?: number
t4_weight?: number
t5_weight?: number
}
const lotteryOptions = ref<LotteryPoolOption[]>([])
const lotteryOptions = ref<LotteryPoolConfigOption[]>([])
const selectedPaidPool = computed(() =>
lotteryOptions.value.find((r) => r.id === form.paid_lottery_config_id) ?? null
)
@@ -355,9 +344,9 @@
return label ? `${label} (×${item.mult})` : `×${item.mult}`
}
function poolTierWeightsText(pool: LotteryPoolOption): string {
function poolTierWeightsText(pool: LotteryPoolConfigOption): string {
const parts = tierKeys.map((t) => {
const key = `${t.toLowerCase()}_weight` as keyof LotteryPoolOption
const key = `${t.toLowerCase()}_weight` as keyof LotteryPoolConfigOption
const v = pool[key]
return `${t} ${v ?? 0}%`
})
@@ -407,31 +396,9 @@
async function loadLotteryOptions() {
try {
const list = await lotteryPoolApi.getOptions(resolveDeptParams())
lotteryOptions.value = list.map(
(r: {
id: number
name: string
remark?: string
display_name?: string
t1_weight?: number
t2_weight?: number
t3_weight?: number
t4_weight?: number
t5_weight?: number
}) => ({
id: r.id,
name: r.name,
remark: r.remark,
display_name: r.display_name,
t1_weight: r.t1_weight,
t2_weight: r.t2_weight,
t3_weight: r.t3_weight,
t4_weight: r.t4_weight,
t5_weight: r.t5_weight
})
)
const playerDefault = list.find((r: { name?: string }) => r.name === 'playerDefault')
const normal = list.find((r: { name?: string }) => r.name === 'default')
lotteryOptions.value = list
const playerDefault = list.find((r) => r.name === 'playerDefault')
const normal = list.find((r) => r.name === 'default')
if (playerDefault) {
form.paid_lottery_config_id = playerDefault.id
} else if (normal) {

View File

@@ -298,7 +298,7 @@
return t('page.detail.killModeOff')
}
const line = record.test_safety_line
if (line === null || line === undefined || line === '') {
if (line === null || line === undefined) {
return t('page.detail.dash')
}
return String(line)
@@ -307,7 +307,7 @@
function formatAnteDetail(record: RecordRow | null): string {
if (!record) return t('page.detail.dash')
const ante = record.ante
if (ante === null || ante === undefined || ante === '') {
if (ante === null || ante === undefined) {
return t('page.detail.dash')
}
const snap = record.tier_weights_snapshot