From 22c83e8a1c4049972c4506d15f49b0b3b3be2ea1 Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期一, 07 四月 2025 17:43:51 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/shehong-vehicle-supervision

---
 src/view/home/index.vue |  647 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 371 insertions(+), 276 deletions(-)

diff --git a/src/view/home/index.vue b/src/view/home/index.vue
index d0d6875..b1a0bdb 100644
--- a/src/view/home/index.vue
+++ b/src/view/home/index.vue
@@ -6,55 +6,28 @@
       <div class="carCount">
         <div class="title">车辆统计</div>
         <div class="fir">
-          <div class="countCard">
-            <img class="iconImg" src="../../assets//homeImg/img1.png" />
+          <div
+            class="countCard"
+            v-for="(item, index) in carCountData.slice(0, 3)"
+            :key="item.id"
+          >
+            <img class="iconImg" :src="imgList[index]" />
             <div>
-              <div class="name">出租车(辆)</div>
-              <div class="num">888</div>
-            </div>
-          </div>
-          <div class="countCard">
-            <img class="iconImg" src="../../assets//homeImg/img2.png" />
-            <div>
-              <div class="name">网约车(辆)</div>
-              <div class="num">888</div>
-            </div>
-          </div>
-          <div class="countCard">
-            <img class="iconImg" src="../../assets//homeImg/img3.png" />
-            <div>
-              <div class="name">客运(辆)</div>
-              <div class="num">888</div>
+              <div class="name">{{ item.name || "" }}(辆)</div>
+              <div class="num">{{ item.carNum || 0 }}</div>
             </div>
           </div>
         </div>
         <div class="sec">
-          <div class="countCard">
-            <img class="iconImg" src="../../assets//homeImg/img4.png" />
+          <div
+            class="countCard"
+            v-for="(item, index) in carCountData.slice(3, 7)"
+            :key="item.id"
+          >
+            <img class="iconImg" :src="imgList[index + 3]" />
             <div>
-              <div class="name">郊游(辆)</div>
-              <div class="num">888</div>
-            </div>
-          </div>
-          <div class="countCard">
-            <img class="iconImg" src="../../assets//homeImg/img5.png" />
-            <div>
-              <div class="name">公交车(辆)</div>
-              <div class="num">888</div>
-            </div>
-          </div>
-          <div class="countCard">
-            <img class="iconImg" src="../../assets//homeImg/img6.png" />
-            <div>
-              <div class="name">危险品(辆)</div>
-              <div class="num">888</div>
-            </div>
-          </div>
-          <div class="countCard">
-            <img class="iconImg" src="../../assets//homeImg/img7.png" />
-            <div>
-              <div class="name">货运(辆)</div>
-              <div class="num">888</div>
+              <div class="name">{{ item.name || "" }}(辆)</div>
+              <div class="num">{{ item.carNum || 0 }}</div>
             </div>
           </div>
         </div>
@@ -66,14 +39,14 @@
           <div class="statusCard">
             <div class="statusLeft">
               <div class="name">在线</div>
-              <div class="num">8888</div>
+              <div class="num">{{ carStatusData.online || 0 }}</div>
             </div>
             <el-progress
               type="circle"
               :width="20"
               :show-text="false"
               stroke-linecap="butt"
-              :percentage="25"
+              :percentage="carStatusData.onlinePercent"
               color="rgba(91, 143, 249, 1)"
               define-back-color="rgba(91, 143, 249, 0.25)"
               class="progressCard"
@@ -83,14 +56,14 @@
           <div class="statusCard">
             <div class="statusLeft">
               <div class="name">离线</div>
-              <div class="num">8888</div>
+              <div class="num">{{ carStatusData.offline || 0 }}</div>
             </div>
             <el-progress
               type="circle"
               :width="20"
               :show-text="false"
               stroke-linecap="butt"
-              :percentage="25"
+              :percentage="carStatusData.offlinePercent"
               color="rgba(93, 112, 146, 1)"
               define-back-color="rgba(93, 112, 146, 0.25)"
               class="progressCard"
@@ -101,14 +74,14 @@
           <div class="statusCard">
             <div class="statusLeft">
               <div class="name">故障</div>
