From 71627d89045c5bf3c50030751d93ae519f5dbb8d Mon Sep 17 00:00:00 2001 From: jihongshun <1151753686@qq.com> Date: 星期三, 20 八月 2025 17:25:50 +0800 Subject: [PATCH] 航点列表 中化建 右侧联动 待测试联调 --- src/utils/components/init-map.vue | 317 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 311 insertions(+), 6 deletions(-) diff --git a/src/utils/components/init-map.vue b/src/utils/components/init-map.vue index 9c67e89..9cf9a0a 100644 --- a/src/utils/components/init-map.vue +++ b/src/utils/components/init-map.vue @@ -30,14 +30,91 @@ </div> <div class="zoom-info"> - <el-tag type="success">鍊嶇巼: {{ zoomRatio.toFixed(1) }}X</el-tag><br> + <!-- <el-tag type="success">鍊嶇巼: {{ zoomRatio.toFixed(1) }}X</el-tag><br> <el-tag type="success">璺濈: {{ betweenDistance.toFixed(1) }}绫�</el-tag><br> - <el-tag type="success">P: {{ cameraP }} T: {{ cameraT }} </el-tag> + <el-tag type="success">P: {{ cameraP }} T: {{ cameraT }} </el-tag> --> + <el-button type="primary" plain @click="doAction(chooseItem, '鎮仠')">鎮仠</el-button></br> + <el-button type="success" plain @click="doAction(chooseItem, '鎷嶇収')">鎷嶇収</el-button></br> + <el-button type="info" plain @click="doAction(chooseItem, '寮�濮嬪綍鍍�')">寮�濮嬪綍鍍�</el-button></br> + <el-button type="info" plain @click="doAction(chooseItem, '缁撴潫褰曞儚')">缁撴潫褰曞儚</el-button> </div> <!-- botton --> <div class="cesiumBotton"> + <div class="cesiumContent"> + <div class="flyAction"> + <div class="actionName">{{currentAction ?currentAction.type :'' }}</div> + <i class="el-icon-delete" /> + </div> + <div class="flayDataAll"> + <div class="flyData"> + <div v-if="currentAction && (currentAction.type == '鎮仠')"> + <div>鏆傚仠鏃堕棿</div> + <div class="stopContent"> + <!-- 鍑忔寜閽� --> + <el-button size="mini" @click="changeTime(-100)" type="info">-100</el-button> + <el-button size="mini" @click="changeTime(-10)" type="info">-10</el-button> + <el-button size="mini" @click="changeTime(-1)" type="info">-1</el-button> + <!-- 鍙紪杈戞暟瀛� --> + <div class="stopNumber"> + <el-input-number + v-model="time" + :min="0" + :controls="false" + style="margin: 0 15px; width: 60px;" + @change="onChange" + class="custom-input" + > + </el-input-number> + <span style="margin-left: -10px;">s</span> + </div> + <!-- 鍔犳寜閽� --> + <el-button size="mini" @click="changeTime(1)" type="info">+1</el-button> + <el-button size="mini" @click="changeTime(10)" type="info">+10</el-button> + <el-button size="mini" @click="changeTime(100)" type="info">+100</el-button> + </div> + </div> + <div v-if="currentAction && (currentAction.type == '鎷嶇収')"> + <div v-if="!isEditingPhoto" class="editable-text"> + {{ takePhoto }} + <i class="el-icon-edit" @click.stop="startEditing"/> + </div> + <div v-else > + <div class="editable-container"> + <input + v-model="newTakePhoto" + type="text" + class="editable-input" + autofocus + /> + </div> + <button @click.stop="validateInput" class="validate-btn">鉁�</button> + <button @click.stop="cancelEditing" class="cancel-btn">鉁�</button> + </div> + </div> + <div v-if="currentAction && (currentAction.type == '寮�濮嬪綍鍍�')"> + <div v-if="!isEditingVideo" class="editable-text"> + {{ takeVideo }} + <i class="el-icon-edit" @click.stop="startEditingVideo"/> + </div> + <div v-else > + <div class="editable-container"> + <input + v-model="newTakeVideo" + type="text" + class="editable-input" + autofocus + /> + </div> + <button @click.stop="validateVideoInput" class="validate-btn">鉁�</button> + <button @click.stop="cancelVideoEditing" class="cancel-btn">鉁�</button> + </div> + </div> + </div> + </div> + + </div> <div class="cesiumButtonGroup"> <el-button id="groundPoi" @click="addGroundPoi()" type="primary">鍦伴潰鐐�</el-button> <el-input v-model="mergeNumber" placeholder="璇疯緭鍏ュ悎骞惰寖鍥�" type="number" style="width: 150px;"></el-input> @@ -139,6 +216,9 @@ deviceData: { type: Object, }, + chooseItem:{ + type: Object + } }, data(){ return{ @@ -180,6 +260,16 @@ cameraT:0.0, pointGround: { lon: 0, lat: 0, height: 0 }, pointFly: { lon: 0, lat: 0, height: 0 }, + rowData:null, + time: 10, + takePhoto: '111', // 鍒濆鏁版嵁 + newTakePhoto: '', // 缂栬緫鏃剁殑鏂版暟鎹� + isEditingPhoto: false, // 鎺у埗鏄惁澶勪簬缂栬緫鐘舵�� + takeVideo: '111', // 鍒濆鏁版嵁 + newTakeVideo: '', // 缂栬緫鏃剁殑鏂版暟鎹� + isEditingVideo: false, // 鎺у埗鏄惁澶勪簬缂栬緫鐘舵�� + actionCounter:0, + currentAction:null } }, mounted(){ @@ -322,6 +412,7 @@ creatPin(id, position, font, color, viewer) { let pinBuilder = new Cesium.PinBuilder(); let addPin = viewer.entities.getById(id); + console.log(addPin) if (addPin == undefined) { viewer.entities.add({ id: id, @@ -516,7 +607,7 @@ window.addEventListener("keydown", this.onKeyDown); window.addEventListener("keyup", this.onKeyUp); }, - removeKeyboardEvents() { + removeKeyboaardEvents() { window.removeEventListener("keydown", this.onKeyDown); window.removeEventListener("keyup", this.onKeyUp); }, @@ -616,6 +707,13 @@ const point2 = Cesium.Cartesian3.fromDegrees(longitude, latitude); const gure = Cesium.Cartesian3.distance(point1, point2) this.betweenDistance = gure + } + if(this.rowData) { + this.pointGround = { + lon:this.rowData.longitude, + lat:this.rowData.latitude, + height:this.rowData.height + } } this.pointFly = { lon: lon, @@ -820,7 +918,9 @@ label: `绌轰腑鐐�${idx}`, longitude: Cesium.Math.toDegrees(aerialPos.longitude), latitude: Cesium.Math.toDegrees(aerialPos.latitude), - height: aerialPos.height + height: aerialPos.height, + heading:Cesium.Math.toDegrees(viewerC.camera.heading), + pitch:Cesium.Math.toDegrees(viewerC.camera.pitch) } ] }; @@ -1139,6 +1239,18 @@ return Math.asin(directionLocal.z); // z杞村悜涓� }, DealVisualCone(data,node){ + this.rowData = data + console.log(data) + this.pointGround = { + lon:data.children[0].longitude, + lat:data.children[0].latitude, + height:data.children[0].height + } + this.pointFly = { + lon:data.longitude, + lat:data.latitude, + height:data.height + } if(data.children && data.children?.length > 0) { preVideoScopePrimitiveArrTie.map((item)=>{ if(item.name != data.children[0].label){ @@ -1156,7 +1268,86 @@ } }) } - } + }, + editAction(action){ + // 鐐瑰嚮宸︿晶灏忓浘鏍囷紝鍙充晶鍒囨崲鍒拌 action + this.currentAction = action; + console.log(this.currentAction) + if(action.type == '鎮仠') { + this.time = action.extra.value + } else if(action.type == '鎷嶇収'){ + this.newTakePhoto = action.extra.value + }else if(action.type == '寮�濮嬪綍鍍�'){ + this.newTakeVideo = action.extra.value + }else if(action.type == '缁撴潫褰曞儚'){ + } + }, + changeTime(val) { + this.time += val; + if (this.time < 0) this.time = 0; // 鏈�灏忓�奸檺鍒� + this.currentAction.extra.value = this.time + console.log(this.currentAction) + }, + onChange(value) { + if (value < 0) this.time = 0; + }, + startEditing() { + this.newTakePhoto = this.takePhoto; // 杩涘叆缂栬緫鏃讹紝淇濆瓨褰撳墠鐨勫�� + this.isEditingPhoto = true; + window.removeEventListener("keydown", this.onKeyDown); + window.removeEventListener("keyup", this.onKeyUp); + }, + validateInput() { + console.log(this.newTakePhoto) + this.takePhoto = this.newTakePhoto; // 鐐瑰嚮瀵瑰彿鏃讹紝鏇存柊鏁版嵁 + this.isEditingPhoto = false; // 缁撴潫缂栬緫 + this.currentAction.extra.value = this.takePhoto + }, + cancelEditing() { + this.newTakePhoto = this.takePhoto; // 鐐瑰嚮鍙栨秷鏃讹紝鎭㈠鍘熸暟鎹� + this.isEditingPhoto = false; // 缁撴潫缂栬緫 + }, + startEditingVideo() { + this.newTakeVideo = this.takeVideo; // 杩涘叆缂栬緫鏃讹紝淇濆瓨褰撳墠鐨勫�� + this.isEditingVideo = true; + }, + validateVideoInput() { + this.takeVideo = this.newTakeVideo; // 鐐瑰嚮瀵瑰彿鏃讹紝鏇存柊鏁版嵁 + this.isEditingVideo = false; // 缁撴潫缂栬緫 + this.currentAction.extra.value = this.takeVideo + }, + cancelVideoEditing() { + this.newTakeVideo = this.takeVideo; // 鐐瑰嚮鍙栨秷鏃讹紝鎭㈠鍘熸暟鎹� + this.isEditingVideo = false; // 缁撴潫缂栬緫 + }, + doAction(point, type){ + this.actionCounter++; + let action = { + id: this.actionCounter, + type, + extra: {} + }; + if(type == '鎮仠') { + action.extra.value = this.time + } else if(type == '鎷嶇収'){ + action.extra.value = this.newTakePhoto + }else if(type == '寮�濮嬪綍鍍�'){ + action.extra.value = this.newTakeVideo + }else if(type == '缁撴潫褰曞儚'){ + action.extra.value = 'stopVideo' + } + console.log(action) + point.actions.push(action); + console.log(point) + this.$emit('dealAction',point) + this.time = 10 + this.newTakePhoto = '111' + this.newTakeVideo = '111' + this.takeVideo = '111' + this.takePhoto = '111' + // 鍒囨崲鍒板彸渚� + this.currentAction = action; + }, } } </script> @@ -1199,6 +1390,61 @@ bottom: 30px; margin: 0; } +.cesiumContent { + position: absolute; + width: 100%; + height: calc(50% + 5px); + top:-5px; + +} +.stopContent { + display: flex; + align-items: center; +} +.stopContent .el-button--mini { + padding: 4px 9px; +} +.stopNumber { + flex: 1; + justify-content: center; + align-items: center; + margin: 0 4px; + display: flex +} +.stopNumber .el-input .el-input--medium .el-input--medium .el-input__inner { + height: 28px!important; + line-height: 28px!important; + +} +.flyAction{ + height: 55px; + line-height: 55px; + background-color: #232323; + display: flex; + justify-content: space-between; + border-bottom: 1px solid #ddd; +} +.actionName { + margin-left: 20px; + font-size: 14px; + color: white; +} +.flyAction i { + font-size: 18px; + line-height: 55px; + margin-right: 20px; +} +.flayDataAll { + background-color:#232323; + height: calc(100% - 55px); + width: 100%; +} +.flyData{ + width: calc(100% - 32px); + height: calc(100% - 55px); + margin: auto; + color: white; +} .cesiumButtonGroup{ position: absolute; bottom: 0; @@ -1227,7 +1473,9 @@ font-family: sans-serif; margin-top: 55px; } - +.el-icon-delete { + cursor: pointer; /* 娣诲姞榧犳爣鎮仠鏃剁殑灏忔墜鏁堟灉 */ +} .arrow-row{ display: flex; justify-content: center; @@ -1305,4 +1553,61 @@ .el-slider.is-vertical .el-slider__marks-text{ width: 30px!important; } +</style> +<style> +.custom-input .el-input__inner { + height: 28px; + line-height:28px; +} +</style> +<style scoped> +.editable-text { + display: flex; + align-items: center; + cursor: pointer; + font-size: 16px; + color: #fff; + background-color: #333; + padding: 8px; + border-radius: 5px; +} +.editable-text .el-icon-edit { + position: absolute; + right: 30px; +} +.edit-icon { + margin-left: 10px; + font-size: 20px; + cursor: pointer; +} + +.editable-container { + display: flex; + align-items: center; +} + +.editable-input { + font-size: 16px; + padding: 5px; + border: 1px solid #ccc; + margin-right: 5px; + border-radius: 5px; +} + +.validate-btn, .cancel-btn { + background-color: transparent; + border: none; + color: #fff; + font-size: 20px; + cursor: pointer; + margin-left: 5px; +} + +.validate-btn { + color: green; +} + +.cancel-btn { + color: red; +} </style> \ No newline at end of file -- Gitblit v1.9.3