jihongshun
2025-09-11 bcb67f336c2b352177884b8db6decc3fcf382bb0
src/views/system/shootPoint/components/shootPointDialog.vue
@@ -55,6 +55,10 @@
                              <i 
                                class="el-icon-success" 
                              ></i>
                              <i
                                class="el-icon-delete"
                                @click.stop="deleteItem(wp)"
                              ></i>
                              <div class="waypoint-contnet">
                                <span class="waypoint-index">{{ wp.label +'----'  +wp.children[0].label }}</span>
                                <span v-for="(action, aIndex) in wp.children[0].actions" 
@@ -62,11 +66,11 @@
                                      class="action-icon"
                                      @click.stop="clickItem(action)">
                  
                                  <img src="@/assets/images/xuanting.svg" alt="svg图片" v-if="action.type==='悬停'" />
                                  <img src="@/assets/images/photo.svg" alt="svg图片" v-if="action.type==='拍照'" />
                                  <img src="@/assets/images/startVideo.svg" alt="svg图片" v-if="action.type==='开始录像'" />
                                  <img src="@/assets/images/stopVideo.svg" alt="svg图片" v-if="action.type==='结束录像'" />
                                  <img src="@/assets/images/zoom.svg" alt="svg图片" v-if="action.type==='变焦'" />
                                  <img src="@/assets/images/xuanting.svg" alt="svg图片" v-if="action.type==='悬停'" title="悬停"/>
                                  <img src="@/assets/images/photo.svg" alt="svg图片" v-if="action.type==='拍照'" title="拍照"/>
                                  <img src="@/assets/images/startVideo.svg" alt="svg图片" v-if="action.type==='开始录像'" title="开始录像"/>
                                  <img src="@/assets/images/stopVideo.svg" alt="svg图片" v-if="action.type==='结束录像'" title="结束录像"/>
                                  <img src="@/assets/images/zoom.svg" alt="svg图片" v-if="action.type==='变焦'" title="变焦"/>
                                  <!-- <i v-if="action.type==='拍照'" class="el-icon-video-camera"></i> -->
                                </span>
                              </div>
@@ -144,10 +148,6 @@
        form:{},
        deviceData:null,
        activeName: 'first',
        totalDistance: 3054.9,
        totalTime: '5m 56s',
        totalPoints: 11,
        totalPhotos: 3,
        waypoints:[],
        selectedIndex:null,
        chooseItem: null,
@@ -163,6 +163,7 @@
          console.log(res.data)
          this.getRowData(res.data)
          let drawArr = this.convertToTree(res.data.ardListWayPointsLS)
          console.log(drawArr)
          setTimeout(() => {
            //渲染时间问题 加个延时器
            this.drawLines(drawArr)
@@ -223,7 +224,7 @@
        Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4()),
        direction,
        new Cesium.Cartesian3()
      );
      );
      Cesium.Cartesian3.normalize(directionLocal, directionLocal);
      return Math.asin(directionLocal.z); // z轴向上
    },
