From ce65a6fb8100c9a9dce15733dc23a9f317fed6e4 Mon Sep 17 00:00:00 2001
From: SunTao <328867980@qq.com>
Date: Fri, 27 Dec 2024 11:58:54 +0800
Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=94=B9=E5=A4=A7?=
=?UTF-8?q?=E5=B1=8F=E8=BF=94=E5=9B=9E=E9=80=BB=E8=BE=91=EF=BC=8C=E5=8E=BB?=
=?UTF-8?q?=E9=99=A4=E9=BB=98=E8=AE=A4=E5=AF=86=E7=A0=81=EF=BC=8C=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E5=9C=B0=E5=9B=BE=E5=85=B1=E7=94=A8=E4=B8=80=E4=B8=AA?=
=?UTF-8?q?=EF=BC=8C=E7=BA=BF=E6=AE=B5=E7=82=B9=E5=87=BB=E6=89=93=E7=82=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/big-screen/index.vue | 564 ++++++++++++++++++---------------
src/views/login.vue | 4 +-
2 files changed, 315 insertions(+), 253 deletions(-)
diff --git a/src/views/big-screen/index.vue b/src/views/big-screen/index.vue
index fe69f6c..6683c8c 100644
--- a/src/views/big-screen/index.vue
+++ b/src/views/big-screen/index.vue
@@ -2,7 +2,7 @@
* @Author: SunTao 328867980@qq.com
* @Date: 2024-10-17 11:34:00
* @LastEditors: SunTao 328867980@qq.com
- * @LastEditTime: 2024-12-26 10:40:09
+ * @LastEditTime: 2024-12-27 11:39:58
* @FilePath: \znxjxt-ui\src\views\big-screen\index.vue
* @Description: 大屏首页
-->
@@ -271,7 +271,10 @@
-
+
返回
@@ -321,10 +324,10 @@
-
+
{
const map = this.$refs.roadMap.instance.get("map");
+ this.$refs.roadMap.removeSelectClick();
map.getView().setCenter(item.tablePoint);
map.getView().setZoom(16);
});
- this.roadSelect = item.segmentId;
+ // this.roadSelect = item.segmentId;
this.getCenterPiont();
},
@@ -928,7 +940,7 @@ export default {
mapPointList({
type: this.elementDiv,
classType: this.bottomTipClick,
- segmentId: this.roadSelect,
+ ...this.defectMapPiont,
}).then(({ code, data }) => {
if (code === 200) {
this.drawPointList = data.map((item) => {
@@ -949,15 +961,51 @@ export default {
}
return [];
});
+ // 修改地图中心点位
+ const pointArray = data.map((item) => {
+ if (item.geometry) {
+ return [item.geometry[0], item.geometry[1]];
+ }
+ return [];
+ });
+ // console.log(pointArray);
+ this.fitMapToPoints(pointArray);
// 如果不是病害巡检,则绘制点位
// 如果图片弹窗打开,则绘制点位
- if (this.elementDiv !== "DiseaseScreen" || this.imgVisible) {
- this.drawPoint();
- }
+ this.drawPoint();
}
});
},
+ /**
+ * @description: 根据点位计算地图中心点
+ * @return {void}
+ */
+ fitMapToPoints(points) {
+ if (points.length > 0) {
+ // 创建一个空的 extent
+ let extent = [Infinity, Infinity, -Infinity, -Infinity];
+ // 计算所有点的边界框(extent)
+ points.forEach((point) => {
+ extent = [
+ Math.min(extent[0], point[0]),
+ Math.min(extent[1], point[1]),
+ Math.max(extent[2], point[0]),
+ Math.max(extent[3], point[1]),
+ ];
+ });
+
+ // 获取地图实例
+ const map = this.$refs.roadMap.instance.get("map");
+
+ // 使用 fit 方法根据边界框计算最佳缩放级别
+ map.getView().fit(extent, {
+ duration: 500, // 动画持续时间
+ padding: [80, 500, 80, 500], // 边缘填充
+ });
+ }
+ },
+
/**
* @description: 绘制地图点位
* @return {void}
@@ -995,7 +1043,7 @@ export default {
crossOrigin: "anonymous",
src: require(`@/assets/screen/index/龟裂.png`),
// 图标缩放比例
- scale: 0.6,
+ scale: 0.5,
displacement: [0, 30],
// 0.3为30度
// rotation: 0.3,
@@ -1004,7 +1052,7 @@ export default {
textAlign: "center", //位置
textBaseline: "middle",
font: "normal 14px 微软雅黑",
- offsetY: -50,
+ offsetY: -40,
fill: new Fill({
color: "#ffffff",
}),
@@ -1021,7 +1069,7 @@ export default {
] || "龟裂"
}.png`),
// 图标缩放比例
- scale: 0.6,
+ scale: 0.5,
displacement: [0, 30],
// 0.3为30度
// rotation: 0.3,
@@ -1030,7 +1078,7 @@ export default {
textAlign: "center", //位置
textBaseline: "middle",
font: "normal 14px 微软雅黑",
- offsetY: -50,
+ offsetY: -40,
fill: new Fill({
color: "#ffffff",
}),
@@ -1054,12 +1102,7 @@ export default {
if (this.markLayerLines) {
// 清除线段图层
this.$nextTick(() => {
- let map = null;
- if (this.$refs.roadMap) {
- map = this.$refs.roadMap.instance.get("map");
- } else {
- map = this.$refs.overViewMap.instance.get("map");
- }
+ const map = this.$refs.roadMap.instance.get("map");
map.removeLayer(this.markLayerLines);
this.markLayerLines = null;
});
@@ -1097,32 +1140,20 @@ export default {
const extent = multiLine.getExtent();
// 计算边界框的中心点
const center = getCenter(extent);
- if (this.showMap) {
- this.$nextTick(() => {
- const map = this.$refs.overViewMap.instance.get("map");
- map.getView().animate({
- center,
- duration: 500,
- });
- map.getView().fit(extent, {
- duration: 500,
- padding: [80, 500, 80, 500], // 边缘填充(可选)
- });
+
+ this.$nextTick(() => {
+ const map = this.$refs.roadMap.instance.get("map");
+ // map.getView().setCenter(center);
+ map.getView().animate({
+ center,
+ duration: 500,
});
- } else {
- this.$nextTick(() => {
- const map = this.$refs.roadMap.instance.get("map");
- // map.getView().setCenter(center);
- map.getView().animate({
- center,
- duration: 500,
- });
- map.getView().fit(extent, {
- duration: 500,
- padding: [80, 500, 80, 500], // 边缘填充(可选)
- });
+ map.getView().fit(extent, {
+ duration: 500,
+ padding: [80, 500, 80, 500], // 边缘填充(可选)
});
- }
+ });
+
this.isCenterCalculated = true;
}
}
@@ -1144,6 +1175,7 @@ export default {
data: {
name: element.segmentName,
count: element.defectCount,
+ segmentId: element.segmentId,
stakeEnd: element.stakeEnd,
stakeStart: element.stakeStart,
},
@@ -1180,17 +1212,11 @@ export default {
type: "line",
},
});
- if (this.showMap) {
- this.$nextTick(() => {
- const map = this.$refs.overViewMap.instance.get("map");
- map.addLayer(this.markLayerLines);
- });
- } else {
- this.$nextTick(() => {
- const map = this.$refs.roadMap.instance.get("map");
- map.addLayer(this.markLayerLines);
- });
- }
+
+ this.$nextTick(() => {
+ const map = this.$refs.roadMap.instance.get("map");
+ map.addLayer(this.markLayerLines);
+ });
},
/**
@@ -1222,6 +1248,7 @@ export default {
this.defectSelect = "";
this.bottomTipClick = value;
this.getAllDefectType();
+ // 清空打点图层
this.$nextTick(() => {
const map = this.$refs.roadMap.instance.get("map");
map.removeLayer(this.clusters);
@@ -1232,6 +1259,7 @@ export default {
// 地图右上角多选按钮隐藏
this.showIconList = false;
// this.getIconType();
+ // 绘制线段
this.getLinePoint();
}
},
@@ -1285,7 +1313,8 @@ export default {
let features = feature.get("features");
// 点击线段事件
if (feature.getProperties().type === "line") {
- console.log(feature, "线段参数");
+ // console.log(feature.get("data"), "线段参数");
+ // this.drawDefectPoint(feature.get("data"));
} else if (feature.getProperties().type === "carPoint") {
console.log(feature, "小车点位");
} else {
@@ -1311,208 +1340,239 @@ export default {
}
},
+ /**
+ * @description: 地图点击线段进行打点
+ * @param {object}
+ * @return {void}
+ */
+ drawDefectPoint(item) {
+ this.defectMapPiont = item;
+ // 地图右上角多选按钮显示
+ this.getIconType();
+ this.showIconList = true;
+ // 地图打点\改变地图层级
+ // this.$nextTick(() => {
+ // const map = this.$refs.roadMap.instance.get("map");
+ // map.getView().setZoom(16);
+ // });
+ // this.roadSelect = item.segmentId;
+ this.getCenterPiont();
+ },
+
/**
* @description: 数据栏切换事件
* @param {object} item
* @return {void}
*/
changeElement(item) {
- if (this.elementDiv !== item) {
+ if (this.elementDiv !== item.component) {
this.elementDiv = item.component;
- this.roadSelect = "";
- // 清除已经点击的公司
- this.companyId = null;
- if (item.component === "OverviewScreen") {
- // 将线段中心点修改标识置为false
- this.isCenterCalculated = false;
- /* 清空线段图层 */
- this.markLayerLines = null;
- this.leftModuleList = [
- {
- width: "100%",
- height: "27%",
- title: "今日巡查",
- component: TodayInspection,
- selectIsShow: false,
- class: "one",
- },
- {
- width: "100%",
- height: "27%",
- title: "病害趋势",
- component: DiseaseTrends,
- selectIsShow: false,
- class: "twe",
- },
- {
- width: "100%",
- height: "29%",
- title: "病害统计",
- component: DiseaseCurrent,
- selectIsShow: true,
- select: "",
- class: "twe",
- },
- ];
- this.rightModuleList = [
- {
- width: "100%",
- height: "18%",
- title: "巡查里程",
- component: PatrolOrder,
- selectIsShow: false,
- class: "one",
- },
- {
- width: "100%",
- height: "65%",
- title: "巡检车辆",
- component: InspectionVehicles,
- selectIsShow: false,
- class: "twe",
- },
- ];
- // 展示图片地图
- this.showMap = false;
- // 不接收小车位置消息
- const data = { type: "carLocation", status: false };
- this.$ws.send(data);
- this.$ws.removeEventListener("message", this.indexListenerId);
- this.carPointList = [];
- this.mapPointFeatures = [];
- // 地图右上角多选按钮隐藏
- this.showIconList = false;
- // 图层恢复
- this.mapZoom = "";
- } else if (item.component === "RoadScreen") {
- this.leftModuleList = [
- {
- width: "100%",
- height: "17%",
- title: "管养道路统计",
- component: ManageMaintain,
- selectIsShow: false,
- class: "one",
- },
- {
- width: "100%",
- height: "55%",
- title: "附属设施分布",
- component: AncillaryFacilities,
- selectIsShow: false,
- class: "twe",
- },
- ];
- this.rightModuleList = [
- {
- width: "100%",
- height: "29%",
- title: "附属设施异常统计",
- component: AnomalyFacilities,
- selectIsShow: true,
- select: "",
- class: "one",
- },
- {
- width: "100%",
- height: "57%",
- title: "路产统计",
- component: RoadStatistic,
- selectIsShow: true,
- select: "",
- class: "twe",
- },
- ];
- // 将线段中心点修改标识置为false
- this.isCenterCalculated = false;
- // 隐藏总览地图
- this.showMap = false;
- // 发送小车位置消息
- const data = { type: "carLocation", status: true };
- this.$ws.send(data);
- this.$ws.on("message", this.handleMessage, this.indexListenerId);
- // 将地图层级初始化
- this.$nextTick(() => {
- const map = this.$refs.roadMap.instance.get("map");
- map.getView().setZoom(10);
- map.getView().setCenter([123.30297096718999, 41.87942945541742]);
- });
- // 地图右上角多选按钮显示
- this.getIconType();
- this.showIconList = true;
- // 进行地图打点
- this.getCenterPiont();
- // 清除线段图层
- this.$nextTick(() => {
- let map = null;
- if (this.$refs.roadMap) {
- map = this.$refs.roadMap.instance.get("map");
- } else {
- map = this.$refs.overViewMap.instance.get("map");
- }
- map.removeLayer(this.markLayerLines);
- this.markLayerLines = null;
- });
- } else if (item.component === "DiseaseScreen") {
- this.leftModuleList = [
- {
- width: "100%",
- height: "27%",
- title: "今日巡查",
- component: TrafficSafety,
- selectIsShow: false,
- class: "one",
- },
- {
- width: "100%",
- height: "27%",
- title: "主要病害趋势",
- component: TrafficTrend,
- selectIsShow: true,
- class: "twe",
- },
- {
- width: "100%",
- height: "33%",
- title: "病害统计",
- component: TrafficStatistic,
- selectIsShow: true,
- select: "",
- class: "twe",
- },
- ];
- this.rightModuleList = [
- {
- width: "100%",
- height: "85%",
- title: "病害日志",
- component: TrafficLog,
- selectIsShow: false,
- select: "",
- class: "one",
- },
- ];
- //隐藏总览地图
- this.showMap = false;
- // 发送小车位置消息
- const data = { type: "carLocation", status: true };
- this.$ws.send(data);
- this.$ws.on("message", this.handleMessage, this.indexListenerId);
- // 地图右上角多选按钮隐藏
- this.showIconList = false;
- // 图层恢复
- this.mapZoom = "";
- this.$nextTick(() => {
- const map = this.$refs.roadMap.instance.get("map");
- map.removeLayer(this.clusters);
- this.clusters = null;
- map.getView().setZoom(10);
- });
- this.getLinePoint();
- }
+ // 清除点击得线段参数
+ this.defectMapPiont = {};
+ this.changeMapElement(item);
}
},
+ /**
+ * @description: 数据栏切换两侧数据和地图事件
+ * @param {object} item
+ * @return {void}
+ */
+ changeMapElement: debounce(function (item) {
+ if (item.component === "OverviewScreen") {
+ this.leftModuleList = [
+ {
+ width: "100%",
+ height: "27%",
+ title: "今日巡查",
+ component: TodayInspection,
+ selectIsShow: false,
+ class: "one",
+ },
+ {
+ width: "100%",
+ height: "27%",
+ title: "病害趋势",
+ component: DiseaseTrends,
+ selectIsShow: false,
+ class: "twe",
+ },
+ {
+ width: "100%",
+ height: "29%",
+ title: "病害统计",
+ component: DiseaseCurrent,
+ selectIsShow: true,
+ select: "",
+ class: "twe",
+ },
+ ];
+ this.rightModuleList = [
+ {
+ width: "100%",
+ height: "18%",
+ title: "巡查里程",
+ component: PatrolOrder,
+ selectIsShow: false,
+ class: "one",
+ },
+ {
+ width: "100%",
+ height: "65%",
+ title: "巡检车辆",
+ component: InspectionVehicles,
+ selectIsShow: false,
+ class: "twe",
+ },
+ ];
+ // 清除已经点击的公司
+ this.companyId = null;
+ // 将线段中心点修改标识置为false
+ this.isCenterCalculated = false;
+ /* 清空线段图层 */
+ this.markLayerLines = null;
+ // 不展示地图
+ this.showMap = false;
+ // 不接收小车位置消息
+ const data = { type: "carLocation", status: false };
+ this.$ws.send(data);
+ this.$ws.removeEventListener("message", this.indexListenerId);
+ this.carPointList = [];
+ this.mapPointFeatures = [];
+ // 地图右上角多选按钮隐藏
+ this.showIconList = false;
+ // 图层恢复
+ this.mapZoom = "";
+ } else if (item.component === "RoadScreen") {
+ this.leftModuleList = [
+ {
+ width: "100%",
+ height: "17%",
+ title: "管养道路统计",
+ component: ManageMaintain,
+ selectIsShow: false,
+ class: "one",
+ },
+ {
+ width: "100%",
+ height: "55%",
+ title: "附属设施分布",
+ component: AncillaryFacilities,
+ selectIsShow: false,
+ class: "twe",
+ },
+ ];
+ this.rightModuleList = [
+ {
+ width: "100%",
+ height: "29%",
+ title: "附属设施异常统计",
+ component: AnomalyFacilities,
+ selectIsShow: true,
+ select: "",
+ class: "one",
+ },
+ {
+ width: "100%",
+ height: "57%",
+ title: "路产统计",
+ component: RoadStatistic,
+ selectIsShow: true,
+ select: "",
+ class: "twe",
+ },
+ ];
+ // 清除已经点击的公司
+ this.companyId = null;
+ // 将线段中心点修改标识置为false
+ this.isCenterCalculated = false;
+ // 隐藏总览地图
+ this.showMap = true;
+ // 发送小车位置消息
+ const data = { type: "carLocation", status: true };
+ this.$ws.send(data);
+ this.$ws.on("message", this.handleMessage, this.indexListenerId);
+ // 将地图层级初始化
+ this.$nextTick(() => {
+ const map = this.$refs.roadMap.instance.get("map");
+ map.getView().setZoom(10);
+ map.getView().setCenter([123.30297096718999, 41.87942945541742]);
+ });
+ // 地图右上角多选按钮显示
+ this.getIconType();
+ this.showIconList = true;
+ // 清除线段图层
+ this.$nextTick(() => {
+ const map = this.$refs.roadMap.instance.get("map");
+ map.removeLayer(this.markLayerLines);
+ this.markLayerLines = null;
+ });
+ // 进行地图打点
+ this.getCenterPiont();
+ } else if (item.component === "DiseaseScreen") {
+ this.leftModuleList = [
+ {
+ width: "100%",
+ height: "27%",
+ title: "今日巡查",
+ component: TrafficSafety,
+ selectIsShow: false,
+ class: "one",
+ },
+ {
+ width: "100%",
+ height: "27%",
+ title: "主要病害趋势",
+ component: TrafficTrend,
+ selectIsShow: true,
+ class: "twe",
+ },
+ {
+ width: "100%",
+ height: "33%",
+ title: "病害统计",
+ component: TrafficStatistic,
+ selectIsShow: true,
+ select: "",
+ class: "twe",
+ },
+ ];
+ this.rightModuleList = [
+ {
+ width: "100%",
+ height: "85%",
+ title: "病害日志",
+ component: TrafficLog,
+ selectIsShow: false,
+ select: "",
+ class: "one",
+ },
+ ];
+ // 清除已经点击的公司
+ this.companyId = null;
+ // 将线段中心点修改标识置为false
+ this.isCenterCalculated = false;
+ //隐藏总览地图
+ this.showMap = true;
+ // 发送小车位置消息
+ const data = { type: "carLocation", status: true };
+ this.$ws.send(data);
+ this.$ws.on("message", this.handleMessage, this.indexListenerId);
+ // 地图右上角多选按钮隐藏
+ this.showIconList = false;
+ // 图层恢复
+ this.mapZoom = "";
+ // 清除打点图层
+ this.$nextTick(() => {
+ const map = this.$refs.roadMap.instance.get("map");
+ map.removeLayer(this.clusters);
+ this.clusters = null;
+ map.getView().setZoom(10);
+ });
+ this.getLinePoint();
+ }
+ }, 500),
+
/**
* @description: 处理websocket消息
* @return {*}
@@ -2030,6 +2090,8 @@ export default {
// 消息中心样式
.header-news {
+ margin-right: 1rem;
+
i {
position: relative;
cursor: pointer;
diff --git a/src/views/login.vue b/src/views/login.vue
index 299c241..2a9beea 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -107,8 +107,8 @@ export default {
return {
codeUrl: "",
loginForm: {
- username: "admin",
- password: "admin123",
+ username: "",
+ password: "",
rememberMe: false,
code: "",
uuid: "",