|
@@ -3,7 +3,13 @@
|
|
|
<el-form ref="eventFormRef" :model="form" :rules="rules" label-width="80px">
|
|
|
<el-form-item label="灾害事件" prop="event_title">
|
|
|
<el-select v-if="!props.eventId" v-model="form.event_title" placeholder="请选择事件" clearable>
|
|
|
- <el-option v-for="item in mm_event_title" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in events"
|
|
|
+ :key="item.event_id"
|
|
|
+ :label="item.event_title"
|
|
|
+ :value="item.event_title"
|
|
|
+ @click="selectEvent(item)"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
<span v-else>{{ form.event_title }}</span>
|
|
|
</el-form-item>
|
|
@@ -20,13 +26,14 @@
|
|
|
<script lang="ts" setup>
|
|
|
import { ref, reactive, toRefs } from 'vue';
|
|
|
import { addEvent, editEvent, postEditEvent, registeredEvent } from '@/api/duty/eventing';
|
|
|
-
|
|
|
+import { useRouter } from 'vue-router';
|
|
|
const proxy = getCurrentInstance()?.proxy;
|
|
|
const { mm_event_title, region } = toRefs<any>(proxy?.useDict('mm_event_title', 'region'));
|
|
|
const router = useRouter();
|
|
|
const buttonLoading = ref(false);
|
|
|
const eventFormRef = ref();
|
|
|
const visible = ref(false);
|
|
|
+const events = ref([]);
|
|
|
interface Props {
|
|
|
modelValue: boolean;
|
|
|
eventId: string;
|
|
@@ -39,10 +46,9 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
const emits = defineEmits(['update:modelValue']);
|
|
|
watch(
|
|
|
() => props.modelValue,
|
|
|
- () => {
|
|
|
- // 界面显示初始化
|
|
|
- if (props.modelValue) {
|
|
|
- if (props.eventId != '') {
|
|
|
+ (newVal) => {
|
|
|
+ if (newVal) {
|
|
|
+ if (props.eventId !== '') {
|
|
|
editEvent({ event_id: props.eventId }).then((res) => {
|
|
|
form.value = res.data;
|
|
|
});
|
|
@@ -51,7 +57,7 @@ watch(
|
|
|
eventFormRef.value?.resetFields();
|
|
|
}
|
|
|
}
|
|
|
- visible.value = props.modelValue;
|
|
|
+ visible.value = newVal;
|
|
|
}
|
|
|
);
|
|
|
|
|
@@ -59,6 +65,7 @@ watch(
|
|
|
const initFormData = {
|
|
|
event_title: '', // 事件标题
|
|
|
event_id: '',
|
|
|
+ address: '',
|
|
|
event_type: '', // 事件类型
|
|
|
event_level: '', // 事件等级
|
|
|
event_status: '0' // 事件状态
|
|
@@ -78,30 +85,22 @@ const data = reactive({
|
|
|
const { form, rules } = toRefs(data);
|
|
|
|
|
|
// 提交表单
|
|
|
-const submitForm = () => {
|
|
|
- eventFormRef.value?.validate((valid) => {
|
|
|
+const submitForm = async () => {
|
|
|
+ eventFormRef.value?.validate(async (valid) => {
|
|
|
if (valid) {
|
|
|
buttonLoading.value = true;
|
|
|
- // 打印表单数据
|
|
|
- console.log('表单数据', form.value);
|
|
|
- if (props.eventId === '') {
|
|
|
- addEvent(form.value)
|
|
|
- .then((res) => {
|
|
|
- proxy?.$modal.msgSuccess(res.msg);
|
|
|
- closeDialog();
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- buttonLoading.value = false;
|
|
|
- });
|
|
|
- } else {
|
|
|
- postEditEvent(form.value)
|
|
|
- .then((res) => {
|
|
|
- proxy?.$modal.msgSuccess(res.msg);
|
|
|
- closeDialog();
|
|
|
- })
|
|
|
- .finally(() => {
|
|
|
- buttonLoading.value = false;
|
|
|
- });
|
|
|
+ try {
|
|
|
+ // 提交关闭事件请求
|
|
|
+ await closeEvent({
|
|
|
+ event_id: form.value.event_id,
|
|
|
+ address: form.value.address
|
|
|
+ });
|
|
|
+ proxy?.$modal.msgSuccess('已成功关闭');
|
|
|
+ closeDialog();
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Failed to close event:', error);
|
|
|
+ } finally {
|
|
|
+ buttonLoading.value = false;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
@@ -111,7 +110,7 @@ const fetchEvents = async () => {
|
|
|
try {
|
|
|
const response = await registeredEvent({});
|
|
|
if (response && response.data && Array.isArray(response.data)) {
|
|
|
- mm_event_title.value = response.data.map((item) => ({ value: item.id, label: item.title }));
|
|
|
+ events.value = response.data;
|
|
|
}
|
|
|
} catch (error) {
|
|
|
console.error('Failed to fetch events:', error);
|
|
@@ -129,12 +128,15 @@ const closeDialog = () => {
|
|
|
form.value.event_title = '';
|
|
|
};
|
|
|
const endProcess = () => {
|
|
|
- // 确保在点击结束指挥时重新显示对话框
|
|
|
- ensureDialogVisible();
|
|
|
- closeDialog();
|
|
|
- // 根据应用类型返回上一页
|
|
|
- // 如果是 SPA 应用,可以使用 Vue Router
|
|
|
- router.go(-1);
|
|
|
+ // 判断是否需要提交表单
|
|
|
+ if (props.eventId === '') {
|
|
|
+ // 如果没有 eventId,则提交表单
|
|
|
+ submitForm();
|
|
|
+ } else {
|
|
|
+ // 如果有 eventId,则直接关闭对话框并返回上一页
|
|
|
+ closeDialog();
|
|
|
+ router.go(-1);
|
|
|
+ }
|
|
|
};
|
|
|
// 确保在点击结束指挥时重新显示对话框
|
|
|
const ensureDialogVisible = () => {
|