优化 游戏金币余额显示
This commit is contained in:
@@ -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),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user