useTask.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { useDataCheckStore, useAppStore } from "@/store";
  2. import { StudentPage, TaskItem } from "./types";
  3. export default function useTask() {
  4. const dataCheckStore = useDataCheckStore();
  5. function updatePageTasks(curPage: StudentPage) {
  6. if (!curPage || !dataCheckStore.curStudent) {
  7. dataCheckStore.setInfo({
  8. taskList: [],
  9. curTask: null,
  10. });
  11. return;
  12. }
  13. const taskList = [] as TaskItem[];
  14. const examNumber = dataCheckStore.curStudent.examNumber;
  15. if (!checkExamNumber(examNumber)) {
  16. taskList.push({
  17. id: `examNumber_${curPage.studentId}`,
  18. type: "examNumber",
  19. questionIndex: 0,
  20. paperIndex: 0,
  21. pageIndex: 0,
  22. studentId: curPage.studentId,
  23. finished: false,
  24. });
  25. }
  26. curPage.question?.result.map((item, index) => {
  27. if (checkQuestionError(item)) {
  28. taskList.push({
  29. id: `question_${curPage.studentId}_${curPage.paperIndex}_${curPage.pageIndex}_${index}`,
  30. type: "question",
  31. questionIndex: index,
  32. paperIndex: curPage.paperIndex,
  33. pageIndex: curPage.pageIndex,
  34. studentId: curPage.studentId,
  35. finished: false,
  36. });
  37. }
  38. });
  39. dataCheckStore.setInfo({
  40. taskList,
  41. curTask: taskList[0],
  42. });
  43. if (taskList.length === 0) {
  44. dataCheckStore.curStudent.checked = true;
  45. }
  46. }
  47. function updateNextUnfinishTask() {
  48. const task = dataCheckStore.taskList.find((item) => !item.finished);
  49. dataCheckStore.curTask = task || null;
  50. }
  51. function taskFinisheHandle() {
  52. const curTask = dataCheckStore.curTask;
  53. if (!curTask) {
  54. return;
  55. }
  56. curTask.finished = true;
  57. updateNextUnfinishTask();
  58. }
  59. function checkExamNumber(examNumber: string) {
  60. if (!examNumber) return false;
  61. return /^\d{15}$/.test(examNumber);
  62. }
  63. function checkQuestionError(cont: string) {
  64. if (!cont || cont.length > 1 || cont.includes("#")) return true;
  65. return false;
  66. }
  67. function checkPageFinished(questions: string[], examNumber: string) {
  68. if (!questions.length || !examNumber) return false;
  69. const examNumberFinished = checkExamNumber(examNumber);
  70. if (!examNumberFinished) return false;
  71. const questionFinished = !questions.some((item) =>
  72. checkQuestionError(item)
  73. );
  74. return questionFinished;
  75. }
  76. return {
  77. updatePageTasks,
  78. updateNextUnfinishTask,
  79. taskFinisheHandle,
  80. checkExamNumber,
  81. checkQuestionError,
  82. checkPageFinished,
  83. };
  84. }