From f03ea598d39abceac4eeb5f3a10b1fe7dd706b2c Mon Sep 17 00:00:00 2001
From: jihongshun <1151753686@qq.com>
Date: 星期五, 25 七月 2025 16:48:31 +0800
Subject: [PATCH] 光轴

---
 src/views/system/device/components/deviceDialog.vue |  127 ++++++++++++++++++++++++++++++------------
 1 files changed, 90 insertions(+), 37 deletions(-)

diff --git a/src/views/system/device/components/deviceDialog.vue b/src/views/system/device/components/deviceDialog.vue
index cbc2b09..659407b 100644
--- a/src/views/system/device/components/deviceDialog.vue
+++ b/src/views/system/device/components/deviceDialog.vue
@@ -4,28 +4,25 @@
     <Modal :title="form.id ? '淇敼璁惧' : '娣诲姞璁惧'" v-model="open">
       <template slot="form">
         <el-form ref="form" :model="form" :rules="rules" label-width="auto">
-          <el-form-item label="璁惧鍚嶇О" prop="name">
-            <el-input v-model="form.name1" placeholder="璇疯緭鍏ヨ澶囧悕绉�" />
+          <el-form-item label="璁惧鍚嶇О" prop="deviceName">
+            <el-input v-model="form.deviceName" placeholder="璇疯緭鍏ヨ澶囧悕绉�" />
           </el-form-item>
-          <el-form-item label="鎵�灞炵嚎璺�" prop="beloneRoad">
-            <el-input v-model="form.name2" placeholder="璇疯緭鍏ユ墍灞炵嚎璺�" />
+          <el-form-item label="鎵�灞炵嚎璺�" prop="belongingRoute">
+            <el-input v-model="form.belongingRoute" placeholder="璇疯緭鍏ユ墍灞炵嚎璺�" />
           </el-form-item>
-          <el-form-item label="閫夋嫨妯″瀷" prop="wellType">
-            <el-select v-model="form.wellType" placeholder="閫夋嫨妯″瀷">
-              <el-option v-for="key in modelListData" :key="key.id" :label="key.modelType"
+          <el-form-item label="閫夋嫨妯″瀷" prop="modelId">
+            <el-select v-model="form.modelId" placeholder="閫夋嫨妯″瀷"  @change="change">
+              <el-option v-for="key in modelListData" :key="key.id" :label="key.modelName"
                 :value="key.id"></el-option>
             </el-select>
           </el-form-item>
-          <el-form-item label="鏈濆悜" prop="direction">
-            <el-input v-model="form.direction" placeholder="璇疯緭鍏ユ湞鍚�"  style="width:90%;"/>
+          <el-form-item label="鏈濆悜" prop="face">
+            <el-input v-model="form.face" placeholder="璇疯緭鍏ユ湞鍚�"  style="width:90%;"/>
             <i class="el-icon-map-location" @click="gettiles3dCam" title="棰勮"></i>
           </el-form-item>
-          <!-- <el-form-item label="妯″瀷绫诲瀷" prop="wellType">
-            <el-select v-model="form.wellType" placeholder="妯″瀷绫诲瀷">
-              <el-option v-for="key in model_type" :key="key.value" :label="key.label"
-                :value="key.value"></el-option>
-            </el-select>
-          </el-form-item> -->
+          <el-form-item label="娴锋嫈楂樺害" prop="altitude">
+            <el-input v-model="form.altitude" placeholder="璇疯緭鍏ユ捣鎷旈珮搴�" />
+          </el-form-item>
         </el-form>
       </template>
       <template slot="cesium">
