canAdmin(); if (!$canAdmin) { $ids = DB::table('store_admin_users')->where('admin_user_id', $user->id)->pluck('store_id'); $query = $query->whereIn('id', $ids); } return Grid::make($query, function (Grid $grid) use ($canAdmin) { $grid->model()->sort(); $grid->column('id'); $grid->column('title'); $grid->column('image')->image('', 100, 100); $grid->column('status')->switch(); $grid->column('sort'); $grid->column('created_at'); $grid->disableCreateButton(!$canAdmin); $grid->showEditButton(); $grid->showViewButton(); $grid->showDeleteButton($canAdmin); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->like('title')->width(3); }); }); } /** * Make a show builder. * * @param mixed $id * * @return Show */ protected function detail($id) { $query = Store::query(); $user = Admin::user(); $canAdmin = $this->canAdmin(); if (!$canAdmin) { $ids = DB::table('store_admin_users')->where('admin_user_id', $user->id)->pluck('store_id'); $query = $query->whereIn('id', $ids); } $row = new Row(); $show = Show::make($id, $query, function (Show $show) use ($canAdmin) { $show->field('id'); $show->field('title'); $show->field('image')->image(); $show->field('sort'); $show->field('status')->using([ 0 => '关闭', 1 => '开启' ]); $show->field('remarks'); $show->field('created_at'); $show->panel()->tools(function ($tools) { $tools->disableDelete(); }); }); $row->column(5, $show); $tab = Tab::make()->theme(); $tab->add('商品', Card::make($this->gridProduct($id))); if ($canAdmin) { $tab->add('管理员', Card::make($this->gridAdmin($id))); } $row->column(7, $tab); return $row; } /** * Make a form builder. * * @return Form */ protected function form() { $query = Store::with(['adminUsers', 'productSkus']); $user = Admin::user(); $canAdmin = $this->canAdmin(); if (!$canAdmin) { $ids = DB::table('store_admin_users')->where('admin_user_id', $user->id)->pluck('store_id'); $query = $query->whereIn('id', $ids); } return Form::make($query, function (Form $form) use ($canAdmin) { $form->display('id'); $form->text('title'); $form->switch('status')->default(1); $form->number('sort')->min(1)->default(1); // if ($canAdmin) { // $form->multipleSelectTable('admin_users') // ->from(\App\Admin\Renderable\AdministratorTable::make()) // ->model(Administrator::class, 'id', 'name') // ->customFormat(function ($v) { // if (! $v) { // return []; // } // return array_column($v, 'id'); // }); // } $form->multipleSelectTable('product_skus') ->from(\App\Admin\Renderable\ProductSkuSimpleTable::make()) ->model(\App\Models\ProductSku::class, 'id', 'name') ->customFormat(function ($v) { if (! $v) { return []; } return array_column($v, 'id'); }); $form->image('image') ->required() ->move('store/'.Carbon::now()->toDateString()) ->saveFullUrl() ->removable(false) ->retainable() ->autoUpload(); $form->text('remarks'); $form->disableDeleteButton(); }); } public function destroy($id) { $info = Store::find($id); // 删除店铺关联的数据 $info->adminUsers()->detach(); $info->productSkus()->detach(); return parent::destroy($id); } protected function canAdmin() { return Admin::user()->isRole('administrator'); } protected function gridAdmin($id) { $grid = Grid::make(new Administrator()); $grid->model()->join('store_admin_users', function ($join) use ($id) { $join->on('store_admin_users.admin_user_id', 'id')->where('store_id', '=', $id); }); $grid->setResource('store/' . $id . '/admin'); $grid->column('id'); $grid->column('username'); $grid->column('name'); $grid->paginate(10); $grid->showCreateButton(); $grid->enableDialogCreate(); $grid->disableActions(); $grid->showRowSelector(); return $grid; } protected function gridProduct($id) { $grid = new Grid(StoreProductSku::with(['productSku'])); $grid->model()->where('store_id', $id); $grid->setResource('store/'.$id.'/product'); $grid->column('productSku.id', 'ID'); $grid->column('productSku.name', '名称'); $grid->column('amount', '库存')->editable(); $grid->column('productSku.specs', '规格')->label(); $grid->column('status', '状态')->switch(); $grid->paginate(10); $grid->showCreateButton(); $grid->enableDialogCreate(); $grid->disableActions(); $grid->showRowSelector(); return $grid; } }