-              <div class="num">8888</div>
+              <div class="num">{{ carStatusData.breakdown || 0 }}</div>
             </div>
             <el-progress
               type="circle"
               :width="20"
               :show-text="false"
               stroke-linecap="butt"
-              :percentage="25"
+              :percentage="carStatusData.breakdownPercent"
               color="rgba(253, 83, 118, 1)"
               define-back-color="rgba(253, 83, 118, 0.25)"
               class="progressCard"
@@ -118,14 +91,14 @@
           <div class="statusCard">
             <div class="statusLeft">
               <div class="name">异常</div>
-              <div class="num">8888</div>
+              <div class="num">{{ carStatusData.abnormal || 0 }}</div>
             </div>
             <el-progress
               type="circle"
               :width="20"
               :show-text="false"
               stroke-linecap="butt"
-              :percentage="25"
+              :percentage="carStatusData.abnormalPercent"
               color="rgba(246, 189, 22, 1)"
               define-back-color="rgba(246, 189, 22, 0.25)"
               class="progressCard"
@@ -144,34 +117,50 @@
         <div class="companyCard">
           <div class="lineCard"></div>
           <div class="name">运营公司(家)</div>
-          <div class="value">88888</div>
+          <div class="value">{{ carStatusData.enterprise || 0 }}</div>
         </div>
         <div class="companyCard">
           <div class="lineCard"></div>
-          <div class="name">运营公司(家)</div>
-          <div class="value">88888</div>
+          <div class="name">运营车辆(辆)</div>
+          <div class="value">{{ carStatusData.car || 0 }}</div>
         </div>
         <div class="companyCard">
           <div class="lineCard"></div>
-          <div class="name">运营公司(家)</div>
-          <div class="value">88888</div>
+          <div class="name">驾驶员(人)</div>
+          <div class="value">{{ carStatusData.driver || 0 }}</div>
         </div>
       </div>
       <!-- 今日预警 -->
       <div class="todayWarn">
         <div class="title">今日预警</div>
-        <div class="warnList">
+        <div class="warnList" v-if="warnList.length > 0">
           <div
             class="warnItem"
-            v-for="item in 5"
-            :key="item"
-            :class="['oneWarn', 'twoWarn', 'threeWarn', 'fourWarn'][item - 1]"
+            v-for="(item, index) in warnList"
+            :key="index"
+            :class="
+              item.warnLevel
+                ? ['oneWarn', 'twoWarn', 'threeWarn', 'fourWarn'][
+                    item.warnLevel - 1
+                  ]
+                : 'fiveWarn'
+            "
           >
-            <div class="grade">一级</div>
+            <div class="grade">
+              {{
+                item.warnLevel
+                  ? ["一级", "二级", "三级", "四级"][item.warnLevel - 1]
+                  : "-"
+              }}
+            </div>
             <div class="info">
-              53453453245 川A99999 车辆急刹车 20分钟 11:09:09
+              {{ item.vehicleNumber  }} {{ item.warnType  }}
+              {{ item.keepTime }} {{ item.startTime }}
             </div>
           </div>
+        </div>
+        <div class="noData" v-else>
+          <el-empty description="暂无数据" :image-size="80"></el-empty>
         </div>
       </div>
       <!-- 预警情况统计 -->
@@ -192,7 +181,7 @@
               class="rankRight"
               :class="[0, 1, 2].includes(index) ? 'rankColor' : ''"
             >
-              <div class="rank" :style="{ width: item.value + '%' }"></div>
+              <div class="rank" :style="{ width: item.percentage + '%' }"></div>
             </div>
           </div>
         </div>
@@ -209,29 +198,41 @@
 import html2canvas from "html2canvas";
 import AMapLoader from "@amap/amap-jsapi-loader";
 import flvjs from "flv.js";
