|
@@ -3,7 +3,7 @@
|
|
<div class="review-head">
|
|
<div class="review-head">
|
|
<h2 v-if="reviewStore.curTask" class="review-title">
|
|
<h2 v-if="reviewStore.curTask" class="review-title">
|
|
{{ reviewStore.curTask.examNumber }} - {{ reviewStore.curTask.name }} -
|
|
{{ reviewStore.curTask.examNumber }} - {{ reviewStore.curTask.name }} -
|
|
- CET4
|
|
|
|
|
|
+ {{ userStore.curExam?.name }}
|
|
</h2>
|
|
</h2>
|
|
|
|
|
|
<div class="review-stat">
|
|
<div class="review-stat">
|
|
@@ -16,7 +16,11 @@
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="review-prev">
|
|
<div class="review-prev">
|
|
- <a-button v-if="reviewStore.tabKey === 'review'" :disabled="loading">
|
|
|
|
|
|
+ <a-button
|
|
|
|
+ v-if="reviewStore.tabKey === 'review'"
|
|
|
|
+ :disabled="loading"
|
|
|
|
+ @click="onPrevTask"
|
|
|
|
+ >
|
|
<template #icon><ArrowLeftOutlined /></template> 上一个
|
|
<template #icon><ArrowLeftOutlined /></template> 上一个
|
|
</a-button>
|
|
</a-button>
|
|
</div>
|
|
</div>
|
|
@@ -38,7 +42,12 @@
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<!-- action -->
|
|
<!-- action -->
|
|
- <ReviewAction @mark="onMark" @reset="onReset" @search="onSearch" />
|
|
|
|
|
|
+ <ReviewAction
|
|
|
|
+ ref="reviewActionRef"
|
|
|
|
+ @mark="onMark"
|
|
|
|
+ @reset="onReset"
|
|
|
|
+ @search="onSearch"
|
|
|
|
+ />
|
|
|
|
|
|
<!-- reset confirm -->
|
|
<!-- reset confirm -->
|
|
<ResetConfirmDialog
|
|
<ResetConfirmDialog
|
|
@@ -50,7 +59,7 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
-import { computed, ref, reactive, onMounted, watch } from "vue";
|
|
|
|
|
|
+import { ref, reactive, onBeforeUnmount, onMounted } from "vue";
|
|
import {
|
|
import {
|
|
CheckCircleFilled,
|
|
CheckCircleFilled,
|
|
CloseCircleFilled,
|
|
CloseCircleFilled,
|
|
@@ -59,10 +68,11 @@ import {
|
|
import { message } from "ant-design-vue";
|
|
import { message } from "ant-design-vue";
|
|
|
|
|
|
import {
|
|
import {
|
|
- reviewTaskList,
|
|
|
|
|
|
+ reviewTask,
|
|
reviewTaskReset,
|
|
reviewTaskReset,
|
|
reviewTaskSave,
|
|
reviewTaskSave,
|
|
reviewProgress,
|
|
reviewProgress,
|
|
|
|
+ reviewTaskRelease,
|
|
} from "@/ap/review";
|
|
} from "@/ap/review";
|
|
import { ReviewTaskListItem } from "@/ap/types/review";
|
|
import { ReviewTaskListItem } from "@/ap/types/review";
|
|
import { SubjectItem } from "@/ap/types/base";
|
|
import { SubjectItem } from "@/ap/types/base";
|
|
@@ -82,16 +92,6 @@ defineOptions({
|
|
name: "review",
|
|
name: "review",
|
|
});
|
|
});
|
|
|
|
|
|
-// 任务进度
|
|
|
|
-const progress = ref({
|
|
|
|
- finishCount: 0,
|
|
|
|
- todoCount: 0,
|
|
|
|
-});
|
|
|
|
-async function updateProgress() {
|
|
|
|
- const res = await reviewProgress({ examId: userStore.curExam.id });
|
|
|
|
- progress.value = res || {};
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
// 任务相关
|
|
// 任务相关
|
|
const searchModel = reactive({
|
|
const searchModel = reactive({
|
|
examId: userStore.curExam.id,
|
|
examId: userStore.curExam.id,
|
|
@@ -99,74 +99,44 @@ const searchModel = reactive({
|
|
});
|
|
});
|
|
|
|
|
|
const { loading, setLoading } = useLoading();
|
|
const { loading, setLoading } = useLoading();
|
|
-const dataList = ref<ReviewTaskListItem[]>([]);
|
|
|
|
-const curTaskIndex = ref(0);
|
|
|
|
-
|
|
|
|
-async function getTasks() {
|
|
|
|
- // TODO:假设一次取3个
|
|
|
|
- const res = await reviewTaskList(searchModel);
|
|
|
|
- dataList.value = res || [];
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-function setCurTask() {
|
|
|
|
- reviewStore.setInfo({ curTask: dataList.value[curTaskIndex.value] });
|
|
|
|
-}
|
|
|
|
|
|
|
|
async function getNextTask() {
|
|
async function getNextTask() {
|
|
- if (curTaskIndex.value >= dataList.value.length - 1) {
|
|
|
|
- await getTasks();
|
|
|
|
- if (!dataList.value.length) {
|
|
|
|
- message.error("没有下一个了!");
|
|
|
|
- reviewStore.setInfo({ curTask: null });
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- curTaskIndex.value = 0;
|
|
|
|
- setCurTask();
|
|
|
|
|
|
+ const res = await reviewTask(searchModel);
|
|
|
|
+ reviewStore.setInfo({ curTask: res || null });
|
|
|
|
+
|
|
|
|
+ if (!reviewStore.curTask) {
|
|
|
|
+ message.error("没有下一个了!");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
|
|
- curTaskIndex.value++;
|
|
|
|
- setCurTask();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-async function getPrevTask() {
|
|
|
|
- if (loading.value) return;
|
|
|
|
- loading.value = true;
|
|
|
|
-
|
|
|
|
- if (curTaskIndex.value <= 0) {
|
|
|
|
- let result = true;
|
|
|
|
- await getTasks().catch(() => {
|
|
|
|
- result = false;
|
|
|
|
- });
|
|
|
|
- if (!result) return;
|
|
|
|
-
|
|
|
|
- loading.value = false;
|
|
|
|
- if (!dataList.value.length) {
|
|
|
|
- message.error("没有上一个了!");
|
|
|
|
- reviewStore.setInfo({ curTask: null });
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- curTaskIndex.value = dataList.value.length - 1;
|
|
|
|
- setCurTask();
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+const reviewActionRef = ref();
|
|
|
|
+async function onPrevTask() {
|
|
|
|
+ reviewActionRef.value?.switchTab("history");
|
|
|
|
+}
|
|
|
|
|
|
- curTaskIndex.value--;
|
|
|
|
- setCurTask();
|
|
|
|
|
|
+// 任务进度
|
|
|
|
+const progress = ref({
|
|
|
|
+ finishCount: 0,
|
|
|
|
+ todoCount: 0,
|
|
|
|
+});
|
|
|
|
+async function updateProgress() {
|
|
|
|
+ const res = await reviewProgress(searchModel);
|
|
|
|
+ progress.value = res || {};
|
|
}
|
|
}
|
|
|
|
|
|
// actions
|
|
// actions
|
|
-async function onMark(result: boolean) {
|
|
|
|
|
|
+async function onMark(assignedSuspect: boolean) {
|
|
if (!reviewStore.curTask) return;
|
|
if (!reviewStore.curTask) return;
|
|
|
|
|
|
if (loading.value) return;
|
|
if (loading.value) return;
|
|
loading.value = true;
|
|
loading.value = true;
|
|
|
|
|
|
try {
|
|
try {
|
|
- await reviewTaskSave({ id: reviewStore.curTask.id, result });
|
|
|
|
|
|
+ await reviewTaskSave({ id: reviewStore.curTask.id, assignedSuspect });
|
|
reviewStore.setInfo({
|
|
reviewStore.setInfo({
|
|
curTask: Object.assign({}, reviewStore.curTask, {
|
|
curTask: Object.assign({}, reviewStore.curTask, {
|
|
- assignedSuspect: result,
|
|
|
|
|
|
+ assignedSuspect,
|
|
}),
|
|
}),
|
|
});
|
|
});
|
|
|
|
|
|
@@ -180,10 +150,8 @@ async function onMark(result: boolean) {
|
|
|
|
|
|
async function onSearch(subjectCode: string) {
|
|
async function onSearch(subjectCode: string) {
|
|
searchModel.subjectCode = subjectCode;
|
|
searchModel.subjectCode = subjectCode;
|
|
- await getTasks();
|
|
|
|
-
|
|
|
|
- curTaskIndex.value = 0;
|
|
|
|
- setCurTask();
|
|
|
|
|
|
+ await getNextTask();
|
|
|
|
+ await updateProgress();
|
|
}
|
|
}
|
|
|
|
|
|
const resetConfirmDialogRef = ref();
|
|
const resetConfirmDialogRef = ref();
|
|
@@ -197,45 +165,10 @@ function onResetConfirm() {
|
|
onSearch("");
|
|
onSearch("");
|
|
}
|
|
}
|
|
|
|
|
|
-// watch
|
|
|
|
-watch(
|
|
|
|
- () => reviewStore.tabKey,
|
|
|
|
- (val) => {
|
|
|
|
- if (val === "review") {
|
|
|
|
- reviewStore.setInfo({
|
|
|
|
- curTask: dataList.value[curTaskIndex.value] || null,
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-);
|
|
|
|
-
|
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
- // test
|
|
|
|
- dataList.value = [
|
|
|
|
- {
|
|
|
|
- id: 1,
|
|
|
|
- name: "考生2",
|
|
|
|
- studentCode: "360080241304012",
|
|
|
|
- subjectCode: "SX0001",
|
|
|
|
- subjectName: "数学",
|
|
|
|
- examNumber: "360080241304012",
|
|
|
|
- assignedSuspect: false,
|
|
|
|
- breachCount: 1,
|
|
|
|
- pages: [
|
|
|
|
- {
|
|
|
|
- index: 1,
|
|
|
|
- uri: "",
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- index: 2,
|
|
|
|
- uri: "",
|
|
|
|
- },
|
|
|
|
- ],
|
|
|
|
- },
|
|
|
|
- ];
|
|
|
|
- reviewStore.setInfo({
|
|
|
|
- curTask: dataList.value[curTaskIndex.value] || null,
|
|
|
|
- tabKey: "review",
|
|
|
|
- });
|
|
|
|
|
|
+ reviewStore.resetInfo();
|
|
|
|
+});
|
|
|
|
+onBeforeUnmount(async () => {
|
|
|
|
+ await reviewTaskRelease();
|
|
});
|
|
});
|
|
</script>
|
|
</script>
|