import { defineStore } from 'pinia' import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import { createSimData } from '@/api/trApi'; import dayjs from 'dayjs' export const SimAPIStore = defineStore('SimAPI', () => { // 定时器 const shouldPoll = ref(false) const selectTab = ref("行政区划仿真") const isLoading = ref(false) const handleClickTab = (data) => { selectTab.value = data } // 获取区域类型 const getAreaType = (tabName) => { switch (tabName) { case '行政区划仿真': return 1 case '重点区域仿真': return 2 case '重点沟仿真': return 3 default: return 0 } } // 验证表单 const validateForm = (forms) => { if (!forms?.name) { ElMessage.warning('请输入方案名称') return false } if (forms.type === 1 || forms.type === 3) { if (!forms.geom) { ElMessage.warning('请选择模拟区域') return false } if (!forms.rainfall && !forms.intensity && !forms.duration && (forms.rainfall.length > 0 && !forms.intensityUnit)) { ElMessage.warning('请确保表单均已填写'); return false; } } if (forms.type === 2) { if (!forms.geom) { ElMessage.warning('请选择模拟区域') return false } if (forms.gauges.length === 0) { ElMessage.warning('请选择雨量计设备') return false } } return true } // 保存方案逻辑 const saveScheme = async (forms) => { if (isLoading.value) { ElMessage.warning('正在保存,请稍候...') return } isLoading.value = true try { const params = { geom: forms.geom.value, areaName: forms.geom.label, areaType: getAreaType(selectTab.value), createTime: Date.now(), name: forms.name, type: forms.type, status: 0, data: JSON.stringify({ startTime: Array.isArray(forms.hours) ? dayjs(forms.hours[0]).format("YYYY-MM-DD HH:mm:ss") : dayjs(forms.hours).format("YYYY-MM-DD HH:mm:ss"), type: forms.type, total: parseFloat(forms.rainfall), duration: parseFloat(forms.duration), intensity: parseFloat(forms.intensity), prediction: forms.prediction, history: forms.history, mode: forms.mode, gauges: forms.gauges, rainfalls: forms.rainFallList, // intensityUnit: forms.intensityUnit intensityUnit: forms.intensityUnit || 'mm/15min' }) } // console.log(params, '保存方案参数') const res = await createSimData(params) ElMessage.success('方案保存成功') return res } catch (error) { console.error('保存失败:', error) ElMessage.error('保存失败: ' + (error.message || '请稍后重试')) throw error } finally { isLoading.value = false } } // 保存方案弹窗 const addSimCheme = async (forms) => { // 表单验证 if (!validateForm(forms)) { throw new Error('表单验证未通过'); // 抛出错误,阻止继续执行 } try { await ElMessageBox.confirm('确定要保存当前方案吗?', '新建方案', { confirmButtonText: '确定', cancelButtonText: '取消', }) // 用户确认后执行保存,并返回结果 const res = await saveScheme(forms); // 执行保存并接收结果 return res; // 返回保存的结果 } catch (error) { if (error !== 'cancel') { console.error('保存出错:', error) ElMessage.error('保存过程中出现错误') } else { ElMessage.info('已取消保存') } throw error // 保证外部能捕获到错误 } } return { selectTab, isLoading, shouldPoll, handleClickTab, addSimCheme, saveScheme, } })