get(); return view('admin.vip.index', compact('levels')); } /** * 新增会员等级 */ public function store(Request $request): RedirectResponse { $data = $request->validate([ 'name' => 'required|string|max:50', 'icon' => 'required|string|max:20', 'color' => 'required|string|max:10', 'exp_multiplier' => 'required|numeric|min:1|max:99', 'jjb_multiplier' => 'required|numeric|min:1|max:99', 'sort_order' => 'required|integer|min:0', 'price' => 'required|integer|min:0', 'duration_days' => 'required|integer|min:0', 'join_templates' => 'nullable|string', 'leave_templates' => 'nullable|string', ]); // 将文本框的多行模板转为 JSON 数组 $data['join_templates'] = $this->textToJson($data['join_templates'] ?? ''); $data['leave_templates'] = $this->textToJson($data['leave_templates'] ?? ''); VipLevel::create($data); return redirect()->route('admin.vip.index')->with('success', '会员等级创建成功!'); } /** * 更新会员等级 * * @param int $id 等级ID */ public function update(Request $request, int $id): RedirectResponse { $level = VipLevel::findOrFail($id); $data = $request->validate([ 'name' => 'required|string|max:50', 'icon' => 'required|string|max:20', 'color' => 'required|string|max:10', 'exp_multiplier' => 'required|numeric|min:1|max:99', 'jjb_multiplier' => 'required|numeric|min:1|max:99', 'sort_order' => 'required|integer|min:0', 'price' => 'required|integer|min:0', 'duration_days' => 'required|integer|min:0', 'join_templates' => 'nullable|string', 'leave_templates' => 'nullable|string', ]); $data['join_templates'] = $this->textToJson($data['join_templates'] ?? ''); $data['leave_templates'] = $this->textToJson($data['leave_templates'] ?? ''); $level->update($data); return redirect()->route('admin.vip.index')->with('success', '会员等级更新成功!'); } /** * 删除会员等级(关联用户的 vip_level_id 会自动置 null) * * @param int $id 等级ID */ public function destroy(int $id): RedirectResponse { $level = VipLevel::findOrFail($id); $level->delete(); return redirect()->route('admin.vip.index')->with('success', '会员等级已删除!'); } /** * 将多行文本转为 JSON 数组字符串 * 每行一个模板,空行忽略 * * @param string $text 多行文本 * @return string|null JSON 字符串 */ private function textToJson(string $text): ?string { $lines = array_filter( array_map('trim', explode("\n", $text)), fn ($line) => $line !== '' ); if (empty($lines)) { return null; } return json_encode(array_values($lines), JSON_UNESCAPED_UNICODE); } }