header('邮件推送')
->description('列表')
->body($this->grid());
}
/**
* Show interface.
*
* @param mixed $id
* @param Content $content
* @return Content
*/
public function show($id, Content $content)
{
return $content
->header('邮件推送')
->description('详情')
->body($this->detail($id));
}
/**
* Edit interface.
*
* @param mixed $id
* @param Content $content
* @return Content
*/
public function edit($id, Content $content)
{
return $content
->header('邮件推送')
->description('编辑')
->body($this->form()->edit($id));
}
/**
* Create interface.
*
* @param Content $content
* @return Content
*/
public function create(Content $content)
{
return $content
->header('邮件推送')
->description('创建')
->body($this->form());
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new EmailBatch);
$grid->id('ID');
$grid->name('批次名称')->width(150);
$grid->emails('指定邮箱')->width(150);
$grid->column('template.name', "短信模板")->width(200);
$grid->accept_member('指定会员')->display(function ($m_status) {
switch ($m_status) {
case 1:
$m_status = '企业';
break;
case 2:
$m_status = '个人';
break;
default:
$m_status = '不限';
break;
}
return $m_status;
});
$grid->accept_type('指定登录时间')->display(function ($m_status) {
switch ($m_status) {
case 1:
$m_status = '一周未登录';
break;
case 2:
$m_status = '一月未登录';
break;
default:
$m_status = '不限';
break;
}
return $m_status;
});
$grid->target_num('目标发送数量')->width(150);
$grid->send_num('实际发送数量')->width(150);
$grid->status('状态')->display(function ($m_status) {
switch ($m_status) {
case 1:
$m_status = '发送完成';
break;
default:
$m_status = '发送中...';
break;
}
return $m_status;
});
$grid->created_at('添加时间');
$grid->actions(function ($actions) use ($grid) {
if (Admin::user()->can('system_email_batch_delete')) {
$actions->disableDelete(false);
}
});
if (Admin::user()->can('system_email_batch_delete')) {
$grid->tools(function ($tools) {
$tools->batch(function ($batch) {
$batch->disableDelete(false);
});
});
$grid->disableRowSelector(false);
}
$grid->filter(function ($filter) {
$filter->equal('status', '状态')->select([
0 => '发送中',
1 => '发送完成',
]);
$filter->like('emails', '邮箱');
});
if (Admin::user()->can('system_email_batch_create')) {
$grid->disableCreateButton(false);
}
return $grid;
}
/**
* Make a show builder.
*
* @param mixed $id
* @return Show
*/
protected function detail($id)
{
$show = new Show(EmailBatch::findOrFail($id));
$res = EmailBatch::findOrFail($id);
$show->id('ID');
$show->name('批次名称');
$show->emails('指定邮箱')->limit(35);
$show->template('短信模板')->as(function () use ($res) {
return EmailTemplate::findOrFail($res->template_id)->name;
});
$show->accept_member('指定会员')->unescape()->as(function ($m_status) {
switch ($m_status) {
case 1:
$m_status = '企业';
break;
case 2:
$m_status = '个人';
break;
default:
$m_status = '不限';
break;
}
return $m_status;
});
$show->accept_type('指定登录时间')->unescape()->as(function ($m_status) {
switch ($m_status) {
case 1:
$m_status = '一周未登录';
break;
case 2:
$m_status = '一月未登录';
break;
default:
$m_status = '不限';
break;
}
return $m_status;
});
$show->target_num('目标发送数量');
$show->send_num('实际发送数量');
$show->status('状态')->unescape()->as(function ($m_status) {
switch ($m_status) {
case 1:
$m_status = '发送完成';
break;
default:
$m_status = '发送中...';
break;
}
return $m_status;
});
$show->created_at('Created at');
$show->updated_at('Updated at');
return $show;
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
$form = new Form(new EmailBatch);
$form->text('name', '批次名称')->rules('required', ['required'=>'请输入批次名称'])->setWidth(3)->setMustMark();
$form->textarea('emails', '指定邮箱')
->help('指定邮箱后将忽略下面的筛选条件,每个邮箱以英文逗号","分隔')->setWidth(8);
$form->radio('accept_member', '收件会员')->options([0=>'不限',1=>'企业会员',2=>'个人会员'])->default(0);
$form->radio('accept_type', '登录时间')->options([0=>'不限',1=>'一周未登录',2=>'一月未登录'])->default(0);
$form->select('template_id', '邮件模板')->options(
EmailTemplate::List()->pluck('name', 'id')
)->rules('required', ['required'=>'请选择邮件模板'])->setWidth(3)->setMustMark();
//保存后回调
$form->saved(function (Form $form) {
$batchJob=new EmailBatchJob($form->model());
dispatch($batchJob);
});
return $form;
}
}