Files
pingan_new/app/Admin/Controllers/Activity/IndexController.php
2020-10-29 10:08:59 +08:00

268 lines
8.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Admin\Controllers\Activity;
use App\Admin\Renderable\Activity\Grants;
use App\Models\Activity;
use App\Models\ActivityGrant;
use App\Models\ActivityRule;
use App\Models\User;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Illuminate\Support\MessageBag;
use Illuminate\Routing\Controller as AdminController;
class IndexController extends AdminController
{
use HasResourceActions;
protected $title = '活动管理';
/**
* Get content title.
* @return string
*/
protected function title()
{
return $this->title;
}
/**
* Index interface.
* @param Content $content
* @return Content
*/
public function index(Content $content)
{
return $content
->title($this->title())
->description($this->description['index'] ?? trans('admin.list'))
->body($this->grid());
}
/**
* Edit interface.
* @param mixed $id
* @param Content $content
* @return Content
*/
public function edit($id, Content $content)
{
return $content
->title($this->title())
->description($this->description['edit'] ?? trans('admin.edit'))
->body($this->form($id)->edit($id));
}
/**
* Create interface.
* @param Content $content
* @return Content
*/
public function create(Content $content)
{
return $content
->title($this->title())
->description($this->description['create'] ?? trans('admin.create'))
->body($this->form());
}
protected function grid()
{
$grid = new Grid(new Activity);
$grid->model()->withCount('coupons');
$grid->actions(function ($actions) {
$actions->disableView();
});
$grid->filter(function ($filter) {
$filter->column(1 / 2, function ($filter) {
$filter->equal('status', '状态')->select(Activity::STATUS);
$filter->equal('type', '类型')->select(Activity::TYPES);
$users = User::whereHas('identity', function ($query) {
$query->where('identity_id', 1);
})->get()->pluck('nickname', 'id');
});
$filter->column(1 / 2, function ($filter) {
$filter->between('start_at', '开始时间')->datetime();
$filter->between('end_at', '结束时间')->datetime();
});
});
$grid->column('id', '#ID#');
$grid->column('title', '活动名称');
$grid->column('code', '活动编号');
$grid->column('total', '可发券总数');
$grid->column('coupons_count', '可发券总数');
$grid->column('rule.code', '卡券规则');
$grid->column('类型')->display(function () {
return $this->type_text;
});
$grid->column('days', '延期(天)');
$grid->column('rule.full', '满足金额');
$grid->column('rule.take', '扣除金额');
$grid->column('发券')
->display(function () {
return $this->grants->pluck('user_nickname');
})
->label()
->hide();
$grid->column('核券')
->display(function () {
return $this->verifications->pluck('user_nickname');
})
->label()
->hide();
$grid->column('开始时间')->display(function () {
return $this->type == Activity::TYPE_SCOPE ? $this->start_at->format('Y-m-d') : '---';
});
$grid->column('结束时间')->display(function () {
return $this->type == Activity::TYPE_SCOPE ? $this->end_at->format('Y-m-d') : '---';
});
$grid->status('状态')->switch([
'on' => ['value' => 1, 'text' => '正常', 'color' => 'primary'],
'off' => ['value' => 0, 'text' => '关闭', 'color' => 'danger'],
]);
$grid->column('created_at', '创建时间');
return $grid;
}
/**
* Make a form builder.
* @return Form
*/
protected function form($id = '')
{
$form = new Form(new Activity);
$form->text('title', '活动名称')->required();
$form->textarea('description', '活动说明')->required();
$form->select('activity_rule_id', '所属规则')
->options(function ($option, $info) {
return ActivityRule::where('status', 1)->pluck('title', 'id');
})
->required();
$form->number('total', '总数')
->help('可发券总数')
->default(10000)
->required();
$form->radio('type', '类型')
->options(Activity::TYPES)
->when(Activity::TYPE_EXTEND, function (Form $form) {
$form->number('days', '延期天数')->default(60)->help('到期日期=发券日期+延期天数');
})
->when(Activity::TYPE_SCOPE, function (Form $form) {
$form->dateRange('start_at', 'end_at', '有效时间');
})
->required();
$form->switch('status', '状态')->default(1);
$form->switch('need_check', '多次校验')
->default(1)
->help('同一订单多次核销时校验订单每满100元可核销一笔。');
$grantdef = $verificationsdef = '';
if ($id) {
$grantdef = Activity::find($id)->grants()->pluck('user_id')->toArray();
$verificationsdef = Activity::find($id)->verifications()->pluck('user_id')->toArray();
}
$users = User::with('info')->whereHas('identity', function ($q) {
$q->where('identity_id', 1);
})->orderBy('id', 'desc')->get()->pluck('nickname', 'id');
$form->listbox('grants.user_id', '可发券渠道')
->options($users)
->default($grantdef)
->required();
$form->listbox('verifications.user_id', '可核券渠道')
->options($users)
->default($verificationsdef)
->required();
$form->saving(function (Form $form) {
$request = request();
if ($request->total < 0) {
$error = new MessageBag([
'title' => '错误',
'message' => '可发券总数必须大于0',
]);
return back()->withInput()->with(compact('error'));
}
if ($request->type == Activity::TYPE_EXTEND && empty($request->days)) {
$error = new MessageBag([
'title' => '错误',
'message' => '必须添加延期天数',
]);
return back()->withInput()->with(compact('error'));
}
if ($request->type == Activity::TYPE_SCOPE && (empty($request->start_at) || empty($request->end_at))) {
$error = new MessageBag([
'title' => '错误',
'message' => '必须添加延期天数',
]);
return back()->withInput()->with(compact('error'));
}
if (request()->start) {
$form->start_at = $form->start_at . ' 00:00:01';
}
if (request()->end_at) {
$form->end_at = $form->end_at . ' 23:59:59';
}
});
$form->saved(function (Form $form) {
$users = [];
foreach ($form->grants['user_id'] as $key => $user_id) {
if ($user_id) {
$form->model()->grants()->updateOrCreate([
'user_id' => $user_id,
]);
$users[] = $user_id;
}
}
$form->model()->grants()->whereNotIn('user_id', $users)->delete();
$users = [];
foreach ($form->verifications['user_id'] as $key => $user_id) {
if ($user_id) {
$form->model()->verifications()->updateOrCreate([
'user_id' => $user_id,
]);
$users[] = $user_id;
}
}
$form->model()->verifications()->whereNotIn('user_id', $users)->delete();
});
return $form;
}
}