guonan
8 天以前 d06f7ad0231d5fb029ab8520bf442590d3bab20b
src/store/simulation.js
@@ -1,9 +1,29 @@
// stores/ui.js
import { defineStore } from 'pinia'
import { ref } from 'vue'
export const useSimStore = defineStore('ui', () => {
    // 所有UI状态
import { showDeviceDetail } from "@/store";
export const useSimStore = defineStore('simulation', () => {
    // 断面数据
    const crossSection = ref([])
    const openDia = ref(true)
    // 历史回放列表
    const rePlayList = ref([])
    // 北京市所有村的code
    const townCodeAll = ref([])
    // 实时模拟最新的layer
    const layerDate = ref("")
    // 帧数
    const frameNum = ref(0)
    // 目录树选中
    const userSelectedLayers = ref([])
    // 隐患点列表
    const DeviceShowSwitch = ref(false)
    const DangerShowSwitch = ref(false)
    const DangerPoint = ref([])
    // 泥位计
    const selectNWJ = ref()
    // 监测设备列表
    const devices = ref([])
    const navigationShow = ref(true)
    const leftShow = ref(false)
    const rightShow = ref(false)
@@ -20,12 +40,43 @@
    const weatherShow = ref(false)
    const barShow = ref(false)
    const deviceShow = ref(false)
    const showResultAssess = ref(false)
    const showLayerTree = ref(true)
    const showDangerAssess = ref(false)
    const schemCard = ref([])
    const backToHome = ref(false)
    const selectedScheme = ref(null)
    // 当前模拟经纬度
    const currentInfo = ref({})
    // 图例
    const waterLegendData = ref([])
    // 模拟仿真图例
    const isShowEarth = ref(false)
    // 降雨数据列表
    const rainFalls = ref()
    // 降雨单位
    const intensityUnit = ref()
    // 方案下水深流速等数据
    let schemWaterInfo = ref([])
    const setSelectedScheme = (scheme) => {
        selectedScheme.value = scheme;
    // 初始化方法
        try {
            const parsedData = JSON.parse(scheme.data);
            // 只有当 rainfalls 和 intensityUnit 存在且非空时才赋值
            if (parsedData.rainfalls && parsedData.intensityUnit) {
                rainFalls.value = parsedData.rainfalls;
                intensityUnit.value = parsedData.intensityUnit;
            } else {
                console.warn("缺少必要的 rainfalls 或 intensityUnit 字段");
            }
        } catch (error) {
            console.error("解析 scheme.data 出错", error);
        }
    };
    const clearSelectedScheme = () => {
        selectedScheme.value = null
    }
    const init = () => {
        navigationShow.value = true
        leftShow.value = false
@@ -37,31 +88,25 @@
        locationShow.value = false
        tableShow.value = false
        flowShow.value = false
        backToHome.value = false
        rightRiverShow.value = false
        showPreview.value = false
        deviceShow.value = false
        showResultAssess.value = false
        showDangerAssess.value = false
        schemCard.value = []
    }
    // 方案相关
    const setSchemCard = (data) => {
        schemCard.value = data
        console.log(schemCard,'aaaaaaaaaaaaaa');
    }
    // 添加单个方案数据
    const addSchemCard = (item) => {
        schemCard.value.unshift(item)
    }
    // 删除指定方案数据
    const removeSchemCardItem = (id) => {
        schemCard.value = schemCard.value.filter(item => item.id !== id)
    }
    // 更新指定方案数据
    const updateSchemCardItem = (id, newData) => {
        const index = schemCard.value.findIndex(item => item.id === id)
        if (index !== -1) {
@@ -69,32 +114,59 @@
        }
    }
    const flyToHomeView = () => {
        const view = {
            destination: {
                x: -2355432.569004413,
                y: 4687573.191838412,
                z: 4098726.315265574,
            },
            orientation: {
                pitch: -0.9541030830183503,
                roll: 0.00031421159527500464,
                heading: 6.140424766644804,
            },
        };
        viewer.scene.camera.flyTo(view);
    }
    const startYHGL = () => {
        init()
        flyToHomeView()
        locationShow.value = true
        isShowEarth.value = true
    }
    const startZHJC = () => {
        init()
        flyToHomeView()
        functionShow.value = true
        deviceShow.value = true
        isShowEarth.value = true
    }
    const startMNFZ = () => {
        init()
        flyToHomeView()
        leftShow.value = true
        rightRiverShow.value = true
        isShowEarth.value = false
    }
    const startMNPG = () => {
        init()
        showResultAssess.value = true
        showDangerAssess.value = true
        isShowEarth.value = false
    }
    const setBackToHome = (value) => {
        backToHome.value = value
    }
    // 导航点击
    const handleNavClick = (index) => {
        showDeviceDetail.value = false;
        switch (index) {
            case 1:
                startYHGL()
@@ -110,7 +182,15 @@
                break
        }
    }
    const updateSelectedLayers = (keys) => {
        userSelectedLayers.value = keys;
    }
    return {
        // UI 状态
        navigationShow,
        leftShow,
        rightShow,
@@ -127,19 +207,46 @@
        weatherShow,
        barShow,
        deviceShow,
        showResultAssess,
        showLayerTree,
        showDangerAssess,
        handleNavClick,
        schemCard,
        backToHome,
        rainFalls,
        intensityUnit,
        DangerPoint,
        DeviceShowSwitch,
        DangerShowSwitch,
        waterLegendData,
        currentInfo,
        isShowEarth,
        userSelectedLayers,
        devices,
        frameNum,
        schemWaterInfo,
        layerDate,
        rePlayList,
        selectNWJ,
        openDia,
        crossSection,
        // 方案相关方法
        setSchemCard,
        addSchemCard,
        removeSchemCardItem,
        updateSchemCardItem,
        setBackToHome,
        // ✅ 暴露 selectedScheme 及其方法
        selectedScheme,          // 响应式引用
        setSelectedScheme,      // 方法
        clearSelectedScheme,    // 方法
        // 控制逻辑
        init,
        startYHGL,
        startZHJC,
        startMNFZ,
        startMNPG,
        schemCard,
        setSchemCard,
        addSchemCard,
        removeSchemCardItem,
        updateSchemCardItem,
        handleNavClick,
        updateSelectedLayers
    }
})