|
@@ -13,7 +13,7 @@
|
|
|
<h2>数据同步中 …</h2>
|
|
|
</div>
|
|
|
<div class="progress-box">
|
|
|
- <h3 id="message">正在下载考生...</h3>
|
|
|
+ <h3 id="message">{{ status }}</h3>
|
|
|
<div class="progress">
|
|
|
<!-- <div class="progress-outer">
|
|
|
<div id="progress" class="progress-inner" style="width: 0%">
|
|
@@ -34,117 +34,127 @@
|
|
|
Copyright © 2011-2020 www.qmth.com.cn, All Rights Reserved
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="xcConfirm" id="popup" style="display: none">
|
|
|
- <div class="xc_layer"></div>
|
|
|
- <div class="popbox">
|
|
|
- <a href="##" id="popup-close"><span class="close"></span></a>
|
|
|
- <div class="txtbox">
|
|
|
- <div id="popup-error" class="icon error" style="display: none"></div>
|
|
|
- <div
|
|
|
- id="popup-success"
|
|
|
- class="icon success"
|
|
|
- style="display: none"
|
|
|
- ></div>
|
|
|
- <div id="popup-text" class="text"></div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
import { store } from "@/store";
|
|
|
import { onMounted, ref } from "vue";
|
|
|
-import router from "@/router";
|
|
|
+import { Modal } from "ant-design-vue";
|
|
|
+import { useRouter } from "vue-router";
|
|
|
import { getStudents, countStudents, getPackages } from "@/api/api";
|
|
|
|
|
|
-const lastTime =
|
|
|
- store.config["syncTime"][store.env.server.host + store.env.exam.id];
|
|
|
+const router = useRouter();
|
|
|
+console.log(router);
|
|
|
+let status = ref("");
|
|
|
|
|
|
let finishCount = ref(0);
|
|
|
let totalCount = ref(0);
|
|
|
let finished = ref(false);
|
|
|
onMounted(async () => {
|
|
|
- const res = await countStudents(store.env.examId);
|
|
|
- totalCount.value = res.data;
|
|
|
+ try {
|
|
|
+ status.value = "正在计算总数...";
|
|
|
+ const res = await countStudents(store.env.examId);
|
|
|
+ totalCount.value = res.data;
|
|
|
|
|
|
- let pageNumber = 0;
|
|
|
+ let pageNumber = 0;
|
|
|
|
|
|
- while (true) {
|
|
|
- pageNumber++;
|
|
|
- const array = (
|
|
|
- await getStudents(store.env.examId, pageNumber, 100, {
|
|
|
- withScoreDetail: true,
|
|
|
- })
|
|
|
- ).data;
|
|
|
- if (array == undefined || array.length == 0) {
|
|
|
- break;
|
|
|
- }
|
|
|
- const datas = [];
|
|
|
- for (let i = 0; i < array.length; i++) {
|
|
|
- const obj = array[i];
|
|
|
- var objList = [];
|
|
|
- var subList = [];
|
|
|
- if (obj.objectiveScoreDetail) {
|
|
|
- obj.objectiveScoreDetail.forEach((detail) => {
|
|
|
- const score = Math.round((detail.score * 10) / 10);
|
|
|
- objList.push(detail.answer + ":" + score);
|
|
|
- });
|
|
|
+ status.value = "正在下载考生...";
|
|
|
+ while (true) {
|
|
|
+ pageNumber++;
|
|
|
+ const array = (
|
|
|
+ await getStudents(store.env.examId, pageNumber, 100, {
|
|
|
+ withScoreDetail: true,
|
|
|
+ })
|
|
|
+ ).data;
|
|
|
+ if (array == undefined || array.length == 0) {
|
|
|
+ break;
|
|
|
}
|
|
|
- if (obj.subjectiveScoreDetail) {
|
|
|
- obj.subjectiveScoreDetail.forEach((detail) => {
|
|
|
- const score = Math.round((detail.score * 10) / 10);
|
|
|
- subList.push(score);
|
|
|
- });
|
|
|
+ const datas = [];
|
|
|
+ for (let i = 0; i < array.length; i++) {
|
|
|
+ const obj = array[i];
|
|
|
+ var objList = [];
|
|
|
+ var subList = [];
|
|
|
+ if (obj.objectiveScoreDetail) {
|
|
|
+ obj.objectiveScoreDetail.forEach((detail) => {
|
|
|
+ const score = Math.round((detail.score * 10) / 10);
|
|
|
+ objList.push(detail.answer + ":" + score);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (obj.subjectiveScoreDetail) {
|
|
|
+ obj.subjectiveScoreDetail.forEach((detail) => {
|
|
|
+ const score = Math.round((detail.score * 10) / 10);
|
|
|
+ subList.push(score);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ datas.push([
|
|
|
+ obj["id"],
|
|
|
+ store.env.examId,
|
|
|
+ obj["schoolId"],
|
|
|
+ obj["examNumber"],
|
|
|
+ obj["examNumber"],
|
|
|
+ obj["name"],
|
|
|
+ obj["studentCode"],
|
|
|
+ obj["subjectCode"],
|
|
|
+ obj["subjectName"],
|
|
|
+ obj["campusName"],
|
|
|
+ obj["packageCode"],
|
|
|
+ obj["batchCode"],
|
|
|
+ obj["sheetCount"],
|
|
|
+ obj["sliceCount"],
|
|
|
+ obj["answers"],
|
|
|
+ obj["upload"] ? 1 : 0,
|
|
|
+ obj["absent"] ? 1 : 0,
|
|
|
+ obj["breach"] ? 1 : 0,
|
|
|
+ obj["manualAbsent"] ? 1 : 0,
|
|
|
+ obj["objectiveScore"].length > 0 ? obj["objectiveScore"] : 0,
|
|
|
+ obj["subjectiveScore"].length > 0 ? obj["subjectiveScore"] : 0,
|
|
|
+ objList.join(";"),
|
|
|
+ subList.join(";"),
|
|
|
+ obj["subjectiveStatus"] || "UNMARK",
|
|
|
+ obj["examSite"],
|
|
|
+ obj["examRoom"],
|
|
|
+ obj["remark"],
|
|
|
+ obj["college"] || "",
|
|
|
+ obj["className"] || "",
|
|
|
+ obj["teacher"] || "",
|
|
|
+ obj["paperType"] || "",
|
|
|
+ ]);
|
|
|
}
|
|
|
- datas.push([
|
|
|
- obj["id"],
|
|
|
- store.env.examId,
|
|
|
- obj["schoolId"],
|
|
|
- obj["examNumber"],
|
|
|
- obj["examNumber"],
|
|
|
- obj["name"],
|
|
|
- obj["studentCode"],
|
|
|
- obj["subjectCode"],
|
|
|
- obj["subjectName"],
|
|
|
- obj["campusName"],
|
|
|
- obj["packageCode"],
|
|
|
- obj["batchCode"],
|
|
|
- obj["sheetCount"],
|
|
|
- obj["sliceCount"],
|
|
|
- obj["answers"],
|
|
|
- obj["upload"] ? 1 : 0,
|
|
|
- obj["absent"] ? 1 : 0,
|
|
|
- obj["breach"] ? 1 : 0,
|
|
|
- obj["manualAbsent"] ? 1 : 0,
|
|
|
- obj["objectiveScore"].length > 0 ? obj["objectiveScore"] : 0,
|
|
|
- obj["subjectiveScore"].length > 0 ? obj["subjectiveScore"] : 0,
|
|
|
- objList.join(";"),
|
|
|
- subList.join(";"),
|
|
|
- obj["subjectiveStatus"] || "UNMARK",
|
|
|
- obj["examSite"],
|
|
|
- obj["examRoom"],
|
|
|
- obj["remark"],
|
|
|
- obj["college"] || "",
|
|
|
- obj["className"] || "",
|
|
|
- obj["teacher"] || "",
|
|
|
- obj["paperType"] || "",
|
|
|
- ]);
|
|
|
+ console.log("get:" + array.length);
|
|
|
+ await window.electron.replaceStudents(datas);
|
|
|
+ finishCount.value += array.length;
|
|
|
}
|
|
|
- console.log("get:" + array.length);
|
|
|
- await window.electron.replaceStudents(datas);
|
|
|
- finishCount.value += array.length;
|
|
|
- }
|
|
|
|
|
|
- //get and save package
|
|
|
- const packages = (await getPackages(store.env.examId)).data;
|
|
|
- const packageData = [];
|
|
|
- for (let i = 0; i < packages.length; i++) {
|
|
|
- const obj = packages[i];
|
|
|
- packageData.push([store.env.examId, obj["code"], obj["picCount"]]);
|
|
|
- }
|
|
|
- await window.electron.replacePackage(packageData);
|
|
|
+ status.value = "正在下载签到表...";
|
|
|
+ //get and save package
|
|
|
+ const packages = (await getPackages(store.env.examId)).data;
|
|
|
+ const packageData = [];
|
|
|
+ for (let i = 0; i < packages.length; i++) {
|
|
|
+ const obj = packages[i];
|
|
|
+ packageData.push([store.env.examId, obj["code"], obj["picCount"]]);
|
|
|
+ }
|
|
|
+ await window.electron.replacePackage(packageData);
|
|
|
+
|
|
|
+ finished.value = true;
|
|
|
+ status.value = "数据同步完成";
|
|
|
|
|
|
- finished.value = true;
|
|
|
+ // config.updateSyncTime()
|
|
|
+
|
|
|
+ const modal = Modal.success();
|
|
|
+ modal.update({
|
|
|
+ title: "数据同步完成",
|
|
|
+ content: "完成",
|
|
|
+ onOk: () => router.back(),
|
|
|
+ });
|
|
|
+ } catch (error) {
|
|
|
+ const modal = Modal.error();
|
|
|
+ console.log(error);
|
|
|
+ modal.update({
|
|
|
+ title: "数据同步出错",
|
|
|
+ content: error.message || error,
|
|
|
+ onOk: () => router.back(),
|
|
|
+ });
|
|
|
+ }
|
|
|
});
|
|
|
</script>
|