generated from liutk/owl-admin-base
190 lines
7.9 KiB
PHP
190 lines
7.9 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers\Plan;
|
|
|
|
use App\Admin\Controllers\AdminController;
|
|
use App\Admin\Services\Plan\PlanService;
|
|
use App\Enums\PlanStatus;
|
|
use App\Enums\TaskStatus;
|
|
use Illuminate\Support\Arr;
|
|
use Slowlyo\OwlAdmin\Admin;
|
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
|
|
|
/**
|
|
* @property PlanService $service
|
|
*/
|
|
class PlanController extends AdminController
|
|
{
|
|
protected string $serviceName = PlanService::class;
|
|
|
|
protected array $planableTypes = [
|
|
'plan_ledgers' => '总账录入',
|
|
'plan_performances' => '业绩指标',
|
|
'plan_hygienes' => '清洁卫生',
|
|
];
|
|
|
|
protected array $planableTypeLabelMap = [
|
|
'plan_ledgers' => '<span class="label label-primary">总账录入</span>',
|
|
'plan_performances' => '<span class="label label-danger">业绩指标</span>',
|
|
'plan_hygienes' => '<span class="label label-success">清洁卫生</span>',
|
|
];
|
|
|
|
public function list(): Page
|
|
{
|
|
$crud = $this->baseCRUD()
|
|
->headerToolbar([
|
|
$this->createTypeButton('drawer', 'lg')
|
|
->visible(Admin::user()->can('admin.plan.plans.create')),
|
|
...$this->baseHeaderToolBar(),
|
|
])
|
|
->bulkActions([])
|
|
->filter($this->baseFilter()->body([
|
|
amis()->GroupControl()->mode('horizontal')->body([
|
|
amis()->TextControl()
|
|
->name('name')
|
|
->label(__('plan.plan.name'))
|
|
->placeholder('计划名称')
|
|
->clearable(),
|
|
|
|
amis()->SelectControl()
|
|
->name('planable_type')
|
|
->label(__('plan.plan.type'))
|
|
->multiple()
|
|
->options($this->planableTypes)
|
|
->clearable(),
|
|
|
|
amis()->SelectControl()
|
|
->name('plan_status')
|
|
->label(__('plan.plan.status'))
|
|
->multiple()
|
|
->options(PlanStatus::options())
|
|
->clearable(),
|
|
]),
|
|
]))
|
|
->columns([
|
|
amis()->TableColumn('id', __('plan.plan.id')),
|
|
amis()->TableColumn('name', __('plan.plan.name')),
|
|
amis()->TableColumn('planable_type', __('plan.plan.type'))->type('mapping')->map($this->planableTypeLabelMap),
|
|
amis()->TableColumn('plan_status', __('plan.plan.status'))->type('mapping')->map(PlanStatus::labelMap()),
|
|
amis()->TableColumn('created_at', __('plan.plan.created_at')),
|
|
$this->rowActions([
|
|
$this->rowEditTypeButton('drawer', 'lg')
|
|
->visible(Admin::user()->can('admin.plan.plans.update'))
|
|
->visibleOn('${plan_status == '.PlanStatus::Pending->value.'}'),
|
|
$this->rowDeleteButton()
|
|
->visible(Admin::user()->can('admin.plan.plans.delete'))
|
|
->visibleOn('${plan_status == '.PlanStatus::Pending->value.'}'),
|
|
$this->rowShowButton()
|
|
->visible(Admin::user()->can('admin.plan.plans.view')),
|
|
]),
|
|
]);
|
|
|
|
return $this->baseList($crud);
|
|
}
|
|
|
|
public function form(): Form
|
|
{
|
|
return $this->baseForm()->title('')->body([
|
|
amis()->SelectControl()
|
|
->name('planable_type')
|
|
->label(__('plan.plan.type'))
|
|
->options(Arr::except($this->planableTypes, ['plan_ledgers']))
|
|
->required()
|
|
->disabledOn('${planable_id > 0}'),
|
|
|
|
amis()->TextControl()
|
|
->name('name')
|
|
->label(__('plan.plan.name'))
|
|
->placeholder(__('plan.plan.name'))
|
|
->required(),
|
|
|
|
// 业绩指标
|
|
amis()->MonthControl()
|
|
->name('plan_performance[month]')
|
|
->label(__('plan.plan.month'))
|
|
->value('${planable.month}')
|
|
->required()
|
|
->valueFormat('YYYY-MM')
|
|
->visibleOn('${planable_type == "plan_performances"}'),
|
|
amis()->TreeSelectControl()
|
|
->name('plan_performance[store_category_id]')
|
|
->label(__('plan.plan.store_category'))
|
|
->source(admin_url('api/keywords/tree-list?parent_key=store_category'))
|
|
->labelField('name')
|
|
->valueField('key')
|
|
->onlyLeaf(true)
|
|
->value('${planable.store_category_id}')
|
|
->required()
|
|
->visibleOn('${planable_type == "plan_performances"}'),
|
|
amis()->SelectControl()
|
|
->name('plan_performance[store_level_id]')
|
|
->label(__('plan.plan.store_level'))
|
|
->source(admin_url('api/keywords/tree-list?parent_key=store_level'))
|
|
->labelField('name')
|
|
->valueField('key')
|
|
->value('${planable.store_level_id}')
|
|
->clearable()
|
|
->visibleOn('${planable_type == "plan_performances"}'),
|
|
amis()->NumberControl()
|
|
->name('plan_performance[performance]')
|
|
->label(__('plan.plan.performance'))
|
|
->placeholder(__('plan.plan.performance'))
|
|
->value('${planable.performance}')
|
|
->precision(2)
|
|
->showSteps(false)
|
|
->required()
|
|
->visibleOn('${planable_type == "plan_performances"}'),
|
|
|
|
// 清洁卫生
|
|
amis()->MonthControl()
|
|
->name('plan_hygiene[month]')
|
|
->label(__('plan.plan.month'))
|
|
->value('${planable.month}')
|
|
->required()
|
|
->valueFormat('YYYY-MM')
|
|
->visibleOn('${planable_type == "plan_hygienes"}'),
|
|
amis()->SelectControl()
|
|
->name('plan_hygiene[store_ids]')
|
|
->label(__('plan.plan.store'))
|
|
->value('${planable.store_ids}')
|
|
->multiple()
|
|
->joinValues(false)
|
|
->extractValue(true)
|
|
->source(admin_url('api/stores?_all=1'))
|
|
->labelField('title')
|
|
->valueField('id')
|
|
->searchable()
|
|
->visibleOn('${planable_type == "plan_hygienes"}'),
|
|
]);
|
|
}
|
|
|
|
public function detail(): Form
|
|
{
|
|
return $this->baseDetail()->title('')->body([
|
|
amis()->Property()->items([
|
|
['label' => __('plan.plan.name'), 'content' => '${name}'],
|
|
['label' => __('plan.plan.type'), 'content' => amis()->Mapping()->name('planable_type')->map($this->planableTypeLabelMap)],
|
|
['label' => __('plan.plan.status'), 'content' => amis()->Mapping()->name('plan_status')->map(PlanStatus::labelMap())],
|
|
]),
|
|
|
|
amis()->Divider(),
|
|
|
|
// 总账录入
|
|
amis()->CRUDTable()
|
|
->api(admin_url('api/tasks?plan_id=${id}'))
|
|
->columns([
|
|
amis()->TableColumn('id', __('plan.task.id')),
|
|
amis()->TableColumn('name', __('plan.task.name')),
|
|
amis()->TableColumn('taskable.date', __('plan.task_ledger.date')),
|
|
amis()->TableColumn('taskable.store.title', __('plan.task_ledger.store')),
|
|
amis()->TableColumn('taskable.store.master.name', __('plan.task_ledger.store_master')),
|
|
amis()->TableColumn('task_status', __('plan.task.status'))->type('mapping')->map(TaskStatus::labelMap()),
|
|
amis()->TableColumn('completed_at', __('plan.task.completed_at')),
|
|
amis()->TableColumn('created_at', __('plan.task.created_at')),
|
|
])
|
|
->visibleOn('${planable_type == "plan_ledgers"}'),
|
|
]);
|
|
}
|
|
}
|