@fleet-frontend/mower-maps 0.2.0-beta.3 → 0.2.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/index.esm.js +508 -217
  2. package/dist/index.js +507 -216
  3. package/dist/src/context/common.d.ts +2 -0
  4. package/dist/src/context/common.d.ts.map +1 -1
  5. package/dist/src/context/mapEdit.d.ts +1 -1
  6. package/dist/src/context/mapEdit.d.ts.map +1 -1
  7. package/dist/src/processor/unified/BaseData.d.ts +3 -4
  8. package/dist/src/processor/unified/BaseData.d.ts.map +1 -1
  9. package/dist/src/processor/unified/UnifiedMapDataProcessor.d.ts.map +1 -1
  10. package/dist/src/render/BoundarySvgRender.d.ts +1 -1
  11. package/dist/src/render/MowerMapRenderer.d.ts.map +1 -1
  12. package/dist/src/render/layers/ObstacleLayer.d.ts +16 -0
  13. package/dist/src/render/layers/ObstacleLayer.d.ts.map +1 -1
  14. package/dist/src/render/svgEditMap/components/AddEntry/components/DoodleModal/index.d.ts.map +1 -1
  15. package/dist/src/render/svgEditMap/components/AddEntry/index.d.ts.map +1 -1
  16. package/dist/src/render/svgEditMap/components/HandleElementInfo/boundary.d.ts.map +1 -1
  17. package/dist/src/render/svgEditMap/components/HandleElementInfo/components/DirectionModal/component/MowDirection/index.d.ts.map +1 -1
  18. package/dist/src/render/svgEditMap/components/HandleElementInfo/components/DirectionModal/index.d.ts.map +1 -1
  19. package/dist/src/render/svgEditMap/components/HandleElementInfo/components/TimePeriod/index.d.ts +4 -4
  20. package/dist/src/render/svgEditMap/components/HandleElementInfo/components/TimePeriod/index.d.ts.map +1 -1
  21. package/dist/src/render/svgEditMap/components/HandleElementInfo/doodle.d.ts.map +1 -1
  22. package/dist/src/render/svgEditMap/components/HandleElementInfo/index.d.ts.map +1 -1
  23. package/dist/src/render/svgEditMap/components/HandleElementInfo/obstacle.d.ts.map +1 -1
  24. package/dist/src/render/svgEditMap/components/HandleElementInfo/visionOff.d.ts.map +1 -1
  25. package/dist/src/render/svgEditMap/index.d.ts +8 -1
  26. package/dist/src/render/svgEditMap/index.d.ts.map +1 -1
  27. package/dist/src/render/svgElement/ChannelElement/index.d.ts.map +1 -1
  28. package/dist/src/render/svgElement/DoodleElement/index.d.ts.map +1 -1
  29. package/dist/src/render/svgElement/Mobile/CreateObstacleElement/index.d.ts +4 -1
  30. package/dist/src/render/svgElement/Mobile/CreateObstacleElement/index.d.ts.map +1 -1
  31. package/dist/src/render/svgElement/PolygonELement/index.d.ts.map +1 -1
  32. package/dist/src/render/svgElement/TransformWrapper/DoodleTransformWrapper/DoodleTransformWrapper.d.ts.map +1 -1
  33. package/dist/src/render/svgElement/TransformWrapper/VisionOffTransformWrapper/VisionOffTransformWrapper.d.ts.map +1 -1
  34. package/dist/src/types/renderer.d.ts +10 -2
  35. package/dist/src/types/renderer.d.ts.map +1 -1
  36. package/package.json +1 -1
package/dist/index.esm.js CHANGED
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default, { memo, useMemo, useEffect, useState, useRef, useCallback, createContext, useContext, forwardRef, useImperativeHandle, useLayoutEffect } from 'react';
4
4
  import ReactDOM from 'react-dom';
5
- import { Modal, message, Popover, Input, Switch, Slider, Radio, Button, DatePicker, Select } from 'antd';
5
+ import { Modal, message, Popover, Input, Switch, Slider, Radio, Button, DatePicker, Select, Space } from 'antd';
6
6
 
7
7
  /**
8
8
  * 常量和枚举类型定义
@@ -190,14 +190,13 @@ class ChannelData extends BaseData {
190
190
  * 障碍物数据类
191
191
  */
192
192
  class ObstacleData extends BaseData {
193
- constructor(originalData, level, isTimeLimit, style) {
193
+ constructor(originalData, level, style) {
194
194
  const convertedPoints = convertPointsFormat(originalData?.points) || [];
195
195
  super(originalData?.id, DataType.OBSTACLE, level, RenderType.POLYGON, convertedPoints, originalData);
196
196
  this.area = originalData?.area;
197
197
  this.status = originalData?.status || 1;
198
- this.startTimestamp = originalData?.start_timestamp;
199
- this.endTimestamp = originalData?.end_timestamp;
200
- this.isTimeLimit = isTimeLimit;
198
+ this.start_timestamp = originalData?.start_timestamp;
199
+ this.end_timestamp = originalData?.end_timestamp;
201
200
  this.name = originalData?.name || 'Obstacle';
202
201
  this.style = style;
203
202
  }
@@ -329,8 +328,8 @@ function initDoodle() {
329
328
  svg: '',
330
329
  scale: 1,
331
330
  direction: 0,
332
- create_ts: Date.now(),
333
- expiration_ts: Date.now() + 3600000 * 24 * 7, // 1小时后过期
331
+ create_ts: Math.floor(Date.now() / 1000),
332
+ expiration_ts: Math.floor(Date.now() / 1000) + 3600 * 24 * 7, // 1小时后过期
334
333
  type: 'TIME_LIMIT_OBSTACLE',
335
334
  };
336
335
  return new DoodleData(doodle, 100);
@@ -616,7 +615,7 @@ class UnifiedMapDataProcessor {
616
615
  continue;
617
616
  }
618
617
  const obstacleData = new ObstacleData(element, 150, // 高层级
619
- false, this.mapConfig.obstacle || {});
618
+ this.mapConfig.obstacle || {});
620
619
  obstacleDataList.push(obstacleData);
621
620
  }
622
621
  catch (error) {
@@ -746,7 +745,7 @@ class UnifiedMapDataProcessor {
746
745
  continue;
747
746
  }
748
747
  const obstacleData = new ObstacleData(element, 150, // 高层级
749
- true, this.mapConfig.obstacle || {});
748
+ this.mapConfig.obstacle || {});
750
749
  obstacleDataList.push(obstacleData);
751
750
  }
752
751
  }
@@ -8693,7 +8692,7 @@ function styleInject(css, ref) {
8693
8692
  }
8694
8693
  }
8695
8694
 
8696
- var css_248z$i = ".index-module_edit__-5VvX {\n position: absolute;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n pointer-events: auto;\n z-index: 1000;\n cursor: move;\n touch-action: none;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n}\n.index-module_edit__-5VvX .index-module_border__JdNLM {\n position: absolute;\n inset: -10px;\n border: 2px dashed rgb(241, 102, 41);\n border-radius: 2px;\n pointer-events: none;\n}\n.index-module_edit__-5VvX .index-module_drag__uvdPG {\n position: absolute;\n inset: -10px;\n border-radius: 2px;\n}\n.index-module_edit__-5VvX .index-module_rotate__H-KIZ {\n position: absolute;\n top: -20px;\n right: -20px;\n width: 20px;\n height: 20px;\n cursor: grab;\n z-index: 1001;\n pointer-events: auto;\n}\n.index-module_edit__-5VvX .index-module_move__mZF8s {\n position: absolute;\n bottom: -20px;\n left: -20px;\n width: 20px;\n height: 20px;\n cursor: move;\n z-index: 1001;\n pointer-events: auto;\n display: none;\n}";
8695
+ var css_248z$i = ".index-module_edit__-5VvX {\n position: absolute;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n pointer-events: auto;\n z-index: 1000;\n cursor: move;\n touch-action: none;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n}\n.index-module_edit__-5VvX .index-module_border__JdNLM {\n position: absolute;\n inset: -10px;\n border: 2px dashed rgb(241, 102, 41);\n border-radius: 2px;\n pointer-events: none;\n}\n.index-module_edit__-5VvX .index-module_drag__uvdPG {\n position: absolute;\n inset: -10px;\n border-radius: 2px;\n}\n.index-module_edit__-5VvX .index-module_rotate__H-KIZ {\n position: absolute;\n top: -20px;\n right: -20px;\n width: 20px;\n height: 20px;\n cursor: grab;\n z-index: 1001;\n pointer-events: auto;\n}\n.index-module_edit__-5VvX .index-module_move__mZF8s {\n position: absolute;\n bottom: -20px;\n left: -20px;\n width: 20px;\n height: 20px;\n cursor: move;\n z-index: 1001;\n pointer-events: auto;\n}";
8697
8696
  var styles$i = {"edit":"index-module_edit__-5VvX","border":"index-module_border__JdNLM","drag":"index-module_drag__uvdPG","rotate":"index-module_rotate__H-KIZ","move":"index-module_move__mZF8s"};
8698
8697
  styleInject(css_248z$i);
8699
8698
 
@@ -8775,8 +8774,10 @@ const DragHandle = ({ onDragStart, isDragging }) => {
8775
8774
  onDragStart(e);
8776
8775
  }, onTouchStart: (e) => onDragStart(e), onMouseUp: (e) => {
8777
8776
  console.log('drag up');
8778
- onDragEnd(e);
8779
- }, onTouchEnd: (e) => onDragEnd(e), style: { cursor: isDragging ? 'grabbing' : 'move' }, dangerouslySetInnerHTML: { __html: DEFAULT_DRAG_ICON } }));
8777
+ // onDragEnd(e);
8778
+ },
8779
+ // onTouchEnd={(e) => onDragEnd(e)}
8780
+ style: { cursor: isDragging ? 'grabbing' : 'move' }, dangerouslySetInnerHTML: { __html: DEFAULT_DRAG_ICON } }));
8780
8781
  };
8781
8782
 
8782
8783
  const MapDrag = ({ map: _map, dragCallbacks, onBoundaryLabelsCollapse, onTransformChange, isDragMap = false, }) => {
@@ -12513,11 +12514,74 @@ class ObstacleLayer extends BaseLayer {
12513
12514
  }
12514
12515
  }
12515
12516
  }
12517
+ /**
12518
+ * 将坐标点按type分组
12519
+ */
12520
+ groupCoordinatesByType(coordinates) {
12521
+ const segments = [];
12522
+ let currentSegment = null;
12523
+ for (let i = 0; i < coordinates.length; i++) {
12524
+ const coord = coordinates[i];
12525
+ const type = coord[2] || 2; // 默认type为2
12526
+ if (!currentSegment || currentSegment.type !== type) {
12527
+ // 开始新的段
12528
+ if (currentSegment && currentSegment.points.length > 0) {
12529
+ // 为了连接线段,将当前点也加入上一段的结尾
12530
+ currentSegment.points.push(coord);
12531
+ }
12532
+ currentSegment = {
12533
+ type: type,
12534
+ points: [coord],
12535
+ };
12536
+ segments.push(currentSegment);
12537
+ }
12538
+ else {
12539
+ // 继续当前段
12540
+ currentSegment.points.push(coord);
12541
+ }
12542
+ }
12543
+ // 处理封闭边界:如果第一段和最后一段type相同,需要连接起来
12544
+ if (segments.length > 1 && segments[0].type === segments[segments.length - 1].type) {
12545
+ const firstSegment = segments[0];
12546
+ const lastSegment = segments[segments.length - 1];
12547
+ // 将第一个点添加到最后一段,形成封闭
12548
+ lastSegment.points.push(firstSegment.points[0]);
12549
+ }
12550
+ else if (segments.length === 1) {
12551
+ // 只有一段的情况,添加第一个点到末尾形成封闭
12552
+ segments[0].points.push(coordinates[0]);
12553
+ }
12554
+ return segments;
12555
+ }
12516
12556
  /**
12517
12557
  * 渲染障碍物元素
12518
12558
  */
