1
0
Files
lkafu/app/Admin/Controllers/GoodsController.php
2020-08-06 14:45:56 +08:00

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;
}
}