ModifyMarkSite.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <template>
  2. <a-modal
  3. v-model:open="visible"
  4. :width="450"
  5. style="top: 10vh"
  6. :confirm-loading="loading"
  7. @ok="confirm"
  8. >
  9. <template #title> {{ title }} </template>
  10. <a-form
  11. ref="formRef"
  12. :model="formData"
  13. :rules="rules"
  14. :label-col="{ style: { width: '160px' } }"
  15. >
  16. <a-form-item name="subjectCode" label="科目代码">
  17. <select-course
  18. v-model:value="formData.subjectCode"
  19. :exam-id="userStore.curExam.id"
  20. :disabled="isEdit"
  21. ></select-course>
  22. </a-form-item>
  23. <a-form-item name="paperType" label="条码值">
  24. <a-input
  25. v-model:value="formData.paperType"
  26. placeholder="请输入"
  27. :disabled="isEdit"
  28. ></a-input>
  29. </a-form-item>
  30. <a-form-item name="oddNumber" label="奇数考场评卷点代码">
  31. <a-input
  32. v-model:value="formData.oddNumber"
  33. :maxlength="30"
  34. placeholder="请输入"
  35. />
  36. </a-form-item>
  37. <a-form-item name="evenNumber" label="偶数考场评卷点代码">
  38. <a-input
  39. v-model:value="formData.evenNumber"
  40. :maxlength="30"
  41. placeholder="请输入"
  42. />
  43. </a-form-item>
  44. </a-form>
  45. </a-modal>
  46. </template>
  47. <script setup lang="ts">
  48. import { computed, reactive, ref, watch } from "vue";
  49. import type { UnwrapRef } from "vue";
  50. import { message } from "ant-design-vue";
  51. import { markSiteSave } from "@/ap/resultExport";
  52. import useLoading from "@/hooks/useLoading";
  53. import useModal from "@/hooks/useModal";
  54. import { objAssign, objModifyAssign } from "@/utils/tool";
  55. import { MarkSiteListItem, MarkSiteSaveParams } from "@/ap/types/resultExport";
  56. import { useUserStore } from "@/store";
  57. defineOptions({
  58. name: "ModifyMarkSite",
  59. });
  60. /* modal */
  61. const { visible, open, close } = useModal();
  62. defineExpose({ open, close });
  63. const props = defineProps<{
  64. rowData: MarkSiteListItem;
  65. }>();
  66. const emit = defineEmits(["modified"]);
  67. const userStore = useUserStore();
  68. const defaultFormData = {
  69. id: undefined,
  70. examId: userStore.curExam.id as number,
  71. subjectCode: "",
  72. paperType: "",
  73. oddNumber: "",
  74. evenNumber: "",
  75. };
  76. const isEdit = computed(() => !!props.rowData.id);
  77. const title = computed(() => `${isEdit.value ? "编辑" : "新增"}评卷点信息`);
  78. const formRef = ref();
  79. const formData: UnwrapRef<MarkSiteSaveParams> = reactive({
  80. ...defaultFormData,
  81. });
  82. const rules: FormRules<keyof MarkSiteSaveParams> = {
  83. subjectCode: [
  84. {
  85. required: true,
  86. message: "请选择",
  87. trigger: "change",
  88. },
  89. ],
  90. paperType: [
  91. {
  92. required: true,
  93. message: "请输入",
  94. trigger: "change",
  95. },
  96. {
  97. max: 30,
  98. message: "不能超过30字符",
  99. trigger: "change",
  100. },
  101. ],
  102. oddNumber: [
  103. {
  104. required: true,
  105. message: "请输入",
  106. trigger: "change",
  107. },
  108. ],
  109. evenNumber: [
  110. {
  111. required: true,
  112. message: "请输入",
  113. trigger: "change",
  114. },
  115. ],
  116. };
  117. /* confirm */
  118. const { loading, setLoading } = useLoading();
  119. async function confirm() {
  120. const valid = await formRef.value?.validate().catch(() => false);
  121. if (!valid) return;
  122. setLoading(true);
  123. const datas = objAssign(formData, {});
  124. const res = await markSiteSave(datas).catch(() => false);
  125. setLoading(false);
  126. if (!res) return;
  127. message.success("保存成功!");
  128. emit("modified", datas);
  129. close();
  130. }
  131. watch(
  132. () => visible.value,
  133. (val) => {
  134. if (val) {
  135. modalOpenHandle();
  136. }
  137. },
  138. {
  139. immediate: true,
  140. }
  141. );
  142. /* init modal */
  143. function modalOpenHandle() {
  144. if (props.rowData.id) {
  145. objModifyAssign(formData, props.rowData);
  146. } else {
  147. objModifyAssign(formData, defaultFormData);
  148. }
  149. }
  150. </script>