Просмотр исходного кода

修复右击取消线之后重新绘制会有空坐标的影响

louhangfei 2 лет назад
Родитель
Сommit
928d141b75
1 измененных файлов с 20 добавлено и 12 удалено
  1. 20 12
      src/views/cameras/preview/components/FenceEditorV2/FenceEditor.vue

+ 20 - 12
src/views/cameras/preview/components/FenceEditorV2/FenceEditor.vue

@@ -217,19 +217,27 @@
   const toObject = () => {
     const stage = stageRef.value.getStage();
     const fenceGroups = stage?.find('.' + GROUP_NAME);
-    const gropuPoints = fenceGroups?.map((item) => {
-      const groupX = item.x();
-      const groupY = item.y();
+    const gropuPoints = fenceGroups
+      ?.map((item) => {
+        const groupX = item.x();
+        const groupY = item.y();
 
-      const line = (item as Konva.Group).findOne((x: any) => x.className === 'Line') as Konva.Line;
-      const points = line?.points();
-      const newPoints: number[][] = [];
-      /** 存到后端的时候,只给点的坐标信息,不会给group的位置信息,所以要将点的坐标加上group的位移,才是之后点的最终坐标 */
-      for (let i = 0; i < points.length; i += 2) {
-        newPoints.push([Math.floor(points[i] + groupX), Math.floor(points[i + 1] + groupY)]);
-      }
-      return newPoints;
-    });
+        const line = (item as Konva.Group).findOne(
+          (x: any) => x.className === 'Line',
+        ) as Konva.Line;
+        const points = line?.points();
+        /** 有些line对象存在,但是没有点坐标,所以要判断过滤一下 */
+        if (points && points.length > 0) {
+          const newPoints: number[][] = [];
+          /** 存到后端的时候,只给点的坐标信息,不会给group的位置信息,所以要将点的坐标加上group的位移,才是之后点的最终坐标 */
+          for (let i = 0; i < points.length; i += 2) {
+            newPoints.push([Math.floor(points[i] + groupX), Math.floor(points[i + 1] + groupY)]);
+          }
+          return newPoints;
+        }
+        return null;
+      })
+      .filter(Boolean);
     return gropuPoints;
   };