@@ -344,19 +345,43 @@
      // 2. 每个空中点与地面点用蓝色虚线连接
      treeData.forEach(point => {
        const airPos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.height);
        this.addLabel(point)
        point.children.forEach(child => {
          const groundPos = Cesium.Cartesian3.fromDegrees(child.longitude, child.latitude, child.height);
          this.addLabel(child)
          viewer.entities.add({
            polyline: {
              positions: [airPos, groundPos],
              width: 1,
              material: new Cesium.PolylineDashMaterialProperty({
                color: Cesium.Color.BLUE,
                color: Cesium.Color.RED,
                dashLength: 8
              })
            }
          });
        });
      });
    },
    addLabel(point) {
      const position = Cesium.Cartesian3.fromDegrees(
        point.longitude,
        point.latitude,
        point.height
      );
      let viewer = window.viewerM
      // Create a label entity
      viewer.entities.add({
        position: position,
        label: {
          text: point.label,
          font: "14px sans-serif",
          fillColor: Cesium.Color.WHITE,
          backgroundColor: Cesium.Color.BLACK,
          style: Cesium.LabelStyle.FILL_AND_OUTLINE,
          outlineWidth: 2,
          horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
          verticalOrigin: Cesium.VerticalOrigin.BOTTOM
        }
      });
    },
    addPoint(viewer, position, color, label) {
@@ -482,7 +507,7 @@
      console.log(this.treeData)
    },
    //数组 塔的精度 塔的纬度  塔的高度  半径
    insertRaisedPoints(data, centerLon, centerLat, centerHeight, radius = 10) {
    insertRaisedPoints(data, centerLon, centerLat, centerHeight, radius = 15) {
      const center = Cesium.Cartesian3.fromDegrees(centerLon, centerLat, centerHeight);
      const result = JSON.parse(JSON.stringify(data)); // 深拷贝避免污染原数据
      const inserts = []; // 用于存储插入项及其目标位置
@@ -495,7 +520,8 @@
        const cartA = Cesium.Cartesian3.fromDegrees(pointA.longitude, pointA.latitude, pointA.height);
        const cartB = Cesium.Cartesian3.fromDegrees(pointB.longitude, pointB.latitude, pointB.height);
        console.log(cartA)
        console.log(cartB)
        const closest = this.closestPointOnSegment(cartA, cartB, center);
        const distance = Cesium.Cartesian3.distance(closest, center);
        console.log(distance)
@@ -712,7 +738,6 @@
          });
      })
      console.log(this.treeData)
      this.dialogVisible = false
      // const dealArr = this.submitDealData()
      const transformed = this.treeData.map((ground, index) => {
        const pointNumber = index + 1;
@@ -727,11 +752,32 @@
              longitude: ground.longitude,
              pointNumber: 1,
              targetName: ground.label,
              actions:child.actions.map((item, index) => ({
                actionIndex: index.toString(),
                actionType: typeDictionary[item.type] || "", // 如果类型不存在字典中,默认空字符串
                actionValue: item.extra.value
              }))
              // actions:child.actions.map((item, index) => ({
              //   actionIndex: index.toString(),
              //   actionType: typeDictionary[item.type] || "", // 如果类型不存在字典中,默认空字符串
              //   actionValue: item.extra.value
              // }))
              actions:child.actions.map(action => {
                console.log(action)
                switch (action.type) {
                  case "悬停":
                    return { hoverTime: parseFloat(action.extra.value) };
                  case "变倍":
                    return { zoom: parseFloat(action.extra.value) };
                  case "开始录像":
                    return { startRecord: true };
                  case "结束录像":
                    return { stopRecord: true };
                  case "拍照":
                    // const [takePhotoType, useGlobalImageFormat] = action.actionValue.split('-');
                    return {
                      takePhotoType: 0,
                      useGlobalImageFormat: 0
                    };
                  default:
                    return {};
                }
              })
            }
          ],
          latitude: child.latitude,
@@ -753,6 +799,7 @@
          message: '新增模板成功',
          type: 'success'
        })
        this.dialogVisible = false
        this.$emit('on-submit')
        this.$emit('close')
      }
@@ -779,6 +826,7 @@
      console.log(this.treeData)
      console.log(this.waypoints)
      console.log(data)
      console.log(this.lastTableArr)
      const byLabel = this.addOrUpdate(this.lastTableArr, data, 'label', this)
      this.waypoints  = this.lastTableArr
      console.log(byLabel)
@@ -801,6 +849,33 @@
    },
    clickItem(value){
        this.$refs.initMap.editAction(value);  
    },
    extractNumberFromLabel(label){
      const match = label.match(/(\d+)/); // 获取标签中的数字
      return match ? match[0] : null;
    },
    deleteItem(item){
      this.treeData = this.treeData.filter(obj=>obj.id != item.id)
      this.lastTableArr = this.lastTableArr.filter(obj=>obj.id != item.id)
      const data1LabelNumber = this.extractNumberFromLabel(item.label);
      // 创建一个新的EntityCollection,只保留不匹配的实体
      const filteredEntities = window.viewerM.entities.values.filter(entity => {
        const entityIdNumber =  this.extractNumberFromLabel(entity.id); // 提取实体的id中的数字
        return entityIdNumber !== data1LabelNumber; // 如果数字不一致,保留该实体
      });
      // 清空原来的entities集合并重新添加过滤后的实体
      window.viewerM.entities.removeAll(); // 清空所有实体
      filteredEntities.forEach(entity => window.viewerM.entities.add(entity))
      console.log(item)
      console.log(this.treeData)
       console.log(this.lastTableArr)
      console.log(window.viewerM.entities.values)
      // console.log(window.viewerM.entities.values[0].id)
      // console.log(window.viewerM.entities.values[1].id)
      // console.log(window.viewerM.entities.values[2].id)
      // console.log(window.viewerM.entities.values[3].id)
    }
  }
}
@@ -978,13 +1053,13 @@
  height: 36px;
  line-height: 36x;
  transition: transform 0.2s;
  font-size: 24px;
  font-size: 22px;
}
.waypoint-header .waypoint-index {
  font-size: 24px;
  font-size: 22x;
}
.rotated {
  transform: rotate(-90deg);