baseCRUD() ->tableLayout('fixed') ->headerToolbar([ $this->createTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.hr.holiday.create')), ...$this->baseHeaderToolBar(), ]) ->bulkActions([]) ->filter($this->baseFilter()->body([ amis()->GroupControl()->mode('horizontal')->body([ amisMake()->SelectControl()->name('store_id')->label(__('holiday_apply.store_id')) ->source(admin_url('api/stores?_all=1')) ->labelField('title') ->valueField('id') ->searchable() ->columnRatio(3) ->clearable(), amisMake()->TextControl()->name('employee_name')->label(__('holiday_apply.employee_id')) ->placeholder(__('employee.name').'/'.__('employee.phone')) ->columnRatio(3) ->clearable(), amisMake()->SelectControl()->name('type_id')->label(__('holiday_apply.type_id')) ->source(admin_url('api/keywords/tree-list?parent_key=holiday_type')) ->labelField('name') ->valueField('key') ->columnRatio(3) ->clearable(), amisMake()->SelectControl()->name('check_status')->label(__('holiday_apply.check_status')) ->options(CheckStatus::options()) ->columnRatio(3) ->clearable(), ]), ])) ->columns([ amisMake()->TableColumn()->name('store.title')->label(__('employee_sign.store_id')), amisMake()->TableColumn()->name('employee.name')->label(__('holiday_apply.employee_id')), amisMake()->TableColumn()->name('type.name')->label(__('holiday_apply.type_id')), amisMake()->TableColumn()->name('reason')->label(__('holiday_apply.reason')), amisMake()->TableColumn()->name('start_at')->label(__('holiday_apply.start_at')), amisMake()->TableColumn()->name('end_at')->label(__('holiday_apply.end_at')), amisMake()->TableColumn()->name('check_status')->label(__('holiday_apply.check_status'))->set('type', 'mapping')->map(CheckStatus::options()), amisMake()->TableColumn()->name('created_at')->label(__('holiday_apply.created_at')), $this->rowActions([ $this->rowShowButton()->visible(Admin::user()->can('admin.hr.holiday.view')), $this->rowEditTypeButton('drawer', 'xl') ->visible(Admin::user()->can('admin.hr.holiday.update')) ->visibleOn('${OR(check_status == '.CheckStatus::None->value.', check_status == '.CheckStatus::Cancel->value.', check_status == '.CheckStatus::Fail->value.')}'), $this->rowDeleteButton() ->visible(Admin::user()->can('admin.hr.holiday.delete')) ->visibleOn('${OR(check_status == '.CheckStatus::None->value.', check_status == '.CheckStatus::Cancel->value.', check_status == '.CheckStatus::Fail->value.')}'), $this->applyAction(), $this->cancelAction(), ]), ]); return $this->baseList($crud); } public function form($edit): Form { return $this->baseForm()->title('')->body([ amisMake()->SelectControl()->name('employee_id')->label(__('holiday_apply.employee_id')) ->source(admin_url('api/employees?_all=1&store_id_gt=0&employee_status='.EmployeeStatus::Online->value)) ->labelField('name') ->valueField('id') ->searchable() ->joinValues(false) ->extractValue() ->required(), amisMake()->SelectControl() ->name('type_id') ->label(__('holiday_apply.type_id')) ->source(admin_url('api/keywords/tree-list?parent_key=holiday_type')) ->labelField('name') ->valueField('key') ->required(), amisMake()->DateRangeControl() ->format('YYYY-MM-DD') ->name('date_range') ->label(__('holiday_apply.date')) ->required(), amisMake()->TextControl()->name('reason')->label(__('holiday_apply.reason'))->required(), ]); } public function detail(): Form { $subjectType = $this->getMorphAlias(); $detail = amisMake()->Property()->items([ ['label' => __('holiday_apply.store_id'), 'content' => '${store.title}'], ['label' => __('holiday_apply.employee_id'), 'content' => '${employee.name}'], ['label' => __('holiday_apply.type_id'), 'content' => '${type.name}'], ['label' => __('holiday_apply.date'), 'content' => '${start_at} ${end_at}'], ['label' => __('holiday_apply.reason'), 'content' => '${reason}'], ['label' => __('holiday_apply.created_at'), 'content' => '${created_at}'], ['label' => __('holiday_apply.check_status'), 'content' => amisMake()->Mapping()->name('check_status')->map(CheckStatus::options())], ['label' => __('holiday_apply.checked_at'), 'content' => '${checked_at}'], ['label' => __('holiday_apply.check_remarks'), 'content' => '${check_remarks}'], ]); $table = amisMake()->Service() ->id('holiday-checklog-table') ->initFetch(false) ->api( amisMake()->BaseApi()->method('get')->url(admin_url('api/workflow/logs'))->data([ 'subject_type' => $subjectType, 'subject_id' => '${id}', ]) ) ->body( amisMake()->Table()->columnsTogglable(false)->itemActions([ $this->succesAction()->reload('holiday-detail'), $this->failAction()->reload('holiday-detail'), ])->columns([ amisMake()->TableColumn()->name('batch_id')->label(__('workflow_log.batch_id')), amisMake()->TableColumn()->name('check_name')->label(__('workflow_log.check_name')), amisMake()->TableColumn()->name('check_user.name')->label(__('workflow_log.check_user_id')), amisMake()->TableColumn()->name('check_status')->label(__('workflow_log.check_status'))->set('type', 'mapping')->map(CheckStatus::options()), amisMake()->TableColumn()->name('checked_at')->label(__('workflow_log.checked_at')), amisMake()->TableColumn()->name('remarks')->label(__('workflow_log.remarks')), ]) ); return $this->baseDetail()->id('holiday-detail')->title('')->onEvent([ 'inited' => [ 'actions' => [ ['actionType' => 'reload', 'componentId' => 'holiday-checklog-table'], ] ] ])->body([$detail, amisMake()->Divider(), $table]); } public function getMorphAlias() { return (new HolidayApply)->getMorphClass(); } }