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

219 lines
8.7 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Admin\Renderable\ProductSkuSimpleTable;
use App\Admin\Repositories\BargainActivity;
use App\Models\BargainActivity as BargainActivityModel;
use App\Models\BargainOrder;
use App\Models\ProductSku;
use Carbon\Carbon;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\Column;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Widgets\Box;
use Illuminate\Http\Request;
class BargainActivityController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new BargainActivity(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('name');
// $grid->column('description');
$grid->column('is_enable')
->if(function () {
return Admin::user()->can('dcat.admin.bargain_activities.edit');
})
->then(function (Column $column) {
$column->switch();
})
->else(function (Column $column) {
$column->bool();
});
// $grid->column('rules');
$grid->column('times');
// $grid->column('expire_hours');
$grid->column('start_at');
$grid->column('end_at');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
//新增
if (Admin::user()->can('dcat.admin.bargain_activities.create')) {
$grid->disableCreateButton(false);
// $grid->enableDialogCreate();
}
$grid->actions(function (Grid\Displayers\Actions $actions) {
$actions->disableView(Admin::user()->cannot('dcat.admin.bargain_activities.show'));
$actions->disableDelete(Admin::user()->cannot('dcat.admin.bargain_activities.destroy'));
//修改
$actions->disableEdit(Admin::user()->cannot('dcat.admin.bargain_activities.edit'));
});
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->like('name')->width(3);
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return function (Row $row) use ($id) {
$activity = BargainActivityModel::with(['skus'])->findOrFail($id);
$row->column(6, function ($column) use ($activity) {
$column->row(Show::make($activity, function (Show $show) use ($activity) {
$show->panel()
->tools(function ($tools) {
$tools->disableEdit(Admin::user()->cannot('dcat.admin.bargain_activities.edit'));
// $tools->disableList();
$tools->disableDelete(Admin::user()->cannot('dcat.admin.bargain_activities.destroy'));
});
$show->row(function (Show\Row $show) use ($activity) {
$show->field('id')->width(10, 1);
$show->field('name')->width(10, 1);
$show->field('is_enable')->using([0=>'未开启', '已开启'])->dot([
'0'=>'#b3b9bf',
'1'=>'success',
])->width(10, 1);
$show->width(6)->field('start_at');
$show->width(6)->field('end_at');
$show->width(6)->field('times')->append('刀');
$show->width(6)->field('expire_hours')->append('h');
$show->width(12)->field('skus')->width(10, 1)->as(function ($value) {
return array_column($value, 'name');
})->label();
$show->field('images')->image()->width(10, 1);
$show->field('description')->unescape()->width(10, 1);
$show->width(6)->field('created_at');
$show->width(6)->field('updated_at');
});
}));
});
$row->column(6, function ($column) use ($activity) {
//砍价记录
$builder = BargainOrder::where('activity_id', $activity->id)->with(['userInfo']);
$bargainOrderGrid = Grid::make($builder, function (Grid $grid) {
$grid->column('id', '序号');
$grid->column('infos', '明细')->display(function () {
return '【'.$this->userInfo->nickname.'】'.$this->created_at->format('Y-m-d H:i:s').'发起了砍价';
})->link(function () {
return admin_route('bargain_orders.show', ['bargain_order' =>$this->id]);
});
$grid->model()->orderBy('created_at', 'desc');
$grid->disableActions();
$grid->disableRefreshButton();
});
$bargainOrderBox = Box::make('砍价记录', $bargainOrderGrid);
$column->row($bargainOrderBox->collapsable());
});
};
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$builder = BargainActivity::with(['skus']);
return Form::make($builder, function (Form $form) {
$form->display('id');
$form->display('created_at');
$form->display('updated_at');
$form->block(6, function (Form\BlockForm $form) {
$form->text('name')->required();
$form->switch('is_enable');
$form->datetimeRange('start_at', 'end_at', '活动时间')->required();
$form->multipleSelectTable('skus')
->from(ProductSkuSimpleTable::make())
->model(ProductSku::class, 'id', 'name')
->customFormat(function ($v) {
if (!$v) {
return [];
}
// 这一步非常重要,需要把数据库中查出来的二维数组转化成一维数组
return array_column($v, 'id');
})->required();
$form->number('times')->min(0);
$form->number('expire_hours')->min(0);
$form->textarea('rules')->customFormat(function ($value) {
return implode(',', json_decode($value));
})->saving(function ($value) {
// dd($value, explode(',', $value));
return json_encode(explode(',', $value));
});
$form->text('share_title', '分享文案')->placeholder('默认使用活动名称');
$form->image('share_image', '分享图')
->move('bargain/share/'.Carbon::now()->toDateString())
->saveFullUrl()
->autoUpload()
->retainable()
->removable(false)->required();
$form->showFooter();
});
$form->block(6, function (Form\BlockForm $form) {
$form->multipleImage('images')
->move('bargain/images/'.Carbon::now()->toDateString())
->saveFullUrl()
->removable(false)
->autoUpload()->retainable()->sortable();
$form->editor('description')->height('600');
});
$form->saving(function ($form) {
if ($form->is_enable) {
//查询是否有除了自己以外开启的活动
if ($form->model()->id) {
if (BargainActivityModel::where('id', '<>', $form->model()->id)->isEnable()->exists()) {
return $form->response()->error('当前已有开启的活动');
}
} else {
if (BargainActivityModel::isEnable()->exists()) {
return $form->response()->error('当前已有开启的活动');
}
}
}
});
});
}
public function activities(Request $request)
{
$name = $request->input('q');
$query = BargainActivityModel::select('id', 'name as text');
if ($name) {
$query->where('name', 'like', "%$name%");
return $query->paginate(null);
}
return response()->json($query->get());
}
}