2026-03-03 16:46:36 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 文件功能:钓鱼事件后台管理控制器
|
|
|
|
|
|
* 提供钓鱼事件的列表展示、创建、编辑、删除、启用/禁用功能
|
|
|
|
|
|
*
|
|
|
|
|
|
* @author ChatRoom Laravel
|
|
|
|
|
|
*
|
|
|
|
|
|
* @version 1.0.0
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
|
|
|
|
use App\Models\FishingEvent;
|
|
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
|
|
use Illuminate\Http\RedirectResponse;
|
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
|
use Illuminate\View\View;
|
|
|
|
|
|
|
|
|
|
|
|
class FishingEventController extends Controller
|
|
|
|
|
|
{
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 显示所有钓鱼事件列表
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function index(): View
|
|
|
|
|
|
{
|
2026-03-12 15:26:54 +08:00
|
|
|
|
$events = FishingEvent::orderBy('sort')->orderBy('id')->get();
|
2026-03-03 16:46:36 +08:00
|
|
|
|
$totalWeight = $events->where('is_active', true)->sum('weight');
|
|
|
|
|
|
|
|
|
|
|
|
return view('admin.fishing.index', compact('events', 'totalWeight'));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 创建新钓鱼事件
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function store(Request $request): RedirectResponse
|
|
|
|
|
|
{
|
|
|
|
|
|
$data = $request->validate([
|
2026-03-12 15:26:54 +08:00
|
|
|
|
'emoji' => 'required|string|max:10',
|
|
|
|
|
|
'name' => 'required|string|max:100',
|
|
|
|
|
|
'message' => 'required|string|max:255',
|
|
|
|
|
|
'exp' => 'required|integer',
|
|
|
|
|
|
'jjb' => 'required|integer',
|
|
|
|
|
|
'weight' => 'required|integer|min:1|max:9999',
|
|
|
|
|
|
'sort' => 'required|integer|min:0',
|
2026-03-03 16:46:36 +08:00
|
|
|
|
'is_active' => 'boolean',
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
|
|
$data['is_active'] = $request->boolean('is_active', true);
|
|
|
|
|
|
FishingEvent::create($data);
|
|
|
|
|
|
|
|
|
|
|
|
return redirect()->route('admin.fishing.index')->with('success', '钓鱼事件已添加!');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 更新钓鱼事件
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param FishingEvent $fishing 路由模型绑定
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function update(Request $request, FishingEvent $fishing): RedirectResponse
|
|
|
|
|
|
{
|
|
|
|
|
|
$data = $request->validate([
|
2026-03-12 15:26:54 +08:00
|
|
|
|
'emoji' => 'required|string|max:10',
|
|
|
|
|
|
'name' => 'required|string|max:100',
|
|
|
|
|
|
'message' => 'required|string|max:255',
|
|
|
|
|
|
'exp' => 'required|integer',
|
|
|
|
|
|
'jjb' => 'required|integer',
|
|
|
|
|
|
'weight' => 'required|integer|min:1|max:9999',
|
|
|
|
|
|
'sort' => 'required|integer|min:0',
|
2026-03-03 16:46:36 +08:00
|
|
|
|
'is_active' => 'boolean',
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
|
|
$data['is_active'] = $request->boolean('is_active');
|
|
|
|
|
|
$fishing->update($data);
|
|
|
|
|
|
|
|
|
|
|
|
return redirect()->route('admin.fishing.index')->with('success', "事件「{$fishing->name}」已更新!");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 切换事件启用/禁用状态(AJAX)
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param FishingEvent $fishing 路由模型绑定
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function toggle(FishingEvent $fishing): JsonResponse
|
|
|
|
|
|
{
|
|
|
|
|
|
$fishing->update(['is_active' => ! $fishing->is_active]);
|
|
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
2026-03-12 15:26:54 +08:00
|
|
|
|
'ok' => true,
|
2026-03-03 16:46:36 +08:00
|
|
|
|
'is_active' => $fishing->is_active,
|
2026-03-12 15:26:54 +08:00
|
|
|
|
'message' => $fishing->is_active ? "「{$fishing->name}」已启用" : "「{$fishing->name}」已禁用",
|
2026-03-03 16:46:36 +08:00
|
|
|
|
]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 删除钓鱼事件
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param FishingEvent $fishing 路由模型绑定
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function destroy(FishingEvent $fishing): RedirectResponse
|
|
|
|
|
|
{
|
|
|
|
|
|
$name = $fishing->name;
|
|
|
|
|
|
$fishing->delete();
|
|
|
|
|
|
|
|
|
|
|
|
return redirect()->route('admin.fishing.index')->with('success', "事件「{$name}」已删除!");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|