|  | @@ -0,0 +1,302 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +    <div>
 | 
	
		
			
				|  |  | +      <div class="tool">
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +        <div class="left_container">
 | 
	
		
			
				|  |  | +          <div class="leftdialong" v-show="dialogVisible">
 | 
	
		
			
				|  |  | +            <div class="time">当前时间:{{ count }}</div>
 | 
	
		
			
				|  |  | +            <div class="block">
 | 
	
		
			
				|  |  | +              <el-form-item label="物理量">
 | 
	
		
			
				|  |  | +                <el-cascader
 | 
	
		
			
				|  |  | +                  transfer="true"
 | 
	
		
			
				|  |  | +                  placeholder="灾情/物理量"
 | 
	
		
			
				|  |  | +                  clearable
 | 
	
		
			
				|  |  | +                  :popper-append-to-body="false"
 | 
	
		
			
				|  |  | +                  v-model="arrvalue"
 | 
	
		
			
				|  |  | +                  :options="options"
 | 
	
		
			
				|  |  | +                  @change="handleChange($event)"
 | 
	
		
			
				|  |  | +                ></el-cascader>
 | 
	
		
			
				|  |  | +              </el-form-item>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <div class="block">
 | 
	
		
			
				|  |  | +              <span class="demonstration">动画开始</span>
 | 
	
		
			
				|  |  | +              <el-slider
 | 
	
		
			
				|  |  | +                :max="endtime"
 | 
	
		
			
				|  |  | +                :min="starttime"
 | 
	
		
			
				|  |  | +                v-model="count"
 | 
	
		
			
				|  |  | +                @change="sliderchange"
 | 
	
		
			
				|  |  | +              ></el-slider>
 | 
	
		
			
				|  |  | +              <span class="demonstration">动画结束</span>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +            <div class="itemlist">
 | 
	
		
			
				|  |  | +              <div class="item" @click="play(500)">播  放</div>
 | 
	
		
			
				|  |  | +              <div class="item" @click="suspend">暂  停</div>
 | 
	
		
			
				|  |  | +              <div class="item" @click="Prev">上一分钟</div>
 | 
	
		
			
				|  |  | +              <div class="item" @click="increment">下一分钟</div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <div class="dialog-footer">
 | 
	
		
			
				|  |  | +              <span class="btn" @click="dialogVisible = false">关 闭</span>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +          <div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +  </template>
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  <script setup>
 | 
	
		
			
				|  |  | +  import p1 from "@/assets/img/u3479.png";
 | 
	
		
			
				|  |  | +  import p2 from "@/assets/img/u10068.png";
 | 
	
		
			
				|  |  | +  import p3 from "@/assets/img/12.png";
 | 
	
		
			
				|  |  | +  import p4 from "@/assets/img/u3883.png";
 | 
	
		
			
				|  |  | +  import p5 from "@/assets/img/u3405.png";
 | 
	
		
			
				|  |  | +  import * as d3 from "d3-scale";
 | 
	
		
			
				|  |  | +  import { formatDefaultLocale } from "d3-format";
 | 
	
		
			
				|  |  | +  import { ref, onMounted, reactive } from "vue";
 | 
	
		
			
				|  |  | +  let time = 3 * 60;
 | 
	
		
			
				|  |  | +  let evolution=ref();
 | 
	
		
			
				|  |  | +  let listArray = reactive([
 | 
	
		
			
				|  |  | +    { id: 0, img: p1, name: "灾情演化" },
 | 
	
		
			
				|  |  | +    { id: 1, img: p2, name: "演化过程" },
 | 
	
		
			
				|  |  | +    { id: 2, img: p3, name: "灾情历史" },
 | 
	
		
			
				|  |  | +    { id: 3, img: p4, name: "日志" },
 | 
	
		
			
				|  |  | +  ]);
 | 
	
		
			
				|  |  | +  // let title1=ref("我是父组件")
 | 
	
		
			
				|  |  | +  let dialogVisible = ref(false);
 | 
	
		
			
				|  |  | +  let num = ref(4);
 | 
	
		
			
				|  |  | +  let starttime = ref(1);
 | 
	
		
			
				|  |  | +  let endtime = ref(60);
 | 
	
		
			
				|  |  | +  let timenum = ref(2);
 | 
	
		
			
				|  |  | +  let isstop = ref(false);
 | 
	
		
			
				|  |  | +  let arrvalue = reactive([]);
 | 
	
		
			
				|  |  | +  let options = reactive([
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +      value: "fire",
 | 
	
		
			
				|  |  | +      label: "火灾",
 | 
	
		
			
				|  |  | +      children: [
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          value: "Temperature",
 | 
	
		
			
				|  |  | +          label: "温度",
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          value: "Pressure",
 | 
	
		
			
				|  |  | +          label: "压强",
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          value: "SO2",
 | 
	
		
			
				|  |  | +          label: "SO2",
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          value: "CO2",
 | 
	
		
			
				|  |  | +          label: "CO2",
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +      ],
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +      value: "Water",
 | 
	
		
			
				|  |  | +      label: "水灾",
 | 
	
		
			
				|  |  | +      children: [
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          value: "Height",
 | 
	
		
			
				|  |  | +          label: "水位高度",
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +      ],
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +  ]);
 | 
	
		
			
				|  |  | +  function add(id) {
 | 
	
		
			
				|  |  | +    if (id == 2) {
 | 
	
		
			
				|  |  | +      dialogVisible.value = true;
 | 
	
		
			
				|  |  | +      evolution.value.isshow=false;
 | 
	
		
			
				|  |  | +    }else if(id==1){
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +    else if(id==0){
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +      evolution.value.isshow=true;
 | 
	
		
			
				|  |  | +      evolution.value.getdata();
 | 
	
		
			
				|  |  | +      dialogVisible.value = false;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  // 用来修改状态、触发更新的函数
 | 
	
		
			
				|  |  | +  function inOpacity() {
 | 
	
		
			
				|  |  | +    opacity.value = opacity.value + 0.1;
 | 
	
		
			
				|  |  | +    actor.getProperty().setOpacity(opacity.value);
 | 
	
		
			
				|  |  | +    renderWindow.render();
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  function getMinMax(scalars) {
 | 
	
		
			
				|  |  | +    // console.log("getMinMax:",scalars);
 | 
	
		
			
				|  |  | +    min.value = scalars[0];
 | 
	
		
			
				|  |  | +    max.value = scalars[0];
 | 
	
		
			
				|  |  | +    for (let index = 0; index <= scalars.length; index++) {
 | 
	
		
			
				|  |  | +      let scalar = scalars[index];
 | 
	
		
			
				|  |  | +      if (min.value > scalar) {
 | 
	
		
			
				|  |  | +        min.value = scalar;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if (max.value < scalar) {
 | 
	
		
			
				|  |  | +        max.value = scalar;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  //时间
 | 
	
		
			
				|  |  | +  function sleep(numberMillis) {
 | 
	
		
			
				|  |  | +    var now = new Date();
 | 
	
		
			
				|  |  | +    var exitTime = now.getTime() + numberMillis;
 | 
	
		
			
				|  |  | +    console.log(exitTime);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  function handleChange(val) {
 | 
	
		
			
				|  |  | +    arrvalue = val;
 | 
	
		
			
				|  |  | +    min.value = 0.0;
 | 
	
		
			
				|  |  | +    max.value = 1.0;
 | 
	
		
			
				|  |  | +    changeScalar();
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  //暂停
 | 
	
		
			
				|  |  | +  function suspend() {
 | 
	
		
			
				|  |  | +    isstop.value = false;
 | 
	
		
			
				|  |  | +    console.log(isstop.value);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  //滑块
 | 
	
		
			
				|  |  | +  function sliderchange(val) {
 | 
	
		
			
				|  |  | +    changeScalar();
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  //播放
 | 
	
		
			
				|  |  | +  function play(time) {
 | 
	
		
			
				|  |  | +    isstop.value = true;
 | 
	
		
			
				|  |  | +    const sleep = (timeout = time) =>
 | 
	
		
			
				|  |  | +      new Promise((resolve, reject) => {
 | 
	
		
			
				|  |  | +        setTimeout(resolve, timeout);
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    let timer = async (timeout) => {
 | 
	
		
			
				|  |  | +      while (count.value < endtime.value && isstop.value) {
 | 
	
		
			
				|  |  | +        await sleep(time);
 | 
	
		
			
				|  |  | +        changeScalar();
 | 
	
		
			
				|  |  | +        count.value++;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    timer(time);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  //回到上一页
 | 
	
		
			
				|  |  | +  function Prev() {
 | 
	
		
			
				|  |  | +    isstop.value = false;
 | 
	
		
			
				|  |  | +    count.value--;
 | 
	
		
			
				|  |  | +    changeScalar();
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  // 用来修改状态、触发更新的函数
 | 
	
		
			
				|  |  | +  function increment() {
 | 
	
		
			
				|  |  | +    isstop.value = false;
 | 
	
		
			
				|  |  | +    if (count.value == endtime.value) {
 | 
	
		
			
				|  |  | +      return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    count.value++;
 | 
	
		
			
				|  |  | +    changeScalar();
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  </script>
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  <style>
 | 
	
		
			
				|  |  | +  .controls {
 | 
	
		
			
				|  |  | +    position: absolute;
 | 
	
		
			
				|  |  | +    top: 25px;
 | 
	
		
			
				|  |  | +    left: 25px;
 | 
	
		
			
				|  |  | +    background: white;
 | 
	
		
			
				|  |  | +    padding: 12px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .haha {
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .tool {
 | 
	
		
			
				|  |  | +    position: fixed;
 | 
	
		
			
				|  |  | +    top: 50px;
 | 
	
		
			
				|  |  | +    left: 20px;
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +    z-index: 205;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .img {
 | 
	
		
			
				|  |  | +    width: 48px;
 | 
	
		
			
				|  |  | +    margin: -6px 0;
 | 
	
		
			
				|  |  | +    padding: 8px 10px;
 | 
	
		
			
				|  |  | +    background-color: rgba(255, 255, 255, 0.1);
 | 
	
		
			
				|  |  | +    font-size: 12px;
 | 
	
		
			
				|  |  | +    transform: scale(0.9);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .img span {
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +    display: inline-block;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .img .el-image {
 | 
	
		
			
				|  |  | +    width: 34px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .leftdialong {
 | 
	
		
			
				|  |  | +    padding: 15px;
 | 
	
		
			
				|  |  | +    width: 300px;
 | 
	
		
			
				|  |  | +    position: relative;
 | 
	
		
			
				|  |  | +    top: -248px;
 | 
	
		
			
				|  |  | +    left: 69px;
 | 
	
		
			
				|  |  | +    border-radius: 5px;
 | 
	
		
			
				|  |  | +    box-shadow: 0px 3px 10px rgba(255, 255, 255, 0.1);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .leftdialong .el-form-item__label {
 | 
	
		
			
				|  |  | +    font-size: 12px;
 | 
	
		
			
				|  |  | +    color: #fff !important;
 | 
	
		
			
				|  |  | +    padding-left: 6px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .time {
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +    font-size: 12px;
 | 
	
		
			
				|  |  | +    margin-bottom: 30px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .itemlist {
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .item {
 | 
	
		
			
				|  |  | +    background-color: rgba(255, 255, 255, 0.1);
 | 
	
		
			
				|  |  | +    margin: 5px;
 | 
	
		
			
				|  |  | +    padding: 5px 9px;
 | 
	
		
			
				|  |  | +    border-radius: 5px;
 | 
	
		
			
				|  |  | +    font-size: 14px;
 | 
	
		
			
				|  |  | +    transform: scale(0.8);
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .dialog-footer {
 | 
	
		
			
				|  |  | +    margin-top: 30px;
 | 
	
		
			
				|  |  | +    text-align: right;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .block {
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .demonstration {
 | 
	
		
			
				|  |  | +    padding: 5px 5px 5px 0;
 | 
	
		
			
				|  |  | +    font-size: 12px;
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +    display: inline-block;
 | 
	
		
			
				|  |  | +    width: 100px;
 | 
	
		
			
				|  |  | +    height: 24px;
 | 
	
		
			
				|  |  | +    line-height: 24px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .block .el-slider {
 | 
	
		
			
				|  |  | +    padding: 0 5px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .cascadeer .el-cascader {
 | 
	
		
			
				|  |  | +    width: 100%;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .cascadeer .asterisk-left {
 | 
	
		
			
				|  |  | +    width: 100% !important;
 | 
	
		
			
				|  |  | +    font-size: 12px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .btn {
 | 
	
		
			
				|  |  | +    background-color: rgba(255, 255, 255, 0.1);
 | 
	
		
			
				|  |  | +    margin: 5px;
 | 
	
		
			
				|  |  | +    padding: 5px 9px;
 | 
	
		
			
				|  |  | +    border-radius: 5px;
 | 
	
		
			
				|  |  | +    font-size: 14px;
 | 
	
		
			
				|  |  | +    transform: scale(0.8);
 | 
	
		
			
				|  |  | +    color: #fff;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  </style>
 | 
	
		
			
				|  |  | +  
 |