Merge branch 'master' of http://103.135.160.14:9034/r/NslWeb
| | |
| | | export async function fetchToken() { |
| | | try { |
| | | const response = await axios.post("/hp/auth/getToken", { |
| | | username: "yxxx", |
| | | username: "yunweiyonghu", |
| | | password: "c2d6bba7f0a67701a97550684e39fa5f", |
| | | systemName: "RS_SYSTEM", |
| | | }); |
| | |
| | | height: 100%; |
| | | z-index: 40; |
| | | border-radius: 4px; |
| | | padding: 10px 10px; |
| | | padding: 10px 0px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .echartCont p { |
| | |
| | | width: 100%; |
| | | height: 30%; |
| | | } |
| | | |
| | | .echartBox { |
| | | flex: 1; |
| | | margin-top: 10px; |
| | | height: calc(100% - 41px); |
| | | } |
| | | |
| | | /* .echarts1{ |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | } */ |
| | | .echartBox { |
| | | flex: 1; |
| | | margin-top: 10px; |
| | | height: calc(100% - 41px); |
| | | } |
| | | |
| | | .listinfo-btns { |
| | | width: 100%; |
| | |
| | | onUnmounted, |
| | | } from "vue"; |
| | | import dayjs from "dayjs"; |
| | | import { getRainfall } from "@/api"; |
| | | import { useSimStore } from "@/store/simulation"; |
| | | const simStore = useSimStore(); |
| | | const { rainFalls } = simStore; |
| | | |
| | | let dataIntervalId = null; // è¡¨æ ¼å®æ¶å¨ ID |
| | | const jsonData = ref([]); // JSON æ°æ® |
| | |
| | | // 触åäºä»¶ï¼å°å½åè¡ç ID åéå°å°å¾ç»ä»¶ |
| | | EventBus.emit("row-clicked", row.id); |
| | | } |
| | | const listData = cityData.listData; |
| | | const data = ref([ |
| | | 8.16, 15.38, 13.94, 9.46, 86.42, 71.32, 28.52, 25.9, 13.74, 14.54, 15.53, |
| | | 9.17, 0, 0.09, 0.86, 8.15, 44.8, 21.86, 6.2, 4.98, 2.82, 2.36, 3.1, 1.06, |
| | | ]); |
| | | // const listData = cityData.listData; |
| | | // const data = ref([ |
| | | // 8.16, 15.38, 13.94, 9.46, 86.42, 71.32, 28.52, 25.9, 13.74, 14.54, 15.53, |
| | | // 9.17, 0, 0.09, 0.86, 8.15, 44.8, 21.86, 6.2, 4.98, 2.82, 2.36, 3.1, 1.06, |
| | | // ]); |
| | | const rainChangeShow = ref(false); |
| | | const tableContainer = ref(null); |
| | | |
| | |
| | | return timeOnly; |
| | | }; |
| | | |
| | | const setEcharts1 = () => { |
| | | // 1. åå§åå¾è¡¨ |
| | | const chartDom = document.getElementById("echarts1"); |
| | | myChart1 = echarts.init(chartDom); |
| | | // ææ¶å
ä¸ç¨ï¼ä¸»è¦åè½ä¸ºä¸åéæå¼å
åä¸ªæ°æ® |
| | | // function processData(originalData) { |
| | | // const processedData = []; |
| | | // let currentTotal = 0; // å¨æç´¯å ç total |
| | | |
| | | // 2. æ°æ®å®ä¹ï¼å®å
¨ä¿ææ¨çåå§åéï¼ |
| | | // for (let i = 0; i < originalData.length; i++) { |
| | | // const current = originalData[i]; |
| | | // const targetIntensity = current.intensity; |
| | | // let remainingIntensity = targetIntensity; // å©ä½éè¦åé
ç intensity |
| | | |
| | | // // çæ60个ç¹ï¼å¨æéæºå¡«å
ï¼å
许åºç°ä½å¼åé«å¼ï¼ |
| | | // for (let j = 0; j < 60; j++) { |
| | | // // 1. å¨æçæ intensityï¼éæºï¼ä½æåä¸ç¹è¡¥è¶³å©ä½å¼ï¼ |
| | | // let intensity; |
| | | // if (j === 59) { |
| | | // intensity = remainingIntensity; // æåä¸ç¹å¼ºå¶ç¨å®å©ä½å¼ |
| | | // } else { |
| | | // // éæºçæä¸ä¸ªæ¯ä¾ï¼0.1~0.5ä¹é´ç使¦ç + å¶å°é«å¼ï¼ |
| | | // const isLowValue = Math.random() < 0.7; // 70%æ¦ççæä½å¼ |
| | | // const maxAllowed = remainingIntensity / (60 - j); // ç¡®ä¿ä¸è¶
å©ä½å¼ |
| | | // intensity = isLowValue |
| | | // ? Math.random() * maxAllowed * 0.3 // ä½å¼èå´ |
| | | // : Math.random() * maxAllowed * 1.5; // å¶å°é«å¼ |
| | | // } |
| | | // remainingIntensity -= intensity; |
| | | |
| | | // // 2. 宿¶ç´¯å total |
| | | // currentTotal += intensity; |
| | | |
| | | // processedData.push({ |
| | | // time: current.time, |
| | | // intensity: intensity, |
| | | // total: currentTotal, |
| | | // }); |
| | | // } |
| | | |
| | | // // éªè¯å½åæ®µçæ» intensity æ¯å¦å¹é
åå§æ°æ® |
| | | // console.log( |
| | | // `Segment ${i}: Generated intensity sum = ${( |
| | | // targetIntensity - remainingIntensity |
| | | // ).toFixed(2)}, Original = ${targetIntensity}` |
| | | // ); |
| | | // } |
| | | |
| | | // return processedData; |
| | | // } |
| | | |
| | | // 设置éé¨å¾è¡¨ |
| | | const setEcharts1 = () => { |
| | | const chartDom = document.getElementById("echarts1"); |
| | | const myChart1 = echarts.init(chartDom); |
| | | |
| | | // å¾è¡¨æ°æ® |
| | | let rainfallData = ref([]); |
| | | let data1 = ref([]); |
| | | let data2 = ref([]); |
| | | let xAxisData = ref([]); |
| | | let xAxisData = ref(["00:00"]); |
| | | let updateInterval = null; |
| | | let dataIndex = ref(0); |
| | | |
| | | |
| | | // 4. å¨æè®¡ç®Yè½´ï¼æ°å¢çæ ¸å¿é»è¾ï¼ |
| | | // å¨æè®¡ç®Yè½´èå´ |
| | | const getDynamicYAxis = (dataArray) => { |
| | | const currentMax = Math.max(...dataArray, 1); // ç¡®ä¿æå°æ¾ç¤ºèå´ |
| | | const currentMax = Math.max(...dataArray, 1); |
| | | const step = Math.ceil(currentMax / 3); |
| | | return { |
| | | max: step * 3, |
| | |
| | | }; |
| | | }; |
| | | |
| | | // 5. å è½½æ°æ®ï¼å®å
¨ä¿ææ¨çé»è¾ï¼ |
| | | // å è½½JSONæ°æ® |
| | | const loadJsonData = async () => { |
| | | try { |
| | | const response = await fetch("/json/rainfall.json"); |
| | | const result = await response.json(); |
| | | |
| | | if (result?.data?.length) { |
| | | rainfallData.value = result.data; |
| | | xAxisData.value = ["00:00"] || syncTimeWithTimeline(); // åå§æ¶é´ç¹ |
| | | |
| | | // è¿ä¸ªresultæ¯ç¨çä¸è¿°çæå¼ï¼ææ¶å
ä¸ç¨ï¼ |
| | | // const result = processData(simStore.rainFalls); |
| | | const result = simStore.rainFalls; |
| | | if (result?.length) { |
| | | rainfallData.value = result; |
| | | if (rainfallData.value.length > 0) { |
| | | data1.value = [rainfallData.value[0].value]; |
| | | data2.value = [rainfallData.value[0].total]; |
| | | updateChart(); // åå§åå¾è¡¨ |
| | | // data1.value = [rainfallData.value[0].intensity]; |
| | | // data2.value = [rainfallData.value[0].total]; |
| | | // é»è®¤åå§ä»0å¼å§ç |
| | | data1.value = [0]; |
| | | data2.value = [0]; |
| | | updateChart(); |
| | | } |
| | | } |
| | | } catch (error) { |
| | |
| | | } |
| | | }; |
| | | |
| | | // 6. å¾è¡¨é
ç½®ï¼ä»
ä¿®æ¹Yè½´é¨åï¼ |
| | | // æ´æ°å¾è¡¨é
ç½® |
| | | const updateChart = () => { |
| | | const option = { |
| | | // >>> ä¿ææ¨åæçææé
ç½® <<< |
| | | animation: false, |
| | | tooltip: { trigger: "axis" }, |
| | | grid: { left: "1%", right: "1%", bottom: "1%", containLabel: true }, |
| | | // // è°æ´gridå¸å±è§£å³Yè½´æ ç¾æ¾ç¤ºé®é¢ |
| | | grid: { |
| | | // left: "1%", // å·¦ä¾§çæ´å¤ç©ºé´ |
| | | // right: "1%", // å³ä¾§çæ´å¤ç©ºé´ |
| | | bottom: "1%", |
| | | containLabel: false, |
| | | }, |
| | | legend: { |
| | | data: ["é鍿°æ®", "累计é¨é"], |
| | | textStyle: { color: "#fff" }, |
| | | right: "10px", |
| | | // æ·»å legendç¹å»äºä»¶å¤ç |
| | | selected: { |
| | | é鍿°æ®: true, |
| | | 累计é¨é: true, |
| | | }, |
| | | }, |
| | | |
| | | // >>> æ¨åæ¥çxAxisé
ç½®ï¼å®å
¨ä¸åï¼ <<< |
| | | xAxis: [ |
| | | { |
| | | type: "category", |
| | | data: xAxisData.value, // æ¨çæ¶é´æ°æ® |
| | | data: xAxisData.value, |
| | | axisLabel: { color: "#fff", rotate: 0 }, |
| | | }, |
| | | ], |
| | | |
| | | // >>> ä¿®æ¹çYè½´é
ç½®ï¼å¨æèå´ï¼ <<< |
| | | yAxis: [ |
| | | { |
| | | // 左侧Yè½´ï¼éé¨ï¼ |
| | | type: "value", |
| | | name: "åä½:mm", |
| | | min: 0, |
| | | ...getDynamicYAxis(data1.value), // 卿èå´ |
| | | ...getDynamicYAxis(data1.value), |
| | | axisLabel: { color: "#fff" }, |
| | | splitLine: { show: false }, |
| | | // ç¡®ä¿åç§°æ¾ç¤ºå®æ´ |
| | | nameTextStyle: { |
| | | color: "#fff", |
| | | }, |
| | | }, |
| | | { |
| | | // å³ä¾§Yè½´ï¼ç´¯è®¡ï¼ |
| | | type: "value", |
| | | name: "åä½:mm", |
| | | min: 0, |
| | | ...getDynamicYAxis(data2.value), // 卿èå´ |
| | | ...getDynamicYAxis(data2.value), |
| | | axisLabel: { color: "#fff" }, |
| | | splitLine: { show: true }, |
| | | nameTextStyle: { |
| | | color: "#fff", |
| | | }, |
| | | }, |
| | | ], |
| | | |
| | | // >>> ä¿ææ¨åæçseriesé
ç½® <<< |
| | | series: [ |
| | | { |
| | | name: "é鍿°æ®", |
| | | type: "bar", |
| | | type: "bar", // æç¡®æå®ç±»å |
| | | data: data1.value, |
| | | itemStyle: { color: "#3268fe" }, |
| | | }, |
| | | { |
| | | name: "累计é¨é", |
| | | type: "line", |
| | | type: "line", // æç¡®æå®ç±»å |
| | | yAxisIndex: 1, |
| | | data: data2.value, |
| | | lineStyle: { color: "#ffb637" }, |
| | |
| | | myChart1.setOption(option, true); |
| | | }; |
| | | |
| | | // 7. æ°æ®æ´æ°ï¼ä¿ææ¨çæ¶é´é»è¾ï¼ |
| | | // æ°æ®æ´æ° |
| | | const updateData = () => { |
| | | if (dataIndex.value < rainfallData.value.length) { |
| | | const item = rainfallData.value[dataIndex.value]; |
| | | data1.value.push(item.value); |
| | | data1.value.push(item.intensity); |
| | | data2.value.push(item.total); |
| | | xAxisData.value.push(syncTimeWithTimeline()); // æ¨çæ¶é´çææ¹æ³ |
| | | xAxisData.value.push(syncTimeWithTimeline()); |
| | | dataIndex.value++; |
| | | updateChart(); // å¨æè°æ´Yè½´ |
| | | updateChart(); |
| | | } else { |
| | | stopUpdating(); |
| | | } |
| | | }; |
| | | |
| | | // 8. æ§å¶æ¹æ³ï¼å®å
¨ä¸åï¼ |
| | | const startUpdating = (interval = 1000) => { |
| | | // æ§å¶æ¹æ³ |
| | | const startUpdating = (interval = 60000) => { |
| | | if (!updateInterval) { |
| | | updateInterval = setInterval(updateData, interval); |
| | | } |
| | | }; |
| | | |
| | | const stopUpdating = () => { |
| | | if (updateInterval) { |
| | | clearInterval(updateInterval); |
| | | updateInterval = null; |
| | | } |
| | | clearInterval(updateInterval); |
| | | updateInterval = null; |
| | | }; |
| | | |
| | | const resetLoading = () => { |
| | |
| | | data2.value = []; |
| | | xAxisData.value = ["00:00"]; |
| | | if (rainfallData.value.length) { |
| | | data1.value = [rainfallData.value[0].value]; |
| | | data1.value = [rainfallData.value[0].intensity]; |
| | | data2.value = [rainfallData.value[0].total]; |
| | | } |
| | | updateChart(); |
| | | }; |
| | | |
| | | // 9. åå§å |
| | | // åå§å |
| | | loadJsonData(); |
| | | |
| | | return { |
| | |
| | | |
| | | const setEcharts2 = () => { |
| | | const chartDom = document.getElementById("echarts2"); |
| | | myChart2 = echarts.init(chartDom); |
| | | const myChart2 = echarts.init(chartDom); |
| | | |
| | | let jsonData = ref([]); |
| | | let data1 = ref([]); |
| | | let data2 = ref([]); |
| | | let xAxisData = ref([]); |
| | | let updateInterval = null; |
| | | // å¾è¡¨æ°æ®ï¼ä¸echarts1ä¿æç¸åç»æï¼ |
| | | let flowData = ref([]); // åå§æ°æ® |
| | | let data1 = ref([]); // 宿¶æµé |
| | | let data2 = ref([]); // 累计æµé |
| | | let xAxisData = ref(["00:00"]); |
| | | let updateInterval = ref(null); |
| | | let dataIndex = ref(0); |
| | | |
| | | // å è½½ JSON æ°æ®ï¼å®å
¨ä¿æåæé»è¾ï¼ |
| | | // å¨æè®¡ç®Yè½´èå´ |
| | | const calculateDynamicYAxis = (dataArray) => { |
| | | const currentMax = Math.max(...dataArray, 1); |
| | | const step = Math.ceil(currentMax / 3); |
| | | return { |
| | | max: step * 3, |
| | | interval: step, |
| | | }; |
| | | }; |
| | | const loadJsonData = async () => { |
| | | try { |
| | | const response = await fetch("/json/äºå®¶è¥¿æ²æé¢ä¸æ°æ®.json"); |
| | | const result = await response.json(); |
| | | if (result && result.data && Array.isArray(result.data)) { |
| | | jsonData.value = result.data; |
| | | xAxisData.value = ["00:00"] || syncTimeWithTimeline(); // ä¿ææ¨çæ¶é´åå§å |
| | | |
| | | if (jsonData.value.length > 0) { |
| | | data1.value.push(jsonData.value[0].value); |
| | | data2.value.push(jsonData.value[0].total); |
| | | if (result?.data?.length) { |
| | | flowData.value = result.data; |
| | | if (flowData.value.length > 0) { |
| | | data1.value = [flowData.value[0].value]; |
| | | data2.value = [flowData.value[0].total]; |
| | | updateChart(); |
| | | } |
| | | updateChart(); // åå§åæ¶èªå¨è®¡ç®Yè½´èå´ |
| | | } |
| | | } catch (error) { |
| | | console.error("æ°æ®å 载失败:", error); |
| | | } |
| | | }; |
| | | |
| | | // å¨æè®¡ç®Yè½´åæ°ï¼æ°å¢æ ¸å¿åè½ï¼ |
| | | const calculateDynamicYAxis = (dataArray) => { |
| | | const currentMax = Math.max(...dataArray, 1); // ç¡®ä¿æå°æ¾ç¤ºèå´ |
| | | const step = Math.ceil(currentMax / 3); |
| | | return { |
| | | max: step * 3, |
| | | interval: step |
| | | }; |
| | | }; |
| | | |
| | | // æ´æ°å¾è¡¨é
ç½®ï¼ä»
ä¿®æ¹Yè½´é¨åï¼ |
| | | // å¾è¡¨é
ç½®ï¼ä¸echarts1ä¿æç¸åç»æåæ ·å¼ï¼ |
| | | const updateChart = () => { |
| | | const option = { |
| | | // >>> ä¿ææ¨åæçææé
ç½® <<< |
| | | animation: false, |
| | | tooltip: { |
| | | trigger: "axis", |
| | | axisPointer: { type: "cross" } |
| | | axisPointer: { type: "cross" }, |
| | | }, |
| | | grid: { |
| | | left: "1%", |
| | | right: "1%", |
| | | // æ³¨éæ¯å 为 yè½´ä¸çåä½è¢«è¦çæäº |
| | | // left: "1%", |
| | | // right: "1%", |
| | | bottom: "1%", |
| | | containLabel: true |
| | | containLabel: false, |
| | | }, |
| | | legend: { |
| | | data: ["宿¶æµé", "累计æµé"], |
| | | textStyle: { color: "#fff" }, |
| | | right: "10px" |
| | | right: "10px", |
| | | selected: { |
| | | 宿¶æµé: true, |
| | | 累计æµé: true, |
| | | }, |
| | | }, |
| | | |
| | | // >>> æ¨åæ¥çxAxisé
ç½®ï¼å®å
¨ä¸åï¼ <<< |
| | | xAxis: [{ |
| | | type: "category", |
| | | data: xAxisData.value, |
| | | axisLabel: { color: "#fff", rotate: 0 } |
| | | }], |
| | | |
| | | // >>> ä¿®æ¹çYè½´é
ç½®ï¼å¨æèå´ï¼ <<< |
| | | xAxis: [ |
| | | { |
| | | type: "category", |
| | | data: xAxisData.value, |
| | | axisLabel: { |
| | | color: "#fff", |
| | | rotate: 0, |
| | | }, |
| | | }, |
| | | ], |
| | | yAxis: [ |
| | | { // 左侧Yè½´ï¼å®æ¶æµéï¼ |
| | | { |
| | | type: "value", |
| | | name: "åä½:m³/min", |
| | | min: 0, |
| | | ...calculateDynamicYAxis(data1.value), |
| | | axisLabel: { |
| | | formatter: "{value}", |
| | | color: "#fff", |
| | | align: "right" |
| | | }, |
| | | axisLabel: { color: "#fff" }, |
| | | splitLine: { show: false }, |
| | | nameTextStyle: { |
| | | padding: [0, 0, 0, 20], |
| | | color: "#fff" |
| | | color: "#fff", |
| | | }, |
| | | splitLine: { show: false } |
| | | }, |
| | | { // å³ä¾§Yè½´ï¼ç´¯è®¡æµéï¼ |
| | | { |
| | | type: "value", |
| | | name: "åä½:m³", |
| | | min: 0, |
| | | ...calculateDynamicYAxis(data2.value), |
| | | axisLabel: { |
| | | formatter: "{value}", |
| | | color: "#fff", |
| | | align: "left" |
| | | }, |
| | | axisLabel: { color: "#fff" }, |
| | | splitLine: { show: true }, |
| | | nameTextStyle: { |
| | | padding: [0, 10, 0, 0], |
| | | color: "#fff" |
| | | color: "#fff", |
| | | }, |
| | | splitLine: { show: true } |
| | | } |
| | | }, |
| | | ], |
| | | |
| | | // >>> ä¿ææ¨åæçseriesé
ç½® <<< |
| | | series: [ |
| | | { |
| | | name: "宿¶æµé", |
| | | type: "bar", |
| | | tooltip: { valueFormatter: value => value + " m³/min" }, |
| | | data: data1.value, |
| | | itemStyle: { color: "blue" } |
| | | itemStyle: { |
| | | color: "#3268fe", |
| | | }, |
| | | }, |
| | | { |
| | | name: "累计æµé", |
| | | type: "line", |
| | | yAxisIndex: 1, |
| | | tooltip: { valueFormatter: value => value + " m³" }, |
| | | data: data2.value, |
| | | lineStyle: { color: "#ffb637" } |
| | | } |
| | | ] |
| | | lineStyle: { |
| | | color: "#ffb637", |
| | | }, |
| | | }, |
| | | ], |
| | | }; |
| | | myChart2.setOption(option, true); // 强å¶å·æ° |
| | | myChart2.setOption(option, true); |
| | | }; |
| | | |
| | | // æ°æ®æ´æ°ï¼ä¿ææ¨çæ¶é´é»è¾ï¼ |
| | | // æ°æ®æ´æ°ï¼ä¸echarts1ç¸åé»è¾ï¼ |
| | | const updateData = () => { |
| | | if (dataIndex.value < jsonData.value.length) { |
| | | const newItem = jsonData.value[dataIndex.value]; |
| | | data1.value.push(newItem.value); |
| | | data2.value.push(newItem.total); |
| | | xAxisData.value.push(syncTimeWithTimeline()); // æ¨çæ¶é´çææ¹æ³ |
| | | dataIndex.value += 2; // ä¿ææ¨çç´¢å¼æ¥é¿ |
| | | updateChart(); // èªå¨è°æ´Yè½´ |
| | | if (dataIndex.value < flowData.value.length) { |
| | | const item = flowData.value[dataIndex.value]; |
| | | data1.value.push(item.value); |
| | | data2.value.push(item.total); |
| | | xAxisData.value.push(syncTimeWithTimeline()); |
| | | dataIndex.value++; |
| | | updateChart(); |
| | | } else { |
| | | stopUpdating(); |
| | | } |
| | | }; |
| | | |
| | | // æ§å¶æ¹æ³ï¼å®å
¨ä¸åï¼ |
| | | // æ§å¶æ¹æ³ï¼ä¸echarts1å®å
¨ä¸è´ï¼ |
| | | const startUpdating = (interval = 1000) => { |
| | | if (!updateInterval) { |
| | | updateInterval = setInterval(updateData, interval); |
| | |
| | | data1.value = []; |
| | | data2.value = []; |
| | | xAxisData.value = ["00:00"]; |
| | | if (jsonData.value.length) { |
| | | data1.value.push(jsonData.value[0].value); |
| | | data2.value.push(jsonData.value[0].total); |
| | | if (flowData.value.length > 0) { |
| | | data1.value = [flowData.value[0].value]; |
| | | data2.value = [flowData.value[0].total]; |
| | | } |
| | | updateChart(); |
| | | }; |
| | |
| | | myChart2, |
| | | startUpdating, |
| | | stopUpdating, |
| | | resetLoading |
| | | resetLoading, |
| | | }; |
| | | }; |
| | | |
| | |
| | | <template> |
| | | <div class="listCard"> |
| | | <!-- <div>æ¹æ¡æ°é: {{ simStore.schemCard.length }}</div> --> |
| | | <el-card v-if="!schemeInfoShow" v-for="(item, key) in schemeList" :key="key" |
| | | :class="{ selected: selectedId === item.id }" @click="selectScheme(item.id)"> |
| | | <el-card |
| | | v-if="!schemeInfoShow" |
| | | v-for="(item, key) in schemeList" |
| | | :key="key" |
| | | :class="{ selected: selectedId === item.id }" |
| | | @click="selectScheme(item.id)" |
| | | > |
| | | <div> |
| | | <p>æ¹æ¡åç§° : {{ item.name }}</p> |
| | | <p>å建æ¶é´ : {{ formatTime(item.createTime) }}</p> |
| | |
| | | </div> |
| | | <div class="cardMenu"> |
| | | <div style="float: right; margin-top: 3px"> |
| | | <el-button size="small" @click="setSchemClick(item)">æ¹æ¡è¯¦æ
</el-button> |
| | | <el-button size="small" @click="setSchemClick(item)" |
| | | >æ¹æ¡è¯¦æ
</el-button |
| | | > |
| | | <el-button size="small" @click="startPlay(item)">è¿å
¥æ¨¡æ</el-button> |
| | | <!-- :disabled="item.taskStatus !== 2" --> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | <schemeInfo v-if="schemeInfoShow" :selectedScheme="currentScheme" @back="handleBack" /> |
| | | <schemeInfo |
| | | v-if="schemeInfoShow" |
| | | :selectedScheme="currentScheme" |
| | | @back="handleBack" |
| | | /> |
| | | </div> |
| | | <Message @close="close" class="mess" v-show="messageShow" :mesData="mesData" /> |
| | | <Message |
| | | @close="close" |
| | | class="mess" |
| | | v-show="messageShow" |
| | | :mesData="mesData" |
| | | /> |
| | | </template> |
| | | |
| | | <script setup> |
| | |
| | | // alert("å½åæ¹æ¡å°æªå®æï¼æ æ³è¿å
¥æ¨¡æï¼"); |
| | | // return; |
| | | // } |
| | | simStore.setSelectedScheme(item) |
| | | simStore.setSelectedScheme(item); |
| | | |
| | | currentScheme.value = item; |
| | | schemeInfoShow.value = true; |
| | |
| | | |
| | | // 注åäºä»¶çå¬å¨ |
| | | EventBus.on("hide-schemeInfo", handleHideSchemeInfo); |
| | | |
| | | |
| | | /////////////////////// è°ç¨æ¥å£ï¼ä½¿ç¨æ¶æå¼ï¼ /////////////////////// |
| | | import { getRegionData, getSimData, deleteSimData } from "@/api/trApi.js"; |
| | |
| | | }); |
| | | return; |
| | | } |
| | | const selectedScheme = schemeList.value.find((item) => item.id === selectedId.value); |
| | | const selectedScheme = schemeList.value.find( |
| | | (item) => item.id === selectedId.value |
| | | ); |
| | | const schemeName = selectedScheme ? selectedScheme.name : "æªç¥æ¹æ¡"; |
| | | ElMessageBox.confirm( |
| | | `ç¡®å®è¦å 餿¹æ¡ "${schemeName}" å?`, |
| | | "å 餿¹æ¡", |
| | | { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | } |
| | | ) |
| | | ElMessageBox.confirm(`ç¡®å®è¦å 餿¹æ¡ "${schemeName}" å?`, "å 餿¹æ¡", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | deleteSimData(selectedId.value).then((res) => { |
| | | getScheme(); |
| | |
| | | message: `æ¹æ¡ "${schemeName}" å 餿å`, |
| | | }); |
| | | }) |
| | | .catch(() => { |
| | | }); |
| | | .catch(() => {}); |
| | | }; |
| | | /////////////////////// è°ç¨æ¥å£ç»æ /////////////////////// |
| | | onUnmounted(() => { |
| | |
| | | </script> |
| | | |
| | | <style lang="less" scoped> |
| | | @import url("../../assets/css/infobox.css"); |
| | | .layer-tree { |
| | | background: url("@/assets/img/tools/plotting_new.png"); |
| | | width: 200px; |
| | |
| | | |
| | | // ä¿åæ¹æ¡å¼¹çª |
| | | const addSimCheme = async (forms) => { |
| | | // 表åéªè¯ |
| | | if (!validateForm(forms)) { |
| | | throw new Error('表åéªè¯æªéè¿'); // æåºé误ï¼é»æ¢ç»§ç»æ§è¡ |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | return { |
| | | selectTab, |
| | | isLoading, |
| | |
| | | const schemCard = ref([]) |
| | | const backToHome = ref(false) |
| | | const selectedScheme = ref(null) |
| | | const rainFalls = ref() |
| | | const setSelectedScheme = (scheme) => { |
| | | selectedScheme.value = scheme |
| | | rainFalls.value = JSON.parse(scheme.data).rainfalls |
| | | console.log(rainFalls.value, 'shceme') |
| | | } |
| | | const clearSelectedScheme = () => { |
| | | selectedScheme.value = null |
| | |
| | | showDangerAssess, |
| | | schemCard, |
| | | backToHome, |
| | | rainFalls, |
| | | |
| | | // æ¹æ¡ç¸å
³æ¹æ³ |
| | | setSchemCard, |
| | |
| | | éç¹åºå仿çï¼10mç²¾åº¦ï¼ |
| | | </div> |
| | | <div class="forms"> |
| | | <el-form :model="forms" label-width="auto" style="max-width: 600px"> |
| | | <el-form |
| | | :rules="rules" |
| | | :model="forms" |
| | | label-width="auto" |
| | | style="max-width: 600px" |
| | | > |
| | | <el-form-item label="æ¹æ¡åç§°:"> |
| | | <el-input |
| | | v-model="forms.name" |
| | |
| | | }; |
| | | |
| | | // å¼å§æ¨¡æ |
| | | function startPlay() { |
| | | async function startPlay() { |
| | | // å¼å§æ¨¡æåéè¦å
ä¿åæ¹æ¡ |
| | | await simStore.addSimCheme(forms); |
| | | EventBus.emit("close-selectArea"); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | |
| | | <template> |
| | | <div class="history-simulation"> |
| | | <div class="left-top"> |
| | | <span>å岿¨¡æ</span> |
| | | <span class="clickable-text" @click="toggleDetails">{{ |
| | | isCollapsed ? "å±å¼" : "æ¶èµ·" |
| | | }}</span> |
| | | </div> |
| | | <div class="details" :class="{ hidden: isCollapsed }"> |
| | | <div class="input-group"> |
| | | <div class="input-item"> |
| | | <label>åå²é¨æ
:</label> |
| | | <div class="left-top"> |
| | | <span>å岿¨¡æ</span> |
| | | <span class="clickable-text" @click="toggleDetails">{{ |
| | | isCollapsed ? "å±å¼" : "æ¶èµ·" |
| | | }}</span> |
| | | </div> |
| | | <el-form |
| | | ref="historySimForm" |
| | | class="history-simulation" |
| | | :model="formData" |
| | | label-width="auto" |
| | | style="max-width: 600px" |
| | | > |
| | | <el-collapse-transition style="margin-top: 10px"> |
| | | <div v-show="!isCollapsed"> |
| | | <el-form-item label="åå²é¨æ
:" prop="history"> |
| | | <el-select |
| | | v-model="rainfallHistory" |
| | | v-model="formData.history" |
| | | placeholder="è¯·éæ©" |
| | | popper-class="mySelectStyle" |
| | | > |
| | |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | | ></el-option> |
| | | /> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="input-group"> |
| | | <div class="input-item"> |
| | | <label>æ¹æ¡åç§°:</label> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æ¹æ¡åç§°:" prop="name"> |
| | | <el-input v-model="formData.name" type="text" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="é鍿»é:" prop="rainfall"> |
| | | <el-input |
| | | v-model="schemeName" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>é鍿»é:</label> |
| | | <el-input |
| | | v-model="totalRainfall" |
| | | v-model="formData.rainfall" |
| | | type="number" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | <span>mm</span> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>éé¨å¼ºåº¦:</label> |
| | | > |
| | | <template #append>mm</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="éé¨å¼ºåº¦:" prop="intensity"> |
| | | <el-input |
| | | v-model="rainfallIntensity" |
| | | v-model="formData.intensity" |
| | | type="number" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | <span>mm/h</span> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>éæ©æ¶é´:</label> |
| | | > |
| | | <template #append>mm/h</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="éæ©æ¶é´:" prop="hours"> |
| | | <el-date-picker |
| | | v-model="hours" |
| | | v-model="formData.hours" |
| | | type="datetimerange" |
| | | start-placeholder="å¼å§æ¶é´" |
| | | end-placeholder="ç»ææ¶é´" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | date-format="YYYY/MM/DD ddd" |
| | | time-format="A hh:mm:ss" |
| | | @change="change" |
| | | @change="handleTimeChange" |
| | | /> |
| | | <span>h</span> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>é鍿¶é¿:</label> |
| | | <el-input |
| | | disabled |
| | | v-model="rainfallDuration" |
| | | type="number" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | <span>h</span> |
| | | </div> |
| | | </div> |
| | | <!-- <div> |
| | | <label>仿çåæ°:</label> |
| | | <div style="width: 100%; height: 60px; background-color: #fff"></div> |
| | | </div> --> |
| | | </div> |
| | | <div class="buttons"> |
| | | <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> |
| | | <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> |
| | | </div> |
| | | </el-form-item> |
| | | |
| | | <!-- ä¿åæ¹æ¡å¯¹è¯æ¡ --> |
| | | <!-- <el-dialog |
| | | v-model="saveDialogVisible" |
| | | title="ä¿åæ¹æ¡" |
| | | width="50%" |
| | | :before-close="handleClose" |
| | | custom-class="custom-dialog" |
| | | > |
| | | <div class="dialog-content"> |
| | | <p><strong>æ¹æ¡åç§°ï¼</strong>{{ schemeName }}</p> |
| | | <p><strong>æééç¹æ²ï¼</strong>{{ props.selectedArea }}</p> |
| | | <p><strong>模æç±»åï¼</strong>å岿¨¡æ</p> |
| | | <p><strong>åå²é¨æ
ï¼</strong>{{ selectedRainfallName }}</p> |
| | | <p><strong>é鍿»éï¼</strong>{{ totalRainfall }} mm</p> |
| | | <p><strong>éé¨å¼ºåº¦ï¼</strong>{{ rainfallIntensity }} mm/h</p> |
| | | <p><strong>é鍿¶é¿ï¼</strong>{{ rainfallDuration }} h</p> |
| | | <el-form-item label="é鍿¶é¿:" prop="duration"> |
| | | <el-input |
| | | v-model="formData.duration" |
| | | type="number" |
| | | placeholder="èªå¨è®¡ç®" |
| | | disabled |
| | | > |
| | | <template #append>h</template> |
| | | </el-input> |
| | | </el-form-item> |
| | | </div> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="saveDialogVisible = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="confirmSave">ç¡®å®ä¿å</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> --> |
| | | </el-collapse-transition> |
| | | </el-form> |
| | | <div class="buttons"> |
| | | <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> |
| | | <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, computed, inject } from "vue"; |
| | | import { ElMessage, ElMessageBox } from "element-plus"; |
| | | import { ref, computed, reactive, inject } from "vue"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { initeWaterPrimitiveView } from "@/utils/water"; |
| | | import { useSimStore } from "@/store/simulation.js"; // å¼å
¥ Store |
| | | import { useSimStore } from "@/store/simulation.js"; |
| | | import { getRainfallData } from "@/api/hpApi.js"; |
| | | import { SimAPIStore } from "@/store/simAPI"; |
| | | import { EventBus } from "@/eventBus"; // å¼å
¥äºä»¶æ»çº¿ |
| | | import { EventBus } from "@/eventBus"; |
| | | |
| | | // è·å Store å®ä¾ |
| | | const simStore = SimAPIStore(); |
| | | |
| | | // æµè¯è·åé¨éæ°æ® |
| | | // const getRainData = () => { |
| | | // getRainfallData() |
| | | // .then((a) => { |
| | | // console.log(a, 'å®å¾è·åé¨éæ°æ®'); |
| | | // }) |
| | | // }; |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | |
| | | }, |
| | | }); |
| | | |
| | | // æ°æ®ç»å® |
| | | const rainfallHistory = ref("XXå¹´50mméé¨"); // é»è®¤éä¸ç¬¬äºé¡¹ |
| | | const totalRainfall = ref(50); // é鍿»é |
| | | const schemeName = ref("æ¹æ¡åç§°"); // æ¹æ¡åç§° |
| | | const rainfallIntensity = ref(70); // éé¨å¼ºåº¦ |
| | | const hours = ref(null); |
| | | const rainfallDuration = ref(null); // é鍿¶é¿ |
| | | const isCollapsed = ref(false); // æ§å¶è¯¦æ
çå±å¼/æ¶èµ·ç¶æ |
| | | const saveDialogVisible = ref(false); // æ§å¶ä¿åæ¹æ¡å¯¹è¯æ¡çæ¾ç¤ºç¶æ |
| | | // è¡¨åæ°æ® |
| | | const formData = reactive({ |
| | | history: "XXå¹´50mméé¨", |
| | | name: "æ¹æ¡åç§°", |
| | | rainfall: 50, |
| | | intensity: 70, |
| | | hours: null, |
| | | duration: null, |
| | | type: 3, |
| | | }); |
| | | |
| | | // æ§å¶è¯¦æ
çå±å¼/æ¶èµ·ç¶æ |
| | | const isCollapsed = ref(false); |
| | | |
| | | // åå²é¨æ
æ°æ® |
| | | const HistoricalRainData = [ |
| | |
| | | // è·åå½åéä¸çåå²é¨æ
åç§° |
| | | const selectedRainfallName = computed(() => { |
| | | const selected = HistoricalRainData.find( |
| | | (item) => item.name === rainfallHistory.value |
| | | (item) => item.name === formData.history |
| | | ); |
| | | return selected ? selected.name : ""; |
| | | }); |
| | |
| | | |
| | | const { calculateHoursDifference } = inject("calculateHours"); |
| | | |
| | | const change = (val) => { |
| | | rainfallDuration.value = calculateHoursDifference(val); |
| | | const handleTimeChange = (val) => { |
| | | formData.duration = calculateHoursDifference(val); |
| | | }; |
| | | |
| | | const resetForm = () => { |
| | | formData.name = "æ¹æ¡åç§°"; |
| | | formData.rainfall = 50; |
| | | formData.intensity = 70; |
| | | formData.hours = null; |
| | | formData.duration = null; |
| | | }; |
| | | |
| | | // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const openSaveDialog = async () => { |
| | | const forms = { |
| | | name: schemeName.value, |
| | | geom: props.selectedArea, |
| | | type: 3, |
| | | rainfall: totalRainfall.value, |
| | | intensity: rainfallIntensity.value, |
| | | duration: rainfallDuration.value, |
| | | history: rainfallHistory.value, |
| | | }; |
| | | await simStore.addSimCheme(forms); |
| | | EventBus.emit("close-selectArea"); |
| | | }; |
| | | |
| | | // å
³éä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const handleClose = () => { |
| | | saveDialogVisible.value = false; |
| | | }; |
| | | async function openSaveDialog() { |
| | | try { |
| | | formData.geom = props.selectedArea; |
| | | await simStore.addSimCheme(formData); |
| | | resetForm(); |
| | | EventBus.emit("close-selectArea"); |
| | | ElMessage.success("æ¹æ¡ä¿åæå"); |
| | | } catch (error) { |
| | | // ElMessage.error("æ¹æ¡ä¿å失败"); |
| | | console.log(error); |
| | | } |
| | | } |
| | | |
| | | // å¼å§æ¨¡æ |
| | | function startPlay() { |
| | | console.log("å¼å§æ¨¡ææé®è¢«ç¹å»"); |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | async function startPlay() { |
| | | try { |
| | | formData.geom = props.selectedArea; |
| | | await simStore.addSimCheme(formData); |
| | | EventBus.emit("close-selectArea"); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | ElMessage.success("模æå¼å§"); |
| | | } catch (error) { |
| | | ElMessage.error("模æå¯å¨å¤±è´¥"); |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .history-simulation { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .details { |
| | | margin-top: 10px; |
| | | transition: height 0.3s ease, opacity 0.3s ease; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .hidden { |
| | | height: 0; |
| | | opacity: 0; |
| | | padding: 10px 10px 0px 0px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .buttons { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | gap: 10px; |
| | | justify-content: space-evenly; |
| | | } |
| | | |
| | | .input-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | } |
| | | |
| | | .input-item { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | label { |
| | | text-align: left; |
| | | white-space: nowrap; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .el-input { |
| | | flex: 4; |
| | | } |
| | | |
| | | span { |
| | | flex: 1; |
| | | text-align: left; |
| | | } |
| | | |
| | | .el-select { |
| | | flex: 4; |
| | | text-align: left; |
| | | margin-bottom: 10px; |
| | | justify-content: flex-end; |
| | | padding-right: 10px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .clickable-text { |
| | |
| | | color: #61f7d4; |
| | | } |
| | | |
| | | /* èªå®ä¹ Dialog ç z-index */ |
| | | .custom-dialog { |
| | | z-index: 5000 !important; |
| | | /* ç¡®ä¿å¯¹è¯æ¡è¦çå
¶ä»å
ç´ */ |
| | | :deep(.el-form-item__content) { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | :deep(.el-input) { |
| | | flex: 1; |
| | | } |
| | | |
| | | :deep(.el-select) { |
| | | width: 100%; |
| | | } |
| | | :deep(.el-input-group__append), |
| | | :deep(.el-input-group__prepend) { |
| | | background-color: #084b42; |
| | | color: #fff; |
| | | } |
| | | :deep(.el-form-item__label) { |
| | | color: #61f7d4 !important; |
| | | } |
| | | </style> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="æ¹æ¡åç§°:"> |
| | | <el-input |
| | | v-model="forms.schemeName" |
| | | v-model="forms.name" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | |
| | | > |
| | | </el-form-item> |
| | | <el-form-item label="éé¨å¼ºåº¦:"> |
| | | <el-input |
| | | v-model="forms.rainfallIntensity" |
| | | type="number" |
| | | placeholder="请è¾å
¥" |
| | | > |
| | | <el-input v-model="forms.intensity" type="number" placeholder="请è¾å
¥"> |
| | | <template #append>mm/h</template></el-input |
| | | > |
| | | </el-form-item> |
| | |
| | | import { getRainfallData } from "@/api/hpApi"; |
| | | import { EventBus } from "@/eventBus"; // å¼å
¥äºä»¶æ»çº¿ |
| | | |
| | | |
| | | onMounted(() => { |
| | | getRain(); |
| | | }); |
| | | |
| | | // è·å Store å®ä¾ |
| | | const simStore = SimAPIStore(); |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | function startPlay() { |
| | | console.log("å¼å§æ¨¡ææé®è¢«ç¹å»"); |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | |
| | | // å®ä¹ Props |
| | | const props = defineProps({ |
| | |
| | | |
| | | const forms = reactive({ |
| | | rainfall: 50, |
| | | schemeName: "", |
| | | rainfallIntensity: 70, |
| | | name: "", |
| | | intensity: 70, |
| | | duration: null, |
| | | prediction: "éé¨åºæ¬¡", |
| | | mode: "æ£æåå¸", |
| | | showRainFall: "", |
| | | hours: null, |
| | | type: 1, |
| | | geom: null, // å
设置为 null æè
å
¶ä»é»è®¤å¼, |
| | | }); |
| | | |
| | | // éé¨åºæ¬¡éæ© |
| | |
| | | forms.duration = calculateHoursDifference(val); |
| | | }; |
| | | |
| | | const resetForm = () => { |
| | | forms.rainfall = 50; |
| | | forms.name = ""; |
| | | forms.intensity = 70; |
| | | forms.duration = null; |
| | | forms.prediction = "éé¨åºæ¬¡"; |
| | | forms.mode = "æ£æåå¸"; |
| | | forms.showRainFall = ""; |
| | | forms.hours = null; |
| | | forms.type = 1; |
| | | forms.geom = null; // å
设置为 null æè
å
¶ä»é»è®¤å¼, |
| | | }; |
| | | |
| | | // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const openSaveDialog = async () => { |
| | | const params = { |
| | | name: forms.schemeName, |
| | | geom: props.selectedArea, |
| | | type: 1, |
| | | rainfall: forms.rainfall, |
| | | duration: forms.duration, |
| | | intensity: forms.rainfallIntensity, |
| | | mode: forms.mode, |
| | | prediction: forms.prediction, |
| | | }; |
| | | await simStore.addSimCheme(params); |
| | | EventBus.emit("close-selectArea"); |
| | | |
| | | // å¨ setup å
鍿´æ° geom çå¼ |
| | | try { |
| | | forms.geom = props.selectedArea; |
| | | await simStore.addSimCheme(forms); |
| | | resetForm(); |
| | | EventBus.emit("close-selectArea"); |
| | | } catch (err) {} |
| | | }; |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | // å¼å§æ¨¡æ |
| | | async function startPlay() { |
| | | forms.geom = props.selectedArea; |
| | | await simStore.addSimCheme(forms); |
| | | EventBus.emit("close-selectArea"); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | |
| | | // æå¼æ¹æ¡ |
| | | const openPlan = () => { |
| | | // getRain(); |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="real-time-simulation"> |
| | | <div class="left-top"> |
| | | <span>宿¶æ¨¡æ</span> |
| | | <span class="clickable-text" @click="toggleDetails">{{ |
| | | isCollapsed ? "å±å¼" : "æ¶èµ·" |
| | | }}</span> |
| | | </div> |
| | | <div class="details" :class="{ hidden: isCollapsed }"> |
| | | <div class="input-group"> |
| | | <div class="input-item"> |
| | | <label>æ¹æ¡åç§°:</label> |
| | | <el-input |
| | | v-model="schemeName" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>é¨éæ°æ®:</label> |
| | | <el-select |
| | | v-model="selectedRainfall" |
| | | placeholder="è¯·éæ©" |
| | | popper-class="mySelectStyle" |
| | | > |
| | | <el-option |
| | | v-for="item in rainfallData" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="table-container"> |
| | | <div |
| | | class="table-row" |
| | | v-for="(item, index) in filteredTableData" |
| | | :key="index" |
| | | > |
| | | <input type="checkbox" v-model="item.selected" /> |
| | | <span>{{ item.name }}</span> |
| | | </div> |
| | | </div> |
| | | <!-- <div style="margin-top: 10px;"> |
| | | <label>仿çåæ°:</label> |
| | | <div style="width: 100%; height: 60px; background-color: #fff;"></div> |
| | | </div> --> |
| | | </div> |
| | | <div class="buttons"> |
| | | <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> |
| | | <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> |
| | | <el-button type="success" @click="futurePredictions">æªæ¥é¢æµ</el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, watch, defineProps, computed, inject } from "vue"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { initeWaterPrimitiveView } from "@/utils/water"; |
| | | import { SimAPIStore } from "@/store/simAPI"; |
| | | import { EventBus } from "@/eventBus"; // å¼å
¥äºä»¶æ»çº¿ |
| | | |
| | | // è·å Store å®ä¾ |
| | | const simStore = SimAPIStore(); |
| | | |
| | | // è·å Store å®ä¾ |
| | | const schemeName = ref("æ¹æ¡åç§°"); // æ¹æ¡åç§° |
| | | |
| | | // å·¥å
·å½æ°ï¼æ·±æ·è´å¹¶è®¾ç½®é»è®¤éä¸ç¶æ |
| | | function deepCloneAndSetSelected(data) { |
| | | const newData = {}; |
| | | for (const key in data) { |
| | | newData[key] = data[key].map((item) => ({ ...item, selected: true })); |
| | | } |
| | | return newData; |
| | | } |
| | | |
| | | // æ¥æ¶ç¶ç»ä»¶ä¼ éç props |
| | | const props = defineProps({ |
| | | selectedArea: { |
| | | type: Object, |
| | | required: true, |
| | | }, |
| | | }); |
| | | |
| | | // åç»ä»¶å
é¨ç¶æ |
| | | const rainfallData = ref([]); // é¨éæ°æ® |
| | | const tableData = ref({}); // è¡¨æ ¼æ°æ®ï¼æé¨éæ°æ®åç»ï¼ |
| | | const selectedRainfall = ref(""); // å½åéä¸çé¨éæ°æ® |
| | | const isCollapsed = ref(false); // æ§å¶å±å¼/æ¶èµ·ç¶æ |
| | | const saveDialogVisible = ref(false); // æ§å¶ä¿åæ¹æ¡å¯¹è¯æ¡æ¾ç¤ºç¶æ |
| | | |
| | | // 模æä¸ååºåçæ°æ® |
| | | const areaDataMap = { |
| | | åè¡æ²: { |
| | | rainfallData: [ |
| | | { id: "1", name: "æ°è±¡å®æ¶æ°æ® - åè¡æ²" }, |
| | | { id: "2", name: "é¨éè®¡å®æ¶æ°æ® - åè¡æ²" }, |
| | | ], |
| | | tableData: { |
| | | 1: [ |
| | | { id: "001", name: "åè¡æ²æ°è±¡ç«001" }, |
| | | { id: "002", name: "åè¡æ²æ°è±¡ç«002" }, |
| | | ], |
| | | 2: [ |
| | | { id: "003", name: "åè¡æ²é¨é计003" }, |
| | | { id: "004", name: "åè¡æ²é¨é计004" }, |
| | | ], |
| | | }, |
| | | }, |
| | | 鱼水æ´åæ²: { |
| | | rainfallData: [ |
| | | { id: "1", name: "æ°è±¡å®æ¶æ°æ® - 鱼水æ´åæ²" }, |
| | | { id: "2", name: "é¨éè®¡å®æ¶æ°æ® - 鱼水æ´åæ²" }, |
| | | ], |
| | | tableData: { |
| | | 1: [ |
| | | { id: "005", name: "鱼水æ´åæ²æ°è±¡ç«005" }, |
| | | { id: "006", name: "鱼水æ´åæ²æ°è±¡ç«006" }, |
| | | ], |
| | | 2: [ |
| | | { id: "007", name: "鱼水æ´åæ²é¨é计007" }, |
| | | { id: "008", name: "鱼水æ´åæ²é¨é计008" }, |
| | | ], |
| | | }, |
| | | }, |
| | | äºå®¶è¥¿æ²: { |
| | | rainfallData: [ |
| | | { id: "1", name: "æ°è±¡å®æ¶æ°æ® - äºå®¶è¥¿æ²" }, |
| | | { id: "2", name: "é¨éè®¡å®æ¶æ°æ® - äºå®¶è¥¿æ²" }, |
| | | ], |
| | | tableData: { |
| | | 1: [ |
| | | { id: "009", name: "äºå®¶è¥¿æ²æ°è±¡ç«009" }, |
| | | { id: "010", name: "äºå®¶è¥¿æ²æ°è±¡ç«010" }, |
| | | ], |
| | | 2: [ |
| | | { id: "011", name: "äºå®¶è¥¿æ²é¨é计011" }, |
| | | { id: "012", name: "äºå®¶è¥¿æ²é¨é计012" }, |
| | | ], |
| | | }, |
| | | }, |
| | | }; |
| | | |
| | | // æ ¹æ® selectedArea æ´æ°æ°æ® |
| | | watch( |
| | | () => props.selectedArea, |
| | | (newArea) => { |
| | | if (areaDataMap[newArea]) { |
| | | rainfallData.value = areaDataMap[newArea].rainfallData; |
| | | // ä½¿ç¨æ·±æ·è´è®¾ç½®é»è®¤éä¸ç¶æ |
| | | tableData.value = deepCloneAndSetSelected(areaDataMap[newArea].tableData); |
| | | selectedRainfall.value = ""; // æ¸
空éä¸çé¨éæ°æ® |
| | | } else { |
| | | rainfallData.value = []; |
| | | tableData.value = {}; |
| | | selectedRainfall.value = ""; |
| | | } |
| | | }, |
| | | { immediate: true } // ç«å³æ§è¡ä¸æ¬¡ï¼ç¡®ä¿åå§æ°æ®æ£ç¡® |
| | | ); |
| | | |
| | | // å¨æè®¡ç®è¡¨æ ¼æ°æ® |
| | | const filteredTableData = computed(() => { |
| | | return selectedRainfall.value && tableData.value[selectedRainfall.value] |
| | | ? tableData.value[selectedRainfall.value] |
| | | : []; |
| | | }); |
| | | |
| | | // è·åå½åéä¸çé¨éæ°æ®åç§° |
| | | const selectedRainfallName = computed(() => { |
| | | const selected = rainfallData.value.find( |
| | | (item) => item.id === selectedRainfall.value |
| | | ); |
| | | return selected ? selected.name : ""; |
| | | }); |
| | | |
| | | // è·åå½åéä¸ç设å¤ä¿¡æ¯ |
| | | const selectedDevices = computed(() => { |
| | | return filteredTableData.value.filter((item) => item.selected); |
| | | }); |
| | | |
| | | // å°è£
æé 表åçæ¹æ³ |
| | | const buildSchemeForm = () => { |
| | | return { |
| | | name: schemeName.value, |
| | | geom: props.selectedArea, |
| | | type: 2, |
| | | gauges: [ |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计1", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计2", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | ], |
| | | }; |
| | | }; |
| | | |
| | | // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const openSaveDialog = async () => { |
| | | await simStore.addSimCheme(buildSchemeForm()); |
| | | EventBus.emit("close-selectArea"); |
| | | }; |
| | | |
| | | // å
³éä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const handleClose = () => { |
| | | saveDialogVisible.value = false; |
| | | }; |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | async function startPlay() { |
| | | const selectedItems = filteredTableData.value.filter((item) => item.selected); |
| | | if (selectedItems.length > 0) { |
| | | console.log( |
| | | "éä¸ç项ï¼", |
| | | selectedItems.map((item) => item.name) |
| | | ); |
| | | } else { |
| | | console.log("æªéä¸ä»»ä½é¡¹"); |
| | | } |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | console.log("å½åéä¸çé¨éæ°æ®ï¼", selectedRainfall.value); |
| | | // å¼å§æ¨¡æåéè¦å
ä¿åæ¹æ¡ |
| | | await simStore.addSimCheme(buildSchemeForm()); |
| | | EventBus.emit("close-selectArea"); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | |
| | | const toggleDetails = () => { |
| | | isCollapsed.value = !isCollapsed.value; |
| | | }; |
| | | |
| | | const futurePredictions = () => { |
| | | console.log("æªæ¥é¢æµæé®è¢«ç¹å»"); |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .custom-dialog { |
| | | z-index: 3000 !important; |
| | | } |
| | | .real-time-simulation { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .clickable-text { |
| | | margin-left: 160px; |
| | | cursor: pointer; |
| | | font-size: 14px; |
| | | color: #61f7d4; |
| | | } |
| | | |
| | | .details { |
| | | margin-top: 10px; |
| | | transition: height 0.3s ease, opacity 0.3s ease; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .hidden { |
| | | height: 0; |
| | | opacity: 0; |
| | | } |
| | | |
| | | .input-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | padding-right: 10px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .input-item { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | label { |
| | | text-align: left; |
| | | white-space: nowrap; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .el-select { |
| | | flex: 4; |
| | | text-align: left; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .table-container { |
| | | font-size: 12px; |
| | | height: 120px; |
| | | overflow-y: auto; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | | padding: 5px; |
| | | } |
| | | |
| | | .table-row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | padding: 5px 0; |
| | | border-bottom: 1px solid #ddd; |
| | | } |
| | | |
| | | .table-row:last-child { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .table-row span { |
| | | flex: 1; |
| | | text-align: left; |
| | | } |
| | | |
| | | .table-row input[type="checkbox"] { |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .buttons { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | gap: 10px; |
| | | } |
| | | |
| | | .el-button { |
| | | flex: 1; |
| | | } |
| | | </style> |
| | |
| | | isCollapsed ? "å±å¼" : "æ¶èµ·" |
| | | }}</span> |
| | | </div> |
| | | <div class="details" :class="{ hidden: isCollapsed }"> |
| | | <div class="input-group"> |
| | | <div class="input-item"> |
| | | <label>æ¹æ¡åç§°:</label> |
| | | <el-input |
| | | v-model="schemeName" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | |
| | | <el-form |
| | | :model="formData" |
| | | label-width="auto" |
| | | style="max-width: 600px; padding-right: 10px; box-sizing: border-box" |
| | | > |
| | | <el-collapse-transition style="margin-top: 10px"> |
| | | <div v-show="!isCollapsed"> |
| | | <el-form-item label="æ¹æ¡åç§°:"> |
| | | <el-input |
| | | v-model="formData.name" |
| | | type="text" |
| | | placeholder="请è¾å
¥" |
| | | ></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="é¨éæ°æ®:"> |
| | | <el-select |
| | | v-model="formData.selectedRainfall" |
| | | placeholder="è¯·éæ©" |
| | | popper-class="mySelectStyle" |
| | | > |
| | | <el-option |
| | | v-for="item in rainfallData" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <div class="table-container"> |
| | | <div |
| | | class="table-row" |
| | | v-for="(item, index) in filteredTableData" |
| | | :key="index" |
| | | > |
| | | <input type="checkbox" v-model="item.selected" /> |
| | | <span>{{ item.name }}</span> |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="input-item"> |
| | | <label>é¨éæ°æ®:</label> |
| | | <el-select |
| | | v-model="selectedRainfall" |
| | | placeholder="è¯·éæ©" |
| | | popper-class="mySelectStyle" |
| | | > |
| | | <el-option |
| | | v-for="item in rainfallData" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="table-container"> |
| | | <div |
| | | class="table-row" |
| | | v-for="(item, index) in filteredTableData" |
| | | :key="index" |
| | | > |
| | | <input type="checkbox" v-model="item.selected" /> |
| | | <span>{{ item.name }}</span> |
| | | </div> |
| | | </div> |
| | | <!-- <div style="margin-top: 10px;"> |
| | | </el-collapse-transition> |
| | | </el-form> |
| | | |
| | | <!-- <div style="margin-top: 10px;"> |
| | | <label>仿çåæ°:</label> |
| | | <div style="width: 100%; height: 60px; background-color: #fff;"></div> |
| | | </div> --> |
| | | </div> |
| | | <div class="buttons"> |
| | | <el-button type="primary" @click="openSaveDialog">ä¿åæ¹æ¡</el-button> |
| | | <el-button type="success" @click="startPlay">å¼å§æ¨¡æ</el-button> |
| | | <el-button type="success" @click="futurePredictions">æªæ¥é¢æµ</el-button> |
| | | </div> |
| | | |
| | | <!-- ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | <el-dialog |
| | | v-model="saveDialogVisible" |
| | | title="ä¿åæ¹æ¡" |
| | | width="50%" |
| | | :before-close="handleClose" |
| | | custom-class="custom-dialog" |
| | | > |
| | | <div class="dialog-content"> |
| | | <p><strong>æééç¹æ²ï¼</strong>{{ props.selectedArea }}</p> |
| | | <p><strong>模æç±»åï¼</strong>宿¶æ¨¡æ</p> |
| | | <p><strong>é¨éæ°æ®ç±»åï¼</strong>{{ selectedRainfallName }}</p> |
| | | <p><strong>设å¤ä¿¡æ¯ï¼</strong></p> |
| | | <ul> |
| | | <li v-for="item in selectedDevices" :key="item.id">{{ item.name }}</li> |
| | | </ul> |
| | | </div> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="saveDialogVisible = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="confirmSave">ç¡®å®ä¿å</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> --> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, watch, defineProps, computed, inject } from "vue"; |
| | | import { ref, watch, defineProps, computed, inject, reactive } from "vue"; |
| | | import { ElMessage } from "element-plus"; |
| | | import { initeWaterPrimitiveView } from "@/utils/water"; |
| | | import { SimAPIStore } from "@/store/simAPI"; |
| | |
| | | // è·å Store å®ä¾ |
| | | const simStore = SimAPIStore(); |
| | | |
| | | // è·å Store å®ä¾ |
| | | const schemeName = ref("æ¹æ¡åç§°"); // æ¹æ¡åç§° |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | function startPlay() { |
| | | const selectedItems = filteredTableData.value.filter((item) => item.selected); |
| | | if (selectedItems.length > 0) { |
| | | console.log( |
| | | "éä¸ç项ï¼", |
| | | selectedItems.map((item) => item.name) |
| | | ); |
| | | } else { |
| | | console.log("æªéä¸ä»»ä½é¡¹"); |
| | | } |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | console.log("å½åéä¸çé¨éæ°æ®ï¼", selectedRainfall.value); |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | // è¡¨åæ°æ® |
| | | const formData = reactive({ |
| | | name: "æ¹æ¡åç§°", |
| | | selectedRainfall: "", |
| | | type: 2, |
| | | gauges: [ |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计1", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计2", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | ], |
| | | }); |
| | | |
| | | // å·¥å
·å½æ°ï¼æ·±æ·è´å¹¶è®¾ç½®é»è®¤éä¸ç¶æ |
| | | function deepCloneAndSetSelected(data) { |
| | |
| | | required: true, |
| | | }, |
| | | }); |
| | | |
| | | // åç»ä»¶å
é¨ç¶æ |
| | | const rainfallData = ref([]); // é¨éæ°æ® |
| | | const rainfallData = ref([]); |
| | | const tableData = ref({}); // è¡¨æ ¼æ°æ®ï¼æé¨éæ°æ®åç»ï¼ |
| | | const selectedRainfall = ref(""); // å½åéä¸çé¨éæ°æ® |
| | | const isCollapsed = ref(false); // æ§å¶å±å¼/æ¶èµ·ç¶æ |
| | | const saveDialogVisible = ref(false); // æ§å¶ä¿åæ¹æ¡å¯¹è¯æ¡æ¾ç¤ºç¶æ |
| | | |
| | | // 模æä¸ååºåçæ°æ® |
| | | const areaDataMap = { |
| | |
| | | watch( |
| | | () => props.selectedArea, |
| | | (newArea) => { |
| | | if (areaDataMap[newArea]) { |
| | | rainfallData.value = areaDataMap[newArea].rainfallData; |
| | | console.log(newArea.label, "new"); |
| | | if (areaDataMap[newArea.label]) { |
| | | rainfallData.value = areaDataMap[newArea.label].rainfallData; |
| | | // ä½¿ç¨æ·±æ·è´è®¾ç½®é»è®¤éä¸ç¶æ |
| | | tableData.value = deepCloneAndSetSelected(areaDataMap[newArea].tableData); |
| | | selectedRainfall.value = ""; // æ¸
空éä¸çé¨éæ°æ® |
| | | tableData.value = deepCloneAndSetSelected( |
| | | areaDataMap[newArea.label].tableData |
| | | ); |
| | | formData.selectedRainfall = ""; // æ¸
空éä¸çé¨éæ°æ® |
| | | } else { |
| | | rainfallData.value = []; |
| | | tableData.value = {}; |
| | | selectedRainfall.value = ""; |
| | | formData.selectedRainfall = ""; |
| | | } |
| | | }, |
| | | { immediate: true } // ç«å³æ§è¡ä¸æ¬¡ï¼ç¡®ä¿åå§æ°æ®æ£ç¡® |
| | | } |
| | | // { immediate: true } // ç«å³æ§è¡ä¸æ¬¡ï¼ç¡®ä¿åå§æ°æ®æ£ç¡® |
| | | ); |
| | | |
| | | // å¨æè®¡ç®è¡¨æ ¼æ°æ® |
| | | const filteredTableData = computed(() => { |
| | | return selectedRainfall.value && tableData.value[selectedRainfall.value] |
| | | ? tableData.value[selectedRainfall.value] |
| | | return formData.selectedRainfall && tableData.value[formData.selectedRainfall] |
| | | ? tableData.value[formData.selectedRainfall] |
| | | : []; |
| | | }); |
| | | |
| | | // è·åå½åéä¸çé¨éæ°æ®åç§° |
| | | const selectedRainfallName = computed(() => { |
| | | const selected = rainfallData.value.find( |
| | | (item) => item.id === selectedRainfall.value |
| | | (item) => item.id === formData.selectedRainfall |
| | | ); |
| | | return selected ? selected.name : ""; |
| | | }); |
| | |
| | | return filteredTableData.value.filter((item) => item.selected); |
| | | }); |
| | | |
| | | const resetForm = () => { |
| | | formData.name = ""; |
| | | formData.selectedRainfall = ""; |
| | | }; |
| | | |
| | | // æå¼ä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const openSaveDialog = async () => { |
| | | const forms = { |
| | | name: schemeName.value, |
| | | geom: props.selectedArea, |
| | | type: 2, |
| | | gauges: [ |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计1", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | { |
| | | id: "xxxxxxxxxxxxxx", |
| | | name: "é¨é计2", |
| | | x: 119.0, |
| | | y: 28.0, |
| | | r: 10000, |
| | | }, |
| | | ], |
| | | }; |
| | | await simStore.addSimCheme(forms); |
| | | try { |
| | | formData.geom = props.selectedArea; |
| | | await simStore.addSimCheme(formData); |
| | | resetForm(); |
| | | EventBus.emit("close-selectArea"); |
| | | } catch (err) {} |
| | | }; |
| | | |
| | | // 注å
¥æ¨¡ææä½æ¹æ³ |
| | | const { startSimulate, endSimulate } = inject("simulateActions"); |
| | | |
| | | async function startPlay() { |
| | | const selectedItems = filteredTableData.value.filter((item) => item.selected); |
| | | if (selectedItems.length > 0) { |
| | | console.log( |
| | | "éä¸ç项ï¼", |
| | | selectedItems.map((item) => item.name) |
| | | ); |
| | | } else { |
| | | console.log("æªéä¸ä»»ä½é¡¹"); |
| | | } |
| | | console.log("å½åéä¸çåºåï¼", props.selectedArea); |
| | | // å¼å§æ¨¡æåéè¦å
ä¿åæ¹æ¡ |
| | | formData.geom = props.selectedArea; |
| | | await simStore.addSimCheme(formData); |
| | | EventBus.emit("close-selectArea"); |
| | | }; |
| | | |
| | | // å
³éä¿åæ¹æ¡å¯¹è¯æ¡ |
| | | const handleClose = () => { |
| | | saveDialogVisible.value = false; |
| | | }; |
| | | |
| | | // // 确认ä¿å |
| | | // const confirmSave = () => { |
| | | // // æé æ°çæ¹æ¡å¯¹è±¡ |
| | | // const newScheme = { |
| | | // name: schemeName.value,//æ¹æ¡åç§° |
| | | // id: Date.now().toString(), // å¯ä¸ ID |
| | | // area: props.selectedArea, // åºå |
| | | // name: selectedRainfallName.value, // æ¹æ¡åç§°ï¼é¨éæ°æ®ç±»åï¼ |
| | | // createTime: new Date().toISOString(), // å建æ¶é´ |
| | | // taskStatus:1, // åå§ç¶æä¸ºæªå¼å§ |
| | | // rainfallType: selectedRainfallName.value, // é¨éæ°æ®ç±»å |
| | | // devices: selectedDevices.value.map((item) => item.name), // 设å¤ä¿¡æ¯ |
| | | // }; |
| | | |
| | | // // è°ç¨ Store çæ¹æ³æ·»å æ¹æ¡ |
| | | // simStore.addSchemCard(newScheme); |
| | | |
| | | // console.log("ä¿åæ¹æ¡æå", newScheme); |
| | | // ElMessage.success("æ¹æ¡å·²ä¿å"); |
| | | |
| | | // // å
³éå¯¹è¯æ¡ |
| | | // saveDialogVisible.value = false; |
| | | // }; |
| | | initeWaterPrimitiveView(); |
| | | startSimulate(); |
| | | } |
| | | |
| | | const toggleDetails = () => { |
| | | isCollapsed.value = !isCollapsed.value; |
| | |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | padding-right: 10px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .input-item { |
| | |
| | | .table-container { |
| | | font-size: 12px; |
| | | height: 120px; |
| | | width: 90%; |
| | | overflow-y: auto; |
| | | border: 1px solid #ddd; |
| | | border-radius: 4px; |
| | |
| | | .buttons { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | gap: 10px; |
| | | padding-right: 10px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .el-button { |
| | |
| | | url: "/json/line.json", |
| | | color: "#00FF00", |
| | | width: 12.0, |
| | | pointColor: "#73FFA7", |
| | | pointColor: "#FFFF73", |
| | | speed: 2, |
| | | far: 50000, |
| | | }); |
| | |
| | | secure: false |
| | | }, |
| | | '/hp': { |
| | | target: 'http://192.168.56.106:9511', |
| | | target: 'http://192.168.56.106:9522', |
| | | changeOrigin: true, |
| | | pathRewrite: { |
| | | '^/hp': '' |