model()->where('agent_id', Admin::user()->id)->orderBy('sort'); $grid->column('id')->sortable(); $grid->column('title'); $grid->column('picture')->image('', 60, 60); $grid->column('type')->using(['链接产品', '链接网址']); $grid->column('url') ->if(fn($column) => $this->type == 0) ->then(fn($column) => $column->display($this->agentProduct->product->title ?? '')) ->else(fn($column) => $column->display($this->url ?? '')); $grid->column('status')->switch(); $grid->column('sort')->editable()->sortable()->width(120); $grid->filter(function (Grid\Filter $filter) { $filter->equal('id'); }); }); } /** * Make a show builder. * * @param mixed $id * * @return Show */ protected function detail($id) { return Show::make($id, new Slide(['agentProduct.product:id,title,pictures']), function (Show $show) { //不允许查看非自己的数据 if ($show->model()->agent_id != Admin::user()->id) { Admin::exit('数据不存在'); } $show->field('id'); $show->field('title'); $show->field('picture')->image('', 80, 80); $show->field('type')->using(['链接到产品详情', '链接到网址']); $show->field('url') ->as(function ($v) { if($this->type == 0) { return $this->agentProduct->product->title; } return $v; }); $show->field('status')->using(['禁用', '启用']); $show->field('sort'); $show->field('created_at'); $show->field('updated_at'); }); } /** * Make a form builder. * * @return Form */ protected function form() { return Form::make(new Slide(), function (Form $form) { //不允许查看非自己的数据 if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { return $form->response()->error('数据不存在'); } $form->display('id'); $form->text('title') ->help('主要用于后台显示,方便管理') ->required(); $form->image('picture') ->required()->removable(false)->uniqueName() ->help('图片大小:750*360'); $form->select('status')->options(['禁用', '启用'])->default(1)->required(); $form->radio('type', '链接类型') ->options(['链接到产品详情', '链接到网址']) ->value(0)->default(0) ->when(0, function (Form $form) { $form->selectTable('url-0', '链接到产品') ->help('请选择要链接到的产品') ->title('选择在售产品') ->dialogWidth('80%;min-width:825px;') ->from(SelectAgentProduct::make(['id' => $form->url])) ->options(function ($v) { if (!$v || $this->type != 0) return []; $agent_product = AgentProduct::with('product:id,title') ->select(['id', 'product_id']) ->firstWhere(['id' => $v]); if (!$agent_product) return []; return [$agent_product->id => $agent_product->product->title]; }) ->pluck('product.title') ->value($form->model()->url); }) ->when(1, function (Form $form) { $form->url('url-1', '链接到网址') ->placeholder('如:https://www.baidu.com/') ->customFormat(fn() => $this->type == 1 ? $this->url : ''); }); $form->text('sort')->default(255)->required(); })->saving(function (Form $form) { //不允许修改非自己的数据 if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) { return $form->response()->error('数据不存在'); } //将null字段设置为空值,防止插入数据库出错 foreach ($form->input() as $k => $v) { if (is_null($v)) { $form->$k = ''; } } //处理特殊字段 $form->hidden(['agent_id', 'url']); $form->agent_id = Admin::user()->id; $form->status = $form->status ? 1 : 0; $form->url = $form->{'url-' . $form->type}; $form->deleteInput(['url-0', 'url-1']); //不允许编辑的字段 $form->ignore(['id', 'created_at', 'updated_at']); })->deleting(function (Form $form) { //不允许删除非自己的数据 if ($form->model()[0]['agent_id'] != Admin::user()->id) { return $form->response()->error('数据不存在'); } }); } }