NoticeEdit.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <main class="safety-platform-container__main">
  3. <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
  4. <template #attachment>
  5. <UploadFiles
  6. label="上传附件"
  7. ref="uploadFilesRef"
  8. :fileList="ruleFormData.attachment"
  9. @uploadSuccess="handleUploadSuccess"
  10. />
  11. </template>
  12. <template #isPush>
  13. <el-radio-group v-model="ruleFormData.isPush">
  14. <el-radio :value="IS_PUSH.PUSH">是</el-radio>
  15. <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
  16. </el-radio-group>
  17. <SelectGroup
  18. v-if="ruleFormData.isPush === IS_PUSH.PUSH"
  19. ref="selectGroupRef"
  20. :userGroupList="ruleFormData.userGroupList || []"
  21. @userGroupListChange="handleUserGroupListChange"
  22. />
  23. </template>
  24. </BasicForm>
  25. </main>
  26. <footer class="safety-platform-container__footer">
  27. <el-button @click="router.back()">取消</el-button>
  28. <el-button type="primary" @click="handleSubmit">提交</el-button>
  29. </footer>
  30. <UploadLoading :form-loading="formLoading" v-if="formLoading" />
  31. </template>
  32. <script setup lang="ts">
  33. import BasicForm from '@/components/BasicForm.vue';
  34. import UploadFiles from '@/views/disaster/components/UploadFiles.vue';
  35. import SelectGroup from '@/components/PersonGroup/SelectGroup.vue';
  36. import { useFormConfigHook } from '@/hooks/useFormConfigHook';
  37. import { IS_PUSH } from '../constants';
  38. import { ElMessage } from 'element-plus';
  39. import { NOTICE_FORM_CONFIG, NOTICE_FORM_DATA, NOTICE_FORM_RULES } from '../configs/form';
  40. import { FileItem, CreateNoticeRuleForm, CreateNoticeQuery, UpdateNoticeQuery } from '../types';
  41. import { onMounted, ref } from 'vue';
  42. import UploadLoading from '@/components/UploadLoading.vue';
  43. import { useRouter } from 'vue-router';
  44. import { stringToArray, unformatAttachment, formatAttachmentList } from '../utils';
  45. import { getNoticeDetail, updateNotice } from '@/api/traffic-regulation/traffic-regulation';
  46. const props = defineProps<{
  47. id: number;
  48. }>();
  49. const { ruleFormData, formRules, ruleFormConfig, cloneRuleFormData, beforeRouteLeave } =
  50. useFormConfigHook<CreateNoticeRuleForm>(NOTICE_FORM_CONFIG, NOTICE_FORM_DATA, NOTICE_FORM_RULES);
  51. const basicFormRef = ref<InstanceType<typeof BasicForm>>();
  52. const selectGroupRef = ref<InstanceType<typeof SelectGroup>>();
  53. const getDetail = async () => {
  54. const res = await getNoticeDetail(props.id);
  55. ruleFormData.name = res.name;
  56. ruleFormData.content = res.content;
  57. ruleFormData.attachment = unformatAttachment(res.attachment)!;
  58. ruleFormData.remark = res.remark;
  59. ruleFormData.realname = res.creatName;
  60. ruleFormData.isPush = res.isPush;
  61. ruleFormData.userGroupList = stringToArray(res.userGroupList);
  62. cloneRuleFormData();
  63. };
  64. const handleUserGroupListChange = (userGroupList: number[]) => {
  65. ruleFormData.userGroupList = userGroupList;
  66. };
  67. const handleUploadSuccess = (fileList: FileItem[]) => {
  68. ruleFormData.attachment = fileList;
  69. };
  70. const handleValidate = async () => {
  71. if (!basicFormRef.value) return;
  72. const parentValidateResult = await basicFormRef.value.validateForm();
  73. let childValidateResult = true;
  74. if (selectGroupRef.value) {
  75. childValidateResult = (await selectGroupRef.value.validateForm()) as boolean;
  76. }
  77. return parentValidateResult && childValidateResult;
  78. };
  79. const getFormData = async () => {
  80. if (!ruleFormData.isPush) {
  81. ruleFormData.userGroupList = [];
  82. }
  83. cloneRuleFormData();
  84. const res: UpdateNoticeQuery = {
  85. id: props.id,
  86. managementType: 2,
  87. name: ruleFormData.name,
  88. content: ruleFormData.content,
  89. attachment: JSON.stringify(await formatAttachmentList(ruleFormData.attachment)),
  90. isPush: ruleFormData.isPush,
  91. userGroupList: ruleFormData.userGroupList?.join(','),
  92. remark: ruleFormData.remark,
  93. effectState: 0,
  94. };
  95. return res;
  96. };
  97. const formLoading = ref(false);
  98. const router = useRouter();
  99. const handleSubmit = async () => {
  100. const res = await handleValidate();
  101. if (!res) return;
  102. try {
  103. formLoading.value = true;
  104. const params = await getFormData();
  105. await updateNotice(params);
  106. ElMessage.success('编辑成功');
  107. router.back();
  108. } catch (e) {
  109. console.log(e);
  110. } finally {
  111. formLoading.value = false;
  112. }
  113. };
  114. onMounted(() => {
  115. beforeRouteLeave();
  116. getDetail();
  117. });
  118. </script>
  119. <style scoped lang="scss">
  120. @use '@/styles/page-details-layout.scss' as *;
  121. </style>