header('商品分类') // 设置页面标题 ->description('') // 页面描述 ->row(function (Row $row) { // 创建分类树形结构,限制只能在同一级排序 $row->column(6, Category::tree(function (Tree $tree) { $tree->disableCreate(); // 禁用创建新分类的功能 // 允许拖拽排序,且最大深度为1 $tree->nestable(['maxDepth' => 1]) ->branch(function ($branch) { // 自定义树节点的显示格式 $icon = ""; return $icon . ' ' . $branch['title']; }); })); // 创建新分类的表单 $row->column(6, function (Column $column) { $form = new \Encore\Admin\Widgets\Form(); $form->action(admin_base_path('categories')); // 设置表单提交路径 // 定义表单字段 $form->text('title', '分类名')->rules('required|unique:categories,title'); // 分类名,必填且唯一 $form->icon('icon', '图标')->default('fa-bars')->rules('required'); // 图标,必填 $form->image('thumb', '缩略图')->uniqueName()->rules('required'); // 缩略图,必填 $form->hidden('_token')->default(csrf_token()); // CSRF 令牌 // 将表单添加到页面 $column->append((new Box('新增', $form))->style('success')); }); }); } /** * 显示分类的详细信息 * * @param mixed $id 分类ID * @param Content $content * @return Content 返回构建好的内容 */ public function show($id, Content $content) { return $content ->header('详情') // 设置页面标题 ->description('') // 页面描述 ->body($this->detail($id)); // 显示分类详细信息 } /** * 显示编辑分类的界面 * * @param mixed $id 分类ID * @param Content $content * @return Content 返回构建好的内容 */ public function edit($id, Content $content) { return $content ->header('编辑') // 设置页面标题 ->description('') // 页面描述 ->body($this->form()->edit($id)); // 显示编辑表单 } /** * 创建分类详细信息的展示构建器 * * @param mixed $id 分类ID * @return Show 返回详细信息展示实例 */ protected function detail($id) { $show = new Show(Category::findOrFail($id)); // 根据ID查找分类 // 定义展示的字段 $show->field('id'); // ID $show->field('title', '分类名'); // 分类名 $show->field('thumb', '缩略图')->unescape()->as(function ($thumb) { return image($thumb); // 显示缩略图 }); $show->field('description', '描述'); // 描述 $show->field('order', '排序'); // 排序 $show->field('created_at', '创建时间'); // 创建时间 $show->field('updated_at', '修改时间'); // 修改时间 return $show; // 返回详细信息展示 } /** * 创建分类的表单构建器 * * @return Form 返回表单实例 */ protected function form() { $form = new Form(new Category); // 创建新的表单实例 // 定义表单字段 $form->text('title', '分类名'); // 分类名 $form->icon('icon', '图标'); // 图标 $form->image('thumb', '缩略图'); // 缩略图 $form->text('description', '描述'); // 描述 // 保存前的逻辑 $form->saving(function (Form $form) { if (app()->environment('dev')) { // 检查是否在开发环境 admin_toastr('开发环境不允许操作', 'error'); // 提示用户 return back()->withInput(); // 返回到表单 } }); return $form; // 返回创建的表单 } /** * 删除分类 * * @param $id 分类ID * @return \Illuminate\Http\JsonResponse 返回 JSON 响应 */ public function destroy($id) { if (app()->environment('dev')) { // 检查是否在开发环境 return response()->json(['status' => false, 'message' => '开发环境不允许操作']); } /** @var $category Category */ $category = Category::query()->findOrFail($id); // 查找分类 // 检查分类下是否有商品 if ($category->products()->exists()) { return response()->json(['status' => false, 'message' => '分类下有商品存在,不允许删除']); } // 尝试删除分类 if ($category->delete()) { $data = [ 'status' => true, 'message' => trans('admin.delete_succeeded'), // 删除成功提示 ]; } else { $data = [ 'status' => false, 'message' => trans('admin.delete_failed'), // 删除失败提示 ]; } return response()->json($data); // 返回 JSON 响应 } /** * 获取分类下的商品下拉列表 * * @param Request $request * @return \Illuminate\Support\Collection 返回商品集合 */ public function getProducts(Request $request) { $id = $request->get('q'); // 获取请求参数中的分类ID $category = Category::query()->findOrFail($id); // 查找分类 // 返回分类下的商品,按销量降序排列 return $category->products()->orderBy('sale_count', 'desc')->get(['id', 'name as text']); } }