diff --git a/admin/src/utils/api.js b/admin/src/utils/api.js
index 2e4a63a6..d38417a5 100644
--- a/admin/src/utils/api.js
+++ b/admin/src/utils/api.js
@@ -81,6 +81,9 @@ const api = {
deleteExamUser: (id) => {
return axios.delete('exam-users/' + id);
},
+ avoidExamUser: (id) => {
+ return axios.put('exam-users-avoid', {id});
+ },
storeExamUser: (params) => {
return axios.post('exam-users', params);
},
diff --git a/admin/src/views/user/detail.vue b/admin/src/views/user/detail.vue
index 78b38424..fb53be77 100644
--- a/admin/src/views/user/detail.vue
+++ b/admin/src/views/user/detail.vue
@@ -116,6 +116,15 @@
Remove
+
+
+ Avoid
+
+
@@ -190,6 +199,12 @@ export default {
await fetchPageData()
}
+ const handleAvoidExam = async (id) => {
+ let res = await api.avoidExamUser(id)
+ ElMessage.success(res.msg)
+ await fetchPageData()
+ }
+
const handleAssignExam = async () => {
assignExam.value.open(id)
}
@@ -213,6 +228,7 @@ export default {
return {
...toRefs(state),
handleRemoveExam,
+ handleAvoidExam,
handleAssignExam,
handleEnableUser,
handleViewInviteInfo,
diff --git a/app/Http/Controllers/ExamUserController.php b/app/Http/Controllers/ExamUserController.php
index 843bd697..6b7db3ae 100644
--- a/app/Http/Controllers/ExamUserController.php
+++ b/app/Http/Controllers/ExamUserController.php
@@ -92,4 +92,11 @@ class ExamUserController extends Controller
return $this->success($result, 'Remove user exam success!');
}
+ public function avoid(Request $request)
+ {
+ $request->validate(['id' => 'required']);
+ $result = $this->repository->avoidExamUser($request->id);
+ return $this->success($result, 'Avoid user exam success!');
+ }
+
}
diff --git a/app/Models/ExamUser.php b/app/Models/ExamUser.php
index c820681d..eae62b69 100644
--- a/app/Models/ExamUser.php
+++ b/app/Models/ExamUser.php
@@ -10,10 +10,12 @@ class ExamUser extends NexusModel
const STATUS_NORMAL = 0;
const STATUS_FINISHED = 1;
+ const STATUS_AVOIDED = -1;
public static $status = [
self::STATUS_NORMAL => ['text' => 'Normal'],
self::STATUS_FINISHED => ['text' => 'Finished'],
+ self::STATUS_AVOIDED => ['text' => 'Avoided'],
];
const IS_DONE_YES = 1;
diff --git a/app/Repositories/ExamRepository.php b/app/Repositories/ExamRepository.php
index 5b66163a..21184f75 100644
--- a/app/Repositories/ExamRepository.php
+++ b/app/Repositories/ExamRepository.php
@@ -355,6 +355,7 @@ class ExamRepository extends BaseRepository
}
$examUsers = $query->get();
if ($examUsers->isEmpty()) {
+ do_log("$logPrefix, no examUser, query: " . last_query());
return null;
}
if ($examUsers->count() > 1) {
@@ -454,6 +455,13 @@ class ExamRepository extends BaseRepository
return $result;
}
+ public function avoidExamUser(int $examUserId)
+ {
+ $examUser = ExamUser::query()->findOrFail($examUserId);
+ $result = $examUser->update(['status' => ExamUser::STATUS_AVOIDED]);
+ return $result;
+ }
+
public function cronjonAssign()
{
$exams = $this->listValid(null, Exam::DISCOVERED_YES);
diff --git a/app/Repositories/UserRepository.php b/app/Repositories/UserRepository.php
index 5b34bcff..86aaadc1 100644
--- a/app/Repositories/UserRepository.php
+++ b/app/Repositories/UserRepository.php
@@ -37,7 +37,7 @@ class UserRepository extends BaseRepository
$baseInfo = $userResource->response()->getData(true)['data'];
$examRep = new ExamRepository();
- $examProgress = $examRep->getUserExamProgress($id, ExamUser::STATUS_NORMAL, ['exam']);
+ $examProgress = $examRep->getUserExamProgress($id, null, ['exam']);
if ($examProgress) {
$examResource = new ExamUserResource($examProgress);
$examInfo = $examResource->response()->getData(true)['data'];
diff --git a/routes/api.php b/routes/api.php
index 379905f0..bec01c9d 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -49,6 +49,7 @@ Route::group(['middleware' => ['auth:sanctum', 'permission', 'locale']], functio
Route::get('exam-indexes', [\App\Http\Controllers\ExamController::class, 'indexes']);
Route::resource('exam-users', \App\Http\Controllers\ExamUserController::class);
+ Route::put('exam-users-avoid', [\App\Http\Controllers\ExamUserController::class, 'avoid']);
Route::get('dashboard/system-info', [\App\Http\Controllers\DashboardController::class, 'systemInfo']);
Route::get('dashboard/stat-data', [\App\Http\Controllers\DashboardController::class, 'statData']);