diff --git a/saiadmin-artd/src/views/plugin/dice/reward_config/index/index.vue b/saiadmin-artd/src/views/plugin/dice/reward_config/index/index.vue index 4da9e80..7c4c30b 100644 --- a/saiadmin-artd/src/views/plugin/dice/reward_config/index/index.vue +++ b/saiadmin-artd/src/views/plugin/dice/reward_config/index/index.vue @@ -48,7 +48,12 @@ + + + @@ -114,7 +119,12 @@ + + + @@ -185,6 +195,7 @@ id: number grid_number: number ui_text: string + ui_text_en: string real_ev: number tier: string remark: string @@ -217,10 +228,11 @@ id: Number(raw.id) ?? 0, grid_number: Number(raw.grid_number) ?? 0, ui_text: String(raw.ui_text ?? ''), + ui_text_en: String((raw as any).ui_text_en ?? ''), real_ev: Number(raw.real_ev) ?? 0, tier: String(raw.tier ?? ''), remark: String(raw.remark ?? ''), - weight: toWeight(raw.weight) + weight: toWeight((raw as any).weight) } } @@ -329,6 +341,7 @@ id: r.id, grid_number: r.grid_number, ui_text: r.ui_text, + ui_text_en: r.ui_text_en, real_ev: r.real_ev, tier: r.tier, remark: r.remark diff --git a/saiadmin-artd/src/views/plugin/dice/reward_config/index/modules/edit-dialog.vue b/saiadmin-artd/src/views/plugin/dice/reward_config/index/modules/edit-dialog.vue index ac9a3e0..9e2a3c9 100644 --- a/saiadmin-artd/src/views/plugin/dice/reward_config/index/modules/edit-dialog.vue +++ b/saiadmin-artd/src/views/plugin/dice/reward_config/index/modules/edit-dialog.vue @@ -16,7 +16,10 @@ /> - + + + + @@ -111,6 +114,7 @@ const rules = reactive({ grid_number: [{ required: true, message: '色子点数必需填写', trigger: 'blur' }], ui_text: [{ required: true, message: '前端显示文本必需填写', trigger: 'blur' }], + ui_text_en: [{ max: 255, message: '前端显示文本(英文)长度需小于 255 字符', trigger: 'blur' }], real_ev: [{ required: true, message: '真实资金结算必需填写', trigger: 'blur' }], tier: [{ required: true, message: '所属档位必需填写', trigger: 'blur' }], weight: [{ type: 'number', min: 0, max: 10000, message: '大奖权重 0~10000', trigger: 'blur' }] @@ -128,6 +132,7 @@ id: null, grid_number: null, ui_text: '', + ui_text_en: '', real_ev: '', tier: '', remark: '', diff --git a/server/app/api/controller/GameController.php b/server/app/api/controller/GameController.php index 1f8dcb8..6a8c4de 100644 --- a/server/app/api/controller/GameController.php +++ b/server/app/api/controller/GameController.php @@ -88,6 +88,27 @@ class GameController extends BaseController $list = array_values(array_filter($list, function ($row) { return (string) ($row['tier'] ?? '') !== 'BIGWIN'; })); + + $lang = $request->header('lang', 'zh'); + if (!is_string($lang) || $lang === '') { + $lang = 'zh'; + } + $langLower = strtolower($lang); + $isEn = $langLower === 'en' || str_starts_with($langLower, 'en-'); + + if ($isEn) { + foreach ($list as $index => $row) { + $uiEn = ''; + if (is_array($row) && array_key_exists('ui_text_en', $row) && $row['ui_text_en'] !== null) { + $uiEn = (string) $row['ui_text_en']; + } + if ($uiEn !== '') { + $row['ui_text'] = $uiEn; + } + $list[$index] = $row; + } + } + return $this->success($list); } @@ -123,6 +144,37 @@ class GameController extends BaseController try { $logic = new PlayStartLogic(); $data = $logic->run($userId, (int)$direction); + + $lang = $request->header('lang', 'zh'); + if (!is_string($lang) || $lang === '') { + $lang = 'zh'; + } + $langLower = strtolower($lang); + $isEn = $langLower === 'en' || str_starts_with($langLower, 'en-'); + + if (is_array($data) && array_key_exists('reward_config_id', $data)) { + $rewardConfigId = (int) $data['reward_config_id']; + if ($rewardConfigId > 0) { + $configRow = DiceRewardConfig::getCachedById($rewardConfigId); + if ($configRow !== null) { + $uiText = ''; + $uiTextEn = ''; + if (array_key_exists('ui_text', $configRow) && $configRow['ui_text'] !== null) { + $uiText = (string) $configRow['ui_text']; + } + if (array_key_exists('ui_text_en', $configRow) && $configRow['ui_text_en'] !== null) { + $uiTextEn = (string) $configRow['ui_text_en']; + } + if ($isEn && $uiTextEn !== '') { + $data['ui_text'] = $uiTextEn; + } else { + $data['ui_text'] = $uiText; + } + $data['ui_text_en'] = $uiTextEn; + } + } + } + return $this->success($data); } catch (ApiException $e) { return $this->fail($e->getMessage(), ReturnCode::BUSINESS_ERROR); diff --git a/server/app/dice/logic/reward_config/DiceRewardConfigLogic.php b/server/app/dice/logic/reward_config/DiceRewardConfigLogic.php index 360ccdf..06a80f6 100644 --- a/server/app/dice/logic/reward_config/DiceRewardConfigLogic.php +++ b/server/app/dice/logic/reward_config/DiceRewardConfigLogic.php @@ -161,7 +161,7 @@ class DiceRewardConfigLogic extends BaseLogic } $id = (int) $row['id']; $data = []; - foreach (['grid_number', 'ui_text', 'real_ev', 'tier', 'remark'] as $field) { + foreach (['grid_number', 'ui_text', 'ui_text_en', 'real_ev', 'tier', 'remark'] as $field) { if (array_key_exists($field, $row)) { $data[$field] = $row[$field]; } diff --git a/server/app/dice/model/reward_config/DiceRewardConfig.php b/server/app/dice/model/reward_config/DiceRewardConfig.php index c1b171c..4f1544a 100644 --- a/server/app/dice/model/reward_config/DiceRewardConfig.php +++ b/server/app/dice/model/reward_config/DiceRewardConfig.php @@ -18,6 +18,7 @@ use support\think\Cache; * @property $id ID * @property $grid_number 色子点数 * @property $ui_text 前端显示文本 + * @property $ui_text_en 前端显示文本(英文) * @property $real_ev 真实资金结算 * @property $tier 所属档位 * @property $weight 权重(仅 BIGWIN 使用,0-10000) @@ -65,6 +66,17 @@ class DiceRewardConfig extends BaseModel return $inst['list'] ?? []; } + public static function getCachedById(int $id): ?array + { + $list = self::getCachedList(); + foreach ($list as $row) { + if (isset($row['id']) && (int) $row['id'] === $id) { + return $row; + } + } + return null; + } + /** * 重新从数据库加载并写入缓存(按档位+权重抽 grid_number,含 by_tier、by_tier_grid) */ diff --git a/server/app/dice/validate/reward_config/DiceRewardConfigValidate.php b/server/app/dice/validate/reward_config/DiceRewardConfigValidate.php index a9b5bd4..788b94b 100644 --- a/server/app/dice/validate/reward_config/DiceRewardConfigValidate.php +++ b/server/app/dice/validate/reward_config/DiceRewardConfigValidate.php @@ -20,6 +20,7 @@ class DiceRewardConfigValidate extends BaseValidate protected $rule = [ 'grid_number' => 'require|integer|between:5,30', 'ui_text' => 'require', + 'ui_text_en' => 'max:255', 'real_ev' => 'require', 'tier' => 'require', 'type' => 'number', @@ -36,8 +37,8 @@ class DiceRewardConfigValidate extends BaseValidate ]; protected $scene = [ - 'save' => ['grid_number', 'ui_text', 'real_ev', 'tier', 'type'], - 'update' => ['grid_number', 'ui_text', 'real_ev', 'tier', 'type', 'weight'], - 'batch_update' => ['grid_number', 'ui_text', 'real_ev', 'tier', 'remark'], + 'save' => ['grid_number', 'ui_text', 'ui_text_en', 'real_ev', 'tier', 'type'], + 'update' => ['grid_number', 'ui_text', 'ui_text_en', 'real_ev', 'tier', 'type', 'weight'], + 'batch_update' => ['grid_number', 'ui_text', 'ui_text_en', 'real_ev', 'tier', 'remark'], ]; }