baseCRUD() ->filterTogglable(false) ->columnsTogglable(false) ->headerToolbar([ $this->createButton(true, 'lg'), amis('reload')->align('right'), ]) ->filter($this->baseFilter()->actions()->body([ amisMake()->SelectControl()->options($this->getPatientOptions())->searchable()->name('patient_id')->label(__('patient-record.patient_id'))->size('md')->clearable(), amisMake()->SelectControl()->options($this->getTypeOptions())->name('type_id')->label(__('patient-record.type_id'))->size('md')->clearable(), amisMake()->DateRangeControl()->name('treat_range')->label(__('patient-record.treat_at'))->size('md')->clearable(), amisMake()->SelectControl()->options($this->getAdminUserOptions())->searchable()->name('doctor_id')->label(__('patient-record.doctor_id'))->clearable()->size('md'), // amisMake()->Button()->label(__('admin.reset'))->actionType('clear-and-submit'), amisMake()->Component()->setType('submit')->label(__('admin.search'))->level('primary'), ])) ->columns([ amisMake()->TableColumn()->name('id')->label(__('patient-record.id')), amisMake()->TableColumn()->name('patient.name')->label(__('patient-record.patient_id')), amisMake()->Mapping()->map($this->getTypeOptions()->pluck('label', 'value'))->name('type_id')->label(__('patient-record.type_id')), amisMake()->TableColumn()->name('treat_at')->label(__('patient-record.treat_at')), amisMake()->TableColumn()->name('origin_price')->label(__('patient-record.origin_price')), amisMake()->TableColumn()->name('sell_price')->label(__('patient-record.sell_price')), amisMake()->TableColumn()->name('next_treat_at')->label(__('patient-record.next_treat_at')), amisMake()->TableColumn()->name('doctor.name')->label(__('patient-record.doctor_id')), $this->rowActions(), ])->affixRowClassName('text-info-dk')->affixRow([ ['type' => 'text', 'text' => '总计', 'colSpan' => 4], ['type' => 'text', 'text' => __('total-record.origin_price') . ': ${origin_price}'], ['type' => 'text', 'text' => __('total-record.sell_price') . ': ${sell_price}'], ['type' => 'text', 'text' => '', 'colSpan' => 3] ]); return $this->baseList($crud); } public function form($isEdit, $patient_id = null): Form { $patient_element = amisMake()->SelectControl()->options($this->getPatientOptions())->searchable()->name('patient_id')->label(__('patient-record.patient_id'))->required(); if ($patient_id) { $patient_element->value($patient_id)->static(); } return $this->baseForm()->body([ $patient_element, amisMake()->SelectControl()->options($this->getTypeOptions())->name('type_id')->label(__('patient-record.type_id'))->required()->onEvent([ 'change' => [ 'actions' => [ ['actionType' => 'reload', 'componentId' => 'patient_record_form_content_service', 'args' => ['select_type_id' => '${type_id}']] ] ] ]), amisMake()->DateTimeControl()->name('treat_at')->label(__('patient-record.treat_at'))->value(now())->required(), amisMake()->SelectControl()->options($this->getAdminUserOptions())->searchable()->name('doctor_id')->label(__('patient-record.doctor_id'))->required(), amisMake()->NumberControl()->name('origin_price')->label(__('patient-record.origin_price'))->required(), amisMake()->NumberControl()->name('sell_price')->label(__('patient-record.sell_price'))->required(), amisMake()->SelectControl()->options(OrderStatus::options())->name('order_status')->label(__('patient-record.order_status'))->default(OrderStatus::Success->value)->required(), amisMake()->ImageControl()->multiple()->receiver(admin_url('upload_image') . '?full-url=1')->name('images')->label(__('patient-record.images')), amisMake()->Service() ->className('cxd-Form-item') ->id('patient_record_form_content_service') ->api(amisMake()->BaseApi()->method('get')->url(admin_url('api/category/content?id=${select_type_id}'))) ->initFetch(false) ->body(Components::make()->fuEditorControl()->name('content')->label(__('patient-record.content'))), amisMake()->DateTimeControl()->name('next_treat_at')->label(__('patient-record.next_treat_at')), amisMake()->SelectControl()->options($this->getAdminUserOptions())->searchable()->name('notify_user_id')->label(__('patient-record.notify_user_id')), amisMake()->DateControl()->name('notify_at')->label(__('patient-record.notify_at')), amisMake()->TextControl()->name('notify_remarks')->label(__('patient-record.notify_remarks')), amisMake()->TextControl()->label(__('patient-record.creator_id'))->value($this->user()->name)->readonly(), ]); } public function detail() { return $this->baseDetail()->body([ amisMake()->TextControl()->name('patient.name')->label(__('patient-record.patient_id'))->static(), amisMake()->TextControl()->name('type.name')->label(__('patient-record.type_id'))->static(), amisMake()->DateTimeControl()->name('treat_at')->label(__('patient-record.treat_at'))->static(), amisMake()->TextControl()->name('doctor.name')->label(__('patient-record.doctor_id'))->static(), amisMake()->TextControl()->name('origin_price')->label(__('patient-record.origin_price'))->static(), amisMake()->TextControl()->name('sell_price')->label(__('patient-record.sell_price'))->static(), amisMake()->SelectControl()->options(OrderStatus::options())->name('order_status')->label(__('patient-record.order_status'))->static(), amisMake()->TextControl()->name('images')->label(__('patient.images'))->static()->staticSchema(amisMake()->Images()), Components::make()->fuEditorControl()->name('content')->label(__('patient-record.content'))->static(), amisMake()->DateTimeControl()->name('next_treat_at')->label(__('patient-record.next_treat_at'))->static(), amisMake()->TextControl()->name('notify_user.name')->label(__('patient-record.notify_user_id'))->static(), amisMake()->DateControl()->name('notify_at')->label(__('patient-record.notify_at'))->static(), amisMake()->TextControl()->name('notify_remarks')->label(__('patient-record.notify_remarks'))->static(), amisMake()->SelectControl()->options($this->getAdminUserOptions())->name('creator_id')->label(__('patient-record.creator_id'))->static(), amisMake()->DateTimeControl()->name('created_at')->label(__('patient.created_at'))->static(), ]); } public function getTypeOptions() { if (!$this->typeOptions) { $this->typeOptions = Keyword::where('type_key', 'treat_type')->select(['id as value', 'name as label'])->get(); } return $this->typeOptions; } public function getPatientOptions() { if (!$this->patientOptions) { $this->patientOptions = Patient::select(['id as value', 'name as label'])->sort()->get(); } return $this->patientOptions; } public function getAdminUserOptions() { if (!$this->adminUserOptions) { $this->adminUserOptions = AdminUserService::make()->query()->select(['id as value', 'name as label'])->get(); } return $this->adminUserOptions; } }