|
@@ -10,11 +10,11 @@
|
|
|
<input
|
|
|
v-if="props.showSearch"
|
|
|
v-model="secretNumberInput"
|
|
|
- @keydown.stop="() => {}"
|
|
|
- @keypress.stop="() => {}"
|
|
|
type="text"
|
|
|
placeholder="查找试卷"
|
|
|
class="tw-flex-1 tw-rounded tw-h-8 tw-pl-1 tw-pr-8"
|
|
|
+ @keydown.stop="() => {}"
|
|
|
+ @keypress.stop="() => {}"
|
|
|
@keyup.enter="searchHistoryTask"
|
|
|
/>
|
|
|
<SearchOutlined
|
|
@@ -26,8 +26,8 @@
|
|
|
<div class="tw-flex tw-justify-between tw-mt-5">
|
|
|
<div class="tw-cursor-pointer tw-flex">编号</div>
|
|
|
<div
|
|
|
- @click="toggleOrderBy(props.orderTimeField)"
|
|
|
class="tw-cursor-pointer tw-flex tw-items-center"
|
|
|
+ @click="toggleOrderBy(props.orderTimeField)"
|
|
|
>
|
|
|
时间
|
|
|
<CaretUpOutlined
|
|
@@ -42,8 +42,8 @@
|
|
|
/>
|
|
|
</div>
|
|
|
<div
|
|
|
- @click="toggleOrderBy('markerScore')"
|
|
|
class="tw-cursor-pointer tw-flex tw-items-center"
|
|
|
+ @click="toggleOrderBy('markerScore')"
|
|
|
>
|
|
|
分数
|
|
|
<CaretUpOutlined
|
|
@@ -58,7 +58,6 @@
|
|
|
<div style="margin-bottom: -40px; padding-bottom: 40px">
|
|
|
<div v-for="(task, index) of store.historyTasks" :key="index">
|
|
|
<div
|
|
|
- @click="replaceCurrentTask(task)"
|
|
|
class="
|
|
|
tw-flex
|
|
|
tw-justify-between
|
|
@@ -69,6 +68,7 @@
|
|
|
tw-py-2
|
|
|
"
|
|
|
:class="store.currentTask === task && 'current-task'"
|
|
|
+ @click="replaceCurrentTask(task)"
|
|
|
>
|
|
|
<div class="tw-break-words" style="width: 62px">
|
|
|
{{ task.secretNumber }}
|
|
@@ -95,17 +95,17 @@
|
|
|
<div class="tw-flex tw-gap-2">
|
|
|
<a-button
|
|
|
shape="circle"
|
|
|
- @click="previousPage"
|
|
|
type="primary"
|
|
|
title="上一页"
|
|
|
+ @click="previousPage"
|
|
|
>
|
|
|
<div class="left-triangle"></div>
|
|
|
</a-button>
|
|
|
<a-button
|
|
|
shape="circle"
|
|
|
- @click="nextPage"
|
|
|
type="primary"
|
|
|
title="下一页"
|
|
|
+ @click="nextPage"
|
|
|
>
|
|
|
<div class="right-triangle"></div>
|
|
|
</a-button>
|
|
@@ -150,6 +150,10 @@ const props = withDefaults(
|
|
|
showOrder: false,
|
|
|
showSearch: false,
|
|
|
orderTimeField: "markerTime",
|
|
|
+ subjectCode: undefined,
|
|
|
+ groupNumber: undefined,
|
|
|
+ markerId: undefined,
|
|
|
+ markerScore: undefined,
|
|
|
}
|
|
|
);
|
|
|
|
|
@@ -158,6 +162,7 @@ let loading = $ref(false);
|
|
|
let currentPage = $ref(1);
|
|
|
let order: MarkHistoryOrderBy = $ref("markerTime");
|
|
|
if (props.orderTimeField) {
|
|
|
+ // eslint-disable-next-line vue/no-setup-props-destructure
|
|
|
order = props.orderTimeField;
|
|
|
}
|
|
|
let sort: MarkHistorySortField = $ref("DESC");
|
|
@@ -192,7 +197,7 @@ const currentTaskChange = async () => {
|
|
|
watch(() => store.historyOpen, currentTaskChange);
|
|
|
watch([$$(order), $$(sort), $$(currentPage)], currentTaskChange);
|
|
|
|
|
|
-EventBus.on("should-reload-history", async () => {
|
|
|
+EventBus.on("should-reload-history", () => {
|
|
|
// await updateHistoryTask({
|
|
|
// secretNumber: secretNumberInput,
|
|
|
// order: order,
|
|
@@ -201,42 +206,45 @@ EventBus.on("should-reload-history", async () => {
|
|
|
// });
|
|
|
// // 提交后,渲染第一条
|
|
|
// replaceCurrentTask(store.historyTasks[0]);
|
|
|
- store.globalMask = true;
|
|
|
- try {
|
|
|
- const res = await props.getHistory({
|
|
|
- secretNumber: store.currentTask?.secretNumber,
|
|
|
- order: order,
|
|
|
- sort: sort,
|
|
|
- pageNumber: currentPage,
|
|
|
- subjectCode: props.subjectCode,
|
|
|
- groupNumber: props.groupNumber,
|
|
|
- markerId: props.markerId,
|
|
|
- markerScore: props.markerScore,
|
|
|
- });
|
|
|
- if (res.data) {
|
|
|
- let data = cloneDeep(res.data) as Array<Task>;
|
|
|
- data = data.map(addFileServerPrefixToTask);
|
|
|
- if (store.currentTask) {
|
|
|
- // 这种方式(对象被重新构造了)能查找到index,我也很惊讶
|
|
|
- const indexOfTasks = store.historyTasks.indexOf(store.currentTask);
|
|
|
- if (data[0]) {
|
|
|
- // 如果原任务依然存在
|
|
|
- store.historyTasks.splice(indexOfTasks, 1, data[0]);
|
|
|
- replaceCurrentTask(store.historyTasks[indexOfTasks]);
|
|
|
+ // TODO: 因为 mitt 不支持 async,这里是个workaround。 https://github.com/developit/mitt/issues/122
|
|
|
+ (async () => {
|
|
|
+ store.globalMask = true;
|
|
|
+ try {
|
|
|
+ const res = await props.getHistory({
|
|
|
+ secretNumber: store.currentTask?.secretNumber,
|
|
|
+ order: order,
|
|
|
+ sort: sort,
|
|
|
+ pageNumber: currentPage,
|
|
|
+ subjectCode: props.subjectCode,
|
|
|
+ groupNumber: props.groupNumber,
|
|
|
+ markerId: props.markerId,
|
|
|
+ markerScore: props.markerScore,
|
|
|
+ });
|
|
|
+ if (res.data) {
|
|
|
+ let data = cloneDeep(res.data) as Array<Task>;
|
|
|
+ data = data.map(addFileServerPrefixToTask);
|
|
|
+ if (store.currentTask) {
|
|
|
+ // 这种方式(对象被重新构造了)能查找到index,我也很惊讶
|
|
|
+ const indexOfTasks = store.historyTasks.indexOf(store.currentTask);
|
|
|
+ if (data[0]) {
|
|
|
+ // 如果原任务依然存在
|
|
|
+ store.historyTasks.splice(indexOfTasks, 1, data[0]);
|
|
|
+ replaceCurrentTask(store.historyTasks[indexOfTasks]);
|
|
|
+ } else {
|
|
|
+ // 问题卷会查找不到,这里直接删除此任务
|
|
|
+ store.historyTasks.splice(indexOfTasks, 1);
|
|
|
+ replaceCurrentTask(store.historyTasks[indexOfTasks]);
|
|
|
+ }
|
|
|
} else {
|
|
|
- // 问题卷会查找不到,这里直接删除此任务
|
|
|
- store.historyTasks.splice(indexOfTasks, 1);
|
|
|
- replaceCurrentTask(store.historyTasks[indexOfTasks]);
|
|
|
+ // 问题卷会将清除它作为 currentTask ,然后刷新当前页
|
|
|
+ store.historyTasks = data;
|
|
|
+ replaceCurrentTask(store.historyTasks[0]);
|
|
|
}
|
|
|
- } else {
|
|
|
- // 问题卷会将清除它作为 currentTask ,然后刷新当前页
|
|
|
- store.historyTasks = data;
|
|
|
- replaceCurrentTask(store.historyTasks[0]);
|
|
|
}
|
|
|
+ } finally {
|
|
|
+ store.globalMask = false;
|
|
|
}
|
|
|
- } finally {
|
|
|
- store.globalMask = false;
|
|
|
- }
|
|
|
+ })().catch((e) => console.log("reload-history error", e));
|
|
|
});
|
|
|
|
|
|
async function updateHistoryTask({
|
|
@@ -292,11 +300,11 @@ function toggleOrderBy(toOrder: MarkHistoryOrderBy) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function searchHistoryTask() {
|
|
|
+async function searchHistoryTask() {
|
|
|
if (currentPage !== 1) {
|
|
|
currentPage = 1;
|
|
|
} else {
|
|
|
- currentTaskChange();
|
|
|
+ await currentTaskChange();
|
|
|
}
|
|
|
}
|
|
|
</script>
|