From 28de79b44655118b1deffb5c9a8b06ec2904905b Mon Sep 17 00:00:00 2001
From: suerprisePlus <15810472099@163.com>
Date: 星期四, 13 六月 2024 17:38:24 +0800
Subject: [PATCH] 功能添加

---
 src/views/Synthesis.vue |  296 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 288 insertions(+), 8 deletions(-)

diff --git a/src/views/Synthesis.vue b/src/views/Synthesis.vue
index 1f634e3..78002b6 100644
--- a/src/views/Synthesis.vue
+++ b/src/views/Synthesis.vue
@@ -7,37 +7,311 @@
 -->
 <template>
   <div class="MapBox">
-    <div class="banner"
-         :class="{ leftMap: screenFlag }">
+    <div class="banner" :class="{ leftMap: screenFlag }">
       <div id="cesiumContainer"></div>
     </div>
-    <div class="leftMap"
-         v-if="screenFlag">
+    <div class="leftMap" v-if="screenFlag">
       <div id="cesiumContainer2"></div>
     </div>
     <!-- 鍥惧眰绠$悊 -->
-    <layer-manager v-show="store.state.layerFlag == 'layerManage'"></layer-manager>
+    <layer-manager
+      ref="layerManaget"
+      v-show="store.state.layerFlag == 'layerManage'"
+    ></layer-manager>
     <!-- 椤堕儴鑿滃崟 -->
     <layer-menu></layer-menu>
     <!-- 鍙冲嚮鑿滃崟浜嬩欢 -->
     <rightMenuLayer v-show="store.state.rightMeuFlag"></rightMenuLayer>
     <!-- 鍐涗簨鏍囩粯 -->
-    <military-plotting-layer v-if="store.state.layerFlag == 'militaryPlot'"></military-plotting-layer>
+    <military-plotting-layer
+      v-if="store.state.layerFlag == 'militaryPlot'"
+    ></military-plotting-layer>
+    <!-- 椋炶瀹氫綅 -->
+    <flyPlan ref="flyPlanet" v-show="store.state.setFlyPlanFlag"></flyPlan>
   </div>
+  <!-- 娣诲姞鍥惧眰 -->
+  <el-dialog
+    v-model="store.state.setAddEntityList.flag"
+    :title="store.state.setAddEntityList.title"
+    width="700"
+    :before-close="handleClose"
+  >
+    <div v-if="store.state.setAddEntityList.type === 1">
+      <el-form>
+        <el-form-item label="鍥惧眰鍚嶇О">
+          <el-input size="small" v-model="layerFrom.name" />
+        </el-form-item>
+        <el-form-item label="鍥惧眰绫诲瀷">
+          <el-select size="small" v-model="layerFrom.sourceType">
+            <el-option label="3DTiles" value="3DTiles" />
+            <el-option label="WMS" value="WMS" />
+            <el-option label="TMS" value="TMS" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鍥惧眰鍦板潃">
+          <el-input size="small" v-model="layerFrom.url" />
+        </el-form-item>
+      </el-form>
+    </div>
+    <div v-else-if="store.state.setAddEntityList.type === 2">
+      <el-form>
+        <el-form-item label="鍚嶇О">
+          <el-input size="small" v-model="entityFrom.name" />
+        </el-form-item>
+        <el-form-item label="缁忓害" v-show="entityFlag">
+          <el-input size="small" v-model="entityFrom.lon" />
+        </el-form-item>
+        <el-form-item label="绾害" v-show="entityFlag">
+          <el-input size="small" v-model="entityFrom.lat" />
+        </el-form-item>
+        <el-form-item label="楂樺害" v-show="entityFlag">
+          <el-input size="small" v-model="entityFrom.alt" />
+        </el-form-item>
+        <el-form-item label="heading" v-show="entityFlag">
+          <el-input size="small" v-model="entityFrom.heading" />
+        </el-form-item>
+        <el-form-item label="pitch" v-show="entityFlag">
+          <el-input size="small" v-model="entityFrom.pitch" />
+        </el-form-item>
+        <el-form-item label="roll" v-show="entityFlag">
+          <el-input size="small" v-model="entityFrom.roll" />
+        </el-form-item>
+        <el-form-item label="鍋滅暀鏃堕暱(s)" v-show="entityFlag">
+          <el-input size="small" v-model="entityFrom.time" />
+        </el-form-item>
+      </el-form>
+    </div>
+    <div v-else-if="store.state.setAddEntityList.type === 3">
+      <el-form>
+        <el-form-item>
+          <el-radio-group v-model="importFrom.type" class="ml-4">
+            <el-radio value="1" size="large">鍦ㄧ嚎鍦板潃</el-radio>
+            <el-radio value="2" size="large">鏈湴鏂囦欢</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item v-show="importFrom.type == '1'">
+          <el-input v-model="importFrom.url"></el-input>
+        </el-form-item>
+        <el-form-item v-show="importFrom.type == '2'">
+          <div style="width: 100%">
+            <el-row :gutter="10">
+              <el-col :span="20">
+                <el-input disabled v-model="importFrom.file"></el-input>
+                <input
+                  type="file"
+                  style="display: none"
+                  ref="inputFile"
+                  id="inputFile"
+                  accept=".json"
+                  @change="getFileData"
+                />
+              </el-col>
+              <el-col :span="4">
+                <el-button type="primary" plain @click="uploadMaterial()">
+                  <el-icon><Files /></el-icon>
+                </el-button>
+              </el-col>
+            </el-row>
+          </div>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div class="dialogButton">
+      <div>
+        <el-button type="primary" size="small" @click="handleSubmite"
+          >鎻愪氦</el-button
+        >
+        <el-button size="small" @click="handleClose">鍙栨秷</el-button>
+      </div>
+    </div>
+  </el-dialog>
 </template>
 
 <script lang="ts" setup>
