// stores/ui.js import { defineStore } from 'pinia' import { ref } from 'vue' export const useSimStore = defineStore('simulation', () => { 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) const plottingShow = ref(false) const messageShow = ref(false) const announcementShow = ref(false) const functionShow = ref(false) const locationShow = ref(false) const tableShow = ref(false) const flowShow = ref(false) const debuffShow = ref(false) const rightRiverShow = ref(false) const showPreview = ref(false) const weatherShow = ref(false) const barShow = ref(false) const deviceShow = ref(false) const showLayerTree = ref(true) 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 rightShow.value = false plottingShow.value = false messageShow.value = false announcementShow.value = false functionShow.value = false locationShow.value = false tableShow.value = false flowShow.value = false backToHome.value = false rightRiverShow.value = false showPreview.value = false deviceShow.value = false schemCard.value = [] } const setSchemCard = (data) => { schemCard.value = data } 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) { schemCard.value[index] = { ...schemCard.value[index], ...newData } } } 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 isShowEarth.value = false } const startMNPG = () => { init() isShowEarth.value = false } const setBackToHome = (value) => { backToHome.value = value } // 导航点击 const handleNavClick = (index) => { switch (index) { case 1: startYHGL() break case 2: startZHJC() break case 3: startMNFZ() break case 4: startMNPG() break } } const updateSelectedLayers = (keys) => { userSelectedLayers.value = keys; } return { // UI 状态 navigationShow, leftShow, rightShow, plottingShow, messageShow, announcementShow, functionShow, locationShow, tableShow, flowShow, debuffShow, rightRiverShow, showPreview, weatherShow, barShow, deviceShow, showLayerTree, schemCard, backToHome, rainFalls, intensityUnit, DangerPoint, DeviceShowSwitch, DangerShowSwitch, waterLegendData, currentInfo, isShowEarth, userSelectedLayers, devices, frameNum, schemWaterInfo, layerDate, rePlayList, selectNWJ, openDia, // 方案相关方法 setSchemCard, addSchemCard, removeSchemCardItem, updateSchemCardItem, setBackToHome, // ✅ 暴露 selectedScheme 及其方法 selectedScheme, // 响应式引用 setSelectedScheme, // 方法 clearSelectedScheme, // 方法 // 控制逻辑 init, startYHGL, startZHJC, startMNFZ, startMNPG, handleNavClick, updateSelectedLayers } })