|
@@ -101,10 +101,10 @@
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
-<script lang="ts">
|
|
|
|
|
|
+<script setup lang="ts">
|
|
import { getHistoryTask } from "@/api/markPage";
|
|
import { getHistoryTask } from "@/api/markPage";
|
|
-import { MarkHistoryOrderBy, MarkHistorySortField, Task } from "@/types";
|
|
|
|
-import { defineComponent, ref, watch } from "vue";
|
|
|
|
|
|
+import type { MarkHistoryOrderBy, MarkHistorySortField, Task } from "@/types";
|
|
|
|
+import { defineProps, ref, watch } from "vue";
|
|
import { store } from "./store";
|
|
import { store } from "./store";
|
|
import {
|
|
import {
|
|
CloseOutlined,
|
|
CloseOutlined,
|
|
@@ -112,123 +112,54 @@ import {
|
|
CaretDownOutlined,
|
|
CaretDownOutlined,
|
|
CaretUpOutlined,
|
|
CaretUpOutlined,
|
|
} from "@ant-design/icons-vue";
|
|
} from "@ant-design/icons-vue";
|
|
-import { cloneDeep, throttle } from "lodash";
|
|
|
|
|
|
+import { cloneDeep } from "lodash";
|
|
|
|
|
|
-export default defineComponent({
|
|
|
|
- name: "MarkHistory",
|
|
|
|
- components: {
|
|
|
|
- CloseOutlined,
|
|
|
|
- SearchOutlined,
|
|
|
|
- CaretDownOutlined,
|
|
|
|
- CaretUpOutlined,
|
|
|
|
- },
|
|
|
|
- props: {
|
|
|
|
- shouldReload: { type: Number, required: true },
|
|
|
|
- },
|
|
|
|
- setup(props) {
|
|
|
|
- const secretNumberInput = ref("");
|
|
|
|
- const loading = ref(false);
|
|
|
|
- const currentPage = ref(1);
|
|
|
|
- const order = ref("markerTime" as MarkHistoryOrderBy);
|
|
|
|
- const sort = ref("DESC" as MarkHistorySortField);
|
|
|
|
|
|
+const props = defineProps<{ shouldReload: number }>();
|
|
|
|
|
|
- const currentTaskChange = async () => {
|
|
|
|
- if (store.historyOpen) {
|
|
|
|
- replaceCurrentTask(undefined);
|
|
|
|
- await updateHistoryTask({
|
|
|
|
- secretNumber: secretNumberInput.value,
|
|
|
|
- order: order.value,
|
|
|
|
- sort: sort.value,
|
|
|
|
- pageNumber: currentPage.value,
|
|
|
|
- });
|
|
|
|
- replaceCurrentTask(store.historyTasks[0]);
|
|
|
|
- } else {
|
|
|
|
- replaceCurrentTask(store.tasks[0]);
|
|
|
|
- store.historyTasks.splice(0);
|
|
|
|
- secretNumberInput.value = "";
|
|
|
|
- currentPage.value = 1;
|
|
|
|
- order.value = "markerTime";
|
|
|
|
- sort.value = "DESC";
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
- watch(() => store.historyOpen, currentTaskChange);
|
|
|
|
- watch([order, sort, currentPage], currentTaskChange);
|
|
|
|
-
|
|
|
|
- watch(
|
|
|
|
- () => props.shouldReload,
|
|
|
|
- async () => {
|
|
|
|
- // await updateHistoryTask({
|
|
|
|
- // secretNumber: secretNumberInput.value,
|
|
|
|
- // order: order.value,
|
|
|
|
- // sort: sort.value,
|
|
|
|
- // pageNumber: currentPage.value,
|
|
|
|
- // });
|
|
|
|
- // // 提交后,渲染第一条
|
|
|
|
- // replaceCurrentTask(store.historyTasks[0]);
|
|
|
|
- store.globalMask = true;
|
|
|
|
- try {
|
|
|
|
- const res = await getHistoryTask({
|
|
|
|
- secretNumber: store.currentTask?.secretNumber,
|
|
|
|
- });
|
|
|
|
- if (res.data) {
|
|
|
|
- let data = cloneDeep(res.data) as Array<Task>;
|
|
|
|
- data = data.map((t) => {
|
|
|
|
- t.questionList.map((q) => {
|
|
|
|
- q.__origScore = q.score;
|
|
|
|
- return q;
|
|
|
|
- });
|
|
|
|
- t.sliceUrls = t.sliceUrls.map(
|
|
|
|
- (s) => store.setting.fileServer + s
|
|
|
|
- );
|
|
|
|
- t.sheetUrls = t.sheetUrls?.map(
|
|
|
|
- (s) => store.setting.fileServer + s
|
|
|
|
- );
|
|
|
|
- t.jsonUrl = store.setting.fileServer + t.jsonUrl;
|
|
|
|
|
|
+const secretNumberInput = ref("");
|
|
|
|
+const loading = ref(false);
|
|
|
|
+const currentPage = ref(1);
|
|
|
|
+const order = ref("markerTime" as MarkHistoryOrderBy);
|
|
|
|
+const sort = ref("DESC" as MarkHistorySortField);
|
|
|
|
|
|
- return t;
|
|
|
|
- });
|
|
|
|
- if (store.currentTask) {
|
|
|
|
- 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]);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- } finally {
|
|
|
|
- store.globalMask = false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- );
|
|
|
|
|
|
+const currentTaskChange = async () => {
|
|
|
|
+ if (store.historyOpen) {
|
|
|
|
+ replaceCurrentTask(undefined);
|
|
|
|
+ await updateHistoryTask({
|
|
|
|
+ secretNumber: secretNumberInput.value,
|
|
|
|
+ order: order.value,
|
|
|
|
+ sort: sort.value,
|
|
|
|
+ pageNumber: currentPage.value,
|
|
|
|
+ });
|
|
|
|
+ replaceCurrentTask(store.historyTasks[0]);
|
|
|
|
+ } else {
|
|
|
|
+ replaceCurrentTask(store.tasks[0]);
|
|
|
|
+ store.historyTasks.splice(0);
|
|
|
|
+ secretNumberInput.value = "";
|
|
|
|
+ currentPage.value = 1;
|
|
|
|
+ order.value = "markerTime";
|
|
|
|
+ sort.value = "DESC";
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+watch(() => store.historyOpen, currentTaskChange);
|
|
|
|
+watch([order, sort, currentPage], currentTaskChange);
|
|
|
|
|
|
- async function updateHistoryTask({
|
|
|
|
- pageNumber = 1,
|
|
|
|
- pageSize = 10,
|
|
|
|
- order = "markerTime",
|
|
|
|
- sort = "DESC",
|
|
|
|
- secretNumber = null,
|
|
|
|
- }: {
|
|
|
|
- pageNumber?: number; // 从1开始
|
|
|
|
- pageSize?: number;
|
|
|
|
- order?: MarkHistoryOrderBy;
|
|
|
|
- sort?: MarkHistorySortField;
|
|
|
|
- secretNumber?: string | null;
|
|
|
|
- }) {
|
|
|
|
- loading.value = true;
|
|
|
|
|
|
+watch(
|
|
|
|
+ () => props.shouldReload,
|
|
|
|
+ async () => {
|
|
|
|
+ // await updateHistoryTask({
|
|
|
|
+ // secretNumber: secretNumberInput.value,
|
|
|
|
+ // order: order.value,
|
|
|
|
+ // sort: sort.value,
|
|
|
|
+ // pageNumber: currentPage.value,
|
|
|
|
+ // });
|
|
|
|
+ // // 提交后,渲染第一条
|
|
|
|
+ // replaceCurrentTask(store.historyTasks[0]);
|
|
|
|
+ store.globalMask = true;
|
|
|
|
+ try {
|
|
const res = await getHistoryTask({
|
|
const res = await getHistoryTask({
|
|
- pageNumber,
|
|
|
|
- pageSize,
|
|
|
|
- order,
|
|
|
|
- sort,
|
|
|
|
- secretNumber,
|
|
|
|
|
|
+ secretNumber: store.currentTask?.secretNumber,
|
|
});
|
|
});
|
|
- loading.value = false;
|
|
|
|
if (res.data) {
|
|
if (res.data) {
|
|
let data = cloneDeep(res.data) as Array<Task>;
|
|
let data = cloneDeep(res.data) as Array<Task>;
|
|
data = data.map((t) => {
|
|
data = data.map((t) => {
|
|
@@ -242,74 +173,103 @@ export default defineComponent({
|
|
|
|
|
|
return t;
|
|
return t;
|
|
});
|
|
});
|
|
- store.historyTasks = data;
|
|
|
|
- replaceCurrentTask(store.historyTasks[0]);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- function replaceCurrentTask(task: Task | undefined) {
|
|
|
|
- if (task) {
|
|
|
|
- task.questionList = task.questionList.map((q) => {
|
|
|
|
- if (typeof q.__origScore !== "undefined") {
|
|
|
|
- // 如果是回评的任务,则将旧分数还原
|
|
|
|
- q.score = q.__origScore;
|
|
|
|
|
|
+ if (store.currentTask) {
|
|
|
|
+ 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]);
|
|
}
|
|
}
|
|
- return q;
|
|
|
|
- });
|
|
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- store.currentTask = task;
|
|
|
|
|
|
+ } finally {
|
|
|
|
+ store.globalMask = false;
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+);
|
|
|
|
|
|
- function previousPage() {
|
|
|
|
- if (currentPage.value > 1) {
|
|
|
|
- currentPage.value -= 1;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- function nextPage() {
|
|
|
|
- if (store.historyTasks.length >= 10) {
|
|
|
|
- currentPage.value += 1;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+async function updateHistoryTask({
|
|
|
|
+ pageNumber = 1,
|
|
|
|
+ pageSize = 10,
|
|
|
|
+ order = "markerTime",
|
|
|
|
+ sort = "DESC",
|
|
|
|
+ secretNumber = null,
|
|
|
|
+}: {
|
|
|
|
+ pageNumber?: number; // 从1开始
|
|
|
|
+ pageSize?: number;
|
|
|
|
+ order?: MarkHistoryOrderBy;
|
|
|
|
+ sort?: MarkHistorySortField;
|
|
|
|
+ secretNumber?: string | null;
|
|
|
|
+}) {
|
|
|
|
+ loading.value = true;
|
|
|
|
+ const res = await getHistoryTask({
|
|
|
|
+ pageNumber,
|
|
|
|
+ pageSize,
|
|
|
|
+ order,
|
|
|
|
+ sort,
|
|
|
|
+ secretNumber,
|
|
|
|
+ });
|
|
|
|
+ loading.value = false;
|
|
|
|
+ if (res.data) {
|
|
|
|
+ let data = cloneDeep(res.data) as Array<Task>;
|
|
|
|
+ data = data.map((t) => {
|
|
|
|
+ t.questionList.map((q) => {
|
|
|
|
+ q.__origScore = q.score;
|
|
|
|
+ return q;
|
|
|
|
+ });
|
|
|
|
+ t.sliceUrls = t.sliceUrls.map((s) => store.setting.fileServer + s);
|
|
|
|
+ t.sheetUrls = t.sheetUrls?.map((s) => store.setting.fileServer + s);
|
|
|
|
+ t.jsonUrl = store.setting.fileServer + t.jsonUrl;
|
|
|
|
|
|
- function toggleOrderBy(toOrder: MarkHistoryOrderBy) {
|
|
|
|
- if (toOrder === order.value) {
|
|
|
|
- sort.value = sort.value === "DESC" ? "ASC" : "DESC";
|
|
|
|
- } else {
|
|
|
|
- order.value = toOrder;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ return t;
|
|
|
|
+ });
|
|
|
|
+ store.historyTasks = data;
|
|
|
|
+ replaceCurrentTask(store.historyTasks[0]);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
- function searchHistoryTask() {
|
|
|
|
- if (currentPage.value !== 1) {
|
|
|
|
- currentPage.value = 1;
|
|
|
|
- } else {
|
|
|
|
- currentTaskChange();
|
|
|
|
|
|
+function replaceCurrentTask(task: Task | undefined) {
|
|
|
|
+ if (task) {
|
|
|
|
+ task.questionList = task.questionList.map((q) => {
|
|
|
|
+ if (typeof q.__origScore !== "undefined") {
|
|
|
|
+ // 如果是回评的任务,则将旧分数还原
|
|
|
|
+ q.score = q.__origScore;
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
+ return q;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ store.currentTask = task;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+function previousPage() {
|
|
|
|
+ if (currentPage.value > 1) {
|
|
|
|
+ currentPage.value -= 1;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+function nextPage() {
|
|
|
|
+ if (store.historyTasks.length >= 10) {
|
|
|
|
+ currentPage.value += 1;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
- // function _updateSecretNumber(event: Event) {
|
|
|
|
- // const inputEle = event.target as HTMLInputElement;
|
|
|
|
- // secretNumberInput.value = inputEle.value ?? "";
|
|
|
|
- // }
|
|
|
|
- // const updateSecretNumber = throttle(_updateSecretNumber, 100);
|
|
|
|
|
|
+function toggleOrderBy(toOrder: MarkHistoryOrderBy) {
|
|
|
|
+ if (toOrder === order.value) {
|
|
|
|
+ sort.value = sort.value === "DESC" ? "ASC" : "DESC";
|
|
|
|
+ } else {
|
|
|
|
+ order.value = toOrder;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
- return {
|
|
|
|
- store,
|
|
|
|
- loading,
|
|
|
|
- secretNumberInput,
|
|
|
|
- updateHistoryTask,
|
|
|
|
- replaceCurrentTask,
|
|
|
|
- currentPage,
|
|
|
|
- previousPage,
|
|
|
|
- nextPage,
|
|
|
|
- sort,
|
|
|
|
- order,
|
|
|
|
- toggleOrderBy,
|
|
|
|
- searchHistoryTask,
|
|
|
|
- // updateSecretNumber,
|
|
|
|
- };
|
|
|
|
- },
|
|
|
|
-});
|
|
|
|
|
|
+function searchHistoryTask() {
|
|
|
|
+ if (currentPage.value !== 1) {
|
|
|
|
+ currentPage.value = 1;
|
|
|
|
+ } else {
|
|
|
|
+ currentTaskChange();
|
|
|
|
+ }
|
|
|
|
+}
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|