ModifyMarkSite.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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="6"
  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="6"
  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. pattern: /^[0-9]{1,6}$/,
  110. message: "只能输入最多6个数字",
  111. trigger: "change",
  112. },
  113. ],
  114. evenNumber: [
  115. {
  116. required: true,
  117. message: "请输入",
  118. trigger: "change",
  119. },
  120. {
  121. pattern: /^[0-9]{1,6}$/,
  122. message: "只能输入最多6个数字",
  123. trigger: "change",
  124. },
  125. ],
  126. };
  127. /* confirm */
  128. const { loading, setLoading } = useLoading();
  129. async function confirm() {
  130. const valid = await formRef.value?.validate().catch(() => false);
  131. if (!valid) return;
  132. setLoading(true);
  133. const datas = objAssign(formData, {});
  134. const res = await markSiteSave(datas).catch(() => false);
  135. setLoading(false);
  136. if (!res) return;
  137. message.success("保存成功!");
  138. emit("modified", datas);
  139. close();
  140. }
  141. watch(
  142. () => visible.value,
  143. (val) => {
  144. if (val) {
  145. modalOpenHandle();
  146. }
  147. },
  148. {
  149. immediate: true,
  150. }
  151. );
  152. /* init modal */
  153. function modalOpenHandle() {
  154. if (props.rowData.id) {
  155. objModifyAssign(formData, props.rowData);
  156. } else {
  157. objModifyAssign(formData, defaultFormData);
  158. }
  159. }
  160. </script>