205 lines
6.0 KiB
PHP
205 lines
6.0 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers\Store;
|
|
|
|
use App\Models\Store\{Store, ProductSku, Administrator as StoreAdministrator, StockLog};
|
|
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('administrator_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->enableDialogCreate();
|
|
$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('administrator_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)));
|
|
$tab->add('库存', Card::make($this->gridStock($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::query();
|
|
$user = Admin::user();
|
|
$canAdmin = $this->canAdmin();
|
|
if (!$canAdmin) {
|
|
$ids = DB::table('store_admin_users')->where('administrator_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->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');
|
|
}
|
|
|
|
protected function gridAdmin($id)
|
|
{
|
|
$grid = Grid::make(StoreAdministrator::with(['administrator']));
|
|
$grid->model()->where('store_id', $id);
|
|
|
|
$grid->setResource('store/' . $id . '/admin');
|
|
|
|
$grid->column('administrator.id', 'ID');
|
|
$grid->column('administrator.username', '登录名');
|
|
$grid->column('administrator.name', '姓名');
|
|
$grid->paginate(10);
|
|
|
|
$grid->showCreateButton();
|
|
$grid->enableDialogCreate();
|
|
|
|
$grid->disableActions();
|
|
$grid->showRowSelector();
|
|
|
|
return $grid;
|
|
}
|
|
|
|
protected function gridProduct($id)
|
|
{
|
|
$grid = new Grid(ProductSku::with(['productSku']));
|
|
$grid->model()->where('store_id', $id)->orderBy('id', 'desc');
|
|
|
|
$grid->setResource('store/'.$id.'/product');
|
|
|
|
$grid->column('productSku.id', 'ID');
|
|
$grid->column('productSku.name', '名称');
|
|
$grid->column('amount', '库存');
|
|
$grid->column('productSku.specs', '规格')->label();
|
|
$grid->column('status', '状态')->switch();
|
|
$grid->paginate(10);
|
|
|
|
$grid->showCreateButton();
|
|
$grid->enableDialogCreate();
|
|
|
|
$grid->showDeleteButton();
|
|
$grid->showRowSelector();
|
|
return $grid;
|
|
}
|
|
|
|
protected function gridStock($id)
|
|
{
|
|
$grid = new Grid(StockLog::with(['productSku', 'administrator', 'source', 'tag']));
|
|
|
|
$grid->model()->where('store_id', $id)->orderBy('created_at', 'desc');
|
|
|
|
$grid->setResource('store/'.$id.'/stock');
|
|
|
|
$grid->column('productSku.name', '商品');
|
|
$grid->column('amount', '库存');
|
|
$grid->column('tag.name', '类目');
|
|
$grid->column('administrator.name', '操作人');
|
|
$grid->column('remarks', '备注');
|
|
$grid->column('created_at', '操作时间');
|
|
|
|
$grid->disableActions();
|
|
$grid->showCreateButton();
|
|
$grid->enableDialogCreate();
|
|
|
|
return $grid;
|
|
}
|
|
}
|