+import flyPlan from "./../components/map/flyPlan.vue";
 import { ref, onMounted, onBeforeUnmount, nextTick, watch } from "vue";
-import store from "@/store";
+import { useStore } from "vuex";
 import mapView from "../assets/js/mapView.js";
 import layerManager from "@/components/map/layerManager.vue";
 import layerMenu from "@/components/map/layerMenu.vue";
 import rightMenuLayer from "@/components/map/rightMenuLayer";
 import militaryPlottingLayer from "@/components/map/militaryPlottingLayer";
-const data = ref([]);
+import configTool from "../assets/js/tool/configTool";
+import { Files } from "@element-plus/icons-vue";
+import { ElMessage } from "element-plus";
+import axios from "axios";
+const dialogVisible = ref(true);
+const store = useStore();
+const layerFrom = ref({
+  name: "",
+  sourceType: "3DTiles",
+  url: ""
+});
+
+const entityFrom = ref({
+  name: "",
+  lon: "",
+  lat: "",
+  alt: "",
+  heading: "",
+  pitch: "",
+  roll: "",
+  time: 0
+});
+const importFrom = ref({
+  type: "1",
+  url: "",
+  file: "",
+  obj: null
+});
+const layerManaget = ref();
+const flyPlanet = ref();
+const entityFlag = ref(false);
+const inputFile = ref();
+const handleClose = () => {
+  store.state.setAddEntityList = {
+    flag: false,
+    title: "",
+    type: 0
+  };
+  importFrom.value = {
+    type: "1",
+    url: "",
+    file: "",
+    obj: null
+  };
+  layerFrom.value = {
+    name: "",
+    sourceType: "3DTiles",
+    url: ""
+  };
+  entityFrom.value = {
+    name: "",
+    lon: "",
+    lat: "",
+    alt: "",
+    heading: "",
+    pitch: "",
+    roll: "",
+    time: 0
+  };
+};
+const uploadMaterial = () => {
+  document.getElementById("inputFile").click();
+};
+const getFileData = (val) => {
+  const flie = val.target;
+
+  const file_type = flie.files[0].type;
+  if (file_type != "application/json") {
+    return ElMessage("鏁版嵁鏂囦欢閫夋嫨閿欒锛岃閫夋嫨*.josn鏍煎紡鏂囦欢");
+  }
+  importFrom.value.file = flie.files[0].name;
+
+  let reader = new FileReader(); //鍏坣ew 涓�涓鏂囦欢鐨勫璞� FileReader
+  if (typeof FileReader === "undefined") {
+    //鐢ㄦ潵鍒ゆ柇浣犵殑娴忚鍣ㄦ槸鍚︽敮鎸� FileReader
+    ElMessage("鎮ㄧ殑娴忚鍣ㄤ笉鏀寔鏂囦欢璇诲彇銆�");
+    return;
+  }
+  // reader.readAsArrayBuffer(file.raw); //璇讳换鎰忔枃浠�
+  reader.readAsText(flie.files[0], "UTF-8");
+  reader.onload = (obj) => {
+    if (obj && obj.target && obj.target.result) {
+      const file_string = obj.target.result;
+      importFrom.value.obj = JSON.parse(file_string);
+      console.log(importFrom.value);
+      
+    } else {
+      ElMessage("鏁版嵁璇诲彇澶辫触銆�");
+    }
+  };
+};
+const handleSubmite = () => {
+  const list = store.state.setAddEntityList;
+  if (list.type == 1) {
+    layerManaget.value.addGeometry(layerFrom.value);
+  } else if (list.type == 2) {
+    if (entityFlag.value) {
+      if(list.title=="鑺傜偣淇敼"){
+        const obj ={...entityFrom.value};
+        flyPlanet.value.addEntityData(obj)
+      }else{
+        flyPlanet.value.addEntityData({
+        name: entityFrom.value.name,
+        lon: entityFrom.value.lon,
+        lat: entityFrom.value.lat,
+        alt: entityFrom.value.alt,
+        heading: entityFrom.value.heading,
+        pitch: entityFrom.value.pitch,
+        roll: entityFrom.value.roll,
+        time: entityFrom.value.time,
+        flag: 2
+      });
+      }
+     
+    } else {
+      flyPlanet.value.addEntityData({
+        name: entityFrom.value.name,
+        flag: 1
+      });
+    }
+  } else if (list.type == 3) {
+    const res = importFrom.value;
+    if (res.type == "1") {
+      axios.get(res.url).then((obj) => {
+        if (obj.status == 200) {
+          setInsertPost(obj.data, list.title);
+        }
+      });
+    } else {
+      setInsertPost(res.obj, list.title);
+    }
+  }
+  handleClose();
+};
+const setInsertPost = (res, label) => {
+  const obj = {
+    value: res,
+    flag: 3
+  };
+  if (label == "鏁版嵁瀵煎叆") {
+    flyPlanet.value.addEntityData(obj);
+  } else {
+    layerManaget.value.addGeometry(obj);
+  }
+};
 onMounted(() => {
   mapView.init();
 });
