From 209025096739a5a710eff5b695ec5e06e99a5962 Mon Sep 17 00:00:00 2001 From: lkddi Date: Sun, 12 Apr 2026 17:28:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=A9=9A=E5=A7=BB=20?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E5=B7=B2=E5=A9=9A=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/MarriageController.php | 27 +- app/Models/User.php | 10 + app/Services/MarriageService.php | 2 +- .../chat/partials/layout/toolbar.blade.php | 244 ++++++++++++++++-- routes/web.php | 2 + 5 files changed, 263 insertions(+), 22 deletions(-) diff --git a/app/Http/Controllers/MarriageController.php b/app/Http/Controllers/MarriageController.php index bb678a5..83349ed 100644 --- a/app/Http/Controllers/MarriageController.php +++ b/app/Http/Controllers/MarriageController.php @@ -46,6 +46,29 @@ class MarriageController extends Controller ]); } + /** + * 获取全站已婚列表(按亲密度或结婚时间排序)。 + */ + public function list(Request $request): JsonResponse + { + $marriages = Marriage::query() + ->where('status', 'married') + ->with(['user:id,username,usersf,sex', 'partner:id,username,usersf,sex', 'ringItem:id,name,icon']) + ->orderByDesc('intimacy') + ->orderByDesc('married_at') + ->paginate(20); + + return response()->json([ + 'status' => 'success', + 'data' => $marriages->items(), + 'pagination' => [ + 'current_page' => $marriages->currentPage(), + 'last_page' => $marriages->lastPage(), + 'total' => $marriages->total(), + ], + ]); + } + /** * 获取当前用户的婚姻状态(名片/用户列表用)。 */ @@ -58,7 +81,7 @@ class MarriageController extends Controller return response()->json(['married' => false]); } - $marriage->load(['user:id,username,headface', 'partner:id,username,headface', 'ringItem:id,name,slug,icon']); + $marriage->load(['user:id,username,usersf', 'partner:id,username,usersf', 'ringItem:id,name,slug,icon']); return response()->json([ 'married' => $marriage->status === 'married', @@ -95,7 +118,7 @@ class MarriageController extends Controller ->where(function ($q) use ($target) { $q->where('user_id', $target->id)->orWhere('partner_id', $target->id); }) - ->with(['user:id,username,headface', 'partner:id,username,headface', 'ringItem:id,name,icon']) + ->with(['user:id,username,usersf', 'partner:id,username,usersf', 'ringItem:id,name,icon']) ->first(); if (! $marriage) { diff --git a/app/Models/User.php b/app/Models/User.php index c44725c..2165bd2 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -24,6 +24,16 @@ class User extends Authenticatable { use HasFactory, Notifiable; + /** + * 追加到 JSON 序列化的属性。 + * + * @var array + */ + protected $appends = [ + 'headface', + 'headface_url', + ]; + /** * The attributes that are mass assignable. * diff --git a/app/Services/MarriageService.php b/app/Services/MarriageService.php index e75ed59..0d8b21c 100644 --- a/app/Services/MarriageService.php +++ b/app/Services/MarriageService.php @@ -103,7 +103,7 @@ class MarriageService $marriage = Marriage::create([ 'user_id' => $proposer->id, 'partner_id' => $target->id, - 'ring_item_id' => $ring->item_id, + 'ring_item_id' => $ring->shop_item_id, 'ring_purchase_id' => $ring->id, 'status' => 'pending', 'proposed_at' => now(), diff --git a/resources/views/chat/partials/layout/toolbar.blade.php b/resources/views/chat/partials/layout/toolbar.blade.php index b85c6d9..cc8949f 100644 --- a/resources/views/chat/partials/layout/toolbar.blade.php +++ b/resources/views/chat/partials/layout/toolbar.blade.php @@ -1829,31 +1829,151 @@ async function generateWechatBindCode() { {{-- ═══════════ 婚姻状态弹窗 ═══════════ --}} + +