|
@@ -0,0 +1,488 @@
|
|
|
+<template>
|
|
|
+ <div class="appmian">
|
|
|
+ <el-container>
|
|
|
+ <el-header>
|
|
|
+ <div class="ve_menu_logo">
|
|
|
+ <div class="ve_title">
|
|
|
+ <div class="ve_logo_img">
|
|
|
+ <el-image style="height: 100%" :src="logo" fit="contain"></el-image>
|
|
|
+ </div>
|
|
|
+ <h3 class="ve_logo_title">
|
|
|
+ {{ title }}
|
|
|
+ </h3>
|
|
|
+ </div>
|
|
|
+ <el-menu
|
|
|
+ :default-active="activeIndex"
|
|
|
+ class="el-menu-demo"
|
|
|
+ mode="horizontal"
|
|
|
+ :popper-offset="2"
|
|
|
+ style="width: 780px"
|
|
|
+ background-color="#0D1639 "
|
|
|
+ active-background-color="#0E50C8"
|
|
|
+ text-color="#68ADFF"
|
|
|
+ active-text-color="#fff"
|
|
|
+ @select="handleSelect"
|
|
|
+ >
|
|
|
+ <el-menu-item index="1">灾害源设置</el-menu-item>
|
|
|
+ <el-menu-item index="2">边界设置</el-menu-item>
|
|
|
+
|
|
|
+ <el-menu-item index="3">灾害推演</el-menu-item>
|
|
|
+ <el-menu-item index="4">推演结果</el-menu-item>
|
|
|
+ <el-menu-item index="5">结果对比</el-menu-item>
|
|
|
+ </el-menu>
|
|
|
+ <div class="ve_right">
|
|
|
+ <div class="ve_timeioc" v-if="aid == null" @click="titleclick()">
|
|
|
+ <span>请选择</span>
|
|
|
+ </div>
|
|
|
+ <div v-else>
|
|
|
+ <div class="ve_time" v-show="titlefalse" @click="titleclick()">
|
|
|
+ <span class="l_huoqing" >{{ headerobj.name }}</span>
|
|
|
+ <span class="l_time">{{ headerobj.time }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- <router-link to="/configurator"> -->
|
|
|
+ <div class="ve_timeioc" @click="tiaozhuan()">
|
|
|
+ <el-image :src="Vector" fit="contain"></el-image>
|
|
|
+ <span>模型库</span>
|
|
|
+ </div>
|
|
|
+ <!-- </router-link> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-header>
|
|
|
+
|
|
|
+ <el-main>
|
|
|
+ <Dialoges
|
|
|
+ ref="lliudialog"
|
|
|
+ :addselect="addselect"
|
|
|
+ :valzaiqing="valzaiqing"
|
|
|
+ :headerobj="headerobj"
|
|
|
+ @leftsimulation="leftsimulation"
|
|
|
+ @headerclick="headerclick"
|
|
|
+ @handleSelect="handleSelect"
|
|
|
+ @childfun="childfun"
|
|
|
+ @moxingclick="moxingclick"
|
|
|
+ ></Dialoges>
|
|
|
+ <source-disaster ref="sourcedis" :classradio="classradio" />
|
|
|
+ <info-boundary ref="boundary" :classradio="classradio" />
|
|
|
+ <info-animation ref="tanimation" :classradio="classradio" :aid="aid" />
|
|
|
+ <InfoVtkmodel ref="vtkmodel" />
|
|
|
+ <result ref="resultbidui" @titleclick="titleclick" :classradio="classradio"></result>
|
|
|
+ </el-main>
|
|
|
+ </el-container>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <script setup>
|
|
|
+ import { ref, onMounted, reactive, nextTick } from "vue";
|
|
|
+ import { RouterView, RouterLink, useRouter } from "vue-router";
|
|
|
+ // import NavigateBar from "@/components/layout/NavigateBar.vue";
|
|
|
+ import Dialoges from "./InfoDialoges.vue";
|
|
|
+ import logo from "@/assets/logo.png";
|
|
|
+ import { ElMessage, ElButton, ElDialog, ElSelect, formEmits } from 'element-plus'
|
|
|
+ // import myIndex from "./index"
|
|
|
+ import SourceDisaster from "./components/InfoDisaster.vue";
|
|
|
+ import InfoBoundary from "./components/InfoBoundary.vue";
|
|
|
+ import InfoAnimation from "./components/InfoAnimation.vue";
|
|
|
+ import InfoVtkmodel from "./components/InfoVtkmodel.vue";
|
|
|
+ import result from "./result.vue";
|
|
|
+ import Vector from "@/assets/img/Vector.png";
|
|
|
+ import { timestampToTime } from "@/js/lindex.js";
|
|
|
+ import mitts from "@/utils/Bus";
|
|
|
+ import { contains } from "@kitware/vtk.js/Common/DataModel/BoundingBox";
|
|
|
+ // import { vtkmodel } from "@/control/vtkModel.js";
|
|
|
+
|
|
|
+ let lliudialog = ref();
|
|
|
+ let sourcedis = ref();
|
|
|
+ let classradio = ref();
|
|
|
+ let boundary = ref();
|
|
|
+ let tanimation = ref();
|
|
|
+ const title = "灾情推演软件";
|
|
|
+ const activeIndex = ref("1");
|
|
|
+ const activeIndex2 = ref("1");
|
|
|
+ let titlefalse = ref(false);
|
|
|
+ let resultbidui = ref();
|
|
|
+ let mnindex = ref("");
|
|
|
+ let resultleft = ref({});
|
|
|
+ let datares=ref({});
|
|
|
+ let resultright = ref({});
|
|
|
+ let headerobj = ref({
|
|
|
+ time: "",
|
|
|
+ name: "",
|
|
|
+ });
|
|
|
+ let valzaiqing = ref("");
|
|
|
+ let router = useRouter();
|
|
|
+ let sgdata = ref({});
|
|
|
+ let aid = ref();
|
|
|
+ onMounted(() => {});
|
|
|
+ // 跳转页面,{ aid:aid.value}
|
|
|
+ const tiaozhuan = () => {
|
|
|
+ activeIndex.value = "1";
|
|
|
+ handleSelect( activeIndex.value);
|
|
|
+ const key = activeIndex.value;
|
|
|
+ sourcedis.value.changeModel();
|
|
|
+ sourcedis.value.accident3(key);
|
|
|
+ boundary.value.accident4(key);
|
|
|
+ lliudialog.value.accident2(key);
|
|
|
+ tanimation.value.monitor = false;
|
|
|
+ router.push({ path: "/configurator" });
|
|
|
+
|
|
|
+ // console.log(router.push("/configurator"))
|
|
|
+
|
|
|
+ // console.log(router.push("/configurator"))
|
|
|
+ };
|
|
|
+
|
|
|
+ const addselect = () => {
|
|
|
+ classradio.value = lliudialog.value.classradio;
|
|
|
+ };
|
|
|
+ // 获取模拟数据对比
|
|
|
+ const leftsimulation = (res,data) => {
|
|
|
+ if (mnindex.value == "1") {
|
|
|
+ resultleft.value.coids = res.coids;
|
|
|
+ resultleft.value.totaltime = res.totaltime;
|
|
|
+ resultleft.value.reportstep = res.reportstep;
|
|
|
+ resultleft.value.pickertime = res.acctime;
|
|
|
+ resultleft.value.aid = res.aid;
|
|
|
+ resultbidui.value.mntext1=data.name;
|
|
|
+
|
|
|
+
|
|
|
+ } else {
|
|
|
+ resultright.value.coids = res.coids;
|
|
|
+ resultright.value.totaltime = res.totaltime;
|
|
|
+ resultright.value.reportstep = res.reportstep;
|
|
|
+ resultright.value.pickertime = res.acctime;
|
|
|
+ resultright.value.aid = res.aid;
|
|
|
+ resultbidui.value.mntext2=data.name;
|
|
|
+ }
|
|
|
+
|
|
|
+ //TODO
|
|
|
+ if(resultleft.value.aid==''||resultright.value.aid==''||resultleft.value.aid==undefined||resultright.value.aid==undefined){
|
|
|
+
|
|
|
+
|
|
|
+ }else{
|
|
|
+ if (resultleft.value.coids != resultright.value.coids) {
|
|
|
+ ElMessage.error('污染物不一样,无法进行比较')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (resultleft.value.totaltime != resultright.value.totaltime) {
|
|
|
+ ElMessage.error('模拟时长不一样,无法进行比较')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (resultleft.value.reportstep != resultright.value.reportstep) {
|
|
|
+ ElMessage.error('输出步长不一样,无法进行比较')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (resultleft.value.pickertime != resultright.value.pickertime ) {
|
|
|
+ ElMessage.error('事故时间不一样,无法进行比较')
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //TODO 获取物理量
|
|
|
+ resultbidui.value.timeline=res.acctime;
|
|
|
+ resultbidui.value.oldtime=res.acctime;
|
|
|
+ // resultbidui.value.zdtime=res.acctime;
|
|
|
+ resultbidui.value.endtime= Number(res.totaltime)/Number(res.reportstep);
|
|
|
+ resultbidui.value.initAid(resultleft.value.aid,resultright.value.aid);
|
|
|
+ resultbidui.value.clickflat=true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ };
|
|
|
+ //判断两个对象是否相等
|
|
|
+ const objequality = () => {};
|
|
|
+ const moxingclick = (val) => {
|
|
|
+ titlefalse.value = val;
|
|
|
+ };
|
|
|
+ // const qingsel=()=>{
|
|
|
+ // lliudialog.value.dialogVisible = true;
|
|
|
+ // }
|
|
|
+ //点击头部弹出弹框
|
|
|
+
|
|
|
+ const titleclick = (val, index) => {
|
|
|
+ mnindex.value = index;
|
|
|
+ valzaiqing.value = val;
|
|
|
+ if (val == "模拟数据") {
|
|
|
+ lliudialog.value.dialogVisible = true;
|
|
|
+ } else {
|
|
|
+ lliudialog.value.dialogVisible = true;
|
|
|
+ clearInterval();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ //获取aid
|
|
|
+ const aidlist = () => {
|
|
|
+ sgdata.value = lliudialog.value.sgdata;
|
|
|
+ aid.value = sgdata.value.aid;
|
|
|
+ };
|
|
|
+ // 获取子组件的方法
|
|
|
+ const childfun = () => {
|
|
|
+
|
|
|
+ if(classradio.value=='Gass'){
|
|
|
+ sourcedis.value.Gassgetdata(aid.value);
|
|
|
+ }else{
|
|
|
+ sourcedis.value.handledisaster(aid.value);
|
|
|
+ }
|
|
|
+ boundary.value.addboundary(aid.value);
|
|
|
+ sourcedis.value.accident3();
|
|
|
+ };
|
|
|
+ const headerclick = (data) => {
|
|
|
+ console.log(data);
|
|
|
+ headerobj.value.name = data.name;
|
|
|
+ headerobj.value.time = data.time;
|
|
|
+ aid.value = data.aid;
|
|
|
+ };
|
|
|
+ const handleSelect = (key) => {
|
|
|
+ activeIndex.value = "";
|
|
|
+ switch (key) {
|
|
|
+ case "1":
|
|
|
+ sourcedis.value.changeModel();
|
|
|
+ sourcedis.value.accident3(key);
|
|
|
+ boundary.value.accident4(key);
|
|
|
+ lliudialog.value.accident2(key);
|
|
|
+ tanimation.value.monitor = false;
|
|
|
+ resultbidui.value.accident6(key, aid.value);
|
|
|
+ tanimation.value.accident5(aid.value, key);
|
|
|
+ activeIndex.value = "1";
|
|
|
+ break;
|
|
|
+ case "2":
|
|
|
+ boundary.value.changeModel();
|
|
|
+ boundary.value.accident4(key);
|
|
|
+ sourcedis.value.accident3(key);
|
|
|
+ lliudialog.value.accident2(key);
|
|
|
+ tanimation.value.monitor = false;
|
|
|
+ resultbidui.value.accident6(key, aid.value);
|
|
|
+ tanimation.value.accident5(aid.value, key);
|
|
|
+ activeIndex.value = "2";
|
|
|
+ break;
|
|
|
+ case "3":
|
|
|
+ lliudialog.value.changeModel();
|
|
|
+ boundary.value.accident4(key);
|
|
|
+ sourcedis.value.accident3(key);
|
|
|
+ lliudialog.value.accident2(key);
|
|
|
+ tanimation.value.monitor = false;
|
|
|
+ activeIndex.value = "3";
|
|
|
+ tanimation.value.accident5(aid.value, key);
|
|
|
+ resultbidui.value.accident6(key, aid.value);
|
|
|
+
|
|
|
+ break;
|
|
|
+ case "4":
|
|
|
+ boundary.value.accident4(key);
|
|
|
+ tanimation.value.accident5(aid.value, key);
|
|
|
+ sourcedis.value.accident3(key);
|
|
|
+ lliudialog.value.accident2(key);
|
|
|
+ resultbidui.value.accident6(key, aid.value);
|
|
|
+ activeIndex.value = "4";
|
|
|
+ break;
|
|
|
+ case "5":
|
|
|
+ sourcedis.value.changeModel();
|
|
|
+ sourcedis.value.accident3(key);
|
|
|
+ boundary.value.accident4(key);
|
|
|
+ lliudialog.value.accident2(key);
|
|
|
+ resultbidui.value.accident6(key, aid.value);
|
|
|
+ tanimation.value.accident5(aid.value, key);
|
|
|
+ tanimation.value.monitor = false;
|
|
|
+ activeIndex.value = "5";
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ };
|
|
|
+ </script>
|
|
|
+
|
|
|
+ <style lang="scss" scoped>
|
|
|
+ .appmian {
|
|
|
+ .el-main {
|
|
|
+ --el-main-padding: 0 !important;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-header {
|
|
|
+ padding: 0;
|
|
|
+ margin: 0;
|
|
|
+ width: 100%;
|
|
|
+ position: absolute;
|
|
|
+ z-index: 206;
|
|
|
+ top: 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .ve_menu_logo {
|
|
|
+ width: 100%;
|
|
|
+ height: 70px;
|
|
|
+ background: #0d1639;
|
|
|
+ white-space: nowrap;
|
|
|
+ text-align: left;
|
|
|
+ overflow: hidden;
|
|
|
+ display: flex;
|
|
|
+ background: #0d1639;
|
|
|
+ box-shadow: inset 0px 0px 17px 5px rgba(12, 97, 197, 0.2);
|
|
|
+ border-radius: 0px 0px 0px 0px;
|
|
|
+ border-bottom: 1px solid;
|
|
|
+ box-sizing: border-box;
|
|
|
+ border-image: linear-gradient(28deg, rgba(31, 107, 255, 1), rgba(31, 107, 255, 0)) 1 1;
|
|
|
+
|
|
|
+ .ve_title {
|
|
|
+ }
|
|
|
+
|
|
|
+ .ve_logo_img {
|
|
|
+ padding-left: 30px;
|
|
|
+ height: 100%;
|
|
|
+ display: inline-block;
|
|
|
+ box-sizing: border-box;
|
|
|
+ vertical-align: middle;
|
|
|
+ padding: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .ve_logo_title {
|
|
|
+ width: 160px;
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ display: inline-block;
|
|
|
+ margin: 0;
|
|
|
+ vertical-align: middle;
|
|
|
+ color: #68adff;
|
|
|
+ font-size: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-menu-demo {
|
|
|
+ width: 60% !important;
|
|
|
+ height: 70px;
|
|
|
+ border: none !important;
|
|
|
+ background: rgba(12, 97, 197, 0);
|
|
|
+
|
|
|
+ .el-menu-item {
|
|
|
+ position: relative;
|
|
|
+ width: 97px;
|
|
|
+ font-family: Microsoft YaHei UI, Microsoft YaHei UI;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 13px;
|
|
|
+ color: #68adff;
|
|
|
+ line-height: 15px;
|
|
|
+ text-align: center;
|
|
|
+ font-style: normal;
|
|
|
+ text-transform: none;
|
|
|
+ width: 110px;
|
|
|
+ height: 70px;
|
|
|
+ border-radius: 0px 0px 0px 0px;
|
|
|
+ border: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .is-active {
|
|
|
+ width: 110px;
|
|
|
+ height: 70px;
|
|
|
+ background: radial-gradient(ellipse at 54px 0px, #3aa0ff -37%, #123066 53%);
|
|
|
+ border-radius: 0px 0px 0px 0px;
|
|
|
+ border: 1px solid;
|
|
|
+ border-left: 1px solid rgba(16, 92, 240, 1);
|
|
|
+ border-right: 1px solid rgba(18, 48, 102, 1);
|
|
|
+ border-image: linear-gradient(347deg, rgba(16, 92, 240, 1), rgba(18, 48, 102, 1)) 1
|
|
|
+ 1;
|
|
|
+
|
|
|
+ &:after {
|
|
|
+ width: 24px;
|
|
|
+ height: 1px;
|
|
|
+ background-color: #fff;
|
|
|
+ -webkit-transition: all ease-out 0.2s;
|
|
|
+ transition: all ease-out 0.2s;
|
|
|
+ content: "";
|
|
|
+ position: absolute;
|
|
|
+ left: 50%;
|
|
|
+ bottom: 15px;
|
|
|
+ webkit-transform: translate(-50%, 0%);
|
|
|
+ -moz-transform: translate(-50%, 0%);
|
|
|
+ transform: translate(-50%, 0%);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .ve_right {
|
|
|
+ // width: 350px;
|
|
|
+ height: 70px;
|
|
|
+ overflow: hidden;
|
|
|
+ position: absolute;
|
|
|
+ right: 0;
|
|
|
+ display: flex;
|
|
|
+
|
|
|
+ .ve_time {
|
|
|
+ width: 190px;
|
|
|
+ height: 55px;
|
|
|
+ padding-top: 15px;
|
|
|
+ height: 70px;
|
|
|
+ overflow: hidden;
|
|
|
+ border-radius: 0px 0px 0px 0px;
|
|
|
+ border-left: 2px solid rgba(12, 97, 197, 0.2);
|
|
|
+ border-right: 2px solid rgba(12, 97, 197, 0.2);
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding: 15px 5px;
|
|
|
+ // border-image: linear-gradient(347deg, rgba(31, 107, 255, 1), rgba(164, 195, 255, 1)) 1 1;
|
|
|
+ span {
|
|
|
+ display: block;
|
|
|
+ font-family: Microsoft YaHei UI, Microsoft YaHei UI;
|
|
|
+ color: #ffffff;
|
|
|
+ text-align: center;
|
|
|
+ font-style: normal;
|
|
|
+ text-transform: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .l_huoqing {
|
|
|
+ font-size: 13px;
|
|
|
+ line-height: 15px;
|
|
|
+ font-weight: bold;
|
|
|
+ line-height: 2;
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ }
|
|
|
+
|
|
|
+ .l_time {
|
|
|
+ font-size: 12px;
|
|
|
+ line-height: 14px;
|
|
|
+ font-weight: 400;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .ve_timeioc {
|
|
|
+ width: 150px;
|
|
|
+ height: 70px;
|
|
|
+ // border-radius: 0px 0px 0px 0px;
|
|
|
+ // border: 1px solid;
|
|
|
+ // border-image: linear-gradient(347deg, rgba(16, 92, 240, 1), rgba(164, 195, 255, 1)) 1 1;
|
|
|
+ font-family: Microsoft YaHei UI, Microsoft YaHei UI;
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 13px;
|
|
|
+ color: #68adff;
|
|
|
+ line-height: 15px;
|
|
|
+ text-align: center;
|
|
|
+ font-style: normal;
|
|
|
+ text-transform: none;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ span {
|
|
|
+ padding-left: 15px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+
|
|
|
+ <style>
|
|
|
+ body {
|
|
|
+ width: 100%;
|
|
|
+ height: 100vh;
|
|
|
+ background: #161a2a;
|
|
|
+ }
|
|
|
+
|
|
|
+ button:focus,
|
|
|
+ button:focus-visible {
|
|
|
+ outline: none;
|
|
|
+ }
|
|
|
+
|
|
|
+ .l_Dialog {
|
|
|
+ /* position: absolute; */
|
|
|
+ z-index: 206;
|
|
|
+ top: 0;
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+
|