|
@@ -51,7 +51,7 @@
|
|
|
</div>
|
|
|
<a-button class="ant-simple m-l-8px" type="link">查看全部</a-button>
|
|
|
</a-form-item>
|
|
|
- <a-form-item label="查找条件">
|
|
|
+ <a-form-item label="姓名">
|
|
|
<a-input
|
|
|
v-model:value="searchModel.name"
|
|
|
placeholder="请输入"
|
|
@@ -76,6 +76,7 @@
|
|
|
placeholder="请选择"
|
|
|
:options="booleanOptions"
|
|
|
style="width: 85px"
|
|
|
+ allow-clear
|
|
|
></a-select>
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
@@ -85,7 +86,8 @@
|
|
|
v-model:value="searchModel.subjectiveFilled"
|
|
|
placeholder="请选择"
|
|
|
:options="booleanOptions"
|
|
|
- style="width: 85px"
|
|
|
+ style="width: 100%"
|
|
|
+ allow-clear
|
|
|
></a-select>
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
@@ -96,6 +98,7 @@
|
|
|
placeholder="请选择"
|
|
|
:options="booleanOptions"
|
|
|
style="width: 85px"
|
|
|
+ allow-clear
|
|
|
></a-select>
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
@@ -105,28 +108,33 @@
|
|
|
v-model:value="searchModel.paperTypeStatus"
|
|
|
placeholder="请选择"
|
|
|
:options="paperTypeOptions"
|
|
|
+ style="width: 100%"
|
|
|
+ allow-clear
|
|
|
+ ></a-select>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
+ </a-row>
|
|
|
+ <a-row>
|
|
|
+ <a-col :span="16">
|
|
|
+ <a-form-item label="缺考">
|
|
|
+ <a-select
|
|
|
+ v-model:value="searchModel.examStatus"
|
|
|
+ placeholder="请选择"
|
|
|
+ :options="examStatusOptions"
|
|
|
style="width: 85px"
|
|
|
+ allow-clear
|
|
|
></a-select>
|
|
|
</a-form-item>
|
|
|
</a-col>
|
|
|
+ <a-col :span="8">
|
|
|
+ <a-form-item>
|
|
|
+ <a-button class="m-r-8px" type="primary" @click="onCustomSearch"
|
|
|
+ >查询</a-button
|
|
|
+ >
|
|
|
+ <a-button @click="onExport('custom')">导出</a-button>
|
|
|
+ </a-form-item>
|
|
|
+ </a-col>
|
|
|
</a-row>
|
|
|
- <div class="box-justify">
|
|
|
- <a-form-item label="缺考">
|
|
|
- <a-radio-group
|
|
|
- v-model:value="searchModel.incomplete"
|
|
|
- name="incomplete"
|
|
|
- :options="booleanOptions"
|
|
|
- >
|
|
|
- </a-radio-group>
|
|
|
- </a-form-item>
|
|
|
-
|
|
|
- <div>
|
|
|
- <a-button class="m-r-8px" type="primary" @click="onCustomSearch"
|
|
|
- >查询</a-button
|
|
|
- >
|
|
|
- <a-button @click="onExport('custom')">导出</a-button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
</a-form>
|
|
|
</a-collapse-panel>
|
|
|
<a-collapse-panel key="3">
|
|
@@ -147,7 +155,9 @@
|
|
|
<QuestionPanel
|
|
|
v-model:questions="questions"
|
|
|
:info="questionInfo"
|
|
|
+ :simple="isSliceImage"
|
|
|
@change="onQuestionsChange"
|
|
|
+ @exam-status-change="onExamStatusChange"
|
|
|
/>
|
|
|
</a-collapse-panel>
|
|
|
</a-collapse>
|
|
@@ -168,9 +178,10 @@ import {
|
|
|
import { message } from "ant-design-vue";
|
|
|
|
|
|
import { useUserStore, useDataCheckStore } from "@/store";
|
|
|
-import { DataCheckListFilter } from "@/ap/types/dataCheck";
|
|
|
+import { DataCheckListFilter, ExamStatus } from "@/ap/types/dataCheck";
|
|
|
import { SubjectItem } from "@/ap/types/base";
|
|
|
import { dataCheckStudentExport, dataCheckRoomExport } from "@/ap/dataCheck";
|
|
|
+import { examStatusSave } from "@/ap/examStatusCheck";
|
|
|
import useDictOption from "@/hooks/dictOption";
|
|
|
import useLoading from "@/hooks/useLoading";
|
|
|
import { ImageType, booleanOptionList } from "@/constants/enumerate";
|
|
@@ -191,6 +202,7 @@ const dataCheckStore = useDataCheckStore();
|
|
|
const { optionList: dataCheckOptions } = useDictOption("DATA_CHECK_TYPE");
|
|
|
const { optionList: paperTypeOptions } = useDictOption("PAPER_TYPE_STATUS");
|
|
|
const { optionList: imageTypeOptions } = useDictOption("IMAGE_TYPE");
|
|
|
+const { optionList: examStatusOptions } = useDictOption("EXAM_STATUS");
|
|
|
const booleanOptions = ref(booleanOptionList);
|
|
|
const panelKey = ref(["1", "2", "3", "4"]);
|
|
|
|
|
@@ -230,9 +242,14 @@ const searchModel = reactive<DataCheckListFilter>({ ...initSearchModel });
|
|
|
const searchSubjectCode = ref("");
|
|
|
const searchCustomSubjectCode = ref("");
|
|
|
const searchDataCheckType = ref();
|
|
|
-const imageType = ref("" as ImageType);
|
|
|
+const imageType = ref(dataCheckStore.imageType);
|
|
|
const actionType = ref("common");
|
|
|
|
|
|
+// imageType
|
|
|
+const isSliceImage = computed(() => {
|
|
|
+ return dataCheckStore.imageType === "SLICE";
|
|
|
+});
|
|
|
+
|
|
|
const examNumberCountCont = computed(() => {
|
|
|
const examNumbers = (searchModel.examNumber || "")
|
|
|
.split("\n")
|
|
@@ -295,6 +312,13 @@ async function onQuestionsChange() {
|
|
|
.catch(() => {});
|
|
|
}
|
|
|
|
|
|
+async function onExamStatusChange(val: ExamStatus) {
|
|
|
+ if (!dataCheckStore.curStudent) return;
|
|
|
+
|
|
|
+ await examStatusSave({ id: dataCheckStore.curStudent.id, examStatus: val });
|
|
|
+ dataCheckStore.curStudent.examStatus = val;
|
|
|
+}
|
|
|
+
|
|
|
// 导出
|
|
|
const { loading: downloading, setLoading } = useLoading();
|
|
|
const exportTypeDialogRef = ref();
|