guonan
2025-07-08 e958b6262f20e23128155f7cc0dd6e674b1b98a1
src/store/simAPI.js
@@ -2,8 +2,13 @@
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)
@@ -22,50 +27,37 @@
        }
    }
    // 获取降雨类型
    const getRainType = (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.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 openSaveDialog = async (forms) => {
        if (!validateForm(forms)) return
        try {
            await ElMessageBox.confirm('确定要保存当前方案吗?', '新建方案', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
            })
            // 用户确认后执行保存
            await saveScheme(forms)
        } catch (error) {
            if (error !== 'cancel') {
                console.error('保存出错:', error)
                ElMessage.error('保存过程中出现错误')
            } else {
                ElMessage.info('已取消保存')
            }
        }
    }
    // 保存方案逻辑
    const saveScheme = async (forms) => {
        if (isLoading.value) {
            ElMessage.warning('正在保存,请稍候...')
@@ -76,17 +68,34 @@
        try {
            const params = {
                geom: forms.geom.value,
                areaName: forms.geom.label,
                areaType: getAreaType(selectTab.value),
                createTime: Date.now(),
                name: forms.name,
                type: getRainType(forms.type),
                type: forms.type,
                status: 0,
                data: forms.data
                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'
                })
            }
            const response = await createSimData(params)
            // console.log(params, '保存方案参数')
            const res = await createSimData(params)
            ElMessage.success('方案保存成功')
            return response
            return res
        } catch (error) {
            console.error('保存失败:', error)
            ElMessage.error('保存失败: ' + (error.message || '请稍后重试'))
@@ -96,36 +105,40 @@
        }
    }
    // 保存方案弹窗
    const addSimCheme = async (forms) => {
        // 表单验证
        if (!validateForm(forms)) {
            throw new Error('表单验证未通过'); // 抛出错误,阻止继续执行
        }
    // // 新建方案
    // const createSimulation = async (forms) => {
    //     console.log(forms, 'ffffffff')
        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 // 保证外部能捕获到错误
        }
    }
    //     const params = {
    //         areaType: getAreaType(selectTab),
    //         createTime: Date.now(),
    //         name: forms.name,
    //         // 1为预测模拟,2为实时模拟,3为历史模拟
    //         type: getRainType(forms.type),
    //         // 0为创建仿真,1为预处理,2为分析中,10为完成,20为出错
    //         status: 0,
    //         data: forms.data
    //     }
    //     console.log(params, 'params')
    //     try {
    //         await createSimData(params)
    //     } catch (error) {
    //         console.error('创建仿真失败:', error)
    //     }
    // }
    return {
        // 状态
        selectTab,
        isLoading,
        // 方法
        shouldPoll,
        handleClickTab,
        openSaveDialog,
        addSimCheme,
        saveScheme,
    }
})