ModalSelectMarkingQuestion.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <a-modal
  3. v-model:visible="visible"
  4. title="选择评卷小题"
  5. width="406px"
  6. :zIndex="1000"
  7. wrapClassName="mark-dialog"
  8. @ok="handleOk"
  9. @cancel="handleCancel"
  10. >
  11. <a-form @keydown.stop="" @keypress.stop="">
  12. <a-form-item label="选择小题" :required="true" class="tw-mb-2">
  13. <a-select
  14. v-model:value="selectedQuestionId"
  15. placeholder="请选择小题"
  16. style="width: 100%"
  17. >
  18. <a-select-option
  19. v-for="item in markStore.status"
  20. :key="item.questionId"
  21. :value="item.questionId"
  22. >
  23. {{ `${item.mainNumber}-${item.subNumber}` }}
  24. </a-select-option>
  25. </a-select>
  26. </a-form-item>
  27. </a-form>
  28. </a-modal>
  29. </template>
  30. <script setup lang="ts">
  31. import { ref, watch } from "vue";
  32. import { useMarkStore } from "@/store";
  33. import { updateUISetting } from "@/api/markPage";
  34. import useTaskTips from "../composables/useTaskTips";
  35. const markStore = useMarkStore();
  36. const { clearPrevTips } = useTaskTips();
  37. // Using $ref for visible, assuming Vue Reactivity Transform is enabled as in ModalMarkProblem.vue
  38. // If not, this should be: const visible = ref(markStore.selectMarkingQuestionModalVisible);
  39. let visible = $ref(markStore.selectMarkingQuestionModalVisible);
  40. const selectedQuestionId = ref<string | undefined>(undefined);
  41. watch(
  42. () => markStore.selectMarkingQuestionModalVisible,
  43. (newVal) => {
  44. visible = newVal; // Sync local $ref with store state
  45. if (newVal) {
  46. // When modal opens, pre-select with current markingQuestionId from store
  47. selectedQuestionId.value = markStore.curStatus?.questionId || undefined;
  48. }
  49. }
  50. );
  51. // Watch local 'visible' $ref to update store if modal is closed by 'x' or ESC
  52. watch(
  53. () => visible,
  54. (newVal) => {
  55. if (markStore.selectMarkingQuestionModalVisible !== newVal) {
  56. markStore.selectMarkingQuestionModalVisible = newVal;
  57. }
  58. }
  59. );
  60. const handleOk = async () => {
  61. await updateUISetting(
  62. markStore.setting.mode,
  63. markStore.setting.uiSetting,
  64. markStore.setting.questionModel,
  65. selectedQuestionId.value
  66. );
  67. // 清除掉上一次评卷题目缓存,这样就不会提示试题切换信息了
  68. clearPrevTips();
  69. window.location.reload();
  70. };
  71. const handleCancel = () => {
  72. visible = false; // Close modal, which will trigger watcher to update store
  73. };
  74. </script>