guonan
2025-07-08 e958b6262f20e23128155f7cc0dd6e674b1b98a1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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,
    }
})