CreateWarningInfoItem.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <div class="info-container">
  3. <section>
  4. <BasicForm ref="basicFormRef" :formData="ruleFormData" :formRules="formRules" :formConfig="ruleFormConfig">
  5. <template #disasterType>
  6. <el-select v-model="ruleFormData.disasterType" placeholder="请选择预警类型" filterable>
  7. <el-option
  8. v-for="item in warningTypeDice"
  9. :key="item.itemCode"
  10. :label="item.itemValue"
  11. :value="item.itemCode"
  12. />
  13. </el-select>
  14. </template>
  15. <template #disasterLevel>
  16. <el-select v-model="ruleFormData.disasterLevel" placeholder="请选择灾害等级">
  17. <el-option
  18. v-for="item in disasterLevelDice"
  19. :key="item.itemCode"
  20. :label="item.itemValue"
  21. :value="item.itemCode"
  22. />
  23. </el-select>
  24. </template>
  25. <template #isPush>
  26. <el-radio-group v-model="ruleFormData.isPush">
  27. <el-radio :value="IS_PUSH.PUSH">是</el-radio>
  28. <el-radio :value="IS_PUSH.NOT_PUSH">否</el-radio>
  29. </el-radio-group>
  30. <SelectGroup
  31. v-if="ruleFormData.isPush"
  32. ref="selectGroupRef"
  33. :userGroupList="ruleFormData.userGroupList || []"
  34. @userGroupListChange="handleUserGroupListChange"
  35. />
  36. </template>
  37. </BasicForm>
  38. </section>
  39. </div>
  40. </template>
  41. <script setup lang="ts">
  42. import BasicForm from '@/components/BasicForm.vue';
  43. import { useFormConfigHook } from '@/hooks/useFormConfigHook';
  44. import { WARNING_INFO_FROM_CONFIG, WARNING_INFO_FROM_DATA, WARNING_INFO_FROM_RULES } from '../config';
  45. import { onMounted, ref } from 'vue';
  46. import { WarningInfoRuleForm } from '../type';
  47. import SelectGroup from './SelectGroup.vue';
  48. import { useUserInfoHook } from '@/views/disaster/hooks/userInfo';
  49. import { useDisasterWarningHook } from '../hook';
  50. import { IS_PUSH } from '@/views/disaster/constant';
  51. const { realname } = useUserInfoHook();
  52. const basicFormRef = ref<InstanceType<typeof BasicForm>>();
  53. const selectGroupRef = ref<InstanceType<typeof SelectGroup>>();
  54. const { warningTypeDice, disasterLevelDice, getWarningInfoDict, getDisasterLevelDict } = useDisasterWarningHook();
  55. const { ruleFormConfig, ruleFormData, formRules, cloneRuleFormData, beforeRouteLeave } =
  56. useFormConfigHook<WarningInfoRuleForm>(WARNING_INFO_FROM_CONFIG, WARNING_INFO_FROM_DATA, WARNING_INFO_FROM_RULES);
  57. const handleUserGroupListChange = (userGroupList: number[]) => {
  58. ruleFormData.userGroupList = userGroupList;
  59. };
  60. const handleValidate = async () => {
  61. if (!basicFormRef.value) return;
  62. const parentValidateResult = await basicFormRef.value.validateForm();
  63. let childValidateResult = true;
  64. if (selectGroupRef.value) {
  65. childValidateResult = (await selectGroupRef.value.validateForm()) as boolean;
  66. }
  67. return parentValidateResult && childValidateResult;
  68. };
  69. const getFormData = () => {
  70. if (!ruleFormData.isPush) {
  71. ruleFormData.userGroupList = [];
  72. }
  73. cloneRuleFormData();
  74. return ruleFormData;
  75. };
  76. defineExpose({
  77. handleValidate,
  78. getFormData,
  79. });
  80. onMounted(() => {
  81. getWarningInfoDict();
  82. getDisasterLevelDict();
  83. ruleFormData.realname = realname;
  84. cloneRuleFormData();
  85. beforeRouteLeave();
  86. });
  87. </script>
  88. <style scoped lang="scss">
  89. @use '@/views/disaster/style/info-container.scss' as *;
  90. :deep(.el-date-editor) {
  91. --el-date-editor-width: 100%;
  92. }
  93. </style>