12519
12559
  renderObstacle(svgGroup, element) {
12520
- const { coordinates, style } = element;
12560
+ const { coordinates, style, originalData } = element;
12561
+ const { status, start_timestamp, end_timestamp } = originalData || {};
12562
+ if (coordinates.length < 2 || status === 0) {
12563
+ return;
12564
+ }
12565
+ if (status === 1 &&
12566
+ (start_timestamp > Date.now() / 1000 || end_timestamp < Date.now() / 1000)) {
12567
+ return;
12568
+ }
12569
+ // 1. 先遍历所有的coordinates,把所有点分为若干段的path
12570
+ const pathSegments = this.groupCoordinatesByType(coordinates);
12571
+ // 2&3. 根据type处理每个path段
12572
+ pathSegments.forEach((segment) => {
12573
+ if (segment.points.length < 2)
12574
+ return;
12575
+ if (segment.type === 2) {
12576
+ // type=2: 直接添加到svgGroup中
12577
+ this.createDirectPath(svgGroup, segment.points, style);
12578
+ }
12579
+ else if (segment.type === 1) {
12580
+ // type=1: 使用PathMeasure逻辑生成平行路径
12581
+ // this.createDirectPath(svgGroup, segment.points, style);
12582
+ this.createParallelPathsWithMeasure(svgGroup, segment.points, style);
12583
+ }
12584
+ });
12521
12585
  if (coordinates.length < 3)
12522
12586
  return;
12523
12587
  const polygon = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');
@@ -12525,7 +12589,7 @@ class ObstacleLayer extends BaseLayer {
12525
12589
  const points = coordinates.map((coord) => `${coord[0]},${coord[1]}`).join(' ');
12526
12590
  polygon.setAttribute('points', points);
12527
12591
  polygon.setAttribute('fill', style.fillColor || 'rgba(220, 53, 69, 0.2)');
12528
- polygon.setAttribute('stroke', style.lineColor || '#dc3545');
12592
+ polygon.setAttribute('stroke', 'transparent');
12529
12593
  // 确保最小线条宽度
12530
12594
  const lineWidth = Math.max(style.lineWidth || 2, 0.5);
12531
12595
  polygon.setAttribute('stroke-width', lineWidth.toString());
@@ -12536,6 +12600,113 @@ class ObstacleLayer extends BaseLayer {
12536
12600
  polygon.classList.add('vector-obstacle');
12537
12601
  svgGroup.appendChild(polygon);
12538
12602
  }
12603
+ /**
12604
+ * 创建直接路径(type=2)
12605
+ */
12606
+ createDirectPath(svgGroup, points, style) {
12607
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
12608
+ const strokeColor = style.lineColor;
12609
+ // 构建路径数据
12610
+ let pathData = '';
12611
+ for (let i = 0; i < points.length; i++) {
12612
+ const [x, y] = points[i];
12613
+ if (i === 0) {
12614
+ pathData += `M ${x} ${y}`;
12615
+ }
12616
+ else {
12617
+ pathData += ` L ${x} ${y}`;
12618
+ }
12619
+ }
12620
+ path.setAttribute('d', pathData);
12621
+ path.setAttribute('stroke', strokeColor);
12622
+ path.setAttribute('fill', 'none');
12623
+ // 确保最小线条宽度
12624
+ const lineWidth = dp2px(style.lineWidth || 3);
12625
+ path.setAttribute('stroke-width', lineWidth.toString());
12626
+ path.setAttribute('stroke-linecap', 'round');
12627
+ path.setAttribute('stroke-linejoin', 'round');
12628
+ path.setAttribute('opacity', (style.opacity || 1).toString());
12629
+ path.setAttribute('vector-effect', 'non-scaling-stroke');
12630
+ path.classList.add('vector-obstacle');
12631
+ svgGroup.appendChild(path);
12632
+ }
12633
+ /**
12634
+ * 使用PathMeasure逻辑创建平行路径(type=1)
12635
+ */
12636
+ createParallelPathsWithMeasure(svgGroup, points, style) {
12637
+ const strokeColor = style.lineColor;
12638
+ const lineWidth = dp2px(style.lineWidth || 3);
12639
+ // 获取当前SVG的缩放级别,计算固定屏幕像素间距
12640
+ const fixedScreenDistance = lineWidth; // 固定的屏幕像素距离
12641
+ const offsetDistance = fixedScreenDistance; // 转换为SVG坐标系距离
12642
+ // 直接对每个线段生成平行直线段
12643
+ const parallelPaths = this.generateStraightParallelPaths(points, offsetDistance);
12644
+ // 渲染两条平行虚线
12645
+ parallelPaths.forEach((pathData, index) => {
12646
+ if (!pathData)
12647
+ return;
12648
+ const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
12649
+ path.setAttribute('d', pathData);
12650
+ path.setAttribute('fill', 'none');
12651
+ path.setAttribute('stroke', strokeColor);
12652
+ path.setAttribute('stroke-width', lineWidth.toString());
12653
+ path.setAttribute('stroke-linecap', 'round');
12654
+ path.setAttribute('stroke-linejoin', 'round');
12655
+ path.setAttribute('opacity', (style.opacity || 1).toString());
12656
+ // 使用CSS样式设置虚线,避免随SVG缩放变化
12657
+ // 或者可以根据当前缩放级别动态计算dash array
12658
+ path.style.strokeDasharray = `${lineWidth}px ${lineWidth * 2}px`;
12659
+ path.classList.add(`vector-boundary-parallel-${index + 1}`);
12660
+ svgGroup.appendChild(path);
12661
+ });
12662
+ }
12663
+ /**
12664
+ * 生成直线平行路径(每个线段分别处理)
12665
+ */
12666
+ generateStraightParallelPaths(points, offsetDistance) {
12667
+ if (points.length < 2)
12668
+ return ['', ''];
12669
+ let parallelPath1Data = '';
12670
+ let parallelPath2Data = '';
12671
+ // 对每个线段分别计算平行线
12672
+ for (let i = 0; i < points.length - 1; i++) {
12673
+ const startPoint = points[i];
12674
+ const endPoint = points[i + 1];
12675
+ // 计算线段的方向向量
12676
+ const dx = endPoint[0] - startPoint[0];
12677
+ const dy = endPoint[1] - startPoint[1];
12678
+ const length = Math.sqrt(dx * dx + dy * dy);
12679
+ if (length === 0)
12680
+ continue; // 跳过零长度线段
12681
+ // 标准化方向向量
12682
+ const unitX = dx / length;
12683
+ const unitY = dy / length;
12684
+ // 计算垂直向量
12685
+ const perpendicularX = -unitY;
12686
+ const perpendicularY = unitX;
12687
+ // 计算平行线的起点和终点
12688
+ const start1X = startPoint[0] + perpendicularX * offsetDistance;
12689
+ const start1Y = startPoint[1] + perpendicularY * offsetDistance;
12690
+ const end1X = endPoint[0] + perpendicularX * offsetDistance;
12691
+ const end1Y = endPoint[1] + perpendicularY * offsetDistance;
12692
+ const start2X = startPoint[0] - perpendicularX * offsetDistance;
12693
+ const start2Y = startPoint[1] - perpendicularY * offsetDistance;
12694
+ const end2X = endPoint[0] - perpendicularX * offsetDistance;
12695
+ const end2Y = endPoint[1] - perpendicularY * offsetDistance;
12696
+ // 构建路径数据
12697
+ if (i === 0) {
12698
+ parallelPath1Data = `M ${start1X} ${start1Y}`;
12699
+ parallelPath2Data = `M ${start2X} ${start2Y}`;
12700
+ }
12701
+ else {
12702
+ parallelPath1Data += ` M ${start1X} ${start1Y}`;
12703
+ parallelPath2Data += ` M ${start2X} ${start2Y}`;
12704
+ }
12705
+ parallelPath1Data += ` L ${end1X} ${end1Y}`;
12706
+ parallelPath2Data += ` L ${end2X} ${end2Y}`;
12707
+ }
12708
+ return [parallelPath2Data, parallelPath1Data];
12709
+ }
12539
12710
  }
12540
12711
 
12541
12712
  var chargingPileImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABHHSURBVHgBtVtdjF3VdV7rnHPHtLbUkRrALwmDidSSgD1JqWQ3UMaNMaFq63FIKyoVZFRF6kMkbCmVcP9mrBARoJUnLRL9c+3WSVsqIkwrtRBKfaGmQFuFazBpK0wYnmLSF6MYx557zt5Zv3vvO/Z4bDPZ9pl97rlnztnfXmt969s/g/AjKrN7nxwf634wBTFMYIQNAWASAcYjxAmI+T5EnAeIdFQnYwxHqwr6Z5s1g9ld20/Cj6AgrGBhkKva0/d1MUxBiFMxEjw7gGv5RyUWL+cfiCD/0I4KoULs04ensKkP7d716/OwQmVFAD/4yMGpLsJM7MJUiIGMGiDQwUBDYHR8DgocFG/54gQ0HRVUFQPnuoK6qvp0ec/u3767Dx+wfCDAXyKg2MWZELopBth1BJQAB6ujgY5RANNpRIbLuPnFETAaxgSUawYpVhawtdQV1XWN81hXu37ni3cfgssslwX4wQf/bqLD4f6uY6AdAaWDagYqdRi18qhrn/vmc61bRbIwZqAKmms9rw/Usbdn9+5Ld/VLBvzlhw/e17XtLIEcbzsG2SpgOQQkYe0wu7SDZqgRvS7Bcisq/oFVRAZqVlaQXDeRgKIDFtBNPd9Aved3d99zAC6hXDTg2dknx6sr3psJbbezZZBtB14TWApfAqmgyYPpnF07ZMIKeqLviymMoxIWY0VEJ6/zWNgsG5uGgTdANXBNwOf+4P4duy4Wx0UBnp3dP45jcJgsO6kgWxi2BLIdYtcGBisWDqHFji3qMbzIlY2jLZgRyxaUbl1hJiwBzLWBdqBNo0fNR90MxhC279597/xyWJYFPPvgfsqj8XA7HE60BLQVsAqazzt3aY5ZqmPU2A1s0sgunPwZFbVzNQNW+hLTsvnRrCwujbFCAYoa0xVbNjbs2g0DHxNrO/Cm15sfQ9y8HGhcDiyZ6nDbLkwMhwRwOCSQw2RdsjbVHK8pfg0wowoC1lwak9ZIgN3E4tYjgCuJa2XsujISkxiuKJYbVEsz0B6BbrDX6yXQMKw+MTt775KipboQYELx5HBIYBcI5MJZoHNYWFjgc1wYcr2AQ+4A6YgF7ozIHaKuLl6gtcQ2dw51mhCdxXvo5LN5Cco9nXmOPifa85Hfze/xmtuxQO1IbZLvhhPQdIc5BJeC1Cz1xcwD+/bSyybTixYYVEsNWGAQ0RpI1zqxprKzKSohqeAGdctiIbBScmIHds5G9W9TYJyjydb0UHZnsjF7EIbgIdM4P0S+Xui4STL6DNXnJbL6fBdnv7xvR9cNv1KAjXSOZEXqUbZiixrPnaQgIayOXZgaFDtmZAMeFKgpDW+gsLVf52aGWES3pC6rY3FNnhdNxPjvmpgxipAOAw6JjZu3bHvv+X/7p5eXBTw7+9jEMIb97cJwvATL4NldGay6YGv5lkFTj0PAUCorbYyTVdz2y1twxz13wurVP47/+39vgRmabzGTRjusaxQ1jjC9EV/RMU4DCM5HzvZQbfyF2+98vP/cUyPxfI5LdxXOdAvDCY6dVkCqVYcal2JdlZGtuRe/OIAZw+0ovukWvPqqD8Hnf/Muef6NN/wUPPvckXj69GmMOSnxbwl1BX0IKla9qJVbuELP7zG6G0elQLRKY2OcImI/fbm5xDdCWrNf+rNpYt0d4q5sXSGM1iyrhMTMLMQkedcPAYxmWXfXRMybNn1ypFOvvuon0QVJthikfK2AUh63DpXczuHDnqXkJhzCxmjVOKnNnZAdfTf1e7OPTS0JeNiFvfILchAwe0CrbIvGsIuAhiK2zI3Vrd3ywO5cvmfdug+P3KugneQCmETB4hlCiFHynYSOpcJWGL/z9opXtuKVFn78nJnzAuaeoAeYuOCUsICtCwxNG8rMppOFld0KkEgEIZaje4Atn/6UuHRZrr32IwrOTCzPgXL46NaH3DGgXiSSNXbgbN0an3CIubEIdHTNQO0fsXKKYUouM22hoIZay4MkDYlWbgWoKSjUhmkDmSZiOZVhp7d9+mZYXNas/jFwFgYoSStlLIYoaiQYq2HqCJRRZcDEaNjx162KVVZnLQVvVRNttbUML0mpsJX7ycLMzARmitOMqicXCcrImnocrLpZSC4cbHCgn9X/NBjXXfvhuP7Gnz4H8Pobr1d4RkVQpDGbKECzrt5jgw/1gqCf1cMk/1tcS7i1KbbZ8sI5EMjKs7N7xxPg0103LaMelosSqwa04w7o0hhXjiLuIMZRaaqfJSvwHdO/cvt5pSu7uJOWGCop7cy6zsDae8bcMefrTGoE2sbhLQOXdrun6kiOQZ8Jzc4EmLppm/aMsp8N90DjNYGNBVuKWAj22WPOcy/3PTFx3LrlFliq0PdZiKhaKghMPcRd3t25AGpvs7awBlAyxS64VC0HODSo6eKtAphNTU4xpfEpluVewpx2gtT2Ik8nGjwIiWyiiwZLh5s2/swFByYfXXeN83mRj8HJCkeEB7has2vmXcbe0QlU5W1wY4GB97AUt27OtM1k152FPKYNMqYtwapxhSmdSFHjVpgFS3kcLSQ/u+32C+GFK6/6EFqMgjGfaSy7wbsg5nOPJO5Wl58a4vSDqIRaTpam04p1d6eE2zWeXeBsu2qqaUM7ZdMzrotdMo6QFLtNzptmTn1bzGMBbdrWLT8PV1995QUBX7fuI1lX6xPjmtWrcf3662HDjR+D6667BtZSrB99/X/g4Ne/ASfe/f8MPWUv9zGeFw3UC5URGePh8bMYzIkNh1U70RCYDT5oX6SeojOiuXKMmaTS7ONo/+spA16uXLfuGtiw/nr8KAFbd+01MLnh47g4X8uzqOP4+hfvfyC5vbO3Tv9ius4Y+HIel5dhKfG+oSFc4zY941/YICD4wABVSekUK/eDzVCATUkVwGOk2MQN6z92UYD/6KHfh4spa9asLj0LER2052a9rgaqPJZtyKpTTzacnGQLT4SYeiDRvQn0ZFlnUI3ZLDBCSN0tv/fZ6Ttgpcvxt+bB5aa+x94dnT2iyhAZsHCDKsxTTXkMTallnGFPxGDa10CzZUdjdvHYsyiY8iOsXXslbL3tVljp8s1/7ctr9VV5sgiUt93j8lAyhNJgKX3RtYkmpAt+s2nj4II+jsRxmpbwREQOIRPJ9OHnNv7sspOCl1qIrGBw9NtmymCT2jafaxkhJQn5vsKsvXVgk8EHaGJyYx/16Beue4IpHVND6DkYHLekiCAvvHP7L8JKl2eePexxmtjK+l2vmjiV9ohNCtAqSQt8EZpCylosRNfG7sLoAhcgpUXU20OahNp62xSsXSYVXU55+pv9CGV2sGSQQMpVc/PocjfmpJ0GOZoCK7L2vHWfCXiLW5s+idnCPDSz4YoNBQGS+P/M1ilY6TJ47Q1y6e9lfe2aLo4eRtTWNhlvxlKR239krKSl48k0IDPvyI8oZV7B0FkDg8f45PqPXxSI4995m6x2+KLufYbvK0ZOkEgopk7w0IMsOTO7FZ5v7Z5n0jpKnybtHWlSzEBjemiMpuPAHypJwllz8NoxAn0DnGulY3D8+DwMXn8DBoNjcOr99+OaNWvwM1s3w3JlcPQNcGM4Sxdas5jc1wTF07oelrlDcuaiT+811OZX6co9NtWXHmEuWypb792YJSWkz1955NH4ue2/hCwSvn/qFLz40n8R0Lf5XNOGORefn6Lvl+qgDPYYfPfdd8HfY2Nne98o8qKNYP0TE8842fLkAMQBLVDg/NBWtoo5Tx8QIGS+WuTio/V3T7yLf/LYvvz2bH0s+S55BFnvQoCffvawd3pSdUZU6bnFuzR7eN/4hL7nT0jrs31atWmftyV4zbG+YAvZJ/QdwcW+U6I1Ini8x/JXbCqovO6xKDe8evT1JcGeOvU+/PMzz6EtyAFkokJIU0PZw6KaNPtomvy13tC1WEpJ3aCam5tl0urr8mzF7kLcDUZQOnehaV4tHmMxCB/paRufRmPGklSiNzGIO/Lvvzp4XYCdr/z7f7wCnn5MNxcBlIgS7XngnRyLZ6BxjGKS5j/PWGXGg6a5+rqnIvVGzIYGZ+Qynq32ZgR3BLVktLiB0v1SWLhnwptvvQ3nK//yzHN6r69kFOTp70nMbCyuvm9ayGbjbUeQCEG6IPtCBPCZpvqqrMX67pmRbQgpwA2gu1eaWk0uLtztgEy8pOZleWq8EOKRF89Z+oETJ74n1ndl57nFnx8t4/pzvZeVEG1CLdW69MrLrdhUTyXAB8jUWFd9XnVXF6j4nzQ/OYgAQ4zp1eiZQlKVu7KJsmhGNqUGDgAiZKH6rfPEcYrtEXFRMIdxgs6MauP0BxYk5sbjhfSa8Tz/p3Oz8wmw3bVHtgjZijuKf0sHGO9V3tHeHm1MnvUpk1pa+UvElXVMavyblLYWx/E/fOMfE8g0wRFN75kCzPnX/lusS3urtPWJwDa8ZYJW1XGP/0oC/JePPsAW7uu+qHSwpcFmXSO4yaNPrrk/lcQU083pnugjsFCwj/544cWXElh25zePfydTU4w5k1pXh0XZR7ulcj/WbRJl+6tqnrGdA5hLjU1h5TrqBjE5hMz04SOp0eIWPD61U2Is8Gvjoik9sx66m75w5D+Twfb99d9Ccb88IRSurV6cck4SJCAb3NSN0cHqNidebBxZGC+VipQdn7//8NnhmVsXzvK2hrO8rYEXqbDtujTn5eb0qDTNY+MXG74tHtGAseeIL+qXt9y8iecd8YUjr4CZ3wb1xX1JW6HtBRHLyhanuq6waXrQ8O6e3hisGhuDsVVXwKreqgMH/uKhe0t85255qOHeJjSvdnX3EzXP/tWBhlQBqqibzNjqstqfmuZaFbDowWRevr/w45EO1t9GAvpS0RMj6ay4NT0/ywpLnznD1LGRTS8EvK7ny9jN8BaVwX8fOfnJm245QwjuCGlOi6d/krIDGJm9dMloXOwNM+Fibo7ZTooJk6ozjYEWHpD81nleJ6tcSIBauNK9mChxWqetS7KjZ6y3ijes7fqbP3+4vyxgAf2tF1+ZvOnmcXrRxpj3Wpm6yc4rig5HARYdAflcW+uunr92PwFLeTEWFkQYDYfoik9sahvX2I1r3cIEPXLnXsPHqrmD+x556HzYlty2VLftHnrYQGKj6SE9lPdIcV5jYrCUlZky5hSc3DHn0Jg1UiyZPX3GzMhYXs/SSsxNIA2skhOlHQZc98iVJYZj04wNDv7Vw0tuRVwS8IEDcyd7sdtMrjLfU9ACXLb76b5HIQzfAetSzjvA03NKXSEx92gHFHXM6c6x2pBHdb6wcd5DLVsQ+ZD29XiTWu8d+rkdLlDqC305GLx85obJjU8RuGl62bhJRxihk5H4zB6LpsoKNsYiRLH0eZGFkAY34KoYc25VyL5/WkipQXVjjtkxZud3yHybv3bgD+fhcgFzOTZ4+eQNnyDQWE/R69dGI5xCCY2knRKOc1JeqQBMX2aBlsavWbTr7AWakEAhJrEoMzBK+mnGUGK2NxYJ7NGFCjY9cWDuxHJ4EC6h/Nrd9+2l9dadbdpumDeX+ipjKDajmaKE0iVC1kkptUqnuFtoLbvvJNOyC4tUtG3ETWOxynssx3gf9R8Pm2r2EIXgxWC4JMBcfvXunTu6djhDi80TQ90aga2uv4Ivs0bfSZtHSQbLyMwSUekfruB0PF6ppMW8UVwAE9gebywlN66b3klilD2Pf31uDi6hLOvSi8u3X3t5sOGmT9FQqxqndk2iyZ50QKXjahPxqFrchL3WlQPS0Rkd9QgwG8DovujaUw4dlCnIqkiA+2NjzR2PH5x7Gi6xXLKFy3Lnb3xhOrRhL60tT3TFnwKIe/sejGDL6DpJgAXn+YSMx7iTk28O1z3SaUe8ZIc+hfCeJ772aB8us3wgwF4+d9cXplqIM6Hrprrgm9fSimSMaasE5JhGSG494iFMVKKgKvk7B94JT7D7NL2654m/v3ygXlYEsJfpu35rArCejm23jex7q/05D+qYOYHOORZcQSmFVYgpfunoY419ODP21UOH5lbsr9RWFHBZpqd3jsMVZybJyJTO4gbCPk6YJgjrRPZp+TFP7HaSMA9iFQfkyO/Awqr+SoIsyw8B5OTF820K0FQAAAAASUVORK5CYII=";
@@ -15018,15 +15189,15 @@ const VertexElement = React__default.memo(({ r, stroke, ...props }) => {
15018
15189
  return (jsx("circle", { r: radius * overlayScale, stroke: stroke || '#fff', fill: '#fff', strokeWidth: 2 * overlayScale, ...props }));
15019
15190
  });
15020
15191
 
15021
- var _path$c;
15022
- function _extends$k() { return _extends$k = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$k.apply(null, arguments); }
15192
+ var _path$b;
15193
+ function _extends$j() { return _extends$j = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$j.apply(null, arguments); }
15023
15194
  var SvgDelete$1 = function SvgDelete(props) {
15024
- return /*#__PURE__*/React.createElement("svg", _extends$k({
15195
+ return /*#__PURE__*/React.createElement("svg", _extends$j({
15025
15196
  xmlns: "http://www.w3.org/2000/svg",
15026
15197
  width: 16,
15027
15198
  height: 16,
15028
15199
  fill: "none"
15029
- }, props), _path$c || (_path$c = /*#__PURE__*/React.createElement("path", {
15200
+ }, props), _path$b || (_path$b = /*#__PURE__*/React.createElement("path", {
15030
15201
  fill: "#FD494D",
15031
15202
  d: "M6.667 12a.667.667 0 0 0 .666-.667v-4a.667.667 0 1 0-1.333 0v4a.667.667 0 0 0 .667.667m6.666-8h-2.666v-.667a2 2 0 0 0-2-2H7.333a2 2 0 0 0-2 2V4H2.667a.667.667 0 0 0 0 1.333h.666v7.334a2 2 0 0 0 2 2h5.334a2 2 0 0 0 2-2V5.333h.666a.667.667 0 1 0 0-1.333m-6.666-.667a.667.667 0 0 1 .666-.666h1.334a.667.667 0 0 1 .666.666V4H6.667zm4.666 9.334a.667.667 0 0 1-.666.666H5.333a.667.667 0 0 1-.666-.666V5.333h6.666zm-2-.667a.667.667 0 0 0 .667-.667v-4a.667.667 0 0 0-1.333 0v4a.667.667 0 0 0 .666.667"
15032
15203
  })));
@@ -15199,6 +15370,7 @@ var MobileEditMode;
15199
15370
  })(MobileEditMode || (MobileEditMode = {}));
15200
15371
  var ClickEventType;
15201
15372
  (function (ClickEventType) {
15373
+ // 点击doodle的active time的时候触发
15202
15374
  ClickEventType["DOODLE_ACTIVE_TIME"] = "doodleActiveTime";
15203
15375
  })(ClickEventType || (ClickEventType = {}));
15204
15376
  const INIT_EDIT_MAP_INFO = {
@@ -15561,7 +15733,7 @@ const useCheckElement = () => {
15561
15733
  return { isValid: true };
15562
15734
  }, [editMapInfo, svgElementDatas, minDistance]);
15563
15735
  const checkCanNotCreateAtPosition = useCallback((checkPoint) => {
15564
- // console.log('editMapInfo.elementType--->', editMapInfo.elementType);
15736
+ console.log('editMapInfo.elementType--->', editMapInfo.elementType);
15565
15737
  if (!editMapInfo.elementType)
15566
15738
  return false;
15567
15739
  const points = editMapInfo?.selectElement?.points || [];
@@ -15951,17 +16123,13 @@ const PolygonElement = ({ points, fillColor = 'rgba(0, 0, 0, 0.1)', fillOpacity
15951
16123
  console.log('handleMouseUp', JSON.stringify(dragState));
15952
16124
  if (dragState.isDragging && dragState.currentPosition) {
15953
16125
  // 构建新的坐标数组
15954
- const newCoordinates = editMapInfo?.createMode === CreateStatus.CREATING
15955
- ? [...coordinates]
15956
- : [...coordinates].reverse();
16126
+ const newCoordinates = [...coordinates];
15957
16127
  // 如果是新创建的顶点,需要确保它已经被插入
15958
16128
  if (dragState.dragType === 'new' && dragState.newVertexIndex !== -1) {
15959
16129
  if (showNotCreateCursor) ;
15960
16130
  else {
15961
16131
  // mouseUp 时才真正插入新顶点
15962
16132
  newCoordinates.splice(dragState.newVertexIndex, 0, dragState.currentPosition);
15963
- // 通知外部坐标变化
15964
- onCoordinatesChange?.(newCoordinates);
15965
16133
  }
15966
16134
  }
15967
16135
  else {
@@ -15972,9 +16140,11 @@ const PolygonElement = ({ points, fillColor = 'rgba(0, 0, 0, 0.1)', fillOpacity
15972
16140
  else {
15973
16141
  newCoordinates[dragState.dragIndex] = dragState.currentPosition;
15974
16142
  }
15975
- // 通知外部坐标变化
15976
- onCoordinatesChange?.(newCoordinates);
15977
16143
  }
16144
+ const result = editMapInfo?.createMode === CreateStatus.CREATING
16145
+ ? newCoordinates
16146
+ : newCoordinates.reverse();
16147
+ onCoordinatesChange?.(result);
15978
16148
  }
15979
16149
  setDragState({
15980
16150
  isDragging: false,
@@ -16067,7 +16237,6 @@ const PolygonElement = ({ points, fillColor = 'rgba(0, 0, 0, 0.1)', fillOpacity
16067
16237
  const ghostFirstMidpoint = createMode && mousePos && !completed && renderCoordinates.length >= 1
16068
16238
  ? calculateMidpoint(renderCoordinates[0], [mousePos.x, mousePos.y])
16069
16239
  : null;
16070
- console.log('ghostFirstMidpoint', ghostFirstMidpoint, ghostFirstDistance);
16071
16240
  return (jsxs(Fragment, { children: [(editMode || (createMode && completed)) &&
16072
16241
  dragState.isDragging &&
16073
16242
  dragState.dragType !== 'new' &&
@@ -16191,7 +16360,8 @@ const PolygonElement = ({ points, fillColor = 'rgba(0, 0, 0, 0.1)', fillOpacity
16191
16360
  if (onVertexDelete &&
16192
16361
  (editMode || (createMode && completed)) &&
16193
16362
  coordinates.length > 3) {
16194
- onVertexDelete(idx);
16363
+ // 当前是逆时针展示的,但是外部数据是顺时针的,所以idx需要转换一下
16364
+ onVertexDelete(renderCoordinates?.length - 1 - idx);
16195
16365
  }
16196
16366
  setTooltipIndex(null);
16197
16367
  }, style: { cursor: 'pointer' }, children: [jsx("rect", { x: 0, y: -24, width: 20, height: 20, rx: 2, ry: 2, fill: "#fff", strokeWidth: 1, filter: "url(#vertex-tooltip-shadow)" }), jsx("g", { transform: `translate(2, -22)`, children: jsx(SvgDelete$1, {}) })] })), canComplete && (jsx("g", { style: { pointerEvents: 'none' }, transform: `translate(${coord[0] - 5 * overlayScale * 3}, ${coord[1] - 2.5 * overlayScale * 3}) scale(${overlayScale * 3})`, children: jsx("svg", { width: "10", height: "5", viewBox: "0 0 6 5", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M0.5 2.5L1.3452 3.3452C1.71469 3.71469 2.30636 3.73741 2.7031 3.39735L5.5 1", stroke: "#FF7A33", "stroke-linecap": "round" }) }) })
@@ -16883,9 +17053,9 @@ const useVisionOffTransform = (data, scaleConstraints
16883
17053
  };
16884
17054
 
16885
17055
  var _g$7, _defs$7;
16886
- function _extends$j() { return _extends$j = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$j.apply(null, arguments); }
17056
+ function _extends$i() { return _extends$i = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$i.apply(null, arguments); }
16887
17057
  var SvgTransformDelete = function SvgTransformDelete(props) {
16888
- return /*#__PURE__*/React.createElement("svg", _extends$j({
17058
+ return /*#__PURE__*/React.createElement("svg", _extends$i({
16889
17059
  xmlns: "http://www.w3.org/2000/svg",
16890
17060
  width: 20,
16891
17061
  height: 20,
@@ -16934,9 +17104,9 @@ var SvgTransformDelete = function SvgTransformDelete(props) {
16934
17104
  };
16935
17105
 
16936
17106
  var _g$6, _defs$6;
16937
- function _extends$i() { return _extends$i = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$i.apply(null, arguments); }
17107
+ function _extends$h() { return _extends$h = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$h.apply(null, arguments); }
16938
17108
  var SvgTransformRotate = function SvgTransformRotate(props) {
16939
- return /*#__PURE__*/React.createElement("svg", _extends$i({
17109
+ return /*#__PURE__*/React.createElement("svg", _extends$h({
16940
17110
  xmlns: "http://www.w3.org/2000/svg",
16941
17111
  width: 21,
16942
17112
  height: 20,
@@ -16970,9 +17140,9 @@ var SvgTransformRotate = function SvgTransformRotate(props) {
16970
17140
  };
16971
17141
 
16972
17142
  var _g$5, _defs$5;
16973
- function _extends$h() { return _extends$h = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$h.apply(null, arguments); }
17143
+ function _extends$g() { return _extends$g = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$g.apply(null, arguments); }
16974
17144
  var SvgTransformScale = function SvgTransformScale(props) {
16975
- return /*#__PURE__*/React.createElement("svg", _extends$h({
17145
+ return /*#__PURE__*/React.createElement("svg", _extends$g({
16976
17146
  xmlns: "http://www.w3.org/2000/svg",
16977
17147
  width: 21,
16978
17148
  height: 20,
@@ -17006,9 +17176,9 @@ var SvgTransformScale = function SvgTransformScale(props) {
17006
17176
  };
17007
17177
 
17008
17178
  var _g$4, _defs$4;
17009
- function _extends$g() { return _extends$g = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$g.apply(null, arguments); }
17179
+ function _extends$f() { return _extends$f = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$f.apply(null, arguments); }
17010
17180
  var SvgTransformTranslate = function SvgTransformTranslate(props) {
17011
- return /*#__PURE__*/React.createElement("svg", _extends$g({
17181
+ return /*#__PURE__*/React.createElement("svg", _extends$f({
17012
17182
  xmlns: "http://www.w3.org/2000/svg",
17013
17183
  width: 20,
17014
17184
  height: 20,
@@ -17186,8 +17356,8 @@ const VisionOffTransformWrapper = ({ data, isSelected = false, onSelect, onCance
17186
17356
  const centerX = (minX + maxX) / 2;
17187
17357
  // 计算尺寸显示框的位置(选择框下方)
17188
17358
  const infoBoxY = maxY + 20; // 选择框下方20像素
17189
- const infoBoxWidth = 140; // 信息框宽度
17190
- const infoBoxHeight = 30; // 信息框高度
17359
+ const infoBoxWidth = 140 * overlayScale; // 信息框宽度
17360
+ const infoBoxHeight = 30 * overlayScale; // 信息框高度
17191
17361
  const infoBoxX = centerX - infoBoxWidth / 2; // 居中对齐
17192
17362
  const scale = (isWeb ? 2 : 1) * overlayScale;
17193
17363
  const offsetLeft = 10 * scale;
@@ -17241,6 +17411,7 @@ const VisionOffTransformWrapper = ({ data, isSelected = false, onSelect, onCance
17241
17411
  fontSize: '12px',
17242
17412
  color: 'white',
17243
17413
  fontWeight: '400',
17414
+ // transform: `translate(0, ${50 * overlayScale}px) scale(${overlayScale})`,
17244
17415
  }, children: [dimensions.height, "m \u00D7 ", dimensions.width, "m"] }) }))] }));
17245
17416
  })()] }));
17246
17417
  };
@@ -17664,8 +17835,8 @@ const useDoodleTransform = (data, onTransformChange, options) => {
17664
17835
  const scaledHeight = height * currentScale;
17665
17836
  // 转换为米单位(假设SVG坐标单位是米)
17666
17837
  // 这里可以根据实际的地图比例尺进行调整
17667
- const widthInMeters = scaledWidth;
17668
- const heightInMeters = scaledHeight;
17838
+ const widthInMeters = scaledWidth / SCALE_FACTOR;
17839
+ const heightInMeters = scaledHeight / SCALE_FACTOR;
17669
17840
  return {
17670
17841
  width: Math.round(widthInMeters * 100) / 100, // 保留2位小数
17671
17842
  height: Math.round(heightInMeters * 100) / 100, // 保留2位小数
@@ -17697,15 +17868,15 @@ const useDoodleTransform = (data, onTransformChange, options) => {
17697
17868
  };
17698
17869
  };
17699
17870
 
17700
- var _path$b;
17701
- function _extends$f() { return _extends$f = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$f.apply(null, arguments); }
17871
+ var _path$a;
17872
+ function _extends$e() { return _extends$e = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$e.apply(null, arguments); }
17702
17873
  var SvgTransformArrow = function SvgTransformArrow(props) {
17703
- return /*#__PURE__*/React.createElement("svg", _extends$f({
17874
+ return /*#__PURE__*/React.createElement("svg", _extends$e({
17704
17875
  xmlns: "http://www.w3.org/2000/svg",
17705
17876
  width: 7,
17706
17877
  height: 11,
17707
17878
  fill: "none"
17708
- }, props), _path$b || (_path$b = /*#__PURE__*/React.createElement("path", {
17879
+ }, props), _path$a || (_path$a = /*#__PURE__*/React.createElement("path", {
17709
17880
  fill: "#fff",
17710
17881
  d: "M2.156 1.032a.777.777 0 0 0-1.061 0 .69.69 0 0 0-.062.943l.062.068 3.97 3.78-3.97 3.78a.69.69 0 0 0-.062.944l.062.067c.27.257.696.277.99.06l.07-.06 4.5-4.286a.69.69 0 0 0 .063-.943l-.062-.067z",
17711
17882
  opacity: 0.5
@@ -17767,7 +17938,7 @@ const DoodleTransform = ({ data, isSelected: _isSelected, onSelect }) => {
17767
17938
  };
17768
17939
 
17769
17940
  const DoodleTransformWrapper = ({ data, isSelected = false, isSelectedWithoutOperation = false, onSelect, onCancel, onTransformChange, disabled = false, className = '', minScale, onMinScaleReached, onDragMove, onDragEnd, showInfo = true, onClickInfo, }) => {
17770
- const { platform } = useCommonContext();
17941
+ const { platform, overlayScale } = useCommonContext();
17771
17942
  // 使用自定义hook管理所有变换逻辑
17772
17943
  const { currentCenter, currentScale, currentDirection, isDragging, isRotating, isScaling, initializeTransform, calculateSelectionBoxPoints, handleMouseDown, handleRotateStart, handleScaleStart, handleMouseMove, handleMouseUp, containerRef, dimensions, } = useDoodleTransform(data, onTransformChange, {
17773
17944
  minScale,
@@ -17789,16 +17960,20 @@ const DoodleTransformWrapper = ({ data, isSelected = false, isSelectedWithoutOpe
17789
17960
  }, [data?.svg, currentCenter, currentScale, currentDirection]);
17790
17961
  const isWeb = useMemo(() => platform === 'web', [platform]);
17791
17962
  const activeTime = useMemo(() => {
17792
- // 如果当前时间在有效期范围,则显示有效期,否则显示0
17793
- const now = Date.now();
17794
- console.log('now------->', now);
17795
- console.log('data.create_ts------->', data.create_ts);
17796
- console.log('data.expiration_ts------->', data.expiration_ts);
17797
- if (data.create_ts <= now && data.expiration_ts >= now) {
17798
- return Math.floor((data.expiration_ts - now) / (60 * 60 * 24 * 1000));
17963
+ if (data.create_ts && data.expiration_ts) {
17964
+ return Math.floor((data.expiration_ts - data.create_ts) / (60 * 60 * 24));
17799
17965
  }
17800
17966
  return 0;
17801
17967
  }, [data]);
17968
+ const remainingTime = useMemo(() => {
17969
+ const currentTime = Math.floor(Date.now() / 1000);
17970
+ console.log('data.expiration_ts--', data.expiration_ts);
17971
+ if (data.expiration_ts <= currentTime) {
17972
+ return 0;
17973
+ }
17974
+ // 保留一位小数
17975
+ return ((currentTime - data.expiration_ts) / (24 * 60 * 60)).toFixed(1);
17976
+ }, [data]);
17802
17977
  // 初始化变换状态
17803
17978
  useEffect(() => {
17804
17979
  initializeTransform();
@@ -17879,7 +18054,18 @@ const DoodleTransformWrapper = ({ data, isSelected = false, isSelectedWithoutOpe
17879
18054
  };
17880
18055
  const selectionBoxWithoutOperation = () => {
17881
18056
  const selectionBoxPoints = calculateSelectionBoxPoints();
17882
- return (jsxs(Fragment, { children: [jsx("polygon", { points: selectionBoxPoints.map((point) => `${point.x},${point.y}`).join(' '), fill: "none", stroke: "#9EA6BA", strokeWidth: "2", strokeDasharray: "5,5", vectorEffect: "non-scaling-stroke", style: { cursor: 'move' }, ...(platform === PlatformType.H5
18057
+ // 计算选择框的边界
18058
+ const minX = Math.min(...selectionBoxPoints.map((p) => p.x));
18059
+ const maxX = Math.max(...selectionBoxPoints.map((p) => p.x));
18060
+ const maxY = Math.max(...selectionBoxPoints.map((p) => p.y));
18061
+ // 计算选择框的中心
18062
+ const centerX = (minX + maxX) / 2;
18063
+ // 计算尺寸显示框的位置(选择框下方)
18064
+ const infoBoxY = maxY + 20; // 选择框下方20像素
18065
+ const infoBoxWidth = 140 * overlayScale; // 信息框宽度
18066
+ const infoBoxHeight = 100 * overlayScale; // 信息框高度
18067
+ const infoBoxX = centerX - infoBoxWidth / 2; // 居中对齐
18068
+ return (jsxs(Fragment, { children: [jsx("polygon", { points: selectionBoxPoints.map((point) => `${point.x},${point.y}`).join(' '), fill: "none", stroke: "#B2B4B9", strokeWidth: "2", strokeDasharray: "5,5", vectorEffect: "non-scaling-stroke", style: { cursor: 'move' }, ...(platform === PlatformType.H5
17883
18069
  ? {
17884
18070
  onTouchStart: createReactEventHandler((e) => {
17885
18071
  handleMouseDownWithDisabled(e);
@@ -17887,7 +18073,26 @@ const DoodleTransformWrapper = ({ data, isSelected = false, isSelectedWithoutOpe
17887
18073
  }
17888
18074
  : {
17889
18075
  onMouseDown: handleMouseDownWithDisabled,
17890
- }) }), jsx("circle", { cx: selectionBoxPoints[0].x, cy: selectionBoxPoints[0].y, r: "6", fill: "#9EA6BA", stroke: "none" }), jsx("circle", { cx: selectionBoxPoints[3].x, cy: selectionBoxPoints[3].y, r: "6", fill: "#9EA6BA", stroke: "none" }), jsx("circle", { cx: selectionBoxPoints[1].x, cy: selectionBoxPoints[1].y, r: "6", fill: "#9EA6BA", stroke: "none" }), jsx("circle", { cx: selectionBoxPoints[2].x, cy: selectionBoxPoints[2].y, r: "6", fill: "#9EA6BA", stroke: "none" })] }));
18076
+ }) }), jsx("circle", { cx: selectionBoxPoints[0].x, cy: selectionBoxPoints[0].y, r: 10 * overlayScale, fill: "#B2B4B9", stroke: "none" }), jsx("circle", { cx: selectionBoxPoints[3].x, cy: selectionBoxPoints[3].y, r: 10 * overlayScale, fill: "#B2B4B9", stroke: "none" }), jsx("circle", { cx: selectionBoxPoints[1].x, cy: selectionBoxPoints[1].y, r: 10 * overlayScale, fill: "#B2B4B9", stroke: "none" }), jsx("circle", { cx: selectionBoxPoints[2].x, cy: selectionBoxPoints[2].y, r: 10 * overlayScale, fill: "#B2B4B9", stroke: "none" }), jsx("foreignObject", { x: infoBoxX, y: infoBoxY, width: infoBoxWidth, height: infoBoxHeight, style: { textAlign: 'center' }, onClick: () => {
18077
+ onClickInfo?.();
18078
+ }, children: jsx("div", { style: {
18079
+ padding: '5px 6px',
18080
+ background: 'rgba(201, 209, 218, 1)',
18081
+ borderRadius: '10px',
18082
+ display: 'inline-flex',
18083
+ flexDirection: 'column',
18084
+ alignItems: 'flex-start',
18085
+ justifyContent: 'center',
18086
+ fontSize: '12px',
18087
+ color: 'white',
18088
+ fontWeight: '400',
18089
+ // transform: `translate(0, ${50 * overlayScale}px) scale(${overlayScale})`,
18090
+ }, children: jsx("div", { style: {
18091
+ display: 'flex',
18092
+ alignItems: 'center',
18093
+ justifyContent: 'center',
18094
+ gap: '10px',
18095
+ }, children: jsxs("div", { children: ["Remaining Time: ", remainingTime] }) }) }) })] }));
17891
18096
  };
17892
18097
  useEffect(() => {
17893
18098
  const isMove = isDragging || isRotating || isScaling;
@@ -17935,10 +18140,10 @@ const DoodleTransformWrapper = ({ data, isSelected = false, isSelectedWithoutOpe
17935
18140
  const centerX = (minX + maxX) / 2;
17936
18141
  // 计算尺寸显示框的位置(选择框下方)
17937
18142
  const infoBoxY = maxY + 20; // 选择框下方20像素
17938
- const infoBoxWidth = 140; // 信息框宽度
17939
- const infoBoxHeight = 50; // 信息框高度
18143
+ const infoBoxWidth = 140 * overlayScale; // 信息框宽度
18144
+ const infoBoxHeight = 100 * overlayScale; // 信息框高度
17940
18145
  const infoBoxX = centerX - infoBoxWidth / 2; // 居中对齐
17941
- const scale = isWeb ? 2 : 1;
18146
+ const scale = (isWeb ? 2 : 1) * overlayScale;
17942
18147
  const offsetLeft = 10 * scale;
17943
18148
  return (jsxs(Fragment, { children: [jsx("polygon", { points: selectionBoxPoints.map((point) => `${point.x},${point.y}`).join(' '), fill: "none", stroke: "#9EA6BA", strokeWidth: "2", strokeDasharray: "5,5", vectorEffect: "non-scaling-stroke", style: { cursor: 'move' }, ...(platform === PlatformType.H5
17944
18149
  ? {
@@ -17993,6 +18198,7 @@ const DoodleTransformWrapper = ({ data, isSelected = false, isSelectedWithoutOpe
17993
18198
  fontSize: '12px',
17994
18199
  color: 'white',
17995
18200
  fontWeight: '400',
18201
+ // transform: `translate(0, ${50 * overlayScale}px) scale(${overlayScale})`,
17996
18202
  }, children: [jsxs("div", { children: [dimensions.height, "m \u00D7 ", dimensions.width, "m"] }), jsxs("div", { style: {
17997
18203
  display: 'flex',
17998
18204
  alignItems: 'center',
@@ -18003,9 +18209,9 @@ const DoodleTransformWrapper = ({ data, isSelected = false, isSelectedWithoutOpe
18003
18209
  };
18004
18210
 
18005
18211
  const DoodleElement = ({ data }) => {
18006
- const { editMapInfo, setEditMapInfo, onHandleEnterRecord, onClickEvent } = useMapEditContext();
18212
+ const { editMapInfo, setEditMapInfo, onHandleEnterRecord, onHandleEvent } = useMapEditContext();
18007
18213
  const { addHistory } = useHistoryHandle();
18008
- const { platform } = useCommonContext();
18214
+ const { platform, doodleList } = useCommonContext();
18009
18215
  const isSelected = useMemo(() => {
18010
18216
  if (platform === PlatformType.H5) {
18011
18217
  if (editMapInfo.mobileMode !== MobileEditMode.START &&
@@ -18022,6 +18228,23 @@ const DoodleElement = ({ data }) => {
18022
18228
  }
18023
18229
  return data;
18024
18230
  }, [data, editMapInfo?.selectElement]);
18231
+ const minScale = useMemo(() => {
18232
+ const doodleInfo = doodleList?.find((item) => {
18233
+ // 移除所有空白字符(包括\n、\r、\t等)进行比较
18234
+ const normalizedItemSvg = item.svgStr?.replace(/[\s\n\r\t]+/g, '').replace(/\\n/g, '');
18235
+ const normalizedOriginSvg = originData.svg?.replace(/[\s\n\r\t]+/g, '').replace(/\\n/g, '');
18236
+ // console.log('normalizedItemSvg--->', normalizedItemSvg, normalizedOriginSvg);
18237
+ return normalizedItemSvg === normalizedOriginSvg;
18238
+ });
18239
+ console.log('doodleList--->', doodleList, originData, doodleInfo);
18240
+ if (!doodleInfo) {
18241
+ return 1;
18242
+ }
18243
+ const minLength = doodleInfo?.minLength;
18244
+ const parseSvg = SvgParserNative.parseSvg(originData.svg);
18245
+ const svgMinLength = parseSvg.height / SCALE_FACTOR;
18246
+ return minLength / svgMinLength;
18247
+ }, [doodleList, originData]);
18025
18248
  const isSelectedWithoutOperation = useMemo(() => {
18026
18249
  if (platform === PlatformType.H5) {
18027
18250
  if (editMapInfo.mobileMode === MobileEditMode.START &&
@@ -18100,8 +18323,8 @@ const DoodleElement = ({ data }) => {
18100
18323
  }));
18101
18324
  }, []);
18102
18325
  const handleClickInfo = useCallback(() => {
18103
- onClickEvent?.(ClickEventType.DOODLE_ACTIVE_TIME);
18104
- }, [onClickEvent]);
18326
+ onHandleEvent?.(ClickEventType.DOODLE_ACTIVE_TIME);
18327
+ }, [onHandleEvent]);
18105
18328
  // const handleDragMove = useCallback(
18106
18329
  // (data: DoodleData) => {
18107
18330
  // setEditMapInfo((prev: EditMapInfo) => ({
@@ -18129,7 +18352,8 @@ const DoodleElement = ({ data }) => {
18129
18352
  },
18130
18353
  });
18131
18354
  }, [transformedElements]);
18132
- return (jsx(DoodleTransformWrapper, { data: originData, onTransformChange: handleTransformChange, isSelected: isSelected, isSelectedWithoutOperation: isSelectedWithoutOperation, onSelect: handleSelect, onCancel: handleCancel, onDragEnd: handleDragEnd, showInfo: platform === PlatformType.H5, onClickInfo: handleClickInfo }));
18355
+ console.log('originData--->', originData, minScale);
18356
+ return (jsx(DoodleTransformWrapper, { data: originData, onTransformChange: handleTransformChange, isSelected: isSelected, isSelectedWithoutOperation: isSelectedWithoutOperation, onSelect: handleSelect, onCancel: handleCancel, onDragEnd: handleDragEnd, showInfo: platform === PlatformType.H5, onClickInfo: handleClickInfo, minScale: minScale }));
18133
18357
  };
18134
18358
 
18135
18359
  const SvgElement = React__default.memo(({ type, data, interactive = false }) => {
@@ -19363,27 +19587,37 @@ const getScreenCenterSvgPoint = (svgElement, mapInstance) => {
19363
19587
  */
19364
19588
  const CreateObstacleElement = forwardRef(({ enabled = false, svgElement, onPointsChange, styles, points }, ref) => {
19365
19589
  const { mapRef } = useCommonContext();
19590
+ const { checkCanNotCreateAtPosition } = useCheckElement();
19366
19591
  // 使用固定的样式,确保能正常渲染
19367
19592
  // 在十字准心位置添加点
19368
19593
  const addPoint = useCallback(() => {
19369
19594
  if (!enabled || !svgElement) {
19370
19595
  console.warn('未启用创建模式或SVG元素不存在');
19371
- return false;
19596
+ return { isValid: false, reason: '未启用创建模式或SVG元素不存在' };
19372
19597
  }
19373
19598
  if (!mapRef) {
19374
19599
  console.warn('地图实例不存在');
19375
- return false;
19600
+ return { isValid: false, reason: '地图实例不存在' };
19376
19601
  }
19377
19602
  const centerPoint = getScreenCenterSvgPoint(svgElement, mapRef);
19378
19603
  if (!centerPoint) {
19379
19604
  console.warn('无法获取屏幕中心点的SVG坐标或点不在SVG可见区域内');
19380
- // 可以在这里添加用户友好的提示,比如显示toast消息
19381
- // window.alert('十字准心位置不在地图可见区域内,请调整地图位置后再试');
19382
- return false;
19605
+ return { isValid: false, reason: '无法获取屏幕中心点的SVG坐标或点不在SVG可见区域内' };
19606
+ }
19607
+ console.error('centerPoint--->', centerPoint);
19608
+ console.error('checkCanNotCreateAtPosition--->', checkCanNotCreateAtPosition(centerPoint));
19609
+ // 校验是否能打点
19610
+ if (checkCanNotCreateAtPosition(centerPoint)) {
19611
+ return {
19612
+ isValid: false,
19613
+ reason: '无法获取屏幕中心点的SVG坐标或点不在SVG可见区域内',
19614
+ };
19383
19615
  }
19384
19616
  const newPoints = [...points, centerPoint];
19385
19617
  onPointsChange?.(newPoints);
19386
- return true;
19618
+ return {
19619
+ isValid: true,
19620
+ };
19387
19621
  }, [enabled, svgElement, mapRef, points, onPointsChange]);
19388
19622
  // 撤销最后一个点
19389
19623
  const undoLastPoint = useCallback(() => {
@@ -19473,7 +19707,7 @@ const SvgEditMap = forwardRef(({ mapJson, mapConfig, editMap, onEditInfoMapChang
19473
19707
  const { editMapInfo, setEditMapInfo } = useMapEditContext();
19474
19708
  const { getVisionOffPoints, centerPoint } = useCreateVisionOffElement();
19475
19709
  const { svgElementDatas } = useSvgEditContext();
19476
- const { checkCanNotCreateAtPosition } = useCheckElement();
19710
+ const { checkCanNotCreateAtPosition, checkDoodle } = useCheckElement();
19477
19711
  const svgRef = useRef(null);
19478
19712
  const containerRef = useRef(null);
19479
19713
  const { platform } = useCommonContext();
@@ -19607,7 +19841,7 @@ const SvgEditMap = forwardRef(({ mapJson, mapConfig, editMap, onEditInfoMapChang
19607
19841
  getEditMapInfo,
19608
19842
  // 十字准心点管理器方法
19609
19843
  addCreateObstaclePoint: () => {
19610
- return pointManagerRef.current?.addPoint();
19844
+ return pointManagerRef.current?.addPoint?.();
19611
19845
  },
19612
19846
  undoCreateObstaclePoint: () => {
19613
19847
  pointManagerRef.current?.undoLastPoint();
@@ -19629,6 +19863,7 @@ const SvgEditMap = forwardRef(({ mapJson, mapConfig, editMap, onEditInfoMapChang
19629
19863
  clearHistory,
19630
19864
  addHistory,
19631
19865
  addDoodle,
19866
+ checkDoodle: () => checkDoodle?.(),
19632
19867
  }));
19633
19868
  // 初始化多边形绘制 Hook
19634
19869
  const { onSvgClick, onSvgMouseMove, onPointClick, points, completed, mousePos, updatePoints } = usePolygonDrawing({ createMode: isCreating });
@@ -19748,10 +19983,10 @@ var css_248z$c = ".index-module_addEntry__QsQHD {\n position: absolute;\n righ
19748
19983
  var styles$c = {"addEntry":"index-module_addEntry__QsQHD","icon":"index-module_icon__qIgA4","addItem":"index-module_addItem__mglwZ","label":"index-module_label__QqZ-9"};
19749
19984
  styleInject(css_248z$c);
19750
19985
 
19751
- var _rect$2, _path$a, _defs$3;
19752
- function _extends$e() { return _extends$e = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$e.apply(null, arguments); }
19986
+ var _rect$2, _path$9, _defs$3;
19987
+ function _extends$d() { return _extends$d = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$d.apply(null, arguments); }
19753
19988
  var SvgAddEntry = function SvgAddEntry(props) {
19754
- return /*#__PURE__*/React.createElement("svg", _extends$e({
19989
+ return /*#__PURE__*/React.createElement("svg", _extends$d({
19755
19990
  xmlns: "http://www.w3.org/2000/svg",
19756
19991
  width: 24,
19757
19992
  height: 24,
@@ -19779,7 +20014,7 @@ var SvgAddEntry = function SvgAddEntry(props) {
19779
20014
  height: "100%",
19780
20015
  width: "100%"
19781
20016
  }
19782
- })), _path$a || (_path$a = /*#__PURE__*/React.createElement("path", {
20017
+ })), _path$9 || (_path$9 = /*#__PURE__*/React.createElement("path", {
19783
20018
  fill: "#1F1F1F",
19784
20019
  stroke: "url(#add-entry_svg__c)",
19785
20020
  strokeWidth: 0.3,
@@ -19819,15 +20054,15 @@ var SvgAddEntry = function SvgAddEntry(props) {
19819
20054
  })))));
19820
20055
  };
19821
20056
 
19822
- var _path$9, _path2$3, _path3;
19823
- function _extends$d() { return _extends$d = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$d.apply(null, arguments); }
20057
+ var _path$8, _path2$3, _path3;
20058
+ function _extends$c() { return _extends$c = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$c.apply(null, arguments); }
19824
20059
  var SvgBoundary = function SvgBoundary(props) {
19825
- return /*#__PURE__*/React.createElement("svg", _extends$d({
20060
+ return /*#__PURE__*/React.createElement("svg", _extends$c({
19826
20061
  xmlns: "http://www.w3.org/2000/svg",
19827
20062
  width: 16,
19828
20063
  height: 16,
19829
20064
  fill: "none"
19830
- }, props), _path$9 || (_path$9 = /*#__PURE__*/React.createElement("path", {
20065
+ }, props), _path$8 || (_path$8 = /*#__PURE__*/React.createElement("path", {
19831
20066
  fill: "#1DBEAC",
19832
20067
  fillRule: "evenodd",
19833
20068
  d: "M3.385 2h9.23C13.38 2 14 2.62 14 3.385v9.23C14 13.38 13.38 14 12.615 14h-9.23C2.62 14 2 13.38 2 12.615v-9.23C2 2.62 2.62 2 3.385 2m9.692 1.385a.46.46 0 0 0-.462-.462h-9.23a.46.46 0 0 0-.462.462v9.23c0 .255.207.462.462.462h9.23a.46.46 0 0 0 .462-.462z",
@@ -19845,15 +20080,15 @@ var SvgBoundary = function SvgBoundary(props) {
19845
20080
  })));
19846
20081
  };
19847
20082
 
19848
- var _path$8, _path2$2, _rect$1, _rect2$1;
19849
- function _extends$c() { return _extends$c = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$c.apply(null, arguments); }
20083
+ var _path$7, _path2$2, _rect$1, _rect2$1;
20084
+ function _extends$b() { return _extends$b = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$b.apply(null, arguments); }
19850
20085
  var SvgLimitIsland = function SvgLimitIsland(props) {
19851
- return /*#__PURE__*/React.createElement("svg", _extends$c({
20086
+ return /*#__PURE__*/React.createElement("svg", _extends$b({
19852
20087
  xmlns: "http://www.w3.org/2000/svg",
19853
20088
  width: 16,
19854
20089
  height: 16,
19855
20090
  fill: "none"
19856
- }, props), _path$8 || (_path$8 = /*#__PURE__*/React.createElement("path", {
20091
+ }, props), _path$7 || (_path$7 = /*#__PURE__*/React.createElement("path", {
19857
20092
  fill: "#FFA077",
19858
20093
  d: "M11.725 6.714c-1.019-.137-2.516-1.488-1.9-2.14.588-.621 1.91.344 1.9 2.14"
19859
20094
  })), _path2$2 || (_path2$2 = /*#__PURE__*/React.createElement("path", {
@@ -19879,9 +20114,9 @@ var SvgLimitIsland = function SvgLimitIsland(props) {
19879
20114
  };
19880
20115
 
19881
20116
  var _rect, _rect2, _rect3, _rect4, _g$3;
19882
- function _extends$b() { return _extends$b = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$b.apply(null, arguments); }
20117
+ function _extends$a() { return _extends$a = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$a.apply(null, arguments); }
19883
20118
  var SvgVisionFence = function SvgVisionFence(props) {
19884
- return /*#__PURE__*/React.createElement("svg", _extends$b({
20119
+ return /*#__PURE__*/React.createElement("svg", _extends$a({
19885
20120
  xmlns: "http://www.w3.org/2000/svg",
19886
20121
  width: 16,
19887
20122
  height: 16,
@@ -19934,9 +20169,9 @@ var SvgVisionFence = function SvgVisionFence(props) {
19934
20169
  };
19935
20170
 
19936
20171
  var _g$2, _defs$2;
19937
- function _extends$a() { return _extends$a = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$a.apply(null, arguments); }
20172
+ function _extends$9() { return _extends$9 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$9.apply(null, arguments); }
19938
20173
  var SvgDoodle = function SvgDoodle(props) {
19939
- return /*#__PURE__*/React.createElement("svg", _extends$a({
20174
+ return /*#__PURE__*/React.createElement("svg", _extends$9({
19940
20175
  xmlns: "http://www.w3.org/2000/svg",
19941
20176
  width: 16,
19942
20177
  height: 16,
@@ -20045,25 +20280,10 @@ const CustomModal = ({ children, titleCenter, hasMinHeight, height, ...props })
20045
20280
  }), cancelButtonProps: { color: 'primary', variant: 'outlined' }, cancelText: 'Cancel', ...props, children: children }));
20046
20281
  };
20047
20282
 
20048
- var css_248z$a = ".index-module_doodleModal__EGNPW .index-module_title__ViZuB {\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: rgb(29, 29, 29);\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n max-height: 230px;\n overflow-y: auto;\n width: 470px;\n margin: 20px auto 0;\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7 {\n width: 70px;\n height: 70px;\n padding: 10px;\n border-radius: 8px;\n cursor: pointer;\n border: 2px solid transparent;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n position: relative;\n background: rgb(233, 242, 241);\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7.index-module_active__1OHfd {\n border: 2px solid rgb(110, 220, 207);\n background-color: rgba(110, 220, 207, 0.1);\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7.index-module_active__1OHfd .index-module_selectIcon__EFQF- {\n display: block;\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7 .index-module_svgImage__2OT8- {\n width: 100%;\n height: 100%;\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7 .index-module_svgImage__2OT8- svg {\n width: 100%;\n height: 100%;\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7 .index-module_selectIcon__EFQF- {\n position: absolute;\n bottom: 4px;\n right: 4px;\n display: none;\n}";
20049
- var styles$a = {"doodleModal":"index-module_doodleModal__EGNPW","title":"index-module_title__ViZuB","content":"index-module_content__h-60T","item":"index-module_item__dvoq7","active":"index-module_active__1OHfd","selectIcon":"index-module_selectIcon__EFQF-","svgImage":"index-module_svgImage__2OT8-"};
20283
+ var css_248z$a = ".index-module_doodleModal__EGNPW .index-module_title__ViZuB {\n font-weight: 400;\n font-size: 14px;\n line-height: 20px;\n color: rgb(29, 29, 29);\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n max-height: 230px;\n overflow-y: auto;\n width: 470px;\n margin: 20px auto 0;\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7 {\n width: 70px;\n height: 70px;\n padding: 10px;\n border-radius: 8px;\n cursor: pointer;\n border: 2px solid transparent;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n position: relative;\n background: rgb(233, 242, 241);\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7.index-module_active__1OHfd {\n border: 2px solid #ff5a00;\n background-color: rgba(110, 220, 207, 0.1);\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7.index-module_active__1OHfd .index-module_selectIcon__EFQF- {\n display: block;\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7 .index-module_svgImage__2OT8- {\n width: 100%;\n height: 100%;\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7 .index-module_svgImage__2OT8- svg {\n width: 100%;\n height: 100%;\n}\n.index-module_doodleModal__EGNPW .index-module_content__h-60T .index-module_item__dvoq7 .index-module_selectIcon__EFQF- {\n position: absolute;\n bottom: 4px;\n right: 4px;\n display: none;\n}";
20284
+ var styles$a = {"doodleModal":"index-module_doodleModal__EGNPW","title":"index-module_title__ViZuB","content":"index-module_content__h-60T","item":"index-module_item__dvoq7","active":"index-module_active__1OHfd","svgImage":"index-module_svgImage__2OT8-"};
20050
20285
  styleInject(css_248z$a);
20051
20286
 
20052
- var _path$7;
20053
- function _extends$9() { return _extends$9 = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends$9.apply(null, arguments); }
20054
- var SvgSelect = function SvgSelect(props) {
20055
- return /*#__PURE__*/React.createElement("svg", _extends$9({
20056
- xmlns: "http://www.w3.org/2000/svg",
20057
- width: 14,
20058
- height: 12,
20059
- fill: "none"
20060
- }, props), _path$7 || (_path$7 = /*#__PURE__*/React.createElement("path", {
20061
- stroke: "#6EDCCF",
20062
- strokeWidth: 2,
20063
- d: "m1 7.5 4 3L12.5 1"
20064
- })));
20065
- };
20066
-
20067
20287
  const DoodleModal = ({ open, onSelect, setOpen, doodleList, centerPoint }) => {
20068
20288
  const { editMapInfo, setEditMapInfo, onHandleEnterRecord } = useMapEditContext();
20069
20289
  const [selectedDoodle, setSelectedDoodle] = useState(null);
@@ -20081,7 +20301,7 @@ const DoodleModal = ({ open, onSelect, setOpen, doodleList, centerPoint }) => {
20081
20301
  const svg = selectedDoodle?.svgStr;
20082
20302
  const minLength = selectedDoodle.minLength;
20083
20303
  const parseSvg = SvgParserNative.parseSvg(svg);
20084
- const svgMinLength = Math.min(parseSvg.width, parseSvg.height) / SCALE_FACTOR;
20304
+ const svgMinLength = parseSvg.height / SCALE_FACTOR;
20085
20305
  // 使用获取到的 SVG 内容,如果没有获取到则使用 URL
20086
20306
  newDoodle.svg = svg;
20087
20307
  newDoodle.scale = minLength / svgMinLength;
@@ -20111,12 +20331,12 @@ const DoodleModal = ({ open, onSelect, setOpen, doodleList, centerPoint }) => {
20111
20331
  });
20112
20332
  }
20113
20333
  }, [selectedDoodle, setEditMapInfo, editMapInfo, setOpen, onSelect, centerPoint]);
20114
- return (jsx(CustomModal, { width: 560, title: "Creative logos", titleCenter: true, open: open, onOk: handleConfirm, onCancel: () => setOpen(false), okButtonProps: { disabled: !selectedDoodle }, afterClose: () => setSelectedDoodle(null), okText: "Confirm", cancelText: "Cancel", children: jsxs("div", { className: styles$a.doodleModal, children: [jsx("div", { className: styles$a.title, children: "Please select a doodle" }), jsx("div", { className: styles$a.content, children: doodleList
20334
+ return (jsx(CustomModal, { width: 560, title: "Create doodle", titleCenter: true, open: open, onOk: handleConfirm, onCancel: () => setOpen(false), okButtonProps: { disabled: !selectedDoodle }, afterClose: () => setSelectedDoodle(null), okText: "Create", cancelText: "Cancel", children: jsxs("div", { className: styles$a.doodleModal, children: [jsx("div", { className: styles$a.title, children: "Select the doodle that you want to create" }), jsx("div", { className: styles$a.content, children: doodleList
20115
20335
  ?.filter((item) => !noNeed.includes(item.name))
20116
20336
  .map((item) => {
20117
- return (jsxs("div", { className: classNames(styles$a.item, {
20337
+ return (jsx("div", { className: classNames(styles$a.item, {
20118
20338
  [styles$a.active]: selectedDoodle?.svg === item.svg,
20119
- }), onClick: () => handleSelectDoodle(item), children: [jsx("div", { className: styles$a.svgImage, dangerouslySetInnerHTML: { __html: item?.svgStr } }), jsx("div", { className: styles$a.selectIcon, children: jsx(SvgSelect, {}) })] }, item.id));
20339
+ }), onClick: () => handleSelectDoodle(item), children: jsx("div", { className: styles$a.svgImage, dangerouslySetInnerHTML: { __html: item?.svgStr } }) }, item.id));
20120
20340
  }) })] }) }));
20121
20341
  };
20122
20342
 
@@ -20212,11 +20432,11 @@ const AddEntry = ({ doodleList, disabledObstacles, editMap }) => {
20212
20432
  }), children: jsx("div", { className: styles$c.icon, children: jsx(SvgAddEntry, {}) }) }), jsx(DoodleModal, { centerPoint: centerPoint, doodleList: doodleList, open: doodleOpen, onOk: () => setDoodleOpen(false), setOpen: setDoodleOpen })] }));
20213
20433
  };
20214
20434
 
20215
- var css_248z$9 = ".index-module_handleElementInfo__vWIaf {\n position: absolute;\n right: 0;\n top: 0;\n border-radius: 8px;\n padding: 4px 8px;\n background: #fff;\n width: 265px;\n user-select: none;\n}\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 {\n position: absolute;\n left: -96px;\n top: 0;\n display: flex;\n gap: 12px;\n}\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_undo__lPY1X,\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_redo__EU5u- {\n background: #fff;\n border-radius: 8px;\n padding: 6px;\n}\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_undo__lPY1X:not(.index-module_disabled__w6gCJ):hover,\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_redo__EU5u-:not(.index-module_disabled__w6gCJ):hover {\n opacity: 0.8;\n cursor: pointer;\n}\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_undo__lPY1X.index-module_disabled__w6gCJ,\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_redo__EU5u-.index-module_disabled__w6gCJ {\n color: #d8d8d8;\n}\n.index-module_handleElementInfo__vWIaf .index-module_nameEdit__eVzQ- {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 0 4px 0;\n}\n.index-module_handleElementInfo__vWIaf .index-module_nameEdit__eVzQ- input {\n padding: 2px 0;\n}\n.index-module_handleElementInfo__vWIaf .index-module_nameEdit__eVzQ- .index-module_edit__b0r9I {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.index-module_handleElementInfo__vWIaf .index-module_boundaryOther__FyJvt {\n padding-top: 4px;\n border-top: 1px solid rgb(197, 197, 197);\n}\n.index-module_handleElementInfo__vWIaf .index-module_handle__4mIxr {\n border-top: 1px solid rgb(197, 197, 197);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.index-module_doodleInfo__bd2ua .index-module_time__1bUFf {\n width: 100%;\n}\n.index-module_doodleInfo__bd2ua .index-module_exist__gWtNo {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n.index-module_doodleInfo__bd2ua .index-module_tip__1HNmj {\n color: #ff3f33;\n margin-top: 10px;\n font-size: 14px;\n font-weight: 400;\n line-height: 16px;\n}\n\n.index-module_obstacleInfo__w6Sod .index-module_areaInfo__-WJPL {\n border-top: 1px solid rgb(197, 197, 197);\n}\n\n.index-module_areaInfo__-WJPL {\n color: #9e9e9e;\n width: 100%;\n font-size: 14px;\n font-weight: 400;\n line-height: 16px; /* 114.286% */\n}\n.index-module_areaInfo__-WJPL .index-module_areaItem__fk-i2 {\n display: flex;\n justify-content: space-between;\n padding: 6px 0;\n}\n\n.index-module_boundaryInfo__VfR-N .index-module_otherEdit__17SuM {\n color: #1f1f1f;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n}\n.index-module_boundaryInfo__VfR-N .index-module_otherEdit__17SuM .index-module_otherItem__ATLFZ {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n.index-module_boundaryInfo__VfR-N .index-module_otherEdit__17SuM .index-module_otherItem__ATLFZ .index-module_value__x3-se {\n margin-left: auto;\n}\n.index-module_boundaryInfo__VfR-N .index-module_otherEdit__17SuM .index-module_otherItem__ATLFZ .index-module_icon__167WB {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.index-module_boundaryInfo__VfR-N .index-module_areaInfo__-WJPL {\n border-top: 1px solid rgb(197, 197, 197);\n}";
20216
- var styles$9 = {"handleElementInfo":"index-module_handleElementInfo__vWIaf","undoAndRedo":"index-module_undoAndRedo__EKeA8","undo":"index-module_undo__lPY1X","redo":"index-module_redo__EU5u-","disabled":"index-module_disabled__w6gCJ","nameEdit":"index-module_nameEdit__eVzQ-","handle":"index-module_handle__4mIxr","doodleInfo":"index-module_doodleInfo__bd2ua","time":"index-module_time__1bUFf","exist":"index-module_exist__gWtNo","tip":"index-module_tip__1HNmj","obstacleInfo":"index-module_obstacleInfo__w6Sod","areaInfo":"index-module_areaInfo__-WJPL","areaItem":"index-module_areaItem__fk-i2","boundaryInfo":"index-module_boundaryInfo__VfR-N","otherEdit":"index-module_otherEdit__17SuM","otherItem":"index-module_otherItem__ATLFZ","value":"index-module_value__x3-se","icon":"index-module_icon__167WB"};
20435
+ var css_248z$9 = ".index-module_handleElementInfo__vWIaf {\n position: absolute;\n right: 0;\n top: 0;\n border-radius: 8px;\n padding: 8px;\n background: #fff;\n width: 265px;\n user-select: none;\n}\n.index-module_handleElementInfo__vWIaf .index-module_border__iPL-- {\n margin: 8px 0;\n border-top: 1px solid #c5c5c5;\n}\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 {\n position: absolute;\n left: -96px;\n top: 0;\n display: flex;\n gap: 12px;\n}\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_undo__lPY1X,\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_redo__EU5u- {\n background: #fff;\n border-radius: 8px;\n padding: 6px;\n}\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_undo__lPY1X:not(.index-module_disabled__w6gCJ):hover,\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_redo__EU5u-:not(.index-module_disabled__w6gCJ):hover {\n opacity: 0.8;\n cursor: pointer;\n}\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_undo__lPY1X.index-module_disabled__w6gCJ,\n.index-module_handleElementInfo__vWIaf .index-module_undoAndRedo__EKeA8 .index-module_redo__EU5u-.index-module_disabled__w6gCJ {\n color: #d8d8d8;\n}\n.index-module_handleElementInfo__vWIaf .index-module_nameEdit__eVzQ- {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n}\n.index-module_handleElementInfo__vWIaf .index-module_nameEdit__eVzQ- input {\n padding: 2px 0;\n}\n.index-module_handleElementInfo__vWIaf .index-module_nameEdit__eVzQ- .index-module_edit__b0r9I {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.index-module_handleElementInfo__vWIaf .index-module_boundaryOther__FyJvt {\n padding-top: 4px;\n border-top: 1px solid rgb(197, 197, 197);\n}\n.index-module_handleElementInfo__vWIaf .index-module_handle__4mIxr {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 0px 0 4px 0;\n}\n\n.index-module_doodleInfo__bd2ua .index-module_time__1bUFf {\n width: 100%;\n}\n.index-module_doodleInfo__bd2ua .index-module_exist__gWtNo {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n.index-module_doodleInfo__bd2ua .index-module_tip__1HNmj {\n color: #ff3f33;\n margin-top: 10px;\n font-size: 14px;\n font-weight: 400;\n line-height: 16px;\n}\n\n.index-module_areaInfo__-WJPL {\n color: #9e9e9e;\n width: 100%;\n font-size: 14px;\n font-weight: 400;\n line-height: 16px; /* 114.286% */\n}\n.index-module_areaInfo__-WJPL .index-module_areaItem__fk-i2 {\n display: flex;\n justify-content: space-between;\n padding: 6px 0;\n}\n.index-module_areaInfo__-WJPL .index-module_areaItem__fk-i2:not(:last-child) {\n margin-bottom: 4px;\n}\n\n.index-module_boundaryInfo__VfR-N .index-module_otherEdit__17SuM {\n color: #1f1f1f;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px;\n}\n.index-module_boundaryInfo__VfR-N .index-module_otherEdit__17SuM .index-module_otherItem__ATLFZ {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n.index-module_boundaryInfo__VfR-N .index-module_otherEdit__17SuM .index-module_otherItem__ATLFZ .index-module_value__x3-se {\n margin-left: auto;\n}\n.index-module_boundaryInfo__VfR-N .index-module_otherEdit__17SuM .index-module_otherItem__ATLFZ .index-module_icon__167WB {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}";
20436
+ var styles$9 = {"handleElementInfo":"index-module_handleElementInfo__vWIaf","border":"index-module_border__iPL--","undoAndRedo":"index-module_undoAndRedo__EKeA8","undo":"index-module_undo__lPY1X","redo":"index-module_redo__EU5u-","disabled":"index-module_disabled__w6gCJ","nameEdit":"index-module_nameEdit__eVzQ-","handle":"index-module_handle__4mIxr","doodleInfo":"index-module_doodleInfo__bd2ua","time":"index-module_time__1bUFf","exist":"index-module_exist__gWtNo","tip":"index-module_tip__1HNmj","areaInfo":"index-module_areaInfo__-WJPL","areaItem":"index-module_areaItem__fk-i2","boundaryInfo":"index-module_boundaryInfo__VfR-N","otherEdit":"index-module_otherEdit__17SuM","otherItem":"index-module_otherItem__ATLFZ","value":"index-module_value__x3-se","icon":"index-module_icon__167WB"};
20217
20437
  styleInject(css_248z$9);
20218
20438
 
20219
- var css_248z$8 = ".index-module_infoHeader__l9F6q {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 8px 0;\n border-bottom: 1px solid rgb(197, 197, 197);\n}\n.index-module_infoHeader__l9F6q .index-module_headerIcon__sK1hg {\n width: 16px;\n height: 16px;\n}\n.index-module_infoHeader__l9F6q .index-module_headerName__UGnrH {\n margin-left: 4px;\n color: rgb(158, 158, 158);\n font-weight: 500;\n font-size: 14px;\n line-height: 16px;\n pointer-events: none;\n}\n.index-module_infoHeader__l9F6q .index-module_headerHandle__ymh7f {\n margin-left: auto;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n}\n.index-module_infoHeader__l9F6q .index-module_headerHandle__ymh7f .index-module_focus__llcox {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.index-module_infoHeader__l9F6q .index-module_headerHandle__ymh7f .index-module_delete__hD4-Q {\n width: 16px;\n height: 16px;\n margin-left: 8px;\n cursor: pointer;\n}";
20439
+ var css_248z$8 = ".index-module_infoHeader__l9F6q {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 6px 0;\n}\n.index-module_infoHeader__l9F6q .index-module_headerIcon__sK1hg {\n width: 16px;\n height: 16px;\n}\n.index-module_infoHeader__l9F6q .index-module_headerName__UGnrH {\n margin-left: 4px;\n color: rgb(158, 158, 158);\n font-weight: 500;\n font-size: 14px;\n line-height: 16px;\n pointer-events: none;\n}\n.index-module_infoHeader__l9F6q .index-module_headerHandle__ymh7f {\n margin-left: auto;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n}\n.index-module_infoHeader__l9F6q .index-module_headerHandle__ymh7f .index-module_focus__llcox {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.index-module_infoHeader__l9F6q .index-module_headerHandle__ymh7f .index-module_delete__hD4-Q {\n width: 16px;\n height: 16px;\n margin-left: 8px;\n cursor: pointer;\n}";
20220
20440
  var styles$8 = {"infoHeader":"index-module_infoHeader__l9F6q","headerIcon":"index-module_headerIcon__sK1hg","headerName":"index-module_headerName__UGnrH","headerHandle":"index-module_headerHandle__ymh7f","focus":"index-module_focus__llcox","delete":"index-module_delete__hD4-Q"};
20221
20441
  styleInject(css_248z$8);
20222
20442
 
@@ -20285,7 +20505,7 @@ const NameModal = ({ title, name, open, setOpen, onOk }) => {
20285
20505
  setOpen(false);
20286
20506
  }, onCancel: () => setOpen(false), okText: "Confirm", afterClose: () => {
20287
20507
  setNameValue('');
20288
- }, children: jsx(Input, { maxLength: 120, showCount: true, placeholder: "Please enter boundary name", value: nameValue, onChange: (e) => setNameValue(e.target.value) }) }));
20508
+ }, children: jsx(Input, { maxLength: 12, showCount: true, placeholder: "Please enter boundary name", value: nameValue, onChange: (e) => setNameValue(e.target.value) }) }));
20289
20509
  };
20290
20510
 
20291
20511
  const NameEdit = ({ title, name, onChange }) => {
@@ -20302,12 +20522,12 @@ var SvgArrow = function SvgArrow(props) {
20302
20522
  height: 16,
20303
20523
  fill: "none"
20304
20524
  }, props), _path$3 || (_path$3 = /*#__PURE__*/React.createElement("path", {
20305
- fill: "#FF5A00",
20525
+ fill: "#1F1F1F",
20306
20526
  d: "M11.523 7.704c.005.014.015.026.02.04.049.125.065.268.046.406a.73.73 0 0 1-.152.363l-3.88 4.638a.47.47 0 0 1-.377.182.49.49 0 0 1-.369-.208.77.77 0 0 1-.144-.477.76.76 0 0 1 .164-.466l3.483-4.162-3.468-4.224a.77.77 0 0 1-.15-.462c0-.172.053-.338.148-.463a.49.49 0 0 1 .36-.204.47.47 0 0 1 .371.17l3.845 4.682q.007.017.017.032.008.01.018.019c.032.04.046.09.067.134"
20307
20527
  })));
20308
20528
  };
20309
20529
 
20310
- var css_248z$6 = ".index-module_item__wwHEt {\n font-weight: 400;\n font-size: 14px;\n line-height: 16px;\n display: flex;\n align-items: center;\n padding: 8px 0;\n}";
20530
+ var css_248z$6 = ".index-module_item__wwHEt {\n font-weight: 400;\n font-size: 14px;\n line-height: 16px;\n display: flex;\n align-items: center;\n padding: 6px 0;\n}\n.index-module_item__wwHEt:not(:last-child) {\n margin-bottom: 4px;\n}";
20311
20531
  var styles$6 = {"item":"index-module_item__wwHEt"};
20312
20532
  styleInject(css_248z$6);
20313
20533
 
@@ -20651,43 +20871,81 @@ function convertDirectionToParams(value) {
20651
20871
  return directions;
20652
20872
  }
20653
20873
 
20874
+ const DEFAULT_LIST = [
20875
+ {
20876
+ value: 1 << 0,
20877
+ text: 'A',
20878
+ selected: false,
20879
+ },
20880
+ {
20881
+ value: 1 << 1,
20882
+ text: 'B',
20883
+ selected: false,
20884
+ },
20885
+ {
20886
+ value: 1 << 2,
20887
+ text: 'C',
20888
+ selected: false,
20889
+ },
20890
+ {
20891
+ value: 1 << 3,
20892
+ text: 'D',
20893
+ selected: false,
20894
+ },
20895
+ {
20896
+ value: 1 << 4,
20897
+ text: 'E',
20898
+ selected: false,
20899
+ },
20900
+ {
20901
+ value: 1 << 5,
20902
+ text: 'F',
20903
+ selected: false,
20904
+ },
20905
+ ];
20654
20906
  const MowDirection_L = (props) => {
20655
20907
  const { value, angleValue, optionAngle = 45, zIndex = 10000, onChange,
20656
20908
  // children,
20657
20909
  } = props;
20658
20910
  const [angle, setAngle] = useState(0);
20659
- const [lineList, setLineList] = useState([
20660
- {
20661
- value: 1 << 0,
20662
- text: 'A',
20663
- selected: false,
20664
- },
20665
- {
20666
- value: 1 << 1,
20667
- text: 'B',
20668
- selected: false,
20669
- },
20670
- {
20671
- value: 1 << 2,
20672
- text: 'C',
20673
- selected: false,
20674
- },
20675
- {
20676
- value: 1 << 3,
20677
- text: 'D',
20678
- selected: false,
20679
- },
20680
- {
20681
- value: 1 << 4,
20682
- text: 'E',
20683
- selected: false,
20684
- },
20685
- {
20686
- value: 1 << 5,
20687
- text: 'F',
20688
- selected: false,
20689
- },
20690
- ]);
20911
+ const lineList = useMemo(() => {
20912
+ return DEFAULT_LIST.map((item) => ({
20913
+ ...item,
20914
+ selected: convertDirectionToParams(value).includes(item.value),
20915
+ }));
20916
+ }, [value]);
20917
+ // const [lineList, setLineList] = useState<LineItem[]>([
20918
+ // {
20919
+ // value: 1 << 0,
20920
+ // text: 'A',
20921
+ // selected: false,
20922
+ // },
20923
+ // {
20924
+ // value: 1 << 1,
20925
+ // text: 'B',
20926
+ // selected: false,
20927
+ // },
20928
+ // {
20929
+ // value: 1 << 2,
20930
+ // text: 'C',
20931
+ // selected: false,
20932
+ // },
20933
+ // {
20934
+ // value: 1 << 3,
20935
+ // text: 'D',
20936
+ // selected: false,
20937
+ // },
20938
+ // {
20939
+ // value: 1 << 4,
20940
+ // text: 'E',
20941
+ // selected: false,
20942
+ // },
20943
+ // {
20944
+ // value: 1 << 5,
20945
+ // text: 'F',
20946
+ // selected: false,
20947
+ // },
20948
+ // ]);
20691
20949
  const hitRectAngle = useMemo(() => {
20692
20950
  const direction = lineList
20693
20951
  ?.filter((item) => item?.selected)
@@ -20700,12 +20958,6 @@ const MowDirection_L = (props) => {
20700
20958
  const allSelect = useMemo(() => {
20701
20959
  return lineList?.every((item) => item?.selected);
20702
20960
  }, [lineList]);
20703
- useEffect(() => {
20704
- setLineList(lineList.map((line) => ({
20705
- ...line,
20706
- selected: convertDirectionToParams(value).includes(line.value),
20707
- })));
20708
- }, [value]);
20709
20961
  useEffect(() => {
20710
20962
  setAngle(angleValue);
20711
20963
  }, [angleValue]);
@@ -20720,7 +20972,6 @@ const MowDirection_L = (props) => {
20720
20972
  }
20721
20973
  return { ...line };
20722
20974
  });
20723
- setLineList(newLine);
20724
20975
  onChange?.(newLine
20725
20976
  ?.filter((item) => item?.selected)
20726
20977
  .reduce((pre, line) => {
@@ -20833,10 +21084,25 @@ const DirectionModal = ({ directionInfo, open, setOpen, zoneName, optionAngle, o
20833
21084
  setAngle(defaultAngle);
20834
21085
  }
20835
21086
  };
20836
- console.log('directionInfo=>', directionInfo, mapJson);
20837
- return (jsx(CustomModal, { maskClosable: false, titleCenter: true, title: `${zoneName} mowing direction`, open: open, width: 600, onCancel: () => {
21087
+ const handleCancel = useCallback(() => {
21088
+ if (!canSave) {
20838
21089
  setOpen(false);
20839
- }, onOk: () => {
21090
+ return;
21091
+ }
21092
+ Modal.confirm({
21093
+ icon: null,
21094
+ centered: true,
21095
+ title: 'Exit editing',
21096
+ content: 'Changes you made will not be saved. Are you sure you want to exit editing the mowing direction?',
21097
+ onOk: () => {
21098
+ setOpen(false);
21099
+ },
21100
+ okText: 'Exit',
21101
+ cancelText: 'Continue editing',
21102
+ });
21103
+ }, [canSave, setOpen]);
21104
+ console.log('directionInfo=>', directionInfo, mapJson);
21105
+ return (jsx(CustomModal, { maskClosable: false, titleCenter: true, title: `${zoneName} mowing direction`, open: open, width: 600, onCancel: handleCancel, onOk: () => {
20840
21106
  onChange?.(directions, angle);
20841
21107
  setOpen(false);
20842
21108
  }, okText: "Confirm", cancelText: "Cancel", okButtonProps: { disabled: !canSave }, afterClose: () => {
@@ -20844,6 +21110,8 @@ const DirectionModal = ({ directionInfo, open, setOpen, zoneName, optionAngle, o
20844
21110
  setAngle(MIN_DIRECTION_ANGLE);
20845
21111
  }, children: jsxs("div", { className: styles$3.directions, children: [jsx("div", { className: styles$3.default, children: jsx(Button, { disabled: !canSetDefault, variant: "link", color: "primary", onClick: resetDirection, children: "Default" }) }), jsx("div", { className: styles$3.tips, children: "\u4E00\u4E2A\u7B80\u77ED\u7684\u8BF4\u660E\uFF0C\u5E0C\u671B\u80FD\u5145\u5F53\u7B80\u5355\u7684\u6559\u7A0B\uFF0C\u9700\u8981\u53EF\u5FC3\u6839\u636EC\u7AEF\u5DF2\u6709\u7684\u6574\u5408\u4E00\u4E0B" }), jsxs("div", { className: styles$3.optimal, children: [jsx("div", { children: "*" }), jsx(SvgOption, {}), jsx("div", { className: styles$3.text, children: "Optimal direction" })] }), jsxs("div", { className: styles$3.content, children: [jsx("div", { className: styles$3.background, children: jsx(BoundarySvgRender, { mapJson: mapJson, id: editMapInfo.selectElement.id }) }), jsx("div", { className: styles$3.luppan, children: jsx(MowDirection_L, { value: directions, angleValue: angle, optionAngle: optionAngle, onChange: (value) => {
20846
21112
  console.log('valie=>', value);
21113
+ if (!value)
21114
+ return message.warning('Choose at least one mowing direction');
20847
21115
  setDirections(value);
20848
21116
  } }) })] }), jsx("div", { className: styles$3.slideTip, children: "\u7528\u6237\u8FD8\u53EF\u4EE5\u901A\u8FC7\u6ED1\u8F68\u5FAE\u8C03\u5272\u8349\u65B9\u5411\uFF08\u975E\u5FC5\u987B\uFF09" }), jsx("div", { className: styles$3.slider, children: jsx(Slider, { tooltip: {
20849
21117
  formatter: (value) => `${value}°`,
@@ -20902,13 +21170,13 @@ const BoundaryInfo = ({ onHandleDelete }) => {
20902
21170
  name: name,
20903
21171
  },
20904
21172
  });
20905
- } }) }), jsxs("div", { className: styles$9.otherEdit, children: [jsx(Item, { children: jsxs("div", { className: styles$9.otherItem, children: [jsx("div", { className: styles$9.label, children: "Height" }), jsx("div", { className: styles$9.value, children: generateHeightStr(heightValue?.cuttingHeight, unitType, true) }), jsx("div", { className: styles$9.icon, onClick: () => {
21173
+ } }) }), jsx("div", { className: styles$9.border }), jsxs("div", { className: styles$9.otherEdit, children: [jsx(Item, { children: jsxs("div", { className: styles$9.otherItem, children: [jsx("div", { className: styles$9.label, children: "Cutting height" }), jsx("div", { className: styles$9.value, children: generateHeightStr(heightValue?.cuttingHeight, unitType, true) }), jsx("div", { className: styles$9.icon, onClick: () => {
20906
21174
  setHeightOpen(true);
20907
- }, children: jsx(SvgArrow, {}) })] }) }), jsx(Item, { children: jsxs("div", { className: styles$9.otherItem, children: [jsx("div", { className: styles$9.label, children: "Direction" }), jsx("div", { className: styles$9.value }), jsx("div", { className: styles$9.icon, onClick: () => {
21175
+ }, children: jsx(SvgArrow, {}) })] }) }), jsx(Item, { children: jsxs("div", { className: styles$9.otherItem, children: [jsx("div", { className: styles$9.label, children: "Mowing direction" }), jsx("div", { className: styles$9.value }), jsx("div", { className: styles$9.icon, onClick: () => {
20908
21176
  setDirectionOpen(true);
20909
- }, children: jsx(SvgArrow, {}) })] }) }), jsx(Item, { children: jsxs("div", { className: styles$9.otherItem, children: [jsx("div", { className: styles$9.label, children: "Mowing Edge" }), jsx("div", { className: styles$9.value }), jsx("div", { className: styles$9.icon, onClick: () => {
21177
+ }, children: jsx(SvgArrow, {}) })] }) }), jsx(Item, { children: jsxs("div", { className: styles$9.otherItem, children: [jsx("div", { className: styles$9.label, children: "Edge mowing" }), jsx("div", { className: styles$9.value }), jsx("div", { className: styles$9.icon, onClick: () => {
20910
21178
  setOpen(true);
20911
- }, children: jsx(SvgArrow, {}) })] }) })] }), jsxs("div", { className: styles$9.areaInfo, children: [jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Area:" }), jsx("div", { className: styles$9.value, children: sizeValue?.area })] }), jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Perimeter:" }), jsx("div", { className: styles$9.value, children: sizeValue?.perimeter })] })] }), jsx(MowingEdgeModal, { value: edgeMowingValue, onChange: (value) => {
21179
+ }, children: jsx(SvgArrow, {}) })] }) })] }), jsx("div", { className: styles$9.border }), jsxs("div", { className: styles$9.areaInfo, children: [jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Area:" }), jsx("div", { className: styles$9.value, children: sizeValue?.area })] }), jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Perimeter:" }), jsx("div", { className: styles$9.value, children: sizeValue?.perimeter })] })] }), jsx(MowingEdgeModal, { value: edgeMowingValue, onChange: (value) => {
20912
21180
  setEditMapInfo({
20913
21181
  ...editMapInfo,
20914
21182
  selectElement: {
@@ -20938,7 +21206,7 @@ const BoundaryInfo = ({ onHandleDelete }) => {
20938
21206
  } })] }));
20939
21207
  };
20940
21208
 
20941
- var css_248z$1 = ".index-module_timePeriod__EkVZl {\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n border-top: 1px solid rgb(197, 197, 197);\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodHeader__CgJGW {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0px 0 4px 0;\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodHeader__CgJGW .index-module_timePeriodTitle__lnYno {\n font-weight: 400;\n font-size: 14px;\n line-height: 16px;\n color: rgb(0, 0, 0);\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodHeader__CgJGW .index-module_timePeriodHandle__pjDTA {\n margin-left: auto;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodContent__pTqdW .index-module_timePeriodRadioItem__3rd-r {\n line-height: 28px;\n}";
21209
+ var css_248z$1 = ".index-module_timePeriod__EkVZl {\n display: flex;\n flex-direction: column;\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodHeader__CgJGW {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 4px 0;\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodHeader__CgJGW .index-module_timePeriodTitle__lnYno {\n font-weight: 400;\n font-size: 14px;\n line-height: 16px;\n color: rgb(0, 0, 0);\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodHeader__CgJGW .index-module_timePeriodHandle__pjDTA {\n margin-left: auto;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodContent__pTqdW {\n margin-top: 4px;\n}\n.index-module_timePeriod__EkVZl .index-module_timePeriodContent__pTqdW .index-module_timePeriodRadioItem__3rd-r {\n line-height: 28px;\n}";
20942
21210
  var styles$1 = {"timePeriod":"index-module_timePeriod__EkVZl","timePeriodHeader":"index-module_timePeriodHeader__CgJGW","timePeriodTitle":"index-module_timePeriodTitle__lnYno","timePeriodHandle":"index-module_timePeriodHandle__pjDTA","timePeriodContent":"index-module_timePeriodContent__pTqdW","timePeriodRadioItem":"index-module_timePeriodRadioItem__3rd-r"};
20943
21211
  styleInject(css_248z$1);
20944
21212
 
@@ -20962,6 +21230,8 @@ const TimePeriod = ({ value, onChange }) => {
20962
21230
  onChange({
20963
21231
  ...value,
20964
21232
  status: checked ? 1 : 0,
21233
+ start_timestamp: checked ? value.start_timestamp : 0,
21234
+ end_timestamp: checked ? value.end_timestamp : 0,
20965
21235
  });
20966
21236
  } }) })] }), jsx("div", { className: styles$1.timePeriodContent, children: jsxs(Radio.Group, { value: radioValue, onChange: (e) => {
20967
21237
  setRadioValue(e.target.value);
@@ -20969,8 +21239,8 @@ const TimePeriod = ({ value, onChange }) => {
20969
21239
  setDate(null);
20970
21240
  onChange({
20971
21241
  ...value,
20972
- startTimestamp: 0,
20973
- endTimestamp: 0,
21242
+ start_timestamp: 0,
21243
+ end_timestamp: 0,
20974
21244
  });
20975
21245
  }
20976
21246
  else if (e.target.value === RadioValue.SHORT_TIME) {
@@ -20981,15 +21251,15 @@ const TimePeriod = ({ value, onChange }) => {
20981
21251
  // endTimestamp: dayjs().add(1, 'hour').unix(),
20982
21252
  // });
20983
21253
  }
20984
- }, style: { display: 'flex', flexDirection: 'column', gap: '4px' }, children: [jsx(Radio, { value: RadioValue.LONG_TIME, children: jsx("div", { className: styles$1.timePeriodRadioItem, children: "\u957F\u65F6\u95F4\u5F00\u542F" }) }), jsx(Radio, { value: RadioValue.SHORT_TIME, children: jsx("div", { className: styles$1.timePeriodRadioItem, children: jsx(DatePicker.RangePicker, { open: open, value: date ? date : undefined, disabled: radioValue === RadioValue.LONG_TIME, showTime: { format: 'HH:mm' }, format: "MM/DD/YYYY HH:mm", preserveInvalidOnBlur: true, onOpenChange: (open) => {
21254
+ }, style: { display: 'flex', flexDirection: 'column', gap: '4px' }, children: [jsx(Radio, { value: RadioValue.LONG_TIME, children: jsx("div", { className: styles$1.timePeriodRadioItem, children: "Always" }) }), jsx(Radio, { value: RadioValue.SHORT_TIME, children: jsx("div", { className: styles$1.timePeriodRadioItem, children: jsx(DatePicker.RangePicker, { open: open, value: date ? date : undefined, disabled: radioValue === RadioValue.LONG_TIME, showTime: { format: 'HH:mm' }, format: "MM/DD/YYYY HH:mm", preserveInvalidOnBlur: true, onOpenChange: (open) => {
20985
21255
  setOpen(open);
20986
21256
  }, onChange: (dateValue, dateString) => {
20987
21257
  setDate(dateValue);
20988
21258
  if (dateValue?.length === 2) {
20989
21259
  onChange({
20990
21260
  status: RadioValue.SHORT_TIME,
20991
- startTimestamp: dateValue[0].unix(),
20992
- endTimestamp: dateValue[1].unix(),
21261
+ start_timestamp: dateValue[0].unix(),
21262
+ end_timestamp: dateValue[1].unix(),
20993
21263
  });
20994
21264
  }
20995
21265
  } }) }) })] }) })] }));
@@ -21003,12 +21273,12 @@ const ObstacleInfo = ({ onHandleDelete }) => {
21003
21273
  if (!editMapInfo.selectElement)
21004
21274
  return null;
21005
21275
  const status = editMapInfo.selectElement?.status;
21006
- const startTimestamp = editMapInfo.selectElement?.start_timestamp;
21007
- const endTimestamp = editMapInfo.selectElement?.end_timestamp;
21276
+ const start_timestamp = editMapInfo.selectElement?.start_timestamp;
21277
+ const end_timestamp = editMapInfo.selectElement?.end_timestamp;
21008
21278
  return {
21009
21279
  status,
21010
- startTimestamp,
21011
- endTimestamp,
21280
+ start_timestamp,
21281
+ end_timestamp,
21012
21282
  };
21013
21283
  }, [editMapInfo.selectElement]);
21014
21284
  const sizeValue = useMemo(() => {
@@ -21035,18 +21305,18 @@ const ObstacleInfo = ({ onHandleDelete }) => {
21035
21305
  name: name,
21036
21306
  },
21037
21307
  });
21038
- } }) }), jsx("div", { className: styles$9.timePeriod, children: jsx(TimePeriod, { value: timePeriodValue, onChange: (value) => {
21308
+ } }) }), jsx("div", { className: styles$9.border }), jsx("div", { className: styles$9.timePeriod, children: jsx(TimePeriod, { value: timePeriodValue, onChange: (value) => {
21039
21309
  setEditMapInfo({
21040
21310
  ...editMapInfo,
21041
21311
  isShowDrag: editMapInfo?.isShowDrag || false,
21042
21312
  selectElement: {
21043
21313
  ...editMapInfo.selectElement,
21044
21314
  status: value.status,
21045
- start_timestamp: value.startTimestamp,
21046
- end_timestamp: value.endTimestamp,
21315
+ start_timestamp: value.start_timestamp,
21316
+ end_timestamp: value.end_timestamp,
21047
21317
  },
21048
21318
  });
21049
- } }) }), jsxs("div", { className: styles$9.areaInfo, children: [jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Area:" }), jsx("div", { className: styles$9.value, children: sizeValue?.area })] }), jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Perimeter:" }), jsx("div", { className: styles$9.value, children: sizeValue?.perimeter })] })] })] }));
21319
+ } }) }), jsx("div", { className: styles$9.border }), jsxs("div", { className: styles$9.areaInfo, children: [jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Area:" }), jsx("div", { className: styles$9.value, children: sizeValue?.area })] }), jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Perimeter:" }), jsx("div", { className: styles$9.value, children: sizeValue?.perimeter })] })] })] }));
21050
21320
  };
21051
21321
 
21052
21322
  const DoodleInfo = ({ onHandleDelete }) => {
@@ -21068,31 +21338,37 @@ const DoodleInfo = ({ onHandleDelete }) => {
21068
21338
  const create_ts = editMapInfo?.selectElement?.create_ts;
21069
21339
  const expiration_ts = editMapInfo.selectElement.expiration_ts;
21070
21340
  const diff = expiration_ts - create_ts;
21071
- const day = Math.floor(diff / (60 * 60 * 24 * 1000));
21072
- console.log('create_ts->', create_ts, expiration_ts, day);
21341
+ const day = Math.floor(diff / (60 * 60 * 24));
21073
21342
  return {
21074
21343
  day: day,
21075
21344
  };
21076
21345
  }, [editMapInfo?.selectElement]);
21346
+ const remainDay = useMemo(() => {
21347
+ if (!editMapInfo.selectElement)
21348
+ return null;
21349
+ const expiration_ts = editMapInfo.selectElement.expiration_ts;
21350
+ const diff = expiration_ts - Date.now() / 1000;
21351
+ return Math.floor(diff / (60 * 60 * 24));
21352
+ }, [editMapInfo?.selectElement]);
21077
21353
  const sizeValue = useMemo(() => {
21078
21354
  if (!editMapInfo.selectElement || !editMapInfo.selectElement.svg)
21079
21355
  return '';
21080
21356
  const svg = editMapInfo.selectElement?.svg;
21357
+ const scale = editMapInfo.selectElement.scale;
21081
21358
  const parseSvg = SvgParserNative.parseSvg(svg);
21082
- const width = parseSvg.width / SCALE_FACTOR;
21083
- const height = parseSvg.height / SCALE_FACTOR;
21084
- console.log('parseSvg->', parseSvg);
21085
- return `${width} m x ${height} m`;
21359
+ const width = (parseSvg.width * scale) / SCALE_FACTOR;
21360
+ const height = (parseSvg.height * scale) / SCALE_FACTOR;
21361
+ console.log('parseSvg->', editMapInfo, parseSvg);
21362
+ return `${width.toFixed(1)} m x ${height.toFixed(1)} m`;
21086
21363
  }, [editMapInfo.selectElement]);
21087
21364
  const handleChange = useCallback((day) => {
21088
- const lastTime = Date.now() - editMapInfo.selectElement.create_ts;
21089
21365
  setEditMapInfo((pre) => {
21090
- console.log('expiration_ts->', lastTime, day, lastTime + day * 24 * 60 * 60 * 1000);
21091
21366
  return {
21092
21367
  ...pre,
21093
21368
  selectElement: {
21094
21369
  ...pre.selectElement,
21095
- expiration_ts: Date.now() + lastTime + day * 24 * 60 * 60 * 1000,
21370
+ create_ts: Date.now() / 1000,
21371
+ expiration_ts: Date.now() / 1000 + day * 24 * 60 * 60,
21096
21372
  },
21097
21373
  };
21098
21374
  });
@@ -21100,7 +21376,7 @@ const DoodleInfo = ({ onHandleDelete }) => {
21100
21376
  console.log('doodleInfo->', doodleInfo);
21101
21377
  return (jsxs("div", { className: styles$9.doodleInfo, children: [jsx(Header, { handleDelete: () => {
21102
21378
  onHandleDelete();
21103
- }, handleFocus: () => { }, type: editMapInfo.elementType }), isCreate ? (jsx(Item, { children: jsxs("div", { className: styles$9.time, children: [jsxs("div", { className: styles$9.exist, children: [jsx("div", { className: styles$9.label, children: "Graph maintenance time" }), jsx("div", { className: styles$9.value, children: jsx(Select, { defaultValue: doodleInfo?.day, style: { width: 80 }, onChange: (value) => handleChange(value), options: options }) })] }), doodleInfo?.day >= 14 && (jsx("div", { className: styles$9.tip, children: "* If the doodle lasts over 14 days, the grass may grow too tall for the mower to mow later." }))] }) })) : (jsxs("div", { className: styles$9.areaInfo, children: [jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Graph maintenance time:" }), jsxs("div", { className: styles$9.value, children: [doodleInfo?.day, " day"] })] }), jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Size:" }), jsx("div", { className: styles$9.value, children: sizeValue })] })] }))] }));
21379
+ }, handleFocus: () => { }, type: editMapInfo.elementType }), jsx("div", { className: styles$9.border }), isCreate ? (jsxs(Fragment, { children: [jsx(Item, { children: jsxs("div", { className: styles$9.time, children: [jsxs("div", { className: styles$9.exist, children: [jsx("div", { className: styles$9.label, children: "Preserve doodle for" }), jsx("div", { className: styles$9.value, children: jsx(Select, { defaultValue: doodleInfo?.day, style: { width: 80 }, onChange: (value) => handleChange(value), options: options }) })] }), doodleInfo?.day >= 14 && (jsx("div", { className: styles$9.tip, children: "* If the doodle lasts over 14 days, the grass may grow too tall for the mower to mow later." }))] }) }), jsx("div", { className: styles$9.border }), jsx("div", { className: styles$9.areaInfo, children: jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Size:" }), jsx("div", { className: styles$9.value, children: sizeValue })] }) })] })) : (jsxs("div", { className: styles$9.areaInfo, children: [jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Remaining time:" }), jsxs("div", { className: styles$9.value, children: [remainDay, " day"] })] }), jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Size:" }), jsx("div", { className: styles$9.value, children: sizeValue })] })] }))] }));
21104
21380
  };
21105
21381
 
21106
21382
  const VisionOffInfo = ({ onHandleDelete }) => {
@@ -21116,7 +21392,7 @@ const VisionOffInfo = ({ onHandleDelete }) => {
21116
21392
  }, [editMapInfo.selectElement]);
21117
21393
  return (jsxs("div", { className: "visionOffInfo", children: [jsx(Header, { handleDelete: () => {
21118
21394
  onHandleDelete?.();
21119
- }, handleFocus: () => { }, type: DataType.VISION_OFF }), jsx("div", { className: styles$9.areaInfo, children: jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Size:" }), jsx("div", { className: styles$9.value, children: sizeValue })] }) })] }));
21395
+ }, handleFocus: () => { }, type: DataType.VISION_OFF }), jsx("div", { className: styles$9.border }), jsx("div", { className: styles$9.areaInfo, children: jsxs("div", { className: styles$9.areaItem, children: [jsx("div", { className: styles$9.label, children: "Size:" }), jsx("div", { className: styles$9.value, children: sizeValue })] }) })] }));
21120
21396
  };
21121
21397
 
21122
21398
  var _path$2, _path2$1;
@@ -21257,9 +21533,9 @@ const HandleElementInfo = () => {
21257
21533
  if (element?.type === DataType.OBSTACLE) {
21258
21534
  data.obstacle = {
21259
21535
  name: element?.name,
21260
- status: element?.status || 1,
21261
- end_timestamp: element?.end_timestamp || 1758870283,
21262
- start_timestamp: element?.start_timestamp || 1768870283,
21536
+ status: element?.status ?? 1,
21537
+ end_timestamp: element?.end_timestamp,
21538
+ start_timestamp: element?.start_timestamp,
21263
21539
  points: restorePointsFormat(element.points),
21264
21540
  };
21265
21541
  if (element?.id) {
@@ -21287,6 +21563,12 @@ const HandleElementInfo = () => {
21287
21563
  const params = renderElementData(editMapInfo?.selectElement);
21288
21564
  const isObstacle = editMapInfo?.selectElement?.type === DataType.OBSTACLE;
21289
21565
  const hasNotEnoughPoints = params?.obstacle?.points?.length < 3;
21566
+ const isDoodle = editMapInfo?.selectElement?.type === DataType.DOODLE;
21567
+ const doodleResult = checkDoodle();
21568
+ if (isDoodle && !doodleResult?.isValid) {
21569
+ message.error('Keep more distance from boundaries, off-limit island and other doodles');
21570
+ return;
21571
+ }
21290
21572
  if (isObstacle && hasNotEnoughPoints) {
21291
21573
  message.error('Save failed, please draw a closed shape');
21292
21574
  return;
@@ -21318,16 +21600,27 @@ const HandleElementInfo = () => {
21318
21600
  message.error('Save failed, please try again');
21319
21601
  });
21320
21602
  }
21321
- }, [editMapInfo.selectElement]);
21603
+ }, [editMapInfo.selectElement, onUpdateBoundary, onHandleCompleteRecord]);
21322
21604
  const handleCancel = useCallback(() => {
21323
- onHandleStopRecord?.()?.then(() => {
21324
- setEditMapInfo({
21325
- ...editMapInfo,
21326
- createMode: null,
21327
- elementType: null,
21328
- selectElement: null,
21329
- isShowDrag: false,
21330
- });
21605
+ const name = DATE_TYPE_MAP.find((item) => item.type === editMapInfo.elementType)?.label;
21606
+ Modal.confirm({
21607
+ icon: null,
21608
+ centered: true,
21609
+ title: 'Quit editing',
21610
+ content: `Changes you made will not be saved. Are you sure you want to quit editing the ${name}?`,
21611
+ okText: 'Quit',
21612
+ cancelText: 'Keep editing',
21613
+ onOk: () => {
21614
+ onHandleStopRecord?.()?.then(() => {
21615
+ setEditMapInfo({
21616
+ ...editMapInfo,
21617
+ createMode: null,
21618
+ elementType: null,
21619
+ selectElement: null,
21620
+ isShowDrag: false,
21621
+ });
21622
+ });
21623
+ },
21331
21624
  });
21332
21625
  }, [editMapInfo]);
21333
21626
  const handleDelete = useCallback(() => {
@@ -21372,26 +21665,12 @@ const HandleElementInfo = () => {
21372
21665
  },
21373
21666
  });
21374
21667
  }, [editMapInfo?.selectElement, onHandleDeleteElement, onHandleStopRecord]);
21375
- const checkDisabled = useCallback(() => {
21376
- if (editMapInfo.elementType === DataType.DOODLE) {
21377
- const result = checkDoodle();
21378
- return !result?.isValid;
21379
- }
21380
- return false;
21381
- }, [checkDoodle, editMapInfo]);
21382
21668
  if (!editMapInfo.selectElement)
21383
21669
  return null;
21384
21670
  console.log('handleElementInfo->', editMapInfo, currentType);
21385
- return (jsxs("div", { className: styles$9.handleElementInfo, children: [editMapInfo?.elementType !== DataType.BOUNDARY ? (jsxs("div", { className: styles$9.undoAndRedo, children: [jsx("div", { className: classNames(styles$9.undo, { [styles$9.disabled]: isUndoDisabled }), onClick: handleUndo, children: jsx(SvgUndo, {}) }), jsx("div", { className: classNames(styles$9.redo, { [styles$9.disabled]: idRedoDisabled }), onClick: handleRedo, children: jsx(SvgRedo, {}) })] })) : null, editMapInfo?.elementType === DataType.BOUNDARY && (jsx(BoundaryInfo, { onHandleDelete: handleDelete })), editMapInfo?.elementType === DataType.OBSTACLE && (jsx(ObstacleInfo, { onHandleDelete: handleDelete })), editMapInfo?.elementType === DataType.DOODLE && jsx(DoodleInfo, { onHandleDelete: handleDelete }), editMapInfo?.elementType === DataType.VISION_OFF && (jsx(VisionOffInfo, { onHandleDelete: handleDelete })), jsxs("div", { className: styles$9.handle, children: [jsx(Button, { disabled: checkDisabled(), variant: "solid", color: "primary", onClick: handleSave, children: "Save & Done" }), jsx(Button, { variant: "outlined", color: "default", onClick: () => {
21386
- handleCancel();
21387
- setEditMapInfo({
21388
- createMode: null,
21389
- editMap: false,
21390
- elementType: undefined,
21391
- selectElement: null,
21392
- isShowDrag: false,
21393
- });
21394
- }, children: "Cancel" })] })] }));
21671
+ return (jsxs("div", { className: styles$9.handleElementInfo, children: [editMapInfo?.elementType !== DataType.BOUNDARY ? (jsxs("div", { className: styles$9.undoAndRedo, children: [jsx("div", { className: classNames(styles$9.undo, { [styles$9.disabled]: isUndoDisabled }), onClick: handleUndo, children: jsx(SvgUndo, {}) }), jsx("div", { className: classNames(styles$9.redo, { [styles$9.disabled]: idRedoDisabled }), onClick: handleRedo, children: jsx(SvgRedo, {}) })] })) : null, editMapInfo?.elementType === DataType.BOUNDARY && (jsx(BoundaryInfo, { onHandleDelete: handleDelete })), editMapInfo?.elementType === DataType.OBSTACLE && (jsx(ObstacleInfo, { onHandleDelete: handleDelete })), editMapInfo?.elementType === DataType.DOODLE && jsx(DoodleInfo, { onHandleDelete: handleDelete }), editMapInfo?.elementType === DataType.VISION_OFF && (jsx(VisionOffInfo, { onHandleDelete: handleDelete })), jsx("div", { className: styles$9.border }), jsx("div", { className: styles$9.handle, children: jsxs(Space, { size: 12, children: [jsx(Button, { variant: "outlined", color: "default", onClick: () => {
21672
+ handleCancel();
21673
+ }, children: "Cancel" }), jsx(Button, { variant: "solid", color: "primary", onClick: handleSave, children: "Save" })] }) })] }));
21395
21674
  };
21396
21675
 
21397
21676
  var _path;
@@ -21517,7 +21796,7 @@ const defaultMapConfig = DEFAULT_STYLES;
21517
21796
  // 地图渲染器组件
21518
21797
  const MowerMapRenderer = forwardRef(({ sn, platform = PlatformType.WEB, edger = false, unitType = UnitsType.Imperial, language = 'en', onlyRead = false, mapConfig,
21519
21798
  // pathConfig,
21520
- modelType, mapRef, mapJson, pathJson, realTimeData, antennaConfig, onMapLoad, onPathLoad, onError, className, style, googleMapInstance: _googleMapInstance, dragMap = false, dragCallbacks, defaultTransform, debug: _debug = false, doodleList = [], editMap = false, unStructMapData, disabledObstacles = false, onHandleEnterRecord, onHandleCompleteRecord, onHandleStopRecord, onHandleDeleteElement, onSaveBoundaryData, onSaveMap, onEditInfoMapChange, onUpdateBoundary, heightOptions, globalHeight, onClickEvent, }, ref) => {
21799
+ modelType, mapRef, mapJson, pathJson, realTimeData, antennaConfig, onMapLoad, onPathLoad, onError, className, style, googleMapInstance: _googleMapInstance, dragMap = false, dragCallbacks, defaultTransform, debug: _debug = false, doodleList = [], editMap = false, unStructMapData, disabledObstacles = false, onHandleEnterRecord, onHandleCompleteRecord, onHandleStopRecord, onHandleDeleteElement, onSaveBoundaryData, onSaveMap, onEditInfoMapChange, onUpdateBoundary, heightOptions, globalHeight, onHandleEvent, }, ref) => {
21521
21800
  const [currentError, setCurrentError] = useState(null);
21522
21801
  const overlayRef = useRef(null);
21523
21802
  // const mapRef = useMap();
@@ -21573,7 +21852,7 @@ modelType, mapRef, mapJson, pathJson, realTimeData, antennaConfig, onMapLoad, on
21573
21852
  onSaveMap,
21574
21853
  onHandleDeleteElement,
21575
21854
  onUpdateBoundary,
21576
- onClickEvent,
21855
+ onHandleEvent,
21577
21856
  };
21578
21857
  }, [
21579
21858
  minDistance,
@@ -21585,7 +21864,7 @@ modelType, mapRef, mapJson, pathJson, realTimeData, antennaConfig, onMapLoad, on
21585
21864
  onSaveBoundaryData,
21586
21865
  onSaveMap,
21587
21866
  onUpdateBoundary,
21588
- onClickEvent,
21867
+ onHandleEvent,
21589
21868
  ]);
21590
21869
  // 合并配置
21591
21870
  const mergedMapConfig = useMemo(() => {
@@ -21619,6 +21898,7 @@ modelType, mapRef, mapJson, pathJson, realTimeData, antennaConfig, onMapLoad, on
21619
21898
  drag: defaultTransform,
21620
21899
  mapRef,
21621
21900
  overlayScale,
21901
+ doodleList,
21622
21902
  };
21623
21903
  }, [
21624
21904
  sn,
@@ -21633,6 +21913,7 @@ modelType, mapRef, mapJson, pathJson, realTimeData, antennaConfig, onMapLoad, on
21633
21913
  defaultTransform,
21634
21914
  mapRef,
21635
21915
  overlayScale,
21916
+ doodleList,
21636
21917
  ]);
21637
21918
  // console.log('svgElementDatas->', svgElementDatas, unStructMapData, commonValue);
21638
21919
  // 处理地图分区边界
@@ -21874,7 +22155,15 @@ modelType, mapRef, mapJson, pathJson, realTimeData, antennaConfig, onMapLoad, on
21874
22155
  // 基于固定的参考zoom级别计算overlayScale
21875
22156
  const zoomDiff = currentZoom - REFERENCE_ZOOM;
21876
22157
  const scale = Math.pow(2, -zoomDiff); // 负数实现反向缩放
21877
- setOverlayScale(scale);
22158
+ if (scale < 1) {
22159
+ setOverlayScale(1);
22160
+ }
22161
+ else if (scale > 4) {
22162
+ setOverlayScale(4);
22163
+ }
22164
+ else {
22165
+ setOverlayScale(scale);
22166
+ }
21878
22167
  };
21879
22168
  // 使用lodash throttle进行节流处理: 100ms内只执行一次
21880
22169
  const handleZoomChanged = throttle$2(updateScale, 50);
@@ -21967,6 +22256,8 @@ modelType, mapRef, mapJson, pathJson, realTimeData, antennaConfig, onMapLoad, on
21967
22256
  addHistory: (history) => svgEditMapRef.current?.addHistory(history),
21968
22257
  // 添加doodle
21969
22258
  addDoodle: (doodle) => svgEditMapRef.current?.addDoodle(doodle),
22259
+ // 检查doodle
22260
+ checkDoodle: () => svgEditMapRef.current?.checkDoodle?.(),
21970
22261
  }));
21971
22262
  /**
21972
22263
  * 根据割草机的位置更新路径