AccessEdit.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <main class="safety-platform-container__main">
  3. <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
  4. <template #images>
  5. <UploadImages
  6. :maxCount="9"
  7. ref="uploadImagesRef"
  8. :image-list="imageList"
  9. @upload-success="handleUploadChange"
  10. />
  11. </template>
  12. </BasicForm>
  13. </main>
  14. <footer class="safety-platform-container__footer">
  15. <el-button @click="router.back()">取消</el-button>
  16. <el-button type="primary" @click="handleSubmit">提交</el-button>
  17. </footer>
  18. <UploadLoading :form-loading="formLoading" v-if="formLoading" />
  19. </template>
  20. <script setup lang="ts">
  21. import { onMounted, ref } from 'vue';
  22. import { useRouter } from 'vue-router';
  23. import { ElMessage } from 'element-plus';
  24. import BasicForm from '@/components/BasicForm.vue';
  25. import UploadLoading from '@/components/UploadLoading.vue';
  26. import UploadImages from '@/components/UploadImages/UploadImages.vue';
  27. import { useFormConfigHook } from '@/hooks/useFormConfigHook';
  28. import { updateAccessRecord, getAccessRecordDetail } from '@/api/security-confidentiality-access';
  29. import type { AccessDetailResponse, CreateAccessRuleForm, UpdateAccessQuery } from '../types';
  30. import { ACCESS_FORM_CONFIG, ACCESS_FORM_DATA, ACCESS_FORM_RULES } from '../configs/form';
  31. import { formatImageList, unformatImage } from '@/components/UploadImages/utils';
  32. const props = defineProps<{
  33. id: number;
  34. }>();
  35. const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } =
  36. useFormConfigHook<CreateAccessRuleForm>(ACCESS_FORM_CONFIG, ACCESS_FORM_DATA, ACCESS_FORM_RULES);
  37. const basicFormRef = ref<InstanceType<typeof BasicForm>>();
  38. const uploadImagesRef = ref<InstanceType<typeof UploadImages>>();
  39. const imageList = ref<string[]>([]);
  40. const handleValidate = async () => {
  41. if (!basicFormRef.value) return;
  42. const res = await basicFormRef.value.validateForm();
  43. return res;
  44. };
  45. const getDetail = async () => {
  46. const res: AccessDetailResponse = await getAccessRecordDetail(props.id);
  47. if (!res) return;
  48. ruleFormData.eventDescription = res.eventDescription;
  49. ruleFormData.eventLocation = res.eventLocation;
  50. ruleFormData.eventTime = res.eventTime;
  51. ruleFormData.remark = res.remark;
  52. ruleFormData.createdByName = res.createdByName;
  53. ruleFormData.images = unformatImage(res.images)?.map((x) => {
  54. return { url: x };
  55. });
  56. imageList.value = ruleFormData.images?.map((x) => x.url)!;
  57. cloneRuleFormData();
  58. };
  59. const getFormData = async () => {
  60. cloneRuleFormData();
  61. const res: UpdateAccessQuery = {
  62. id: props.id,
  63. ...ruleFormData,
  64. images: JSON.stringify(await formatImageList(ruleFormData.images)),
  65. };
  66. return res;
  67. };
  68. const formLoading = ref(false);
  69. const router = useRouter();
  70. const handleSubmit = async () => {
  71. const res = await handleValidate();
  72. if (!res) return;
  73. try {
  74. formLoading.value = true;
  75. const params = await getFormData();
  76. await updateAccessRecord(params);
  77. ElMessage.success('编辑成功');
  78. router.back();
  79. } catch (e) {
  80. console.log(e);
  81. } finally {
  82. formLoading.value = false;
  83. }
  84. };
  85. const handleUploadChange = () => {
  86. ruleFormData.images = uploadImagesRef.value!.getUploadedImages();
  87. };
  88. onMounted(() => {
  89. getDetail();
  90. cloneRuleFormData();
  91. beforeRouteLeave();
  92. });
  93. </script>
  94. <style scoped lang="scss">
  95. @use '@/styles/page-details-layout.scss' as *;
  96. </style>