优化 游戏金币余额显示

This commit is contained in:
2026-04-12 22:31:35 +08:00
parent ef407a8c6e
commit c297b61493
6 changed files with 51 additions and 6 deletions

View File

@@ -37,13 +37,17 @@ class BaccaratController extends Controller
*/
public function currentRound(Request $request): JsonResponse
{
$user = $request->user();
$round = BaccaratRound::currentRound();
if (! $round) {
return response()->json(['round' => null]);
return response()->json([
'round' => null,
// 即使当前无局次,也返回最新金币余额,供前端每次打开弹窗时刷新右上角显示。
'jjb' => (int) ($user->jjb ?? 0),
]);
}
$user = $request->user();
$myBet = BaccaratBet::query()
->where('round_id', $round->id)
->where('user_id', $user->id)
@@ -72,6 +76,8 @@ class BaccaratController extends Controller
'amount' => $myBet->amount,
] : null,
],
// 返回当前用户最新金币,前端每次打开弹窗都可同步右上角余额。
'jjb' => (int) ($user->jjb ?? 0),
]);
}

View File

@@ -39,13 +39,17 @@ class HorseRaceController extends Controller
*/
public function currentRace(Request $request): JsonResponse
{
$user = $request->user();
$race = HorseRace::currentRace();
if (! $race) {
return response()->json(['race' => null]);
return response()->json([
'race' => null,
// 即使当前无赛马场次,也返回最新金币余额,供前端打开弹窗时刷新显示。
'jjb' => (int) ($user->jjb ?? 0),
]);
}
$user = $request->user();
$myBet = HorseBet::query()
->where('race_id', $race->id)
->where('user_id', $user->id)
@@ -109,6 +113,8 @@ class HorseRaceController extends Controller
'amount' => $myBet->amount,
] : null,
],
// 返回当前用户最新金币,确保弹窗右上角余额每次打开都以服务端最新值为准。
'jjb' => (int) ($user->jjb ?? 0),
]);
}

View File

@@ -483,6 +483,16 @@
autoCloseTimer: null,
autoCloseCountdown: 0,
/**
* 同步全局聊天上下文中的金币余额,供弹窗右上角与其他面板共用。
*/
syncUserGold(jjb) {
if (jjb === undefined || jjb === null) return;
if (!window.chatContext) return;
window.chatContext.userJjb = Number(jjb);
window.chatContext.myGold = Number(jjb);
},
/**
* 获取快捷下注金额数组
*/
@@ -594,6 +604,8 @@
try {
const res = await fetch('/baccarat/current');
const data = await res.json();
// 每次打开或刷新局次信息时,都用服务端最新金币覆盖右上角余额。
this.syncUserGold(data.jjb);
if (data.round && (data.round.seconds_left || 0) > 0) {
this.phase = 'betting';
this.roundId = data.round.id;
@@ -807,6 +819,9 @@
// 再检查是否有正在进行的局
const curRes = await fetch('/baccarat/current');
const curData = await curRes.json();
if (panel) {
Alpine.$data(panel).syncUserGold(curData.jjb);
}
if (curData.round && panel) {
const round = curData.round;

View File

@@ -419,6 +419,16 @@
// 历史记录
history: [],
/**
* 同步全局聊天上下文中的金币余额,供弹窗右上角与其他面板共用。
*/
syncUserGold(jjb) {
if (jjb === undefined || jjb === null) return;
if (!window.chatContext) return;
window.chatContext.userJjb = Number(jjb);
window.chatContext.myGold = Number(jjb);
},
/**
* 获取当前选中马匹的预览名称(用于按钮文字)
*/
@@ -502,6 +512,8 @@
try {
const res = await fetch('/horse-race/current');
const data = await res.json();
// 每次打开或刷新当前场次时,都先同步右上角金币余额。
this.syncUserGold(data.jjb);
if (data.race) {
this.horses = data.race.horses || this.horses;
this.totalPool = data.race.total_pool || 0;
@@ -674,6 +686,7 @@
try {
const res = await fetch('/horse-race/current');
const data = await res.json();
this.syncUserGold(data.jjb);
if (data.race) {
const race = data.race;
this.raceId = race.id;
@@ -763,6 +776,9 @@
const curRes = await fetch('/horse-race/current');
const curData = await curRes.json();
if (panel) {
Alpine.$data(panel).syncUserGold(curData.jjb);
}
// 游戏可访问则常驻显示 FAB与占卜一致
if (fab) Alpine.$data(fab).visible = true;

View File

@@ -36,7 +36,7 @@ class BaccaratControllerTest extends TestCase
public function test_can_get_current_round()
{
/** @var \App\Models\User $user */
$user = User::factory()->create();
$user = User::factory()->create(['jjb' => 3456]);
$round = BaccaratRound::forceCreate([
'status' => 'betting',
@@ -57,6 +57,7 @@ class BaccaratControllerTest extends TestCase
$response->assertStatus(200);
$response->assertJsonStructure(['round' => ['id', 'status', 'bet_closes_at']]);
$this->assertEquals($round->id, $response->json('round.id'));
$this->assertSame(3456, $response->json('jjb'));
}
public function test_can_bet()

View File

@@ -60,7 +60,7 @@ class HorseRaceControllerTest extends TestCase
public function test_can_get_current_race()
{
/** @var \App\Models\User $user */
$user = User::factory()->create();
$user = User::factory()->create(['jjb' => 4567]);
$race = HorseRace::create([
'status' => 'betting',
@@ -79,6 +79,7 @@ class HorseRaceControllerTest extends TestCase
$response->assertStatus(200);
$response->assertJsonStructure(['race' => ['id', 'status', 'bet_closes_at', 'horses']]);
$this->assertEquals($race->id, $response->json('race.id'));
$this->assertSame(4567, $response->json('jjb'));
}
/**