generated from liutk/owl-admin-base
99 lines
4.8 KiB
PHP
99 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers\Train;
|
|
|
|
use App\Admin\Controllers\AdminController;
|
|
use App\Admin\Services\Train\ExaminationService;
|
|
use Slowlyo\OwlAdmin\Admin;
|
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
|
use Slowlyo\OwlAdmin\Renderers\Page;
|
|
use App\Enums\{ExamStatus, QuestionCate};
|
|
use App\Models\Train\Question;
|
|
|
|
/**
|
|
* 考试管理
|
|
*/
|
|
class ExaminationController extends AdminController
|
|
{
|
|
protected string $serviceName = ExaminationService::class;
|
|
|
|
public function list(): Page
|
|
{
|
|
$crud = $this->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]);
|
|
}
|
|
}
|