236 lines
7.1 KiB
PHP
236 lines
7.1 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
use App\Models\Category;
|
|
use App\Models\Goods;
|
|
use Encore\Admin\Controllers\AdminController;
|
|
use Encore\Admin\Form;
|
|
use Encore\Admin\Grid;
|
|
use Encore\Admin\Layout\Content;
|
|
use Encore\Admin\Show;
|
|
use Illuminate\Support\MessageBag;
|
|
|
|
class GoodsController extends AdminController
|
|
{
|
|
|
|
/**
|
|
* Index interface.
|
|
*
|
|
* @param Content $content
|
|
* @return Content
|
|
*/
|
|
public function index(Content $content)
|
|
{
|
|
|
|
return $content
|
|
->header('商品管理')
|
|
->description('description')
|
|
->body($this->grid());
|
|
}
|
|
|
|
/**
|
|
* Edit interface.
|
|
*
|
|
* @param mixed $id
|
|
* @param Content $content
|
|
* @return Content
|
|
*/
|
|
public function edit($id, Content $content)
|
|
{
|
|
return $content
|
|
->header('编辑商品')
|
|
->body($this->form()->edit($id));
|
|
}
|
|
|
|
/**
|
|
* Create interface.
|
|
*
|
|
* @param Content $content
|
|
* @return Content
|
|
*/
|
|
public function create(Content $content)
|
|
{
|
|
return $content
|
|
->header('新增商品')
|
|
->body($this->form());
|
|
}
|
|
|
|
/**
|
|
* Make a grid builder.
|
|
*
|
|
* @return Grid
|
|
*/
|
|
protected function grid()
|
|
{
|
|
$grid = new Grid(new Goods);
|
|
|
|
$grid->model()->orderBy('id', 'desc');
|
|
|
|
$grid->filter(function ($filter) {
|
|
$filter->column(1 / 3, function ($filter) {
|
|
$filter->like('title', '商品名称');
|
|
$filter->like('category.id', '所属分类')->select(Category::selectOptions(function ($model) {
|
|
return $model->where('status', 1)->where('type', 'goods');
|
|
}, '所有分类'));
|
|
});
|
|
|
|
$filter->column(1 / 3, function ($filter) {
|
|
$filter->equal('status', '商品状态')->select([
|
|
1 => '正常',
|
|
0 => '禁用',
|
|
]);
|
|
$filter->equal('type', '商品类型')->select([
|
|
'member' => '会员商品',
|
|
'pick' => '提货商品',
|
|
]);
|
|
|
|
});
|
|
|
|
$filter->column(1 / 3, function ($filter) {
|
|
$filter->equal('is_hot_sell', '热销推荐')->select([
|
|
1 => '是',
|
|
0 => '否',
|
|
]);
|
|
$filter->equal('is_recommend', '最新推荐')->select([
|
|
1 => '是',
|
|
0 => '否',
|
|
]);
|
|
});
|
|
|
|
$filter->disableIdFilter();
|
|
|
|
});
|
|
|
|
$grid->id('序号');
|
|
$grid->cover('封面')->image('', 60, 60);
|
|
$grid->title('商品名称');
|
|
$grid->column('所属分类')->display(function () {
|
|
return $this->category->title;
|
|
});
|
|
$grid->description('简介');
|
|
$grid->column('类型')->display(function () {
|
|
return $this->type_text;
|
|
});
|
|
$grid->status('状态')->switch([
|
|
'on' => ['value' => 1, 'text' => '正常', 'color' => 'primary'],
|
|
'off' => ['value' => 0, 'text' => '禁用', 'color' => 'danger'],
|
|
]);
|
|
$grid->is_hot_sell('热销推荐')->switch([
|
|
'on' => ['value' => 1, 'text' => '是', 'color' => 'primary'],
|
|
'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],
|
|
]);
|
|
|
|
$grid->is_recommend('最新推荐')->switch([
|
|
'on' => ['value' => 1, 'text' => '是', 'color' => 'primary'],
|
|
'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],
|
|
]);
|
|
|
|
$grid->created_at('创建时间');
|
|
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
|
if ($this->row->type == 'pick') {
|
|
$actions->disableDelete();
|
|
}
|
|
$actions->disableView();
|
|
});
|
|
return $grid;
|
|
}
|
|
|
|
/**
|
|
* Make a show builder.
|
|
*
|
|
* @param mixed $id
|
|
* @return Show
|
|
*/
|
|
protected function detail($id)
|
|
{
|
|
$show = new Show(Goods::findOrFail($id));
|
|
|
|
$show->id('编号');
|
|
$show->name('商品名称');
|
|
$show->created_at('创建时间');
|
|
|
|
return $show;
|
|
}
|
|
|
|
/**
|
|
* Make a form builder.
|
|
*
|
|
* @return Form
|
|
*/
|
|
protected function form()
|
|
{
|
|
$form = new Form(new Goods);
|
|
|
|
$form->text('title', '商品名称')->rules('required');
|
|
$form->select('category_id', '所属分类')->options(Category::selectOptions(function ($model) {
|
|
return $model->where('status', 1)->where('type', 'goods');
|
|
}, '选择分类'))->rules('required');
|
|
|
|
$form->textarea('description', '简介')->rules('required|max:255', [
|
|
'required' => '简介不能为空',
|
|
'max' => '简介不能超过255字',
|
|
]);
|
|
|
|
$form->image('cover', '封面')->rules('required')->uniqueName();
|
|
$form->radio('type', '类型')->options(['member' => '会员产品', 'pick' => '提货商品'])->default('member');
|
|
$form->editor('content', '详情')->rules('required', ['required' => '详情不能为空']);
|
|
$form->switch('status', '状态')->default(1);
|
|
$form->switch('is_recommend', '最新推荐')->default(0);
|
|
$form->switch('is_hot_sell', '热销推荐')->default(0);
|
|
|
|
$form->hasMany('params', '产品属性', function (Form\NestedForm $form) {
|
|
$form->text('value', '名称')->rules('required');
|
|
$form->text('original', '原价')->rules('required');
|
|
$form->text('price', '会员价')->rules('required');
|
|
$form->text('stock', '库存')->rules('required');
|
|
$form->text('one', '一级佣金')->rules('required');
|
|
$form->text('two', '二及佣金')->rules('required');
|
|
})->rules('required');
|
|
|
|
$form->saving(function (Form $form) {
|
|
if (request()->has('title')) {
|
|
$params = request()->params;
|
|
$params_count = empty($params) ? 0 : count($params);
|
|
if (!$params_count) {
|
|
$error = new MessageBag([
|
|
'title' => '错误',
|
|
'message' => '必须添加产品属性',
|
|
]);
|
|
return back()->with(compact('error'));
|
|
}
|
|
$remove = 0;
|
|
|
|
foreach ($params as $key => $param) {
|
|
if ($param['_remove_'] == 1) {
|
|
$remove++;
|
|
}
|
|
}
|
|
|
|
if ($remove == $params_count) {
|
|
$error = new MessageBag([
|
|
'title' => '错误',
|
|
'message' => '必须添加产品属性',
|
|
]);
|
|
return back()->with(compact('error'));
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
$form->saved(function (Form $form) {
|
|
$goods_id = $form->model()->id;
|
|
$goods = Goods::find($goods_id);
|
|
$price = $goods->params()->orderBy('price', 'asc')->value('price');
|
|
if ($price) {
|
|
$goods->price = $price;
|
|
$goods->save();
|
|
}
|
|
|
|
});
|
|
|
|
return $form;
|
|
}
|
|
|
|
}
|