orderBy('id')->get(); return view('admin.idioms.index', compact('idioms')); } /** * 创建新题目 */ public function store(Request $request): RedirectResponse { $data = $request->validate([ 'answer' => 'required|string|max:50', 'hint' => 'required|string|max:255', 'sort' => 'required|integer|min:0', 'is_active' => 'boolean', ]); $data['is_active'] = $request->boolean('is_active', true); Idiom::create($data); return redirect()->route('admin.idioms.index')->with('success', '成语题目已添加!'); } /** * 更新题目 */ public function update(Request $request, Idiom $idiom): RedirectResponse { $data = $request->validate([ 'answer' => 'required|string|max:50', 'hint' => 'required|string|max:255', 'sort' => 'required|integer|min:0', 'is_active' => 'boolean', ]); $data['is_active'] = $request->boolean('is_active'); $idiom->update($data); return redirect()->route('admin.idioms.index')->with('success', "题目「{$idiom->answer}」已更新!"); } /** * 切换启用/禁用(AJAX) */ public function toggle(Idiom $idiom): JsonResponse { $idiom->update(['is_active' => ! $idiom->is_active]); return response()->json([ 'ok' => true, 'is_active' => $idiom->is_active, 'message' => $idiom->is_active ? "「{$idiom->answer}」已启用" : "「{$idiom->answer}」已禁用", ]); } /** * 删除题目 */ public function destroy(Idiom $idiom): RedirectResponse { $answer = $idiom->answer; $idiom->delete(); return redirect()->route('admin.idioms.index')->with('success', "题目「{$answer}」已删除!"); } /** * 保存猜成语游戏参数(仅更新 GameConfig params,不影响其他字段) */ public function saveSettings(Request $request): RedirectResponse { $data = $request->validate([ 'reward_gold' => 'required|integer|min:0', 'reward_exp' => 'required|integer|min:0', 'auto_start_interval' => 'required|integer|min:0', ]); $config = \App\Models\GameConfig::firstOrCreate( ['game_key' => 'idiom'], ['name' => '猜成语', 'icon' => '🧩', 'enabled' => false], ); // 合并现有 params,只覆盖提交的字段,不影响其他已有参数 $existingParams = $config->params ?? []; $config->params = array_merge($existingParams, [ 'reward_gold' => (int) $data['reward_gold'], 'reward_exp' => (int) $data['reward_exp'], 'auto_start_interval' => (int) $data['auto_start_interval'], ]); $config->save(); $config->clearCache(); return redirect()->route('admin.idioms.index')->with('success', '游戏参数已保存!'); } }