From 22b80d067f8bd1d618a69d1d73394eca3489f823 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Tue, 10 May 2022 17:34:54 +0800 Subject: [PATCH] Store --- app/Admin/Controllers/StoreController.php | 117 ++++++++++++++++++---- 1 file changed, 98 insertions(+), 19 deletions(-) diff --git a/app/Admin/Controllers/StoreController.php b/app/Admin/Controllers/StoreController.php index 3a1c5717..98a939ba 100644 --- a/app/Admin/Controllers/StoreController.php +++ b/app/Admin/Controllers/StoreController.php @@ -2,12 +2,15 @@ namespace App\Admin\Controllers; -use App\Models\Store; +use App\Models\{Store, ProductSku}; use Dcat\Admin\Form; use Dcat\Admin\Grid; use Dcat\Admin\Show; use Dcat\Admin\Http\Controllers\AdminController; use Carbon\Carbon; +use Dcat\Admin\Admin; +use Illuminate\Support\Facades\DB; +use Dcat\Admin\Models\Administrator; class StoreController extends AdminController { @@ -18,8 +21,16 @@ class StoreController extends AdminController */ protected function grid() { - return Grid::make(new Store(), function (Grid $grid) { + $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 Grid::make($query, function (Grid $grid) use ($canAdmin) { + $grid->model()->sort(); $grid->column('id'); @@ -29,10 +40,9 @@ class StoreController extends AdminController $grid->column('sort'); $grid->column('created_at'); - $grid->disableCreateButton(false); - $grid->enableDialogCreate(); - $grid->setDialogFormDimensions('40%', '70%'); + $grid->disableCreateButton(!$canAdmin); $grid->showEditButton(); + $grid->showViewButton(); $grid->filter(function (Grid\Filter $filter) { $filter->panel(); @@ -50,13 +60,65 @@ class StoreController extends AdminController */ protected function detail($id) { - return Show::make($id, new Store(), function (Show $show) { + $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'); + $show->field('image')->image(); + $show->field('sort'); + $show->field('status')->using([ 0 => '关闭', 1 => '开启' ]); $show->field('remarks'); $show->field('created_at'); - $show->field('updated_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(); + }); }); } @@ -67,22 +129,31 @@ class StoreController extends AdminController */ protected function form() { - return Form::make(Store::with(['adminUsers', 'productSkus']), function (Form $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); - $form->multipleSelectTable('admin_users') - ->from(\App\Admin\Renderable\AdministratorTable::make()) - ->model(\Dcat\Admin\Models\Administrator::class, 'id', 'name') - ->customFormat(function ($v) { - if (! $v) { - return []; - } - return array_column($v, 'id'); - }); - + 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') @@ -93,6 +164,7 @@ class StoreController extends AdminController return array_column($v, 'id'); }); $form->image('image') + ->required() ->move('store/'.Carbon::now()->toDateString()) ->saveFullUrl() ->removable(false) @@ -100,6 +172,13 @@ class StoreController extends AdminController ->autoUpload(); $form->text('remarks'); + + $form->disableDeleteButton(); }); } + + protected function canAdmin() + { + return Admin::user()->isRole('administrator'); + } }