EditDefenseNoticeItem.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <div class="disaster-warning-container">
  3. <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
  4. <template #disasterType>
  5. <el-select v-model="ruleFormData.disasterType" placeholder="请选择灾害类型" filterable>
  6. <el-option
  7. v-for="item in disasterTypeDice"
  8. :key="item.itemCode"
  9. :label="item.itemValue"
  10. :value="item.itemCode"
  11. />
  12. </el-select>
  13. </template>
  14. <template #disasterLevel>
  15. <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
  16. <el-option
  17. v-for="item in disasterLevelDice"
  18. :key="item.itemCode"
  19. :label="item.itemValue"
  20. :value="item.itemCode"
  21. />
  22. </el-select>
  23. </template>
  24. <template #attachmentListRes>
  25. <UploadFiles
  26. label="上传并导入文件"
  27. ref="uploadFilesRef"
  28. :fileList="ruleFormData.attachmentListRes"
  29. @uploadSuccess="handleUploadSuccess"
  30. />
  31. </template>
  32. <template #isPush>
  33. <el-radio-group v-model="ruleFormData.isPush">
  34. <el-radio :value="IS_PUSH.PUSH">是</el-radio>
  35. <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
  36. </el-radio-group>
  37. <SelectGroup
  38. v-if="ruleFormData.isPush"
  39. ref="selectGroupRef"
  40. :userGroupList="ruleFormData.userGroupList || []"
  41. @userGroupListChange="handleUserGroupListChange"
  42. />
  43. </template>
  44. </BasicForm>
  45. </div>
  46. </template>
  47. <script setup lang="ts">
  48. import { onMounted, ref } from 'vue';
  49. import BasicForm from '@/components/BasicForm.vue';
  50. import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
  51. import SelectGroup from '@/components/PersonGroup/SelectGroup.vue';
  52. import { useFormConfigHook } from '@/hooks/useFormConfigHook';
  53. import { useDisasterWarningHook } from '../hook';
  54. import type { DefenseNoticeRuleForm } from '../type';
  55. import type { FileItem } from '@/components/UploadFiles/types.ts';
  56. import { getDefenseNoticeDetail } from '@/api/disaster-warning';
  57. import { DEFENSE_NOTICE_FROM_CONFIG, DEFENSE_NOTICE_FROM_DATA, DEFENSE_NOTICE_FROM_RULES } from '../config';
  58. import { IS_PUSH } from '@/views/disaster/constant';
  59. const props = defineProps<{
  60. id: number;
  61. }>();
  62. const basicFormRef = ref<InstanceType<typeof BasicForm>>();
  63. const selectGroupRef = ref<InstanceType<typeof SelectGroup>>();
  64. const { disasterTypeDice, disasterLevelDice, getDisasterTypeDict, getDisasterLevelDict } = useDisasterWarningHook();
  65. const { ruleFormConfig, ruleFormData, formRules, cloneRuleFormData, beforeRouteLeave } =
  66. useFormConfigHook<DefenseNoticeRuleForm>(
  67. DEFENSE_NOTICE_FROM_CONFIG,
  68. DEFENSE_NOTICE_FROM_DATA,
  69. DEFENSE_NOTICE_FROM_RULES,
  70. );
  71. const handleUserGroupListChange = (userGroupList: number[]) => {
  72. ruleFormData.userGroupList = userGroupList;
  73. };
  74. const handleUploadSuccess = (fileList: FileItem[]) => {
  75. ruleFormData.attachmentListRes = fileList;
  76. };
  77. const getDefenseNoticeDetailData = async () => {
  78. const res = await getDefenseNoticeDetail(props.id);
  79. for (const key in res) {
  80. ruleFormData[key] = res[key as keyof typeof res];
  81. ruleFormData.userGroupList = JSON.parse(res.userGroupList as unknown as string);
  82. }
  83. cloneRuleFormData();
  84. };
  85. const handleValidate = async () => {
  86. if (!basicFormRef.value) return;
  87. const parentValidateResult = await basicFormRef.value.validateForm();
  88. let childValidateResult = true;
  89. if (selectGroupRef.value) {
  90. childValidateResult = (await selectGroupRef.value.validateForm()) as boolean;
  91. }
  92. return parentValidateResult && childValidateResult;
  93. };
  94. const getFormData = () => {
  95. if (!ruleFormData.isPush) {
  96. ruleFormData.userGroupList = [];
  97. }
  98. cloneRuleFormData();
  99. return ruleFormData;
  100. };
  101. defineExpose({
  102. handleValidate,
  103. getFormData,
  104. });
  105. onMounted(() => {
  106. getDefenseNoticeDetailData();
  107. getDisasterTypeDict();
  108. getDisasterLevelDict();
  109. beforeRouteLeave();
  110. });
  111. </script>
  112. <style scoped lang="scss">
  113. @use '../style/info.scss' as *;
  114. </style>