6
0
Fork 0
release
panliang 2022-05-10 17:34:54 +08:00
parent 611fbb9934
commit 22b80d067f
1 changed files with 98 additions and 19 deletions

View File

@ -2,12 +2,15 @@
namespace App\Admin\Controllers; namespace App\Admin\Controllers;
use App\Models\Store; use App\Models\{Store, ProductSku};
use Dcat\Admin\Form; use Dcat\Admin\Form;
use Dcat\Admin\Grid; use Dcat\Admin\Grid;
use Dcat\Admin\Show; use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController; use Dcat\Admin\Http\Controllers\AdminController;
use Carbon\Carbon; use Carbon\Carbon;
use Dcat\Admin\Admin;
use Illuminate\Support\Facades\DB;
use Dcat\Admin\Models\Administrator;
class StoreController extends AdminController class StoreController extends AdminController
{ {
@ -18,8 +21,16 @@ class StoreController extends AdminController
*/ */
protected function grid() 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->model()->sort();
$grid->column('id'); $grid->column('id');
@ -29,10 +40,9 @@ class StoreController extends AdminController
$grid->column('sort'); $grid->column('sort');
$grid->column('created_at'); $grid->column('created_at');
$grid->disableCreateButton(false); $grid->disableCreateButton(!$canAdmin);
$grid->enableDialogCreate();
$grid->setDialogFormDimensions('40%', '70%');
$grid->showEditButton(); $grid->showEditButton();
$grid->showViewButton();
$grid->filter(function (Grid\Filter $filter) { $grid->filter(function (Grid\Filter $filter) {
$filter->panel(); $filter->panel();
@ -50,13 +60,65 @@ class StoreController extends AdminController
*/ */
protected function detail($id) 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('id');
$show->field('title'); $show->field('title');
$show->field('image'); $show->field('image')->image();
$show->field('sort');
$show->field('status')->using([ 0 => '关闭', 1 => '开启' ]);
$show->field('remarks'); $show->field('remarks');
$show->field('created_at'); $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() 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->display('id');
$form->text('title'); $form->text('title');
$form->switch('status')->default(1); $form->switch('status')->default(1);
$form->number('sort')->min(1)->default(1); $form->number('sort')->min(1)->default(1);
$form->multipleSelectTable('admin_users') if ($canAdmin) {
->from(\App\Admin\Renderable\AdministratorTable::make()) $form->multipleSelectTable('admin_users')
->model(\Dcat\Admin\Models\Administrator::class, 'id', 'name') ->from(\App\Admin\Renderable\AdministratorTable::make())
->customFormat(function ($v) { ->model(Administrator::class, 'id', 'name')
if (! $v) { ->customFormat(function ($v) {
return []; if (! $v) {
} return [];
return array_column($v, 'id'); }
}); return array_column($v, 'id');
});
}
$form->multipleSelectTable('product_skus') $form->multipleSelectTable('product_skus')
->from(\App\Admin\Renderable\ProductSkuSimpleTable::make()) ->from(\App\Admin\Renderable\ProductSkuSimpleTable::make())
->model(\App\Models\ProductSku::class, 'id', 'name') ->model(\App\Models\ProductSku::class, 'id', 'name')
@ -93,6 +164,7 @@ class StoreController extends AdminController
return array_column($v, 'id'); return array_column($v, 'id');
}); });
$form->image('image') $form->image('image')
->required()
->move('store/'.Carbon::now()->toDateString()) ->move('store/'.Carbon::now()->toDateString())
->saveFullUrl() ->saveFullUrl()
->removable(false) ->removable(false)
@ -100,6 +172,13 @@ class StoreController extends AdminController
->autoUpload(); ->autoUpload();
$form->text('remarks'); $form->text('remarks');
$form->disableDeleteButton();
}); });
} }
protected function canAdmin()
{
return Admin::user()->isRole('administrator');
}
} }