From 83d46fd95d4ffaf30df6afb2de299a84a5fd5f6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=8D=97=E5=9B=BD?= <164292041@qq.com> Date: Fri, 12 Jun 2026 16:41:32 +0800 Subject: [PATCH] =?UTF-8?q?[fix]=E4=BF=AE=E5=A4=8D=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/api/backend/embed.ts | 4 +-- web/src/lang/backend/en/embed/gameRtp.ts | 2 ++ web/src/lang/backend/zh-cn/embed/gameRtp.ts | 2 ++ web/src/views/backend/embed/gameRtp.vue | 38 +++++++++++++++++---- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/web/src/api/backend/embed.ts b/web/src/api/backend/embed.ts index 37df461..7dc169b 100644 --- a/web/src/api/backend/embed.ts +++ b/web/src/api/backend/embed.ts @@ -69,8 +69,8 @@ export interface SaveGameRtpPayload { auto_game_rtp: 0 | 1 auto_rtp_amount: Record auto_frequency: number - provider_display: string - custom_config: string + provider_display: Record | unknown[] + custom_config: Record header_image_url: string text_color: string button_text_color: string diff --git a/web/src/lang/backend/en/embed/gameRtp.ts b/web/src/lang/backend/en/embed/gameRtp.ts index 09561ac..33820b8 100644 --- a/web/src/lang/backend/en/embed/gameRtp.ts +++ b/web/src/lang/backend/en/embed/gameRtp.ts @@ -46,6 +46,8 @@ export default { urlRequired: 'Please enter the game image URL', saved: 'Settings saved', invalidAutoAmount: 'Auto RTP Amount must be a valid JSON object', + invalidProviderDisplay: 'Provider Display must be a valid JSON array or object', + invalidCustomConfig: 'Custom Config must be a valid JSON object', copied: 'Embed code copied', copyFailed: 'Unable to copy the embed code', operationSuccess: 'Operation completed', diff --git a/web/src/lang/backend/zh-cn/embed/gameRtp.ts b/web/src/lang/backend/zh-cn/embed/gameRtp.ts index 54238c8..f1ecb4b 100644 --- a/web/src/lang/backend/zh-cn/embed/gameRtp.ts +++ b/web/src/lang/backend/zh-cn/embed/gameRtp.ts @@ -46,6 +46,8 @@ export default { urlRequired: '请输入游戏图片 URL', saved: '设置已保存', invalidAutoAmount: '自动 RTP 范围必须是有效的 JSON 对象', + invalidProviderDisplay: '显示供应商必须是有效的 JSON 数组或对象', + invalidCustomConfig: '自定义配置必须是有效的 JSON 对象', copied: '嵌入代码已复制', copyFailed: '无法复制嵌入代码', operationSuccess: '操作成功', diff --git a/web/src/views/backend/embed/gameRtp.vue b/web/src/views/backend/embed/gameRtp.vue index 265689b..a0e10ee 100644 --- a/web/src/views/backend/embed/gameRtp.vue +++ b/web/src/views/backend/embed/gameRtp.vue @@ -207,8 +207,8 @@ interface GameRtpSetting { auto_game_rtp?: number | string auto_rtp_amount?: string | Record | null auto_frequency?: number | string - provider_display?: string | null - custom_config?: string | null + provider_display?: string | Record | unknown[] | null + custom_config?: string | Record | null header_image_url?: string | null text_color?: string | null button_text_color?: string | null @@ -335,7 +335,7 @@ const formatUpdateTime = (value: unknown) => { return new Date(timestamp * (timestamp < 1e12 ? 1000 : 1)).toLocaleString() } -const formatJsonSetting = (value: string | Record | null | undefined) => { +const formatJsonSetting = (value: string | Record | unknown[] | null | undefined) => { if (!value) return '' return typeof value === 'string' ? value : JSON.stringify(value) } @@ -345,8 +345,8 @@ const applyRtpSetting = (setting?: GameRtpSetting) => { settings.autoRtp = toNumber(setting.auto_game_rtp) === 1 ? 1 : 0 settings.autoAmount = formatJsonSetting(setting.auto_rtp_amount) settings.frequency = String(setting.auto_frequency ?? '') - settings.providerDisplay = setting.provider_display ?? '' - settings.customConfig = setting.custom_config ?? '' + settings.providerDisplay = formatJsonSetting(setting.provider_display) + settings.customConfig = formatJsonSetting(setting.custom_config) settings.headerImage = setting.header_image_url ?? '' settings.textColor = setting.text_color ?? '' settings.buttonTextColor = setting.button_text_color ?? '' @@ -420,6 +420,8 @@ const savingSettings = ref(false) const saveSettings = async () => { let autoRtpAmount: Record + let providerDisplay: Record | unknown[] = [] + let customConfig: Record = {} try { const parsed = JSON.parse(settings.autoAmount) if (!parsed || Array.isArray(parsed) || typeof parsed !== 'object') throw new Error() @@ -429,14 +431,36 @@ const saveSettings = async () => { return } + try { + if (settings.providerDisplay.trim()) { + const parsed = JSON.parse(settings.providerDisplay) + if (!parsed || typeof parsed !== 'object') throw new Error() + providerDisplay = parsed + } + } catch { + ElMessage.error(t('embed.gameRtp.invalidProviderDisplay')) + return + } + + try { + if (settings.customConfig.trim()) { + const parsed = JSON.parse(settings.customConfig) + if (!parsed || Array.isArray(parsed) || typeof parsed !== 'object') throw new Error() + customConfig = parsed + } + } catch { + ElMessage.error(t('embed.gameRtp.invalidCustomConfig')) + return + } + savingSettings.value = true try { await saveGameRtp({ auto_game_rtp: settings.autoRtp as 0 | 1, auto_rtp_amount: autoRtpAmount, auto_frequency: toNumber(settings.frequency), - provider_display: settings.providerDisplay, - custom_config: settings.customConfig, + provider_display: providerDisplay, + custom_config: customConfig, header_image_url: settings.headerImage, text_color: settings.textColor, button_text_color: settings.buttonTextColor,