功能:婚姻系统第12步(前端交互)

chat.js:
- 监听婚姻全局广播(MarriageAccepted/Divorced/WeddingCelebration)
- initMarriagePrivateChannel() 监听私人频道
  (求婚/拒绝/过期/离婚申请/红包领取)

frame.blade.php:
- chatContext.marriage 注入所有婚姻 API URL
- 引入 marriage-modals.blade.php 弹窗组件

marriage-modals.blade.php(新建):
- 求婚弹窗(选戒指→求婚)
- 收到求婚弹窗(接受/拒绝)
- 结婚成功公告弹窗(可跳转婚礼设置)
- 婚礼设置弹窗(档位/支付方式/立即OR定时)
- 婚礼红包领取弹窗
- 所有 WebSocket 事件处理

user-actions.blade.php:
- 名片加「💍 求婚」按钮(对方未婚时)
- 名片加「💑 已婚状态」标签(对方已婚时)
- fetchUser 同步拉取对方婚姻状态

MarriageController:
- targetStatus 返回增加 status/partner_name/marriage_id
- myRings 返回增加 status/intimacy_bonus/charm_bonus
This commit is contained in:
2026-03-01 15:31:07 +08:00
parent 37af4ba975
commit 877fd1935f
5 changed files with 980 additions and 10 deletions

View File

@@ -83,17 +83,23 @@ class MarriageController extends Controller
->first();
if (! $marriage) {
return response()->json(['married' => false]);
return response()->json(['married' => false, 'marriage' => ['status' => 'none']]);
}
$partner = $marriage->user_id === $target->id ? $marriage->partner : $marriage->user;
return response()->json([
'married' => true,
'level_icon' => \App\Services\MarriageIntimacyService::levelIcon($marriage->level),
'level_name' => \App\Services\MarriageIntimacyService::levelName($marriage->level),
'partner' => $marriage->user_id === $target->id ? $marriage->partner : $marriage->user,
'ring' => $marriage->ringItem?->only(['name', 'icon']),
'days' => $marriage->married_at?->diffInDays(now()),
'intimacy' => $marriage->intimacy,
'marriage' => [
'status' => $marriage->status,
'marriage_id' => $marriage->id,
'partner_name' => $partner?->username,
'ring' => $marriage->ringItem?->only(['name', 'icon']),
'level_icon' => \App\Services\MarriageIntimacyService::levelIcon($marriage->level),
'level_name' => \App\Services\MarriageIntimacyService::levelName($marriage->level),
'days' => $marriage->married_at?->diffInDays(now()),
'intimacy' => $marriage->intimacy,
],
]);
}
@@ -134,16 +140,18 @@ class MarriageController extends Controller
->where('user_id', $request->user()->id)
->where('status', 'active')
->whereHas('item', fn ($q) => $q->where('type', 'ring'))
->with('item:id,name,slug,icon,price')
->with('item:id,name,slug,icon,price,intimacy_bonus,charm_bonus')
->get()
->map(fn ($p) => [
'purchase_id' => $p->id,
'name' => $p->item->name,
'icon' => $p->item->icon,
'slug' => $p->item->slug,
'intimacy_bonus' => (int) ($p->item->intimacy_bonus ?? 0),
'charm_bonus' => (int) ($p->item->charm_bonus ?? 0),
]);
return response()->json(['rings' => $rings]);
return response()->json(['status' => 'success', 'rings' => $rings]);
}
/**