+import {
+  getCarCount,
+  getCarStatusCount,
+  getMapCarList,
+  getCarWarnList,
+  getWarnGroupCount,
+  getWarnGroupCountTop10,
+  getCarInfoById,
+} from "./service";
 export default {
   data() {
     return {
       flvPlayer: null,
       activeIndex: "1",
       activeIndex2: "1",
-      countList: [1, 2, 3], //预警情况统计数据
-      rankList: [
-        { name: "射洪客运公司", value: 90 },
-        { name: "滴滴网约车客运公司", value: 80 },
-        { name: "滴滴网约车客运公司", value: 70 },
-        { name: "滴滴网约车客运公司", value: 60 },
-        { name: "滴滴网约车客运公司", value: 50 },
-        { name: "滴滴网约车客运公司", value: 40 },
-        { name: "滴滴网约车客运公司", value: 30 },
-        { name: "滴滴网约车客运公司", value: 20 },
-        { name: "滴滴网约车客运公司", value: 10 },
-        { name: "滴滴网约车客运公司", value: 0 },
-      ], //预警排行榜数据
-
-      map: null, //地图实例
-
+      timer: null,
+      markers: [],
+      map: null,
+      AMap: null,
+      infoWindow: null,
+      imgList: [
+        require("../../assets//homeImg/img1.png"),
+        require("../../assets//homeImg/img2.png"),
+        require("../../assets//homeImg/img3.png"),
+        require("../../assets//homeImg/img4.png"),
+        require("../../assets//homeImg/img5.png"),
+        require("../../assets//homeImg/img6.png"),
+        require("../../assets//homeImg/img7.png"),
+      ],
+      countList: [], //预警情况统计数据
+      rankList: [], //预警排行榜数据
       carList: [], //车辆列表数据
+      carCountData: [], //车辆统计数据
+      carStatusData: {}, //车辆状态数据
+      warnList: [], //预警列表数据
     };
   },
   watch: {
@@ -251,7 +252,6 @@
     },
   },
   created() {
-    //初始化窗口点击事件
     window.toCarDetail = (record) => {
       this.toCarDetail(record);
     };
@@ -263,94 +263,176 @@
     };
   },
   mounted() {
-    let arr = [
-      {
-        vehicleType: "出租车",
-        vehicleInfo: {
-          licensePlate: "川A12345",
-          vehicleModel: "BYD E6",
-          color: "Red",
-        },
-
-        latitude: 31.523333,
-        longitude: 105.444444,
-      },
-      {
-        vehicleType: "公交车",
-        vehicleInfo: {
-          licensePlate: "川A67890",
-          vehicleModel: "Yutong ZK6120",
-          color: "Blue",
-        },
-
-        latitude: 31.512222,
-        longitude: 105.432111,
-      },
-      {
-        vehicleType: "郊游",
-        vehicleInfo: {
-          licensePlate: "川A34567",
-          vehicleModel: "Toyota Coaster",
-          color: "White",
-        },
-
-        latitude: 31.498889,
-        longitude: 105.421111,
-      },
-      {
-        vehicleType: "春运",
-        vehicleInfo: {
-          licensePlate: "川A90123",
-          vehicleModel: "King Long XMQ6120",
-          color: "Yellow",
-        },
-
-        latitude: 31.485556,
-        longitude: 105.412222,
-      },
-      {
-        vehicleType: "快递物流车",
-        vehicleInfo: {
-          licensePlate: "川A45678",
-          vehicleModel: "JAC HFC5041",
-          color: "Green",
-        },
-
-        latitude: 31.472222,
-        longitude: 105.402111,
-      },
-      {
-        vehicleType: "网约车",
-        vehicleInfo: {
-          licensePlate: "川A11111",
-          vehicleModel: "Geely GC2",
-          color: "Black",
-        },
-
-        latitude: 31.462222,
-        longitude: 105.392111,
-      },
-      {
-        vehicleType: "客运",
-        vehicleInfo: {
-          licensePlate: "川A22222",
-          vehicleModel: "Yutong ZK6120",
-          color: "Gray",
-        },
-
-        latitude: 31.452222,
-        longitude: 105.382111,
-      },
-    ];
-    this.carList = arr;
+    // 调用所有接口
+    this.getCarCountData();
+    this.getCarStatusData();
+    // this.getMapCarData(); // 移除这里的调用,因为 initMap 中会调用
+    this.getWarnListData();
+    this.getWarnGroupData();
+    this.getWarnTop10Data();
 
     this.initMap();
-    setTimeout(() => {
-      this.addMarker(this.carList, [105.444444, 31.523333]);
-      this.getCountList();
-    }, 1000);
+    // 设置定时器,每分钟刷新一次数据
+    this.timer = setInterval(() => {
+      this.getCarCountData();
+      this.getCarStatusData();
+      this.getMapCarData(); // 保留定时器中的调用
+      this.getWarnListData();
+      this.getWarnGroupData();
+      this.getWarnTop10Data();
+    }, 60000);
+  },
+  beforeDestroy() {
+    if (this.timer) {
+      clearInterval(this.timer);
+    }
+    if (this.markers && this.markers.length > 0) {
+      this.markers.forEach((marker) => {
+        marker.setMap(null);
+      });
+      this.markers = [];
+    }
+    if (this.infoWindow) {
+      this.infoWindow.close();
+    }
+    if (this.flvPlayer) {
+      this.flvPlayer.destroy();
+      this.flvPlayer = null;
+    }
+  },
+  beforeRouteLeave(to, from, next) {
+    if (this.infoWindow) {
+      this.infoWindow.close();
+    }
+    if (this.flvPlayer) {
+      this.flvPlayer.destroy();
+      this.flvPlayer = null;
+    }
+    next();
   },
   methods: {
+    // 获取车辆统计数据
+    async getCarCountData() {
+      try {
+        const res = await getCarCount();
+        this.carCountData = res;
+      } catch (error) {
+        this.$message.error("获取车辆统计数据失败");
+      }
+    },
+    // 获取车辆状态数据
+    async getCarStatusData() {
+      try {
+        const res = await getCarStatusCount();
+        // 设置默认值为0,防止空值
+        const online = Number(res.online) || 0;
+        const offline = Number(res.offline) || 0;
+        const breakdown = Number(res.breakdown) || 0;
+        const abnormal = Number(res.abnormal) || 0;
+        const enterprise = Number(res.enterprise) || 0;
+        const car = Number(res.car) || 0;
+        const driver = Number(res.driver) || 0;
+
+        // 计算总数
+        const total = online + offline + breakdown + abnormal;
+
+        // 计算百分比,如果总数为0则百分比为0
+        const onlinePercent =
+          total > 0 ? Math.round((online / total) * 100) : 0;
+        const offlinePercent =
+          total > 0 ? Math.round((offline / total) * 100) : 0;
+        const breakdownPercent =
+          total > 0 ? Math.round((breakdown / total) * 100) : 0;
+        const abnormalPercent =
+          total > 0 ? Math.round((abnormal / total) * 100) : 0;
+        // 更新数据
+        this.carStatusData = {
+          online,
+          offline,
+          breakdown,
+          abnormal,
+          enterprise,
+          car,
+          driver,
+          total,
+          onlinePercent,
+          offlinePercent,
+          breakdownPercent,
+          abnormalPercent,
+        };
+      } catch (error) {
+        this.$message.error("获取车辆状态数据失败");
+        // 设置默认值
+        this.carStatusData = {
+          online: 0,
+          offline: 0,
+          breakdown: 0,
+          abnormal: 0,
+          enterprise: 0,
+          car: 0,
+          driver: 0,
+          total: 0,
+          onlinePercent: 0,
+          offlinePercent: 0,
+          breakdownPercent: 0,
+          abnormalPercent: 0,
+        };
+      }
+    },
+    // 获取地图车辆数据
+    async getMapCarData() {
+      try {
+        const res = await getMapCarList();
+        this.carList = res;
+        // 确保地图已初始化后再更新标记
+        if (this.AMap && this.map) {
+          this.updateMarkers(res);
+        }
+      } catch (error) {
+        this.$message.error("获取地图车辆数据失败");
+      }
+    },
+    // 获取预警列表数据
+    async getWarnListData() {
+      try {
+        const res = await getCarWarnList();
+        this.warnList = res.records;
+      } catch (error) {
+        this.$message.error("获取预警列表数据失败");
+      }
+    },
+    // 获取预警统计情况数据
+    async getWarnGroupData() {
+      try {
+        const res = await getWarnGroupCount();
+        this.countList = res;
+        this.getCountList();
+      } catch (error) {
+        this.$message.error("获取预警统计情况数据失败");
+      }
+    },
+    // 获取预警排行数据
+    async getWarnTop10Data() {
+      try {
+        const res = await getWarnGroupCountTop10();
+        // 判断返回的数组是否为空
+        if (!res || res.length === 0) {
+          this.rankList = [];
+          return;
+        }
+        // 计算所有num的总和
+        const total = res.reduce((sum, item) => sum + (item.num || 0), 0);
+        // 为每个数据项添加百分比属性
+        this.rankList = res.map((item) => ({
+          ...item,
+          percentage:
+            total > 0 ? (((item.num || 0) / total) * 100).toFixed(2) : 0,
+        }));
+      } catch (error) {
+        this.$message.error("获取预警排行数据失败");
+        this.rankList = [];
+      }
+    },
     // 初始化地图
     initMap() {
       window._AMapSecurityConfig = {
@@ -367,111 +449,101 @@
         ],
       })
         .then((AMap) => {
+          this.AMap = AMap;
           this.map = new AMap.Map("mapContainer", {
             center: [105.574542, 30.5061493],
-            zoom: 15,
+            zoom: 8,
           });
+          this.infoWindow = new AMap.InfoWindow({
+            offset: new AMap.Pixel(30, 30),
+            autoMove: true,
+            anchor: "top-center",
+          });
+          this.getMapCarData();
         })
         .catch((e) => {
-          console.log(e);
+          this.$message.error("地图加载失败");
         });
     },