+watch(
+  () => store.state.setAddEntityList,
+  (nVal, oVal) => {
+    if (nVal && nVal.flag) {
+      if (nVal.title === "鑺傜偣娣诲姞") {
+        const obj = configTool.getViewerCamera();
+        entityFrom.value = {
+          name: "",
+          lon: obj.lon,
+          lat: obj.lat,
+          alt: obj.alt,
+          heading: obj.heading,
+          pitch: obj.pitch,
+          roll: obj.roll,
+          time: 100
+        };
+        entityFlag.value = true;
+      }else if(nVal.title === "鑺傜偣淇敼"){
+        entityFrom.value= store.state.setAddEntityList.editData
+
+
+        entityFlag.value = true;
+      } else {
+        entityFlag.value = false;
+      }
+    }
+  }
+);
 onBeforeUnmount(() => {});
 </script>
 <style scoped lang="less">
@@ -46,6 +320,7 @@
   height: 100%;
   display: flex;
   justify-content: space-between;
+  position: absolute;
   .banner {
     width: 100%;
     height: 100vh;
@@ -115,4 +390,9 @@
     height: 0px;
   }
 }
+.dialogButton {
+  width: 100%;
+  display: flex;
+  justify-content: end;
+}
 </style>

--
Gitblit v1.9.3