228 lines
6.7 KiB
PHP
228 lines
6.7 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers\Store;
|
|
|
|
use App\Admin\Actions\Store\ExportGoodsSpu;
|
|
use App\Models\Store\{Store, ProductSku, Administrator as StoreAdministrator, StockLog};
|
|
use Dcat\Admin\{Form, Grid, Show, Admin};
|
|
use Dcat\Admin\Http\Controllers\AdminController;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Models\Admin\Administrator;
|
|
use Dcat\Admin\Widgets\{Box, Tab, Card};
|
|
use Dcat\Admin\Layout\{Content, Row};
|
|
use App\Admin\Metrics\Store\{TotalStore, TotalUser, TotalOrder, TotalMoney};
|
|
use Dcat\Admin\Show\Tools;
|
|
|
|
class StoreController extends AdminController
|
|
{
|
|
public function info(Content $content)
|
|
{
|
|
$row = new Row();
|
|
$row->column(3, new TotalStore());
|
|
$row->column(3, new TotalUser());
|
|
$row->column(3, new TotalOrder());
|
|
$row->column(3, new TotalMoney());
|
|
return $content
|
|
->title('总览')
|
|
->body($row);
|
|
}
|
|
|
|
public function list()
|
|
{
|
|
$q = request('q');
|
|
$query = Store::where('title', 'like', '%'.$q.'%');
|
|
|
|
$user = Admin::user();
|
|
$canAdmin = $this->canAdmin();
|
|
if (!$canAdmin) {
|
|
$stores = $user->stores;
|
|
$query->whereIn('id', $stores->pluck('id'));
|
|
}
|
|
|
|
return $query->select(['id', 'title as text'])->get();
|
|
}
|
|
|
|
protected function grid()
|
|
{
|
|
$grid = Grid::make(new Store());
|
|
|
|
$user = Admin::user();
|
|
$canAdmin = $this->canAdmin();
|
|
if (!$canAdmin) {
|
|
$stores = $user->stores;
|
|
$grid->model()->whereIn('id', $stores->pluck('id'));
|
|
}
|
|
|
|
$grid->model()->sort();
|
|
|
|
$grid->column('id');
|
|
$grid->column('title');
|
|
$grid->column('image')->image('', 100, 100);
|
|
$grid->column('status')->switch();
|
|
$grid->column('sort')->editable();
|
|
$grid->column('created_at');
|
|
|
|
$grid->disableCreateButton(!$canAdmin);
|
|
$grid->enableDialogCreate();
|
|
|
|
$grid->showViewButton($user->can('dcat.admin.store.list.show'));
|
|
|
|
$grid->showQuickEditButton($user->can('dcat.admin.store.list.edit'));
|
|
|
|
$grid->showDeleteButton($canAdmin);
|
|
|
|
$grid->filter(function (Grid\Filter $filter) {
|
|
$filter->panel();
|
|
$filter->like('title')->width(3);
|
|
});
|
|
|
|
return $grid;
|
|
|
|
}
|
|
|
|
protected function detail($id)
|
|
{
|
|
if ($this->canAdmin()) {
|
|
$info = Store::findOrFail($id);
|
|
} else {
|
|
$user = Admin::user();
|
|
$info = $user->stores()->findOrFail($id);
|
|
}
|
|
$show = Show::make($id, $info);
|
|
$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->tools(function (Tools $tools) {
|
|
$tools->append(new ExportGoodsSpu());
|
|
|
|
$tools->disableList();
|
|
$tools->disableDelete();
|
|
$tools->disableEdit();
|
|
});
|
|
return $show;
|
|
}
|
|
|
|
/**
|
|
* Make a form builder.
|
|
*
|
|
* @return Form
|
|
*/
|
|
protected function form()
|
|
{
|
|
return Form::make(Store::with(['administrators']), function (Form $form) {
|
|
$form->display('id');
|
|
$form->text('title');
|
|
$form->image('image')
|
|
->required()
|
|
->move('store/'.Carbon::now()->toDateString())
|
|
->saveFullUrl()
|
|
->removable(false)
|
|
->retainable()
|
|
->autoUpload();
|
|
|
|
$form->tree('administrators', '选择管理员')
|
|
->nodes(Administrator::all()->toArray())
|
|
->setTitleColumn('name')
|
|
->value($form->model()->administrators ? $form->model()->administrators->pluck('id') : '')
|
|
->customFormat(function ($v) {
|
|
if (!$v) {
|
|
return [];
|
|
}
|
|
return array_column($v, 'id');
|
|
});
|
|
$form->text('remarks');
|
|
$form->switch('status')->default(1);
|
|
$form->number('sort')->min(1)->default(1);
|
|
|
|
$form->disableDeleteButton();
|
|
$form->footer(function ($footer) {
|
|
$footer->disableEditingCheck();
|
|
});
|
|
});
|
|
}
|
|
|
|
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', 'operator', '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('operator', '操作人')->display(function ($v) {
|
|
if ($v instanceof \App\Models\Admin\Administrator) {
|
|
return $v->name . '<span class="label bg-danger">管理员</span>';
|
|
} else if ($v instanceof \App\Models\User) {
|
|
return $v->phone . '<span class="label bg-primary">用户</span>';
|
|
}
|
|
|
|
return '未知身份';
|
|
});
|
|
$grid->column('remarks', '备注');
|
|
$grid->column('created_at', '操作时间');
|
|
|
|
$grid->disableActions();
|
|
$grid->showCreateButton();
|
|
$grid->enableDialogCreate();
|
|
|
|
return $grid;
|
|
}
|
|
}
|