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->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); } return 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'); if ($canAdmin) { $show->relation('admin_users', function ($model) { $grid = new Grid(new Administrator()); $grid->model()->join('store_admin_users', function ($join) use ($model) { $join->on('store_admin_users.admin_user_id', 'id')->where('store_id', '=', $model->id); }); $grid->column('id'); $grid->column('username'); $grid->column('name'); $grid->quickSearch(['username', 'name']); $grid->paginate(10); $grid->disableActions(); return $grid; }); } $show->relation('product_skus', function ($model) { $grid = new Grid(new ProductSku()); $grid->model()->join('store_product_skus', function ($join) use ($model) { $join->on('store_product_skus.product_sku_id', 'id')->where('store_id', '=', $model->id); }); $grid->quickSearch(['name']); $grid->column('name'); $grid->column('specs')->label(); $grid->paginate(10); $grid->disableActions(); return $grid; }); $show->panel()->tools(function ($tools) { $tools->disableDelete(); }); }); } /** * 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(); }); } protected function canAdmin() { return Admin::user()->isRole('administrator'); } }