liuqiao 1 year ago
parent
commit
f673edd10b

+ 7 - 1
package-lock.json

@@ -22,7 +22,8 @@
         "sass": "^1.71.1",
         "sass-loader": "^13.3.3",
         "vue": "^3.3.4",
-        "vue-router": "4.0"
+        "vue-router": "4.0",
+        "webuploader": "^0.1.8"
       },
       "devDependencies": {
         "@typescript-eslint/eslint-plugin": "^6.7.2",
@@ -7306,6 +7307,11 @@
         "node": ">=4.0"
       }
     },
+    "node_modules/webuploader": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/webuploader/-/webuploader-0.1.8.tgz",
+      "integrity": "sha512-soZbBIqOiXGiPySqOIIkXz6u+trdWv2jZIuo+BK4KlOtgXEKsWq1DY2RHAwl5gNzQpeEWTz0OdTdV5UC5cdgJA=="
+    },
     "node_modules/webworker-promise": {
       "version": "0.5.0",
       "resolved": "https://registry.npmmirror.com/webworker-promise/-/webworker-promise-0.5.0.tgz",

+ 2 - 1
package.json

@@ -25,7 +25,8 @@
     "sass": "^1.71.1",
     "sass-loader": "^13.3.3",
     "vue": "^3.3.4",
-    "vue-router": "4.0"
+    "vue-router": "4.0",
+    "webuploader": "^0.1.8"
   },
   "devDependencies": {
     "@typescript-eslint/eslint-plugin": "^6.7.2",

BIN
src/assets/img/Group27.png


+ 79 - 4
src/view/InfoDialoges.vue

@@ -15,7 +15,7 @@
                 <el-radio-group v-model="classradio1" class="radio-group">
                     <el-radio label="Fire">火灾</el-radio>
                     <el-radio label="Water">突水</el-radio>
-                    <!-- <el-radio label="9">瓦斯爆炸</el-radio> -->
+                    <el-radio label="Gass">瓦斯爆炸</el-radio>
                 </el-radio-group>
             </div>
 
@@ -304,6 +304,73 @@
                 </div>
             </el-aside>
         </div>
+        <!-- 瓦斯爆炸 -->
+        <div class="common-layout" style="margin: 0;" v-show="leftcoll.Gass">
+            <el-aside width="278px" class="L_aside L_aside1 asideg asidegbg  leftbgimg">
+                <div class="demo-collapse">
+                    <el-collapse v-model="coolactiveName" accordion>
+                        <el-collapse-item name="1">
+
+                            <template #title>
+                                <el-icon class="iconimg Frame4" fit="contain"></el-icon>
+                                瓦斯爆炸<el-icon class="header-icon">
+                                </el-icon>
+                            </template>
+                            <div class="asides_content">
+                                <el-form :inline="true" :model="tuiyanobj" class="demo-form-inline">
+                                    <div class="l_padding " style="padding:20px 20px 20px 24px; ">
+                                        <ul>
+                                            <li>
+                                                <span class="inputtext_1">并行核数</span>
+                                                <div class="inputkuang"> <el-input v-model="tuiyanobj.dt" />
+                                                </div>
+                                            </li>
+                                            <li><span class="inputtext_1">时间步长</span>
+                                                <div class="inputkuang"> <el-input v-model="tuiyanobj.dt" />
+                                                    <span class="righttext">s</span>
+                                                </div>
+                                            </li>
+                                        
+                                            <li><span class="inputtext_1">模拟时长</span>
+                                                <div class="inputkuang"> <el-input v-model="tuiyanobj.totaltime" />
+                                                    <span class="righttext">s</span>
+                                                </div>
+                                            </li>
+                                            <li><span class="inputtext_1">输出步长</span>
+                                                <div class="inputkuang"> <el-input v-model="tuiyanobj.reportstep" />
+                                                    <span class="righttext">s</span>
+                                                </div>
+                                            </li>
+                                            <li><span class="inputtext_1">子迭代步数</span>
+                                                <div class="inputkuang"> <el-input
+                                                        v-model="tuiyanobj.interactionstep" />
+                                                </div>
+                                            </li>
+                                        </ul>
+                                    </div>
+                                    <div class="asdis_btn">
+                                        <div class="btn"><span class="spantext" @click="initial();">初始数据</span></div>
+                                        <div class="btn"><span class="spantext" @click="calculate();">开始计算</span></div>
+                                    </div>
+
+                                    <div class=" logs">
+                                        <div class="logs_pading">
+                                            <h4>模拟日志</h4>
+                                            <div class="footerTextBox">
+                                                <el-input class="footerText" type="textarea" id="textarea_id"
+                                                    v-model="rizhi.logs"></el-input>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </el-form>
+
+                            </div>
+
+                        </el-collapse-item>
+                    </el-collapse>
+                </div>
+            </el-aside>
+        </div>
     </div>
 </template>
 <!-- timestampToTime -->
@@ -319,6 +386,7 @@ import t2 from "@/assets/img/t2.png";
 import t3 from "@/assets/img/t3.png";
 import t4 from "@/assets/img/t4.png";
 import mitts from "@/utils/Bus"
+import icon1 from "@/assets/img/Group27.png";
 import closeimg from "@/assets/img/colse.png";
 import { timestampToTime } from '@/js/lindex.js'
 import { vtkmodel } from "@/control/vtkModel.js";
@@ -382,6 +450,7 @@ let classradio1 = ref('Fire');
 const leftcoll = ref({
     collfire: false,
     collwater: false,
+    Gass:false,
 });
 const monitor = ref(false);
 const dialog = ref({
@@ -560,13 +629,14 @@ const accident2 = (key) => {
             leftcoll.value.collfire = true;
         } else if (classradio.value== "Water") {
             leftcoll.value.collwater = true;
-        } else {
-
+        } else if(classradio.value== "Gass"){
+            leftcoll.value.Gass = true;
         }
         rewu();
     } else {
         leftcoll.value.collfire = false;
           leftcoll.value.collwater = false;
+          leftcoll.value.Gass = false;
     }
 
 }
@@ -950,7 +1020,12 @@ defineExpose({ monitor, accident2, leftcoll, classradio, aid, dialogVisible ,cha
         background-repeat: no-repeat;
         background-position: center;
     }
-
+    .Frame4 {
+        
+        background-image: url(../assets/img/Group27.png);
+        background-repeat: no-repeat;
+        background-position: center;
+    }
     .el-collapse,
     .el-collapse-item__header {
         border: none;

+ 4 - 2
src/view/appmian.vue

@@ -103,6 +103,7 @@ let titlefalse = ref(false);
 let resultbidui = ref();
 let mnindex = ref("");
 let resultleft = ref({});
+let datares=ref({});
 let resultright = ref({});
 let headerobj = ref({
   time: "",
@@ -174,12 +175,13 @@ const leftsimulation = (res,data) => {
   }
 
   if (resultleft.value.pickertime != resultright.value.pickertime ) {
-    ElMessage.error('事故开始时间不一样,无法进行比较')
+    ElMessage.error('事故时间不一样,无法进行比较')
     return;
   }
     
 //TODO 获取物理量
-resultbidui.value.endtime= Number(resultleft.value.totaltime)/Number(resultleft.value.reportstep);
+resultbidui.value.zdtime=res.acctime;
+resultbidui.value.endtime= Number(res.totaltime)/Number(res.reportstep);s
 resultbidui.value.initAid(resultleft.value.aid,resultright.value.aid);
 resultbidui.value.clickflat=true;
     }

+ 207 - 2
src/view/components/InfoDisaster.vue

@@ -127,6 +127,7 @@
         </div>
       </el-aside>
     </div>
+    <!-- 突水 -->
     <div class="common-layout" style="margin: 0" v-show="sour.collwater">
       <el-aside width="354px" class="L_aside L_aside1 asideg asidegbg leftbgimg1">
         <div class="demo-collapse">
@@ -251,6 +252,152 @@
         </div>
       </el-aside>
     </div>
+    <!-- 瓦斯爆炸 -->
+     <!--火灾左侧栏-->
+     <div class="common-layout" style="margin: 0" v-show="sour.Gass">
+      <el-aside width="354px" class="L_aside L_aside1 asideg asidegbg leftbgimg1">
+        <div class="demo-collapse">
+          <el-collapse v-model="coolactiveName1" accordion>
+            <el-collapse-item name="1">
+              <template #title>
+                <el-icon class="iconimg Frame4" fit="contain"></el-icon>
+                瓦斯<el-icon class="header-icon"> </el-icon>
+              </template>
+              <div class="asides_content">
+                <div class="jc_content tablecolor">
+                  <div class="jc_padding">
+                    <div class="xian btncolor tablefocus">
+                      <div class=dialog_header>
+                      <span class="text-color">文件上传:</span>
+                    </div>
+                   
+                  <el-form>
+                      <vue-uploader
+                      ref="bdf"
+                      :projectId="'81'"
+                      :solverType="'fem'"
+                      :accept="'.nml'"
+                      :name="'Load BDF File'"
+                     
+                    ></vue-uploader>
+                  </el-form>
+                  <!--  @handfiles="handfiles"
+                      @upoK='upDisOk'
+                      style="margin: 20px 0 0 0"
+                      @runstatezt1="runstatezt($event)" -->
+                    </div>
+               <!-- 瓦斯爆炸区域 -->
+               <div
+                      class="xian tablefocus"
+                      style="margin-top: 20px"
+                    >
+                      <div class="header_l header_z">
+                        <el-image :src="icon" fit="contain"></el-image>
+                        <h4 class="tianjia">瓦斯爆炸区域</h4>
+                        <div class="closeimg" @click="sdialog.disDisasterwter = false">
+                          <el-image :src="closeimg" fit="contain"></el-image>
+                        </div>
+                      </div>
+                      <el-table
+                        :data="gtableData"
+                        style="width: 100%"
+                        :max-height="tableHeight"
+                        :row-class-name="tableRowClassName"
+                        :header-cell-style="{ background: 'rgba(13, 22, 57, 0.96) ' }"
+                        @row-click="handleDelete3($event)"
+                        :highlight-current-row="currentrow1" 
+                      >
+                        <el-table-column prop="name" label="巷道" />
+                        <el-table-column prop="seti" label="开始位置" />
+                        <el-table-column prop="seti" label="结束位置" />>
+                      </el-table>
+                      <div class="asdis_btn">
+                        <div
+                          class="flex_a"
+                          @click="
+                            firinit();
+                            sdialog.adddwater = true;
+                          "
+                        >
+                          <div class="btns"><span class="spantext">添加</span></div>
+                        </div>
+                        <div class="flex_a" @click="zaiyuxiugai()">
+                          <div class="btns"><span class="spantext"> 修改</span></div>
+                        </div>
+                        <div
+                          class="flex_a"
+                          @click="
+                            shanchu('2');
+                          "
+                        >
+                          <div class="btns"><span class="spantext">删除</span></div>
+                        </div>
+                        <div class="flex_a" @click="sdialog.disDisasterwter = false">
+                          <div class="btns"><span class="spantext">确定</span></div>
+                        </div>
+                      </div>
+                    </div>
+                  <!-- 瓦斯爆炸区域 -->
+               <div
+                      class="xian tablefocus"
+                      style="margin-top: 20px"
+                    >
+                      <div class="header_l header_z">
+                        <el-image :src="icon" fit="contain"></el-image>
+                        <h4 class="tianjia">积聚区</h4>
+                        <div class="closeimg" @click="sdialog.disDisasterwter = false">
+                          <el-image :src="closeimg" fit="contain"></el-image>
+                        </div>
+                      </div>
+                      <el-table
+                        :data="gjtableData"
+                        style="width: 100%"
+                        :max-height="tableHeight"
+                        :row-class-name="tableRowClassName"
+                        :header-cell-style="{ background: 'rgba(13, 22, 57, 0.96) ' }"
+                        @row-click="handleDelete3($event)"
+                        :highlight-current-row="currentrow1" 
+                      >
+                        <el-table-column prop="name" label="区域名" />
+                        <el-table-column prop="seti" label="类型" />
+                        <el-table-column prop="seti" label="瓦斯浓度" />>
+                      </el-table>
+                      <div class="asdis_btn">
+                        <div
+                          class="flex_a"
+                          @click="
+                            firinit();
+                            sdialog.adddwater = true;
+                          "
+                        >
+                          <div class="btns"><span class="spantext">添加</span></div>
+                        </div>
+                        <div class="flex_a" @click="zaiyuxiugai()">
+                          <div class="btns"><span class="spantext"> 修改</span></div>
+                        </div>
+                        <div
+                          class="flex_a"
+                          @click="
+                            shanchu('2');
+                          "
+                        >
+                          <div class="btns"><span class="spantext">删除</span></div>
+                        </div>
+                        <div class="flex_a" @click="sdialog.disDisasterwter = false">
+                          <div class="btns"><span class="spantext">确定</span></div>
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+
+                  <div style="height: 200px"></div>
+                </div>
+              </div>
+            </el-collapse-item>
+          </el-collapse>
+        </div>
+      </el-aside>
+    </div>
     <!-- 灾害点源数据的添加-->
     <el-dialog
       v-model="sdialog.dianadddialog"
@@ -583,11 +730,17 @@
     </el-dialog>
   </div>
   <selfdialogs ref="dialogtrue" @Dtext="Dtext"></selfdialogs>
+  <!-- <filesload
+      ref="filesload"
+      :fileurls="fileurls"
+      @fileLoadeState="fileLoadeState($event)"
+    ></filesload> -->
 </template>
 <script setup>
 import { computed, ref, onMounted, reactive, toRef } from "vue";
 import { request, uploadFile } from "@/utils/request";
 import icon from "@/assets/img/icon.png";
+import icon1 from "@/assets/img/Group27.png";
 import closeimg from "@/assets/img/colse.png";
 import {
   ElMessage,
@@ -598,8 +751,12 @@ import {
 } from "element-plus";
 import { Calendar, Search } from "@element-plus/icons-vue";
 import { c } from "@kitware/vtk.js/macros2";
+import { vtkmodel } from "@/control/vtkModel.js";;
 import selfdialogs from "./SetPipe.vue";
-import { vtkmodel } from "@/control/vtkModel.js";
+import vueUploader from "./fileuploads.vue";
+// import filesload from "./filesloads.vue";
+
+
 
 const changeModel= ()=>  {
   vtkmodel.clearJgAddMode();
@@ -607,6 +764,12 @@ const changeModel= ()=>  {
 }
 let currentrow = ref(false);
 let currentrow1 = ref(false);
+let gtableData=ref([
+  {name:'1',seti:0.1}
+]);
+let gjtableData=ref([
+  {name:'1',seti:0.1}
+]);
 const props = defineProps({
   classradio: {
     type: String,
@@ -615,6 +778,7 @@ const props = defineProps({
     type: String,
   },
 });
+let fileurls=ref([]);
 let zaihai = ref({
   addEied: "",
 });
@@ -638,6 +802,7 @@ const dialogVisible = ref(true);
 const sour = ref({
   collfire: false,
   collwater: false,
+  Gass:false,
 });
 let jiancobj = ref({});
 let firepid = ref("");
@@ -686,10 +851,15 @@ const accident3 = (key) => {
     } else if (props.classradio == "Water") {
       sour.value.collwater = true;
       sour.value.collfire = false;
+    }else if(props.classradio == "Gass"){
+      sour.value.collwater = false;
+      sour.value.collfire = false;
+      sour.value.Gass = true;
     }
   } else {
     sour.value.collwater = false;
     sour.value.collfire = false;
+    sour.value.Gass = false;
   }
 };
 // 3D数据显示
@@ -1070,7 +1240,34 @@ const fundeledata3 = () => {
       ElMessage.error(err.returnMsg);
     });
 };
-
+//文件上传的方法
+const handfiles = (file) => {
+      files.value = "";
+     files.value = file;
+     console.log( files.value);
+    }
+    const runstatezt=(res)=>{
+      //  this.disabledok=res;
+    }
+      const upDisOk=()=>{
+      // this.disOK=false;
+    }
+     //load状态回调
+     const fileLoadeState=(files)=> {
+      console.log(files);
+      files.forEach((file) => {
+        this.loadObjs.forEach((obj) => {
+          if (obj.type == 2) {
+            if (obj.filename === file.name) {
+              obj.percentage = file.percentage;
+            }
+          }
+          if (obj.type == 1) {
+            //  obj.message=file.message;
+          }
+        });
+      });
+    }
 onMounted(() => {
   
 });
@@ -1161,6 +1358,11 @@ defineExpose({ sour, accident3, handledisaster,changeModel });
     background-repeat: no-repeat;
     background-position: center;
   }
+  .Frame4 {
+    background-image: url(../../assets/img/Group27.png);
+    background-repeat: no-repeat;
+    background-position: center;
+  }
   .el-collapse,
   .el-collapse-item__header {
     border: none;
@@ -1503,4 +1705,7 @@ defineExpose({ sour, accident3, handledisaster,changeModel });
 .guand_1 .asdis_btn {
   margin-top: -9px;
 }
+.text-color{
+  color: #fff;
+}
 </style>

+ 107 - 0
src/view/components/filesloads.vue

@@ -0,0 +1,107 @@
+<template>
+    <div> </div>
+</template>
+<script setup>
+import { ref, onMounted, onBeforeUnmount, reactive, onUnmounted } from "vue";
+import { RouterView, RouterLink } from "vue-router";
+import { request, uploadFile } from "@/utils/request";
+import { ElMessage, ElButton, ElDialog, ElSelect } from "element-plus";
+import icon from "@/assets/img/icon.png";
+let emit = defineEmits(['fileLoadeState'])
+let imggifs = ref(icon);
+let visiable = ref(false)
+let files = ref([]);
+const props = defineProps({ fileurls: Array });
+onMounted(() => {
+    init();
+});
+const handleClose = () => {
+
+}
+const loadsucess = (data) => {
+
+}
+const loaderror = (err) => {
+
+    console.error('An error happened');
+}
+const init = () => {
+
+    if (props.fileurls === undefined) return;
+    files.value = [];
+    props.fileurls.forEach(url => {
+        let names = url.split("/");
+        let name = names[names.length - 1];
+        let file = {
+            url: url,
+            name: name,
+            percentage: 0,
+        }
+        files.value.push(file);
+        loader.load(
+            url,
+            function (xhr) {
+                visiable.value = true
+                file.percentage = Math.floor(xhr.loaded / xhr.total * 100)
+            },
+        )
+    })
+}
+const load = (url) => {
+    if (!props.fileurls.includes(url)) {
+        props.fileurls.push(url);
+    }
+    init();
+}
+watch(
+    files,
+    (newVal, oldVal) => {
+     emit("fileLoadeState", newVal);
+    },
+    {
+        deep: true,
+        immediate: false,
+    }); //深度监视
+</script>
+<style scoped>
+.lodingimg {
+    width: 200px;
+    height: 150px;
+
+}
+
+.img {
+    width: 100%;
+    height: 100%;
+    margin-top: -40px;
+}
+
+.loding {
+    width: 100%;
+    text-align: center;
+
+    position: absolute;
+    bottom: 0;
+    text-align: center;
+}
+
+.lodgright .el-col {
+    padding: 10px 0;
+
+}
+
+.lgleft {
+    position: relative;
+    overflow: hidden;
+
+}
+
+.lodgright {
+    padding: 10px 5px;
+
+}
+
+.lgcoent {
+    padding-bottom: 10px;
+}
+</style>

+ 306 - 0
src/view/components/fileuploads.vue

@@ -0,0 +1,306 @@
+<template>
+  <div class="webuploader-container">
+        <div :id="'uploader'+upId">
+                <el-row>
+                    <!-- <el-col :span="6"> {{name}}  </el-col>                   
+                    <el-col :span="6"> <div :id="'picker'+upId" class="text_color" >选择文件</div>  </el-col> -->
+                    <!-- <el-button :id="'picker'+upId"> {{name}} </el-button> -->
+                    <div class="btntext upname" :id="'picker'+upId">{{name}}</div>
+                </el-row>
+
+                <el-row v-for="(fileObj,key) in files" :key="key" class="disflex">
+                    <el-col :span="6">{{fileObj.name}} </el-col>
+                    <el-col :span="8"><el-progress :percentage="fileObj.percentage"></el-progress></el-col>
+                    <el-col :span="5">{{fileObj.msg}}</el-col>
+                    <el-col :span="5"> <el-button type="danger" @click="fileDel(fileObj.id)" :icon="Delete" circle /></el-col>
+                </el-row>
+                <!-- <el-button size="mini" @click="uploader.upload()">开始上传</el-button> -->
+        </div>
+    </div>
+
+
+</template>
+<script setup>
+import $ from 'jquery' ;
+import WebUploader from 'webuploader';
+import store from "@/store";
+import { request, uploadFile } from "@/utils/request";
+import { ElMessage, ElButton, ElDialog } from "element-plus";
+import {
+  Check,
+  Delete,
+  Edit,
+  Message,
+  Search,
+  Star,
+} from '@element-plus/icons-vue'
+const props = defineProps({ 
+         projectId: String,
+        solverType: String,
+        accept:String,
+        upId:String,
+        name:String,
+        namelist:Array,//文件名的集合
+ });
+let runupboolen=ref(true);
+let uploader=ref(undefined);
+let fileName=ref(undefined);
+let md5=ref('1212');
+let files=ref([]);
+let nmllist=ref([]);
+let gridFileId=ref('');
+let boundaryFileId=ref('');
+let uuid=ref('');
+let nmlid=ref('');
+let hcfdBoundarys=ref([]);
+onMounted(() => {
+   getUUID()
+ uuid.value= getUUID()
+    initWebUploader();
+
+});
+const getUUID=()=> {
+          return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+          
+              var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
+              return v.toString(16);
+          })
+          
+     }
+      //fembdf绑定
+      const  fembdf=(bfid)=>{
+                let params = {
+                            transCode: "FEM001",
+                            pid: props.projectId,
+                            gridFileId:bfid,
+                            };
+                      
+                request(params)
+                    .then((res) => {
+                     console.log("绑定成功")
+                    
+                })
+                .catch((err) => {});
+            }
+const  initWebUploader=()=>{
+           files.value=[];
+           uploader.value=WebUploader.create({
+                // swf文件路径
+                swf: './Uploader.swf',
+                // 文件接收服务端。
+                server:import.meta.env.VITE_BASE_URL+'/TransServlet',
+                //文件上传请求的参数表,每次发送都会发送此对象中的参数。
+                formData: {
+                
+                },
+                // 选择文件的按钮。可选。
+                // 内部根据当前运行是创建,可能是input元素,也可能是flash.
+                pick: {
+                        id:'#picker'+props.upId,
+                        multiple:true
+                      },
+                // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
+                  resize: false,
+                // 开起分片上传。
+                chunked: true,
+                chunkSize: 2 * 1024 * 1024,
+                threads :4,
+
+            })
+            // 当有文件被添加进队列的时候
+      
+            uploader.value.on( 'fileQueued', file=> {
+                console.log(2222);
+               fileName.value=file.name;
+             console.log(fileName.value);
+                const fax=fileName.value.slice(-4) 
+                if(props.accept.indexOf(fax)<0){//判断上传支持文件类型
+                    uploader.value.reset();
+                    ElMessage.error("只支持" +props.accept+"格式文件!");
+                    return;
+                }
+                uploader.value.md5File(file)
+                .progress(percentage=> {//显示加密进度
+                     console.log('Percentage:', percentage);
+                     })
+                .then(md5 =>{ // 完成
+                     md5.value=md5;
+             });
+                if(files.value.length>0){
+                   uploader.value.removeFile(files.value[0].id);
+                  files.value=[];
+                }
+              
+                files.value.push({
+                    id:file.id,
+                    name:file.name,
+                    msg:"等待上传...",
+                    percentage:0
+                })
+              uploader.value.upload();
+           
+            });
+            
+            /**文件发送前
+             *  object {Object}
+                data {Object}默认的上传参数,可以扩展此对象来控制上传参数。
+                headers {Object}可以扩展此对象来控制上传头部
+             */
+             uploader.value.on('uploadBeforeSend', (file,data,headers)=> {
+               data.chunk=file.chunk;
+               data.chunks=file.chunks;
+               data.bfid=uuid.value;
+               data.fileName=fileName.value;
+            //    data.pid=v_this.projectId;
+            //    data.solverType=v_this.solverType;
+            //    data.md5=v_this.md5;
+            //    data.uploadFlag=2;//1 普通 2覆盖 3续传
+               data.channelNo ='service';
+               data.clientToken='e47b87eec69545559d1e81e56626da68';
+               data.transCode='B00028';
+               data.userId='5f06c8bc77234f969d13e160b54c27e3';
+               headers.Content='multipart';
+               headers.Type='form-data';
+
+            })
+           // 文件上传过程中创建进度条实时显示。
+           uploader.value.on( 'uploadProgress', ( file, percentage ) =>{
+                let prage= Math.floor(percentage*100);
+                // v_this.$emit('childFn',{name:v_this.name,percentage:prage})
+                files.value.forEach(fileObj=>{
+                    if(fileObj.id=file.id)
+                    fileObj.msg='上传中';
+                    fileObj.percentage=prage;
+                })
+                //    v_this.$nextTick(()=>{
+                // v_this.$emit('runstatezt1', v_this.runupboolen);
+                //     })
+            });
+            uploader.value.on( 'uploadSuccess', ( file ,response) =>{
+                console.log(file.ext);
+            console.log(response);
+               gridFileId.value=response.bfid;
+                let params = {
+                    transCode: "B00029",
+                    bfid: response.bfid,
+                };
+                request(params)
+                    .then((res) => {
+                    console.log(res);
+                   files.value.forEach((fileObj) => {
+                        if ((fileObj.id = file.id)) {
+                        fileObj.msg = "已上传";
+                        // v_this.$emit('upoK')
+                       runupboolen.value=false;
+                           v_this.$nextTick(()=>{
+                        // v_this.$emit('runstatezt1', v_this.runupboolen);
+                            })
+                        }
+                        if (file.ext=='bdf') {
+                        fembdf(response.bfid);
+                        }else if(file.ext == "igs"||file.ext == "sat"||file.ext == "sab"||file.ext == ".x_t"
+                ||file.ext == "x_b"||file.ext == "iges"||file.ext == "step"||file.ext == "stp"||file.ext == "stl"){
+                          bindmesh(response.bfid,file.ext);  
+                        }
+                    });
+                    })
+                    .catch((err) => {});
+              
+              
+            });
+            //
+            /**
+             * 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为false, 则此文件将派送server类型的uploadError事件。
+             * object {Object}
+                ret {Object}服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析
+             */
+           uploader.value.on('uploadAccept',(object,res)=>{
+               if(res.returnCode=="000000000"){
+                   return true;
+               }else{
+                ElMessage.error(res.returnMsg);
+                   return false;
+               }
+            });
+           uploader.value.on( 'uploadError', ( file ,reason)=> {
+                $( '#'+file.id ).text(file.name+'上传出错');
+                getUUID();
+                   uuid.value= getUUID();
+            });
+
+          uploader.value.on('uploadComplete', file => {
+                // $( '#'+file.id ).find('.progress').fadeOut();
+            });
+            
+        }
+        const uploaderClear=()=>{
+  
+             uploader.value.reset();
+             percentage.value=0;
+            files.value=[];
+        }
+     const fileDel=(fileId)=>{
+         
+                  getUUID();
+                   uuid.value= getUUID();
+           files.value=files.value.filter(fileObj=>{
+                if( fileObj.id == fileId){
+                       console.log(fileObj);
+                  uploader.value.removeFile(fileId);  
+           
+                }
+               return  fileObj.id != fileId
+              
+            })     
+  
+        }
+
+</script>
+<style>
+.webuploader-container {
+	position: relative;
+}
+.webuploader-pick{
+    color: #fff !important;
+}
+.webuploader-element-invisible {
+	position: absolute !important;
+	clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
+    clip: rect(1px,1px,1px,1px);
+}
+.webuploader-pick {
+	position: relative;
+	display: inline-block;
+	cursor: pointer;
+    padding: 1px 2px;
+    font-size: 12px;
+	color: #606266;
+	text-align: center;
+	border-radius: 3px;
+	overflow: hidden;
+}
+.webuploader-pick-hover {
+	background: #00a2d4;
+}
+
+.webuploader-pick-disable {
+	opacity: 0.6;
+	pointer-events:none;
+}
+.disflex{
+    display: flex;
+    align-items: center;
+}
+.text_color  .webuploader-pick{
+   color: #d5d5d5;
+}
+.el-progress__text{
+ color: #d5d5d5 !important;
+}
+.disflex .el-col{
+color: #fff;
+}
+.disflex .el-icon{
+    font-size: 20px;
+}
+</style>

+ 118 - 73
src/view/result.vue

@@ -1,19 +1,22 @@
 <template>
   <!--结果对比 -->
   <div class="resultyem" v-show="resultyem">
-    <div class="publicleft"  v-show="clickflat">
+    <div class="publicleft" v-show="clickflat">
       <div class="resultime">
         <div class="text">指定时间</div>
-        <div class="time">{{ timeline }}</div>
+        <!-- <div class="newtime">
+              <el-date-picker
+                v-model="zdtime"
+                type="datetime"
+                placeholder="Select date and time"
+                @change="zdtimechange"
+              />
+            </div> -->
+          <div class="time">{{ timeline }}</div>
       </div>
       <!-- 动画 -->
       <div class="animation_s">
-        <el-slider
-          :max="endtime"
-          :min="starttime"
-          v-model="formInline.count"
-          @change="sliderchange"
-        >
+        <el-slider :max="endtime" :min="starttime" v-model="formInline.count" @change="sliderchange">
         </el-slider>
         <div class="tanniu">
           <ul>
@@ -26,7 +29,7 @@
               <p>播放</p>
             </li>
             <li>
-              <el-image :src="t3" fit="contain"  @click="suspend()"></el-image>
+              <el-image :src="t3" fit="contain" @click="suspend()"></el-image>
               <p>暂停</p>
             </li>
             <li>
@@ -40,49 +43,37 @@
       <div class="heigjie">
         <div class="he_pading1 color1">
           <el-form-item label="物理量:" v-if="props.classradio == 'Fire'">
-            <el-select
-              v-model="formInline.region"
-              @change="regionchange($event)"
-              placeholder="请选择"
-            >
-              <el-option
-                v-for="item in strResultFormatlist"
-                :key="item.id"
-                :label="item.name"
-                :value="item.value"
-              ></el-option>
+            <el-select v-model="formInline.region" @change="regionchange($event)" placeholder="请选择">
+              <el-option v-for="item in strResultFormatlist" :key="item.id" :label="item.name"
+                :value="item.value"></el-option>
             </el-select>
           </el-form-item>
           <div class="wotermn" v-else>
-                <span>物理量:</span>
-                <span>水位</span>
-              </div>
+            <span>物理量:</span>
+            <span>水位</span>
+          </div>
         </div>
       </div>
     </div>
     <div class="result_left results">
-      <div class="elimgmn" >
+      <div class="elimgmn">
         <div class="bceligmn" @click="hazardtype('1')">
-        <el-image :src="t5" fit="contain"></el-image>
-        <div class="mntext" :title="mntext1" >{{ mntext1 }}</div>
-      </div>
-      <!-- <div class="mnclose"><el-image :src="t6" fit="contain"></el-image></div> -->
+          <el-image :src="t5" fit="contain"></el-image>
+          <div class="mntext" :title="mntext1">{{ mntext1 }}</div>
+        </div>
+        <!-- <div class="mnclose"><el-image :src="t6" fit="contain"></el-image></div> -->
       </div>
-      <resultLeft
-        ref="setleftAid"
-        :region="formInline.region"
-        :count="formInline.count"
-      />
+      <resultLeft ref="setleftAid" :region="formInline.region" :count="formInline.count" />
     </div>
     <div class="result_right results">
-      <div class="elimgmn" >
+      <div class="elimgmn">
         <div class="bceligmn" @click="hazardtype('2')">
-        <el-image :src="t5" fit="contain"></el-image>
-        <div class="mntext" :title="mntext2" >{{ mntext2 }}</div>
-      </div>
-      <!-- <div class="mnclose"><el-image :src="t6" fit="contain"></el-image></div> -->
+          <el-image :src="t5" fit="contain"></el-image>
+          <div class="mntext" :title="mntext2">{{ mntext2 }}</div>
+        </div>
+        <!-- <div class="mnclose"><el-image :src="t6" fit="contain"></el-image></div> -->
       </div>
-      <resultRight  ref="setrightAid" :region="formInline.region" :count="formInline.count" />
+      <resultRight ref="setrightAid" :region="formInline.region" :count="formInline.count" />
     </div>
   </div>
 </template>
@@ -119,19 +110,20 @@ let aid = ref(Number);
 let timeline = ref("2024-03-03 14:00");
 let setleftAid = ref();
 let setrightAid = ref();
-let clickflat=ref(false);
-let mntext1=ref('灾情模拟1');
-let mntext2=ref('灾情模拟2');
+let clickflat = ref(false);
+let mntext1 = ref('灾情模拟1');
+let mntext2 = ref('灾情模拟2');
 const formInline = ref({
   region: "shanghai",
   count: 0,
 });
+const zdtime = ref("");
 const strResultFormatlist = ref([]);
 const accident6 = (key, id) => {
   aid.value = id;
 
   if (key == "5") {
-    vtkmodel.clearAll(); 
+    vtkmodel.clearAll();
     resultyem.value = true;
   } else {
     resultyem.value = false;
@@ -143,10 +135,20 @@ const newtime = () => {
     timeline.value = timestampToTime(timestamp);
   }, 1000);
 };
+// 时间选择
+
+function zdtimechange() {
+  const zdtimestamp = Date.parse(zdtime.value);
+  const zdtimeDate = new Date(zdtimestamp);
+  //console.log(zdtimeDate);
+  // reddate(zdtimeDate);
+
+}
+
 //滑块
 function sliderchange(val) {
   // fcon.step = count.value;
-console.log(val);
+  console.log(val);
 }
 //回到上一页
 function Prev() {
@@ -161,10 +163,10 @@ function play(time) {
       setTimeout(resolve, timeout);
     });
   let timer = async (timeout) => {
-    while (formInline.value.count  < endtime.value && isstop.value) {
+    while (formInline.value.count < endtime.value && isstop.value) {
       if (isstop.value == true) {
         await sleep(time);
-        formInline.value.count ++;
+        formInline.value.count++;
         // fcon.step = formInline.value.count ;
         // vtkScalarRead();
         // getMonitor();
@@ -180,11 +182,11 @@ function suspend() {
 // 快进
 function increment() {
   isstop.value = false;
-  if ( formInline.value.count  == endtime.value) {
+  if (formInline.value.count == endtime.value) {
     return;
   }
-  formInline.value.count ++;
-  console.log( formInline.value.count );
+  formInline.value.count++;
+  console.log(formInline.value.count);
   // vtkScalarRead();
   // getMonitor();
 }
@@ -214,11 +216,11 @@ const hazardtype = (val) => {
 
 const initAid = (leftAid, rightAid) => {
   console.log("result.vue", leftAid, rightAid);
-  getMonitor(leftAid,rightAid);
+  getMonitor(leftAid, rightAid);
 };
 
 //监测点数据获取
-async function getMonitor(leftAid,rightAid) {
+async function getMonitor(leftAid, rightAid) {
   const params = {
     transCode: "D10016",
     aid: leftAid,
@@ -245,7 +247,7 @@ async function getMonitor(leftAid,rightAid) {
         );
         setrightAid.value.rightChangAid(
           rightAid,
-          formInline.value.count+ 1,
+          formInline.value.count + 1,
           formInline.value.region
         );
         //TODO right AID 没加
@@ -256,7 +258,7 @@ async function getMonitor(leftAid,rightAid) {
         });
       }
     })
-    .catch((err) => {});
+    .catch((err) => { });
 }
 onMounted(() => {
   newtime();
@@ -268,7 +270,7 @@ onUnmounted(() => {
     clearInterval(timing.value);
   }
 });
-defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
+defineExpose({ accident6, initAid, mntext1, mntext2, clickflat, endtime,zdtime });
 </script>
 <style scoped lang="scss">
 .heigjie {
@@ -278,10 +280,12 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
   background-image: url(/src/assets/img/Group10.png) !important;
   background-repeat: no-repeat;
   background-position: center;
+
   .he_pading1 {
     padding: 10px 9px 0 7px;
   }
 }
+
 .animation_s {
   padding: 25px;
 }
@@ -289,6 +293,7 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
 .tanniu ul {
   margin-top: 20px;
   display: flex;
+
   li {
     flex: 1;
     text-align: center;
@@ -304,6 +309,7 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
     }
   }
 }
+
 .resultyem {
   width: 100%;
   position: absolute;
@@ -314,24 +320,24 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
   box-shadow: inset 0px 0px 17px 5px rgba(12, 97, 197, 0.2);
   border-radius: 0px 0px 0px 0px;
 }
+
 .results {
   flex: 1;
   position: relative;
 }
+
 .result_left,
 .result_right {
   height: calc(100vh - 70px);
   border-right: 2px solid;
   /* border-right: 2px solid; */
   /* border-image: linear-gradient(180deg, rgba(31, 107, 255, 0), rgba(255, 255, 255, 0.8)) 1 1; */
-  border-image: linear-gradient(
-      180deg,
+  border-image: linear-gradient(180deg,
       rgba(255, 255, 255, 0.5),
-      rgba(255, 255, 255, 0.5)
-    )
-    1 1;
+      rgba(255, 255, 255, 0.5)) 1 1;
   box-shadow: inset 0px 0px 17px 5px rgba(12, 97, 197, 0.2);
 }
+
 .publicleft {
   width: 270px;
   height: calc(100vh - 70px);
@@ -339,19 +345,19 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
   border-right: 2px solid;
   /* border-right: 2px solid; */
   /* border-image: linear-gradient(180deg, rgba(31, 107, 255, 0), rgba(255, 255, 255, 0.8)) 1 1; */
-  border-image: linear-gradient(
-      180deg,
+  border-image: linear-gradient(180deg,
       rgba(255, 255, 255, 0.5),
-      rgba(255, 255, 255, 0.5)
-    )
-    1 1;
+      rgba(255, 255, 255, 0.5)) 1 1;
   box-shadow: inset 0px 0px 17px 5px rgba(12, 97, 197, 0.2);
 }
+
 .resultime {
+display: flex;
   height: 70px;
   border-bottom: 1px solid;
   border-image: linear-gradient(347deg, rgb(16, 92, 240), rgb(18, 48, 102)) 1 1;
 }
+
 .resultime .text {
   font-size: 14px;
   width: 88px;
@@ -363,7 +369,8 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
   border-image: linear-gradient(347deg, rgb(16, 92, 240), rgb(18, 48, 102)) 1 1;
   float: left;
 }
-.resultime .time {
+
+.resultime .time{
   line-height: 70px;
   font-family: Microsoft YaHei UI, Microsoft YaHei UI;
   font-weight: bold;
@@ -385,9 +392,11 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
   font-style: normal;
   text-transform: none;
 }
+
 .heigjie .el-select .el-input__inner {
   color: #fff;
 }
+
 .results .elimgmn {
   position: absolute;
   top: 0;
@@ -395,7 +404,8 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
   z-index: 111;
   width: 100%;
 }
-.bceligmn{
+
+.bceligmn {
   width: 212px;
   height: 52px;
   padding: 0px 20px;
@@ -403,11 +413,17 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
   background-image: url(../assets/img/303.png);
   margin: 20px;
 }
-.bceligmn .el-image{
+
+.bceligmn .el-image {
   float: left;
-  margin-top:13px;
+  margin-top: 13px;
 }
-.mntext {overflow: hidden;white-space: nowrap;text-overflow:ellipsis;  font-weight: 400;
+
+.mntext {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  font-weight: 400;
   font-size: 13px;
   color: #ffffff;
   text-align: left;
@@ -415,12 +431,41 @@ defineExpose({ accident6, initAid,mntext1,mntext2,clickflat,endtime });
   text-transform: none;
   padding-left: 10px;
 }
-.mnclose{
+
+.mnclose {
   position: absolute;
-    right: 10px;
-    top: 20px;
+  right: 10px;
+  top: 20px;
 }
-.wotermn{
+
+.wotermn {
   line-height: 34px;
 }
+.resultime .newtime{
+  width: 190px;
+}
+.resultime .newtime .el-input__inner{
+  line-height: 70px;
+  font-family: Microsoft YaHei UI, Microsoft YaHei UI;
+  font-weight: bold;
+  font-size: 13px;
+  color: #ff0f0f !important;
+  line-height: 70px;
+  text-align: left;
+  font-style: normal;
+  text-transform: none;
+}
+.resultime .el-input__wrapper{
+  height:70px;
+  background: none !important;
+  border: none;
+  box-shadow:none;
+}
+.resultime .el-input__prefix{
+  display: none;
+}
+
+.newtime .el-input{
+  width: 180px !important; 
+}
 </style>