getMorphClass(); $crud = $this->baseCRUD() ->tableLayout('fixed') ->headerToolbar([ $this->createTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.hr.repairs.create')), ...$this->baseHeaderToolBar(), ]) ->bulkActions([]) ->filter($this->baseFilter()->body([ amis()->GroupControl()->mode('horizontal')->body([ amisMake()->SelectControl()->name('store_id')->label(__('employee_sign_repair.store_id')) ->source(admin_url('api/stores?_all=1')) ->labelField('title') ->valueField('id') ->searchable() ->columnRatio(3) ->clearable(), amisMake()->TextControl()->name('employee_name')->label(__('employee_sign_repair.employee_id')) ->placeholder(__('employee.name').'/'.__('employee.phone')) ->columnRatio(3) ->clearable(), ]), ])) ->columns([ amisMake()->Column()->name('id')->label(__('employee_sign_repair.id')), amisMake()->Column()->name('store.title')->label(__('employee_sign_repair.store_id')), amisMake()->Column()->name('employee.name')->label(__('employee_sign_repair.employee_id')), amisMake()->Column()->name('date')->label(__('employee_sign_repair.date')), amisMake()->Column()->name('repair_type')->label(__('employee_sign_repair.repair_type')) ->set('type', 'mapping') ->map(SignTime::options()), amisMake()->Column()->name('check_status')->label(__('employee_sign_repair.check_status')) ->set('type', 'mapping') ->map(CheckStatus::options()), $this->rowActions([ $this->rowShowButton()->visible(Admin::user()->can('admin.hr.repairs.view')), $this->rowEditTypeButton('drawer', 'xl')->visible(Admin::user()->can('admin.hr.repairs.update')), $this->rowDeleteButton()->visible(Admin::user()->can('admin.hr.repairs.delete')), amisMake()->AjaxAction() ->label('发起审核') ->level('link') ->api(amisMake()->BaseApi()->url(admin_url('api/workflow/apply'))->method('post')->data([ 'subject_type' => $subjectType, 'subject_id' => '${id}', 'user' => '${employee_id}' ])) ->confirmText(__('admin.confirm')) ->visibleOn('${OR(check_status == '.CheckStatus::None->value.', check_status == '.CheckStatus::Cancel->value.', check_status == '.CheckStatus::Fail->value.')}'), amisMake()->AjaxAction() ->label('取消审核') ->level('link') ->api(amisMake()->BaseApi()->url(admin_url('api/workflow/cancel'))->method('post')->data([ 'subject_type' => $subjectType, 'subject_id' => '${id}', ])) ->confirmText(__('admin.confirm')) ->visibleOn('${check_status == '.CheckStatus::Processing->value.'}'), ]) ]); return $this->baseList($crud); } public function form($edit): Form { return $this->baseForm()->title('')->body([ amisMake()->SelectControl()->name('employee_id')->label(__('employee_sign.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()->DateControl()->format('YYYY-MM-DD HH:mm:ss')->name('date')->label(__('employee_sign_repair.date'))->required(), amisMake()->SelectControl()->options(SignTime::options())->name('repair_type')->label(__('employee_sign_repair.repair_type'))->required(), amisMake()->TextControl()->name('reason')->label(__('employee_sign_repair.reason'))->required(), ]); } public function detail(): Form { $subjectType = (new EmployeeSignRepair)->getMorphClass(); $detail = amisMake()->Property()->items([ ['label' => __('employee_sign_repair.store_id'), 'content' => '${store.title}'], ['label' => __('employee_sign_repair.employee_id'), 'content' => '${employee.name}'], ['label' => __('employee_sign_repair.date'), 'content' => '${date}'], ['label' => __('employee_sign_repair.repair_type'), 'content' => amisMake()->Mapping()->name('repair_type')->map(SignTime::options())], ['label' => __('employee_sign_repair.reason'), 'content' => '${reason}'], ['label' => __('employee_sign_repair.created_at'), 'content' => '${created_at}'], ['label' => __('employee_sign_repair.check_status'), 'content' => amisMake()->Mapping()->name('check_status')->map(CheckStatus::options())], ['label' => __('employee_sign_repair.checked_at'), 'content' => '${checked_at}'], ['label' => __('employee_sign_repair.check_remarks'), 'content' => '${check_remarks}'], ]); $table = amisMake()->Service() ->id('sign-repair-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([ amisMake()->AjaxAction() ->label('审核通过') ->level('link') ->api('post:' . admin_url('api/workflow/success?id=${id}')) ->confirmText(__('admin.confirm')) ->visibleOn('${check_status == '.CheckStatus::Processing->value.'}') ->reload('sign-repair-detail'), amisMake()->DialogAction() ->label('审核不通过') ->level('link') ->dialog(amisMake()->Dialog()->title('审核不通过')->body( amisMake()->Form()->title('')->api('post:'.admin_url('api/workflow/fail'))->body([ amisMake()->HiddenControl()->name('id'), amisMake()->TextControl()->name('remarks')->label(__('workflow_log.remarks'))->required(), ])->reload('sign-repair-detail') )) ->visibleOn('${check_status == '.CheckStatus::Processing->value.'}'), ])->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('sign-repair-detail')->title('')->onEvent([ 'inited' => [ 'actions' => [ ['actionType' => 'reload', 'componentId' => 'sign-repair-checklog-table'], ] ] ])->body([$detail, amisMake()->Divider(), $table]); } }