功能:商店完善戒指板块

迁移:
- 2026_03_01_153959:shop_items 增加 intimacy_bonus/charm_bonus 字段

Seeder(RingItemsSeeder):
- 银质戒指 500金  亲密+10 魅力+30
- 黄金戒指 2000金 亲密+30 魅力+80
- 红宝石戒指 8000金 亲密+80 魅力+200
- 钻石戒指 30000金 亲密+200 魅力+500
- 传说神戒 100000金 亲密+500 魅力+1000

ShopService:
- buyItem() 分支加 ring 类型
- buyRing():扣金币 + 写入 active UserPurchase(背包持有)

ShopController::items():
- 返回 intimacy_bonus/charm_bonus
- 统计 ring_counts(各戒指持有数量)

shop-panel.blade.php:
- 新增「💍 求婚戒指」分组(排在最后)
- 图标右上角红色数字徽章(持有时)
- 卡片下方显示亲密度/魅力加成
- 购买按钮与现有逻辑复用
This commit is contained in:
2026-03-01 15:42:25 +08:00
parent 1f33013216
commit 29e43507ac
5 changed files with 209 additions and 2 deletions
+26
View File
@@ -32,6 +32,7 @@ class ShopService
'instant' => $this->buyInstant($user, $item),
'duration' => $this->buyWeekCard($user, $item),
'one_time' => $this->buyRenameCard($user, $item),
'ring' => $this->buyRing($user, $item),
default => ['ok' => false, 'message' => '未知商品类型'],
};
}
@@ -209,6 +210,31 @@ class ShopService
return $purchase->shopItem->effectKey();
}
/**
* 购买结婚戒指:扣金币、写入背包(active 状态,等待结婚时消耗)。
*
* @return array{ok:bool, message:string}
*/
public function buyRing(User $user, ShopItem $item): array
{
DB::transaction(function () use ($user, $item): void {
// 扣除金币
$user->decrement('jjb', $item->price);
// 写入背包(active = 未使用,求婚时变为 used_pending→used 或 lost
UserPurchase::create([
'user_id' => $user->id,
'shop_item_id' => $item->id,
'status' => 'active',
'price_paid' => $item->price,
]);
});
return [
'ok' => true,
'message' => "💍 {$item->name} 购买成功!已放入背包,可用于求婚。",
];
}
/**
* 获取用户当前激活的改名卡(是否持有未用改名卡)
*/