fix:增加巡查任务查看点位
This commit is contained in:
parent
6dd0ef6706
commit
4cef5264d0
@ -2,7 +2,7 @@
|
|||||||
* @Author: SunTao 328867980@qq.com
|
* @Author: SunTao 328867980@qq.com
|
||||||
* @Date: 2025-01-02 11:56:20
|
* @Date: 2025-01-02 11:56:20
|
||||||
* @LastEditors: SunTao 328867980@qq.com
|
* @LastEditors: SunTao 328867980@qq.com
|
||||||
* @LastEditTime: 2025-01-02 15:54:11
|
* @LastEditTime: 2025-01-02 17:26:35
|
||||||
* @FilePath: \znxjxt-ui\src\views\xj\inspection\task-management\components\task-map.vue
|
* @FilePath: \znxjxt-ui\src\views\xj\inspection\task-management\components\task-map.vue
|
||||||
* @Description: 巡检任务-地图弹窗
|
* @Description: 巡检任务-地图弹窗
|
||||||
-->
|
-->
|
||||||
@ -25,7 +25,50 @@
|
|||||||
clearable
|
clearable
|
||||||
></el-cascader>
|
></el-cascader>
|
||||||
</div>
|
</div>
|
||||||
<fssm-map ref="taskMap"></fssm-map>
|
<fssm-map ref="taskMap" @feature-select="featureSelect"></fssm-map>
|
||||||
|
|
||||||
|
<!-- 查看点位图片弹窗 -->
|
||||||
|
<el-dialog
|
||||||
|
title="查看点位"
|
||||||
|
:visible.sync="showImageDialog"
|
||||||
|
width="85rem"
|
||||||
|
append-to-body
|
||||||
|
destroy-on-close
|
||||||
|
@close="screenImgCancel"
|
||||||
|
>
|
||||||
|
<div class="image-container" ref="imageContainer">
|
||||||
|
<img
|
||||||
|
:src="screenImage.imageUrl"
|
||||||
|
alt="Main Image"
|
||||||
|
ref="mainImage"
|
||||||
|
@load="updateScreenRects"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
v-for="(rect, index) in screenRects"
|
||||||
|
:key="index"
|
||||||
|
class="rect-overlay"
|
||||||
|
:style="getScreenRectStyle(rect)"
|
||||||
|
></div>
|
||||||
|
<div class="rect-image">
|
||||||
|
采集时间:
|
||||||
|
{{ screenImage.createTime }} 起始桩号:
|
||||||
|
{{ screenImage.stakeStart || "暂无数据" }} 终止桩号:
|
||||||
|
{{ screenImage.stakeEnd || "暂无数据" }}
|
||||||
|
病害类型
|
||||||
|
{{ screenImage.iconTypeName || "暂无数据" }}
|
||||||
|
病害面积:{{
|
||||||
|
screenImage.targetArea
|
||||||
|
? `${screenImage.targetArea}平方米`
|
||||||
|
: "暂无数据"
|
||||||
|
}}
|
||||||
|
病害长度:{{
|
||||||
|
screenImage.targetLen * 1 <= 0
|
||||||
|
? "暂无数据"
|
||||||
|
: `${screenImage.targetLen}米`
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -65,6 +108,12 @@ export default {
|
|||||||
centerPiont: [],
|
centerPiont: [],
|
||||||
// 中心点集合(所有点位)
|
// 中心点集合(所有点位)
|
||||||
drawPointList: [],
|
drawPointList: [],
|
||||||
|
// 查看大图点位图片数据
|
||||||
|
screenImage: {},
|
||||||
|
// 查看大图点位图片弹窗显隐控制
|
||||||
|
showImageDialog: false,
|
||||||
|
// 查看大图点位图片弹窗红框数据
|
||||||
|
screenRects: [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -111,9 +160,6 @@ export default {
|
|||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
});
|
});
|
||||||
// 如果不是病害巡检,则绘制点位
|
|
||||||
// 如果图片弹窗打开,则绘制点位
|
|
||||||
// if (!this.shouldLoadClusters) {
|
|
||||||
// 修改地图中心点位
|
// 修改地图中心点位
|
||||||
const pointArray = data.map((item) => {
|
const pointArray = data.map((item) => {
|
||||||
if (item.geometry) {
|
if (item.geometry) {
|
||||||
@ -123,7 +169,6 @@ export default {
|
|||||||
});
|
});
|
||||||
this.fitMapToPoints(pointArray);
|
this.fitMapToPoints(pointArray);
|
||||||
this.drawPoint();
|
this.drawPoint();
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -206,6 +251,92 @@ export default {
|
|||||||
this.markLayerPoints.setSource(pointSource);
|
this.markLayerPoints.setSource(pointSource);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 图标点击事件
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
featureSelect(e) {
|
||||||
|
const map = this.$refs.taskMap.instance.get("map");
|
||||||
|
const selectedFeatures = e.selected;
|
||||||
|
let feature = selectedFeatures[0];
|
||||||
|
if (selectedFeatures.length > 0) {
|
||||||
|
console.log(feature.getProperties(), "feature");
|
||||||
|
// 获取点位数据
|
||||||
|
const selectFeature = feature.getProperties().data;
|
||||||
|
this.screenImage = selectFeature;
|
||||||
|
this.showImageDialog = true;
|
||||||
|
} else {
|
||||||
|
// 聚合点
|
||||||
|
// 放大地图层级
|
||||||
|
map.getView().animate({
|
||||||
|
center: feature.getGeometry().getCoordinates(),
|
||||||
|
zoom: map.getView().getZoom() + 1,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 图片位置信息获取
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
updateScreenRects() {
|
||||||
|
1;
|
||||||
|
this.screenRects = [];
|
||||||
|
const image = this.$refs.mainImage;
|
||||||
|
const rects = this.screenImage?.rect?.split(",").map(Number) || [];
|
||||||
|
this.screenRects = [
|
||||||
|
{
|
||||||
|
left: rects[0],
|
||||||
|
top: rects[1],
|
||||||
|
width: rects[2],
|
||||||
|
height: rects[3],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 图片红框位置
|
||||||
|
* @param {object} left
|
||||||
|
* @param {object} top
|
||||||
|
* @param {object} width
|
||||||
|
* @param {object} height
|
||||||
|
* @return {object}
|
||||||
|
*/
|
||||||
|
getScreenRectStyle({ left, top, width, height }) {
|
||||||
|
const image = this.$refs.mainImage;
|
||||||
|
const container = this.$refs.imageContainer;
|
||||||
|
if (!image || !container) return {};
|
||||||
|
|
||||||
|
const scaleX = container.clientWidth / image.naturalWidth;
|
||||||
|
const scaleY = container.clientHeight / image.naturalHeight;
|
||||||
|
const scale = Math.min(scaleX, scaleY);
|
||||||
|
|
||||||
|
const renderedWidth = image.naturalWidth * scale;
|
||||||
|
const renderedHeight = image.naturalHeight * scale;
|
||||||
|
|
||||||
|
const offsetX = (container.clientWidth - renderedWidth) / 2;
|
||||||
|
const offsetY = (container.clientHeight - renderedHeight) / 2;
|
||||||
|
|
||||||
|
return {
|
||||||
|
position: "absolute",
|
||||||
|
left: `${left * scale + offsetX}px`,
|
||||||
|
top: `${top * scale + offsetY}px`,
|
||||||
|
width: `${width * scale}px`,
|
||||||
|
height: `${height * scale}px`,
|
||||||
|
border: "2px solid #FF0000",
|
||||||
|
boxSizing: "border-box",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 关闭查看点位大图弹窗
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
screenImgCancel() {
|
||||||
|
this.$refs.taskMap.removeSelectClick();
|
||||||
|
this.showImageDialog = false;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
@ -221,4 +352,38 @@ export default {
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 查看大图弹窗 */
|
||||||
|
.image-container {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 80%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-container img {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rect-overlay {
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
|
border: 2px solid red;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 图片信息
|
||||||
|
.rect-image {
|
||||||
|
width: 90%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
color: #ffffff;
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user