6
0
Fork 0
jiqu-library-server/app/Admin/Controllers/StoreController.php

215 lines
6.3 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Models\{Store, StoreProductSku, 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;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Widgets\{Box, Tab, Card};
class StoreController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function 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');
$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;
}
}