header('商品管理') ->description('description') ->body($this->grid()); } /** * Edit interface. * * @param mixed $id * @param Content $content * @return Content */ public function edit($id, Content $content) { return $content ->header('编辑商品') ->body($this->form()->edit($id)); } /** * Create interface. * * @param Content $content * @return Content */ public function create(Content $content) { return $content ->header('新增商品') ->body($this->form()); } /** * Make a grid builder. * * @return Grid */ protected function grid() { $grid = new Grid(new Goods); $grid->model()->orderBy('id', 'desc'); $grid->filter(function ($filter) { $filter->column(1 / 3, function ($filter) { $filter->like('title', '商品名称'); $filter->like('category.id', '所属分类')->select(Category::selectOptions(function ($model) { return $model->where('status', 1)->where('type', 'goods'); }, '所有分类')); }); $filter->column(1 / 3, function ($filter) { $filter->equal('status', '商品状态')->select([ 1 => '正常', 0 => '禁用', ]); $filter->equal('type', '商品类型')->select([ 'member' => '会员商品', 'pick' => '提货商品', ]); }); $filter->column(1 / 3, function ($filter) { $filter->equal('is_hot_sell', '热销推荐')->select([ 1 => '是', 0 => '否', ]); $filter->equal('is_recommend', '最新推荐')->select([ 1 => '是', 0 => '否', ]); }); $filter->disableIdFilter(); }); $grid->id('序号'); $grid->cover('封面')->image('', 60, 60); $grid->title('商品名称'); $grid->column('所属分类')->display(function () { return $this->category->title; }); $grid->description('简介'); $grid->column('类型')->display(function () { return $this->type_text; }); $grid->status('状态')->switch([ 'on' => ['value' => 1, 'text' => '正常', 'color' => 'primary'], 'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'], ]); $grid->is_hot_sell('热销推荐')->switch([ 'on' => ['value' => 1, 'text' => '是', 'color' => 'primary'], 'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'], ]); $grid->is_recommend('最新推荐')->switch([ 'on' => ['value' => 1, 'text' => '是', 'color' => 'primary'], 'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'], ]); $grid->created_at('创建时间'); $grid->actions(function (Grid\Displayers\Actions $actions) { if ($this->row->type == 'pick') { $actions->disableDelete(); } $actions->disableView(); }); return $grid; } /** * Make a show builder. * * @param mixed $id * @return Show */ protected function detail($id) { $show = new Show(Goods::findOrFail($id)); $show->id('编号'); $show->name('商品名称'); $show->created_at('创建时间'); return $show; } /** * Make a form builder. * * @return Form */ protected function form() { $form = new Form(new Goods); $form->text('title', '商品名称')->rules('required'); $form->select('category_id', '所属分类')->options(Category::selectOptions(function ($model) { return $model->where('status', 1)->where('type', 'goods'); }, '选择分类'))->rules('required'); $form->textarea('description', '简介')->rules('required|max:255', [ 'required' => '简介不能为空', 'max' => '简介不能超过255字', ]); $form->image('cover', '封面')->rules('required')->uniqueName(); $form->radio('type', '类型')->options(['member' => '会员产品', 'pick' => '提货商品'])->default('member'); $form->editor('content', '详情')->rules('required', ['required' => '详情不能为空']); $form->switch('status', '状态')->default(1); $form->switch('is_recommend', '最新推荐')->default(0); $form->switch('is_hot_sell', '热销推荐')->default(0); $form->hasMany('params', '产品属性', function (Form\NestedForm $form) { $form->text('value', '名称')->rules('required'); $form->text('original', '原价')->rules('required'); $form->text('price', '会员价')->rules('required'); $form->text('stock', '库存')->rules('required'); $form->text('one', '一级佣金')->rules('required'); $form->text('two', '二及佣金')->rules('required'); })->rules('required'); $form->saving(function (Form $form) { if (request()->has('title')) { $params = request()->params; $params_count = empty($params) ? 0 : count($params); if (!$params_count) { $error = new MessageBag([ 'title' => '错误', 'message' => '必须添加产品属性', ]); return back()->with(compact('error')); } $remove = 0; foreach ($params as $key => $param) { if ($param['_remove_'] == 1) { $remove++; } } if ($remove == $params_count) { $error = new MessageBag([ 'title' => '错误', 'message' => '必须添加产品属性', ]); return back()->with(compact('error')); } } }); $form->saved(function (Form $form) { $goods_id = $form->model()->id; $goods = Goods::find($goods_id); $price = $goods->params()->orderBy('price', 'asc')->value('price'); if ($price) { $goods->price = $price; $goods->save(); } }); return $form; } }