StartEventDialog.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <el-dialog ref="formDialogRef" :model-value="visible" title="开始指挥" width="550px" append-to-body @close="closeDialog">
  3. <el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
  4. <el-row>
  5. <el-col :span="24">
  6. <el-form-item label="事件等级" prop="event_level">
  7. <el-select v-model="form.event_level" placeholder="请选择事件等级" clearable style="width:calc(100% - 30px)">
  8. <el-option v-for="item in mm_event_level" :key="item.value" :label="item.label" :value="item.value"></el-option>
  9. </el-select>
  10. <el-icon @click="eventLevelInfoDialogVisible = true" size="large" style="margin-left:8px"><WarningFilled /></el-icon>
  11. </el-form-item>
  12. </el-col>
  13. <el-col :span="24" v-show="false">
  14. <el-form-item label="伤亡情况">
  15. <el-row>
  16. <el-col :span="8">
  17. <el-form-item label="死亡" prop="deaths">
  18. <el-input v-model="form.deaths">
  19. <template #append>人</template>
  20. </el-input>
  21. </el-form-item>
  22. </el-col>
  23. <el-col :span="8">
  24. <el-form-item label="受伤" prop="injuries">
  25. <el-input v-model="form.injuries">
  26. <template #append>人</template>
  27. </el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="8">
  31. <el-form-item label="失联" prop="missing">
  32. <el-input v-model="form.missing">
  33. <template #append>人</template>
  34. </el-input>
  35. </el-form-item>
  36. </el-col>
  37. </el-row>
  38. </el-form-item>
  39. </el-col>
  40. </el-row>
  41. </el-form>
  42. <template #footer>
  43. <div class="dialog-footer">
  44. <el-button type="primary" @click="submitForm">确 定</el-button>
  45. <el-button @click="closeDialog">取 消</el-button>
  46. </div>
  47. </template>
  48. </el-dialog>
  49. <EventLevelInfoDialog v-model="eventLevelInfoDialogVisible" @closeDialog="closeEventLevelInfoDialog" />
  50. </template>
  51. <script lang="ts" setup>
  52. import { ref, reactive, toRefs } from 'vue';
  53. import { startEvent } from '@/api/duty/eventing';
  54. import EventLevelInfoDialog from './EventLevelInfoDialog.vue';
  55. const proxy = getCurrentInstance()?.proxy;
  56. const { mm_event_level } = toRefs<any>(proxy?.useDict('mm_event_level'));
  57. interface Form {
  58. eventId: string;
  59. event_level: string;
  60. deaths: string;
  61. injuries: string;
  62. missing: string;
  63. }
  64. interface Props {
  65. modelValue: boolean;
  66. eventId: string;
  67. data: Form;
  68. }
  69. const props = withDefaults(defineProps<Props>(), {
  70. modelValue: false
  71. });
  72. const emits = defineEmits(['update:modelValue']);
  73. watch(
  74. () => props.modelValue,
  75. () => {
  76. if (props.modelValue) {
  77. form.value = props.data;
  78. }
  79. visible.value = props.modelValue;
  80. }
  81. );
  82. const router = useRouter();
  83. const visible = ref(false);
  84. const form = ref<Form>({
  85. eventId: '',
  86. event_level: '',
  87. deaths: '',
  88. injuries: '',
  89. missing: ''
  90. });
  91. const rules = reactive({
  92. event_level: [{ required: true, message: '事件等级不能为空', trigger: 'blur' }],
  93. deaths: [{ required: true, message: '死亡人数不能为空', trigger: 'blur' }],
  94. injuries: [{ required: true, message: '受伤人数不能为空', trigger: 'blur' }],
  95. missing: [{ required: true, message: '失踪人数不能为空', trigger: 'blur' }]
  96. });
  97. const formRef = ref();
  98. const buttonLoading = ref(false);
  99. // 关闭事件
  100. const submitForm = () => {
  101. console.log('submitForm');
  102. formRef.value?.validate(async (valid: boolean) => {
  103. if (valid) {
  104. buttonLoading.value = true;
  105. startEvent({ eventId: props.eventId, ...form.value }).then(() => {
  106. proxy?.$modal.msgSuccess('开始指挥');
  107. closeDialog()
  108. });
  109. }
  110. else {
  111. }
  112. });
  113. };
  114. const closeDialog = () => {
  115. emits('update:modelValue', false);
  116. };
  117. const eventLevelInfoDialogVisible = ref(false);
  118. const closeEventLevelInfoDialog = () => {
  119. eventLevelInfoDialogVisible.value = false;
  120. };
  121. </script>
  122. <style lang="scss" scoped></style>