From 5159d0008d864fef8edde17d0fd86dc15394666e Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Sat, 27 Apr 2024 15:11:13 +0800 Subject: [PATCH] admin examination.add --- .../Train/ExaminationController.php | 40 ++++++++++++++----- .../Controllers/Train/QuestionController.php | 4 ++ .../Services/Train/ExaminationService.php | 25 +++++++----- app/Admin/routes.php | 1 + 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/app/Admin/Controllers/Train/ExaminationController.php b/app/Admin/Controllers/Train/ExaminationController.php index a6321b7..84c9f5f 100644 --- a/app/Admin/Controllers/Train/ExaminationController.php +++ b/app/Admin/Controllers/Train/ExaminationController.php @@ -89,21 +89,38 @@ class ExaminationController extends AdminController { return $this->baseForm()->title('')->body([ amisMake()->TextControl()->name('name')->label(__('train_examination.name'))->required(), + amisMake()->PickerControl() + ->source(admin_url('api/train/questions')) + ->labelField('title') + ->valueField('id') + ->multiple(true) + ->autoFill([ + 'questions' => '${items}' + ]) + ->size('lg') + ->pickerSchema(amisMake()->CRUDTable()->mode('table')->syncLocation()->filter($this->baseFilter()->body([ + amisMake()->TextControl()->name('search')->label(__('train_question.title'))->size('md')->clearable(), + amisMake()->SelectControl()->options(QuestionCate::options())->name('cate')->label(__('train_question.cate'))->size('md')->clearable(), + ]))->columns([ + amisMake()->TableColumn()->name('id')->label(__('train_question.id')), + amisMake()->TableColumn()->name('title')->label(__('train_question.title')), + amisMake()->TableColumn()->name('cate')->label(__('train_question.cate'))->set('type', 'mapping')->set('map', QuestionCate::options()), + amisMake()->TableColumn()->name('created_at')->label(__('train_book.created_at')), + ])) + ->name('question_ids') + ->label(__('train_examination.question_id')) + ->required(), amisMake()->TableControl() - ->addable() - ->editable() ->removable() + ->draggable() ->showIndex() + ->columnsTogglable(false) ->needConfirm(false) ->columns([ - amisMake()->SelectControl() - ->options(Question::get()) - ->labelField('title') - ->valueField('id') - ->searchable() - ->name('question_id') - ->label(__('train_examination.question_id')) - ->required(), + amisMake()->TableColumn()->name('title')->label(__('train_question.title'))->type('static'), + // amisMake()->TableColumn()->name('cate')->label(__('train_question.cate'))->type('select')->options(QuestionCate::options())->static(true), + // amisMake()->TableColumn()->name('cate')->label(__('train_question.cate'))->type('mapping')->map(QuestionCate::options()), + amisMake()->TableColumn()->name('cate')->label(__('train_question.cate'))->type('static')->value('${cate == '.QuestionCate::Radio->value.' ? "'.QuestionCate::Radio->text().'" : "'.QuestionCate::Checkbox->text().'"}'), amisMake()->NumberControl()->min(0)->step(1)->precision(0)->name('score')->label(__('train_examination.score'))->required(), ]) ->name('questions') @@ -125,7 +142,8 @@ class ExaminationController extends AdminController ['label' => __('train_examination.min_mark'), 'content' => '${min_mark}'], ['label' => __('train_examination.avg_mark'), 'content' => '${avg_mark}', 'span' => 3], ]); - $question = amisMake()->Table()->source('${questions}')->showIndex()->columns([ + $question = amisMake()->Table()->source('${questions}')->columns([ + amisMake()->TableColumn()->name('sort')->label('序号'), 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([ diff --git a/app/Admin/Controllers/Train/QuestionController.php b/app/Admin/Controllers/Train/QuestionController.php index 2dc9b22..dc132ad 100644 --- a/app/Admin/Controllers/Train/QuestionController.php +++ b/app/Admin/Controllers/Train/QuestionController.php @@ -84,4 +84,8 @@ class QuestionController extends AdminController ]), 'span' => 3], ])); } + public function shareList() + { + return $this->response()->success($this->service->list()); + } } diff --git a/app/Admin/Services/Train/ExaminationService.php b/app/Admin/Services/Train/ExaminationService.php index bd5d28a..2849cff 100644 --- a/app/Admin/Services/Train/ExaminationService.php +++ b/app/Admin/Services/Train/ExaminationService.php @@ -41,20 +41,25 @@ class ExaminationService extends BaseService $totalQuestions = 0; $totalScore = 0; $questions = []; - $ids = array_column($data['questions'], 'question_id'); + $ids = array_column($data['questions'], 'id'); $questionList = Question::whereIn('id', $ids)->get(); - foreach ($data['questions'] as $question) { - $model = $questionList->firstWhere('id', $question['question_id']); + foreach ($data['questions'] as $index => $question) { + $model = $questionList->firstWhere('id', $question['id']); if ($model) { - // title: 题目, cate: 类型, options: 选项, score: 分值 - $question['title'] = $model->title; - $question['cate'] = $model->cate; - $question['cate_name'] = $model->cate->text(); - $question['options'] = $model->options; - array_push($questions, $question); + // sort: 序号, id: Question.id, title: 题目, cate: 类型, options: 选项, score: 分值 + $item = [ + 'sort' => $index + 1, + 'id' => $model->id, + 'title' => $model->title, + 'cate' => $model->cate, + 'cate_name' => $model->cate->text(), + 'options' => $model->options, + 'score' => data_get($question, 'score', 1), + ]; + array_push($questions, $item); $totalQuestions++; - $totalScore+=$question['score']; + $totalScore+=$item['score']; } } $data['questions'] = $questions; diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 8f06fbe..6a110c3 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -244,6 +244,7 @@ Route::group([ $router->get('workflow/logs', [WorkflowController::class, 'logs']); $router->get('tasks', [TaskController::class, 'shareList']); + $router->get('train/questions', [\App\Admin\Controllers\Train\QuestionController::class, 'shareList']); //---------------------------------- // 驾驶舱数据统计