-
-    // 地图点位渲染
-    addMarker(arr, centerList) {
-      this.map = new AMap.Map("mapContainer", {
-        resizeEnable: true,
-        zoom: 15,
-        center: centerList || [105.444444, 31.523333],
-      });
-
-      // var cluster;
-      // var _renderClusterMarker = function (context) {
-      //   //context 为回调参数,
-      //   //包含如下属性 marker:当前聚合点,count:当前聚合点内的点数量
-      //   var clusterCount = context.count; //聚合点内点数量
-      //   context.marker.setContent("<div>" + clusterCount + "</div>");
-      // };
-      // var renderMarker = function (context) {
-      //   //context 为回调参数,
-      //   var clusterCount = context.count;
-      //   //包含如下属性 marker:当前聚合点,count:当前聚合点内的点数量
-      //   context.marker.setContent("<div>" + clusterCount + "</div>");
-      // };
-      // if (cluster) {
-      //   cluster.setMap(null);
-      // }
-      // if (arr.length > 0) {
-      //   let points = arr.map((item) => {
-      //     return {
-      //       lnglat: [Number(item.longitude), Number(item.latitude)],
-      //     };
-      //   });
-      //   cluster = new AMap.MarkerCluster(this.map, points, {
-      //     gridSize: 60,
-      //     renderClusterMarker: _renderClusterMarker, //上述步骤的自定义聚合点样式
-      //     renderMarker: renderMarker, //上述步骤的自定义非聚合点样式
-      //   });
-      // }
-
-      var infoWindow = new AMap.InfoWindow({
-        offset: new AMap.Pixel(30, 30),
-        autoMove: true,
-        anchor: "top-center",
-      });
+    // 更新地图标记
+    updateMarkers(arr) {
+      if (!this.AMap) {
+        return;
+      }
+      if (this.markers && this.markers.length > 0) {
+        this.markers.forEach((marker) => {
+          marker.setMap(null);
+        });
+        this.markers = [];
+      }
 
       if (arr.length > 0) {
         const iconMap = {
           出租车: {
             icon: require("../../assets/homeImg/taxi.png"),
-            size: new AMap.Size(75, 37),
+            size: new this.AMap.Size(75, 37),
           },
           公交车: {
             icon: require("../../assets/homeImg/bus.png"),
-            size: new AMap.Size(62, 34),
+            size: new this.AMap.Size(62, 34),
+          },
+          危险品: {
+            icon: require("../../assets/homeImg/risk.png"),
+            size: new this.AMap.Size(69, 32),
           },
           郊游: {
-            icon: require("../../assets/homeImg/risk.png"),
-            size: new AMap.Size(69, 32),
-          },
-          春运: {
             icon: require("../../assets/homeImg/outing.png"),
-            size: new AMap.Size(61, 31),
+            size: new this.AMap.Size(61, 31),
           },
-          快递物流车: {
+          货运: {
             icon: require("../../assets/homeImg/expressage.png"),
-            size: new AMap.Size(60, 31),
+            size: new this.AMap.Size(60, 31),
           },
           网约车: {
             icon: require("../../assets/homeImg/online.png"),
-            size: new AMap.Size(75, 33),
+            size: new this.AMap.Size(75, 33),
           },
           客运: {
             icon: require("../../assets/homeImg/passenger.png"),
-            size: new AMap.Size(69, 31),
+            size: new this.AMap.Size(69, 31),
           },
         };
+
         arr.forEach((item, index) => {
-          const iconConfig = iconMap[item.vehicleType];
-          let marker = new AMap.Marker({
+          // 检查必要字段
+          if (!item.operateType || !item.longitude || !item.latitude) {
+            return;
+          }
+
+          const iconConfig = iconMap[item.operateType];
+          if (!iconConfig) {
+            return;
+          }
+
+          let marker = new this.AMap.Marker({
             position: [Number(item.longitude), Number(item.latitude)],
             map: this.map,
-            zooms: [13, 20],
-            icon: new AMap.Icon({
+            icon: new this.AMap.Icon({
               size: iconConfig.size,
               image: iconConfig.icon,
               imageSize: iconConfig.size,
-              imageOffset: new AMap.Pixel(0, 0),
+              imageOffset: new this.AMap.Pixel(0, 0),
             }),
           });
 
           // 添加点击事件
           marker.on("click", async (e) => {
+            // 如果已经有视频在播放,先销毁
+            if (this.flvPlayer) {
+              this.flvPlayer.destroy();
+              this.flvPlayer = null;
+            }
+
             // 显示loading
-            infoWindow.setContent(
+            this.infoWindow.setContent(
               '<div style="padding: 20px;text-align: center;">加载中...</div>'
             );
-            infoWindow.open(this.map, e.target.getPosition());
+            this.infoWindow.open(this.map, e.target.getPosition());
 
             try {
               // 并行请求车辆信息和视频地址
@@ -481,41 +553,73 @@
               ]);
 
               // 更新弹窗内容
-              infoWindow.setContent(
+              this.infoWindow.setContent(
                 this.listRender({
                   ...item,
                   ...carInfoRes.data,
                   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();
+              }
             } catch (error) {
-              console.error("获取车辆信息失败:", error);
-              infoWindow.setContent(
+              this.infoWindow.setContent(
                 '<div style="padding: 20px;text-align: center;color: red;">获取车辆信息失败</div>'
               );
             }
           });
+
+          // 将marker添加到数组中
+          this.markers.push(marker);
         });
       }
     },
 
     // 获取车辆信息
     async getCarInfo(carId) {
-      // TODO: 替换为实际的API调用
-      return new Promise((resolve) => {
-        setTimeout(() => {
-          resolve({
+      try {
+        const res = await getCarInfoById({ id: carId });
+        if (res) {
+          return {
             data: {
-              licensePlate: "川A88888",
-              driver: "李雷",
-              location: "涪江文化广场",
-              coordinates: "104.004284,30.579328",
-              speed: "104km/h",
-              drivingTime: "5小时15分钟",
+              ...res,
+              id: carId,
             },
-          });
-        }, 500);
-      });
+          };
+        }
+        return {
+          data: {
+            id: carId,
+          },
+        };
+      } catch (error) {
+        return {
+          data: {
+            licensePlate: "",
+            driver: "",
+            location: "",
+            coordinates: "",
+            speed: "0km/h",
+            drivingTime: "0小时0分钟",
+          },
+        };
+      }
     },
 
     // 获取视频地址
@@ -533,29 +637,6 @@
     },
 
     listRender(record) {
-      if (flvjs.isSupported()) {
-        flvPlayer = flvjs.createPlayer({
-          type: "flv",
-          isLive: true,
-          cors: true,
-          hasAudio: true,
-          hasVideo: true,
-          url: res.data.flv, // 后端拿到的视频路径
-          enableWorker: true, //启用 Web Worker 进程来加速视频的解码和处理过程
-          enableStashBuffer: false, // 启用数据缓存机制,提高视频的流畅度和稳定性。
-          // stashInitialSize: 1024, // 初始缓存大小。单位:字节。建议针对直播:调整为1024kb
-          // stashInitialTime: 0.2, // 缓存初始时间。单位:秒。建议针对直播:调整为200毫秒
-          seekType: "range", // 建议将其设置为“range”模式,以便更快地加载视频数据,提高视频的实时性。
-          // lazyLoad: false, //关闭懒加载模式,从而提高视频的实时性。建议针对直播:调整为false
-          // lazyLoadMaxDuration: 0.2, // 懒加载的最大时长。单位:秒。建议针对直播:调整为200毫秒
-          // deferLoadAfterSourceOpen: false // 不预先加载视频数据,在 MSE(Media Source Extensions)打开后立即加载数据,提高视频的实时性。建议针对直播:调整为false
-        });
-        let video = document.getElementById("monitoringCard");
-        flvPlayer.attachMediaElement(video); // 你的video容器
-        flvPlayer.load();
-        flvPlayer.play();
-      }
-
       return `<div style="background: #ffffff; padding: 24px 20px;z-index: 999">
         <div style="position: relative; width: 460px; height: 330px">
           <video
@@ -582,10 +663,10 @@
         </div>
         <div style="display: flex;justify-content: space-between;margin-top: 15px;margin-bottom: 12px;">
           <div style="font-weight: 500;font-size: 18px;color: rgba(0, 0, 0, 0.85);line-height: 25px;">车牌号:${
-            record.licensePlate
+            record.vehicleNumber || ""
           }</div>
           <div style="font-weight: 500; font-size: 18px;color: rgba(0, 0, 0, 0.85);line-height: 25px;">驾驶员:${
-            record.driver
+            record.driverName||''
           }</div>
         </div>
         <div style="display: flex; justify-content: space-between">
@@ -593,7 +674,7 @@
             record.location
           }</div>
           <div style="font-weight: 500;font-size: 14px; color: rgba(0, 0, 0, 0.65);line-height: 26px;">经纬度:${
-            record.coordinates
+            record.longitude +',' + record.latitude
           }</div>
         </div>
         <div style="display: flex; justify-content: space-between">
@@ -619,7 +700,7 @@
         this.chartTnit();
       }
     },
-    chartTnit(x, y1, y2) {
+    chartTnit() {
       // 基于准备好的dom,初始化echarts实例
       const myChart = echarts.init(document.getElementById("countChart"));
       // 绘制数量图表
@@ -642,7 +723,7 @@
         xAxis: [
           {
             type: "category",
-            data: ["未系安全带", "疲劳驾驶", "抽烟", "打电话", "激烈驾驶"],
+            data: this.countList.map((item) => item.warnType),
             axisTick: {
               alignWithLabel: true,
               lineStyle: {
@@ -671,17 +752,21 @@
                 ];
               },
             },
-            data: [10, 52, 200, 33, 39, 30, 20],
+            data: this.countList.map((item) => item.num),
           },
         ],
       });
       myChart.resize();
     },
-    // 获取预警排行榜数据
-    getRankList() {},
+
     // 跳转车辆详情
-    toCarDetail() {
-      console.log("跳转车辆详情");
+    toCarDetail(id) {
+      this.$router.push({
+        path: "/car-detail",
+        query: {
+          id: id,
+        },
+      });
     },
     fullScreen() {
       const video = document.getElementById("monitoringCard");
@@ -1075,6 +1160,16 @@
             color: rgba(82, 196, 26, 1);
           }
         }
+        .fiveWarn {
+          background: rgba(214, 219, 228, 0.3);
+
+          .grade {
+            background: rgba(214, 219, 228, 0.3);
+            border-radius: 4px;
+            border: 1px solid rgba(214, 219, 228, 0.6);
+            color: rgba(0, 0, 0, 0.8);
+          }
+        }
       }
 
       .warnList::-webkit-scrollbar {

--
Gitblit v1.7.1