@@ -64,16 +61,14 @@
       form: {},
       // 琛ㄥ崟鏍¢獙
       rules: {
-        name: [
-          { required: true, message: '璇疯緭鍏ュ鍚嶇О', trigger: 'blur' }
+        deviceName: [
+          { required: true, message: '璇疯緭鍏ヨ澶囧悕绉�', trigger: 'blur' }
         ],
-        deptId: [
-          { required: true, message: '褰掑睘閮ㄩ棬' } // trigger鐩戝惉涓嶅埌 浣跨敤@input鍗曠嫭鏍¢獙vue-treeSelect琛ㄥ崟椤�
-        ]
       },
       // 閮ㄩ棬鏁版嵁
       deptOptions: null,
-      modelListData:[]
+      modelListData:[],
+      modelUrl:null
     }
   },
   methods: {
@@ -82,16 +77,49 @@
       this.resetForm("form");
 
       if (ids) {
+        this.getModel()
         // 缂栬緫
         this.$api.detail('/tower/device', ids).then(res => {
+          console.log(res)
           this.form = res.data
           this.open = true
           this.$nextTick(() => {
+            console.log(this.form)
             this.$refs.cesiumMapSelctPoint.showPickPoint({
               longitude: +this.form.longitude,
               latitude: +this.form.latitude,
-              altitude: +this.form.altitude,
+              deviceHeight: +this.form.deviceHeight,
             })
+            console.log(this.modelListData)
+            let url = this.modelListData.filter(item=>item.id == this.form.modelId)[0].modelRoute
+            console.log(url)
+            this.modelUrl = url
+            const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.deviceHeight);
+            console.log(position)
+            // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級
+            let model = viewer.entities.getById("MyModel");
+            const heading = Cesium.Math.toRadians(this.form.face); // 鏈濅笢鍗楁柟鍚�
+            const pitch = 0;
+            const roll = 0;
+            const orientation = Cesium.Transforms.headingPitchRollQuaternion(
+              position,
+              new Cesium.HeadingPitchRoll(heading, pitch, roll)
+            );
+            if(!model) {
+              // 鍔犺浇 glTF 妯″瀷
+              const entity = viewer.entities.add({
+                id: "MyModel",
+                name: "MyModel",
+                position: position,
+                orientation: orientation,
+                model: {
+                  uri:this.modelUrl, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
+                },
+              });
+              viewer.flyTo(entity)
+            }else {
+              model.orientation = orientation
+            }
           })
         })
       } else {
@@ -103,23 +131,29 @@
       }
     },
     handleSelectAddress(data) {
+      console.log(data)
       this.$set(this.form, 'longitude', data.longitude)
       this.$set(this.form, 'latitude', data.latitude)
-      this.$set(this.form, 'altitude', data.altitude)
+      this.$set(this.form, 'deviceHeight', data.altitude)
       this.$refs.form.validateField('longitude')
       this.$refs.form.validateField('latitude')
-      this.$refs.form.validateField('altitude')
+      this.$refs.form.validateField('deviceHeight')
     },
     submitForm() {
       this.$refs["form"].validate(valid => {
         console.log(this.form)
-        // if (valid) {
-        //   this.$api.save('work/tower/', 'id', Object.assign({}, this.form)).then(res => {
-        //     this.form = {}
-        //     this.$emit('on-submit')
-        //     this.open = false
-        //   })
-        // }
+        this.form.longitude = Number(this.form.longitude)
+        this.form.latitude = Number(this.form.latitude)
+        this.form.deviceHeight = Number(this.form.deviceHeight)
+        this.form.face = Number(this.form.face)
+        this.form.altitude = Number(this.form.altitude) || 0
+        if (valid) {
+          this.$api.save('tower/device/', 'id', Object.assign({}, this.form)).then(res => {
+            this.form = {}
+            this.$emit('on-submit')
+            this.open = false
+          })
+        }
       });
     },
     cancel() {
@@ -136,14 +170,36 @@
         this.modelListData = res.rows || []
       })
     },    
+    change(id){
+      console.log(id)
+      let url = this.modelListData.filter(item=>item.id == id)[0].modelRoute
+      console.log(url)
+      this.modelUrl = url
+    },  
     gettiles3dCam(){
       console.log(this.form)
+      if(!this.form.face) {
+        return this.$message.error('璇疯緭鍏ユ湞鍚�')
+      }
+      if (!this.form.longitude) {
+        this.$message.error("璇疯緭鍏ョ粡搴�");
+        return;
+      }
+      if (!this.form.latitude) {
+        this.$message.error("璇疯緭鍏ョ含搴�");
+        return;
+      }
+      if (!this.form.deviceHeight) {
+        this.$message.error("璇疯緭鍏ラ珮搴�");
+        return;
+      }
       //鍔ㄦ�佺粡绾害鏈濆悜 鍔犺浇妯″瀷浣嶇疆棰勮
-      const position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
+      // const position = Cesium.Cartesian3.fromDegrees(0, 0, 0);
+      const position = Cesium.Cartesian3.fromDegrees(this.form.longitude, this.form.latitude, this.form.deviceHeight);
       // 璁剧疆妯″瀷鏂瑰悜锛堝彲閫夛級
       // const heading = Cesium.Math.toRadians(135); // 鏈濅笢鍗楁柟鍚�
       let model = viewer.entities.getById("MyModel");
-      const heading = Cesium.Math.toRadians(this.form.direction); // 鏈濅笢鍗楁柟鍚�
+      const heading = Cesium.Math.toRadians(this.form.face); // 鏈濅笢鍗楁柟鍚�
       const pitch = 0;
       const roll = 0;
       const orientation = Cesium.Transforms.headingPitchRollQuaternion(
@@ -158,16 +214,13 @@
           position: position,
           orientation: orientation,
           model: {
-            uri: "/Model/tower.glb", // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
-            scale: 1000,
+            uri:  this.modelUrl, // 鏇挎崲鎴愪綘鐨勬ā鍨嬭矾寰�
           },
         });
         viewer.flyTo(entity)
       }else {
         model.orientation = orientation
       }
-      
-
     }
   },
   mounted() {

--
Gitblit v1.9.3