baseCRUD() ->tableLayout('fixed') ->headerToolbar([ $this->createButton()->visible(Admin::user()->can('admin.train.examinations.create')), ...$this->baseHeaderToolBar(), ]) ->bulkActions([]) ->filter($this->baseFilter()->body([ amis()->GroupControl()->mode('horizontal')->body([ amisMake()->TextControl()->name('search')->label(__('train_examination.name'))->columnRatio(3)->clearable(), amisMake()->SelectControl()->options(ExamStatus::options())->name('exam_status')->label(__('train_examination.exam_status'))->columnRatio(3)->clearable(), ]), ])) ->columns([ amisMake()->TableColumn()->name('id')->label(__('train_examination.id')), amisMake()->TableColumn()->name('name')->label(__('train_examination.name')), amisMake()->TableColumn()->name('exam_status')->label(__('train_examination.exam_status'))->set('type', 'mapping')->set('map', ExamStatus::options()), amisMake()->TableColumn()->name('published_at')->label(__('train_examination.published_at')), amisMake()->TableColumn()->name('total_questions')->label(__('train_examination.total_questions')), amisMake()->TableColumn()->name('total_score')->label(__('train_examination.total_score')), $this->rowActions([ $this->rowShowButton()->visible(Admin::user()->can('admin.train.examinations.view')), $this->rowEditButton()->visible(Admin::user()->can('admin.train.examinations.update')), $this->rowDeleteButton()->visible(Admin::user()->can('admin.train.examinations.delete')), ]), ]); return $this->baseList($crud); } public function form($edit): Form { return $this->baseForm()->title('')->body([ amisMake()->TextControl()->name('name')->label(__('train_examination.name'))->required(), amisMake()->TableControl() ->addable() ->editable() ->removable() ->needConfirm(false) ->columns([ amisMake()->SelectControl() ->options(Question::get()) ->labelField('title') ->valueField('id') ->searchable() ->name('question_id') ->label(__('train_examination.question_id')) ->required(), amisMake()->NumberControl()->min(0)->step(1)->precision(0)->name('score')->label(__('train_examination.score'))->required(), ]) ->name('questions') ->label(__('train_examination.questions')), ]); } public function detail(): Form { $detail = amisMake()->Property()->items([ ['label' => __('train_examination.name'), 'content' => '${name}'], ['label' => __('train_examination.exam_status'), 'content' => amisMake()->Mapping()->map(ExamStatus::options())->name('exam_status')], ['label' => __('train_examination.published_at'), 'content' => '${published_at}'], ['label' => __('train_examination.total_questions'), 'content' => '${total_questions}'], ['label' => __('train_examination.total_score'), 'content' => '${total_score}'], ['label' => __('train_examination.created_at'), 'content' => '${created_at}'], ]); $question = amisMake()->Table()->source('${questions}')->columns([ amisMake()->TableColumn()->name('title')->label(__('train_question.title')), amisMake()->TableColumn()->name('cate')->label(__('train_question.cate'))->set('type', 'mapping')->map(QuestionCate::options()), amisMake()->TableColumn()->name('options')->label(__('train_question.options'))->set('type', 'list')->source('${options}')->listItem([ 'titleClassName' => 'text-${IF(is_true, "success", "danger")}', 'title' => '${text}', ]), amisMake()->TableColumn()->name('score')->label(__('train_examination.score')), ]); return $this->baseDetail()->title('')->body([$detail, amisMake()->Divider(), $question]); } }