From 7d1c85bba308d40d45ab7cc63b12df4b48e1e7f1 Mon Sep 17 00:00:00 2001 From: 董国庆 <364620639@qq.com> Date: 星期二, 08 四月 2025 10:41:00 +0800 Subject: [PATCH] 首页地图 --- src/view/home/index.vue | 129 ++++++++++++++++++++---------------------- 1 files changed, 62 insertions(+), 67 deletions(-) diff --git a/src/view/home/index.vue b/src/view/home/index.vue index b1a0bdb..f7ca11f 100644 --- a/src/view/home/index.vue +++ b/src/view/home/index.vue @@ -154,8 +154,8 @@ }} </div> <div class="info"> - {{ item.vehicleNumber }} {{ item.warnType }} - {{ item.keepTime }} {{ item.startTime }} + {{ item.vehicleNumber }} {{ item.warnType }} {{ item.keepTime }} + {{ item.startTime }} </div> </div> </div> @@ -205,7 +205,7 @@ getCarWarnList, getWarnGroupCount, getWarnGroupCountTop10, - getCarInfoById, + getRealVideo, } from "./service"; export default { data() { @@ -251,6 +251,10 @@ } }, }, + filters: { + + }, + created() { window.toCarDetail = (record) => { this.toCarDetail(record); @@ -446,6 +450,7 @@ "AMap.AutoComplete", "AMap.Geocoder", "AMap.MarkerCluster", + "AMap.Geocoder", ], }) .then((AMap) => { @@ -546,9 +551,21 @@ this.infoWindow.open(this.map, e.target.getPosition()); try { - // 并行请求车辆信息和视频地址 - const [carInfoRes, videoRes] = await Promise.all([ - this.getCarInfo(item.id), + // 使用高德地图API获取地址信息 + const geocoder = new this.AMap.Geocoder(); + const location = [Number(item.longitude), Number(item.latitude)]; + + const [addressResult, videoRes] = await Promise.all([ + new Promise((resolve) => { + geocoder.getAddress(location, (status, result) => { + if (status === "complete" && result.regeocode) { + console.log("result", result,'status',status); + resolve(result.regeocode.formattedAddress); + } else { + resolve("未知地址"); + } + }); + }), this.getVideoUrl(item.id), ]); @@ -556,28 +573,29 @@ this.infoWindow.setContent( this.listRender({ ...item, - ...carInfoRes.data, + drivingTime:this.formatterTime(item.drivingTime || 0) , + location: addressResult, videoUrl: videoRes.data.url, }) ); - if (flvjs.isSupported()) { - this.flvPlayer = flvjs.createPlayer({ - type: "flv", - isLive: true, - cors: true, - hasAudio: true, - hasVideo: true, - url: videoRes.data.url, - enableWorker: true, - enableStashBuffer: false, - seekType: "range", - }); - let video = document.getElementById("monitoringCard"); - this.flvPlayer.attachMediaElement(video); - this.flvPlayer.load(); - this.flvPlayer.play(); - } + // if (flvjs.isSupported()) { + // this.flvPlayer = flvjs.createPlayer({ + // type: "flv", + // isLive: true, + // cors: true, + // hasAudio: true, + // hasVideo: true, + // url: videoRes.data.url, + // enableWorker: true, + // enableStashBuffer: false, + // seekType: "range", + // }); + // let video = document.getElementById("monitoringCard"); + // this.flvPlayer.attachMediaElement(video); + // this.flvPlayer.load(); + // this.flvPlayer.play(); + // } } catch (error) { this.infoWindow.setContent( '<div style="padding: 20px;text-align: center;color: red;">获取车辆信息失败</div>' @@ -590,50 +608,18 @@ }); } }, - - // 获取车辆信息 - async getCarInfo(carId) { + // 获取视频地址 + async getVideoUrl(carId) { try { - const res = await getCarInfoById({ id: carId }); - if (res) { - return { - data: { - ...res, - id: carId, - }, - }; - } - return { - data: { - id: carId, - }, - }; + const res = await getRealVideo({ id: carId }); + return res; } catch (error) { return { data: { - licensePlate: "", - driver: "", - location: "", - coordinates: "", - speed: "0km/h", - drivingTime: "0小时0分钟", + url: "", }, }; } - }, - - // 获取视频地址 - async getVideoUrl(carId) { - // TODO: 替换为实际的API调用 - return new Promise((resolve) => { - setTimeout(() => { - resolve({ - data: { - url: "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4", - }, - }); - }, 500); - }); }, listRender(record) { @@ -645,7 +631,6 @@ id="monitoringCard" :controls="false" autoplay - src="${record.videoUrl}" width="620"> </video> <div style="position: absolute; right: 11px; top: 10px"> @@ -666,21 +651,21 @@ record.vehicleNumber || "" }</div> <div style="font-weight: 500; font-size: 18px;color: rgba(0, 0, 0, 0.85);line-height: 25px;">驾驶员:${ - record.driverName||'' + record.driverName || "" }</div> </div> <div style="display: flex; justify-content: space-between"> - <div style="font-weight: 500; font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px;">位置:${ + <div style="font-weight: 500; font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px;width: 200px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;" title="${record.location}">位置:${ record.location }</div> <div style="font-weight: 500;font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px;">经纬度:${ - record.longitude +',' + record.latitude + record.longitude + "," + record.latitude }</div> </div> <div style="display: flex; justify-content: space-between"> <div style="font-weight: 500;font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px;">当前时速:${ - record.speed - }</div> + record.speed || "" + }${record.speed && "km/h"}</div> <div style="font-weight: 500;font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px;">驾驶时长:${ record.drivingTime }</div> @@ -693,6 +678,16 @@ </div> </div>`; }, + formatterTime(value) { + if (!value) return ""; + const hours = Math.floor(value / 60); + const minutes = value % 60; + if (hours > 0) { + return `${hours}小时${minutes}分钟`; + } else { + return `${minutes}分钟`; + } + }, // 获取预警情况统计 getCountList() { echarts.dispose(document.getElementById("countChart")); -- Gitblit v1.7.1