| | |
| | | ) |
| | | } |
| | | |
| | | // 获取参与重叠/包含判断的已启用运营区 |
| | | function getOperableFenceAreas() { |
| | | return renderedPolygons.value.filter((item: any) => item.areaType === 1 && item.areaStatus === 1 && (item.flowStatus == null || Number(item.flowStatus) === 5)) |
| | | } |
| | | |
| | | // 判断禁行区域是否完全在运营区域内 |
| | | function isDisallowedAreaInOperationArea(disallowedPath: any, operationPath: any): boolean { |
| | | // 使用高德地图的几何工具来判断禁行区域是否完全在运营区域内 |
| | |
| | | message.error('运营区域不允许自相交') |
| | | return |
| | | } |
| | | const operableAreas = getOperableFenceAreas() |
| | | console.warn('[fence-overlap] 绘制完成,参与校验的运营区:', operableAreas.map((item: any) => ({ id: item.id, areaName: item.areaName, areaStatus: item.areaStatus, flowStatus: item.flowStatus }))) |
| | | const fenceArea = operableAreas.find((item: any) => isPolygonIntersectOthers(fencePoints, item.points)) |
| | | const fenceArea = renderedPolygons.value.filter((item: any) => item.areaType === 1).find((item: any) => isPolygonIntersectOthers(fencePoints, item.points)) |
| | | if (fenceArea) { |
| | | console.error('[fence-overlap] 命中相交:', fenceArea) |
| | | message.error(`当前区域已有运营区,若需修改,请编辑${fenceArea.areaName}`) |
| | | return |
| | | } |
| | | const fenceContained = operableAreas.find((item: any) => isPolygonContained(fencePoints, item.points)) |
| | | const fenceContained = renderedPolygons.value.filter((item: any) => item.areaType === 1).find((item: any) => isPolygonContained(fencePoints, item.points)) |
| | | if (fenceContained) { |
| | | console.error('[fence-overlap] 命中被包含:', fenceContained) |
| | | message.error(`当前区域已被${fenceContained.areaName}包含,若需修改,请编辑${fenceContained.areaName}`) |
| | | return |
| | | } |
| | | const fenceContainOthers = operableAreas.find((item: any) => isPolygonContainOthers(fencePoints, item.points)) |
| | | const fenceContainOthers = renderedPolygons.value.filter((item: any) => item.areaType === 1).find((item: any) => isPolygonContainOthers(fencePoints, item.points)) |
| | | if (fenceContainOthers) { |
| | | console.error('[fence-overlap] 命中包含其他:', fenceContainOthers) |
| | | message.error(`当前区域包含${fenceContainOthers.areaName},若需修改,请编辑${fenceContainOthers.areaName}`) |
| | | } |
| | | }) |
| | |
| | | message.error('运营区域不允许自相交') |
| | | return |
| | | } |
| | | const operableAreas = getOperableFenceAreas() |
| | | console.warn('[fence-overlap] 保存前,参与校验的运营区:', operableAreas.map((item: any) => ({ id: item.id, areaName: item.areaName, areaStatus: item.areaStatus, flowStatus: item.flowStatus }))) |
| | | const fenceArea = operableAreas.find((item: any) => isPolygonIntersectOthers(fencePoints, item.points)) |
| | | const fenceArea = renderedPolygons.value.filter((item: any) => item.areaType === 1).find((item: any) => isPolygonIntersectOthers(fencePoints, item.points)) |
| | | if (fenceArea) { |
| | | console.error('[fence-overlap] 命中相交:', fenceArea) |
| | | message.error(`当前区域已有运营区,若需修改,请编辑${fenceArea.areaName}`) |
| | | return |
| | | } |
| | | const fenceContained = operableAreas.find((item: any) => isPolygonContained(fencePoints, item.points)) |
| | | const fenceContained = renderedPolygons.value.filter((item: any) => item.areaType === 1).find((item: any) => isPolygonContained(fencePoints, item.points)) |
| | | if (fenceContained) { |
| | | console.error('[fence-overlap] 命中被包含:', fenceContained) |
| | | message.error(`当前区域已被${fenceContained.areaName}包含,若需修改,请编辑${fenceContained.areaName}`) |
| | | return |
| | | } |
| | | const fenceContainOthers = operableAreas.find((item: any) => isPolygonContainOthers(fencePoints, item.points)) |
| | | const fenceContainOthers = renderedPolygons.value.filter((item: any) => item.areaType === 1).find((item: any) => isPolygonContainOthers(fencePoints, item.points)) |
| | | if (fenceContainOthers) { |
| | | console.error('[fence-overlap] 命中包含其他:', fenceContainOthers) |
| | | message.error(`当前区域包含${fenceContainOthers.areaName},若需修改,请编辑${fenceContainOthers.areaName}`) |
| | | return |
| | | } |
| | |
| | | function getFenceArea() { |
| | | fetchElectronicFenceAreaList().then((res) => { |
| | | if (res.code === 200) { |
| | | console.warn('[fence-overlap] listElectronicFenceArea 原始返回:', res.data.map((item: any) => ({ id: item.id, areaName: item.areaName, areaType: item.areaType, areaStatus: item.areaStatus, electronicId: item.electronicId, flowStatus: item.flowStatus }))) |
| | | if (modalType.value !== 'add') { |
| | | fenceAreaList.value = res.data.filter((item: any) => item.electronicId !== routeId.value && item.electronicId !== Number(routeId.value)) |
| | | } |
| | |
| | | } |
| | | // 渲染新获取的多边形 |
| | | renderFencePolygons(fenceAreaList.value) |
| | | console.warn('[fence-overlap] 渲染后全部多边形:', renderedPolygons.value.map((item: any) => ({ id: item.id, areaName: item.areaName, areaType: item.areaType, areaStatus: item.areaStatus, flowStatus: item.flowStatus }))) |
| | | } |
| | | }).finally(() => { |
| | | getPointList() |
| | |
| | | points, |
| | | areaType: item.areaType, |
| | | areaName: item.areaName, |
| | | areaStatus: Number(item.areaStatus), |
| | | flowStatus: item.flowStatus != null ? Number(item.flowStatus) : undefined, |
| | | }) |
| | | } |
| | | }) |