#
Junjie
2025-11-20 4e005e4936039fca16bfd1679942daa416a21986
src/main/webapp/views/watch/console.html
@@ -21,8 +21,12 @@
                  <el-tab-pane label="堆垛机" name="crn">
                     <watch-crn-card :param="crnParam"></watch-crn-card>
                  </el-tab-pane>
                  <el-tab-pane label="输送线" name="devp">输送线</el-tab-pane>
                  <el-tab-pane label="RGV" name="rgv">RGV</el-tab-pane>
                  <el-tab-pane label="输送站" name="devp">
                     <devp-card :param="devpParam"></devp-card>
                  </el-tab-pane>
                  <el-tab-pane label="RGV" name="rgv">
                     <watch-rgv-card :param="rgvParam"></watch-rgv-card>
                  </el-tab-pane>
                  <el-tab-pane label="地图配置" name="mapSetting">
                     <map-setting-card :param="mapSettingParam"></map-setting-card>
                  </el-tab-pane>
@@ -45,7 +49,7 @@
                           <div class="shelf">{{col.shelfIdx}}</div>
                        </div>
                        <div v-else-if="col.type == 'devp'">
                           <div class="site" :style="{height: col.rowPx}" :id="'site-' + col.value" @click="openSite(col.value)">{{col.value}}</div>
                           <div class="site" :style="{height: col.rowPx}" :id="'site-' + getStationId(col.value)" @click="openSite(getStationId(col.value))">{{getStationId(col.value)}}</div>
                        </div>
                        <div v-else-if="col.type == 'rgv'" style="position: relative;">
                           <div class="rgv-item" v-if="getDeviceNo(col.value) != -1" :style="{width: col.width}" :id="'rgv-' + getDeviceNo(col.value)" @click="openRgv(getDeviceNo(col.value))">{{getDeviceNo(col.value)}}</div>
@@ -71,7 +75,9 @@
      </div>
      <script src="../../components/WatchCrnCard.js"></script>
      <script src="../../components/DevpCard.js"></script>
      <script src="../../components/MapSettingCard.js"></script>
      <script src="../../components/WatchRgvCard.js"></script>
      <script>
         var app = new Vue({
            el: '#app',
@@ -88,6 +94,12 @@
               },
               mapSettingParam: {
                  zoom: 70
               },
               devpParam: {
                  stationId: 0
               },
               rgvParam: {
                  rgvNo: 0
               }
            },
            created() {
@@ -101,11 +113,11 @@
                  this.getMap()
                  this.getSystemRunningStatus() //获取系统运行状态
                  // this.consoleInterval = setInterval(() => {
                  //    this.getCrnInfo() //获取堆垛机数据
                  //    this.getSiteInfo() //获取输送站点数据
                  //    this.getRgvInfo() //获取RGV数据
                  // }, 1000)
                  this.consoleInterval = setInterval(() => {
                     this.getCrnInfo() //获取堆垛机数据
                     this.getSiteInfo() //获取输送站点数据
                     this.getRgvInfo() //获取RGV数据
                  }, 1000)
               },
               //获取地图数据
               getMap() {
@@ -113,7 +125,10 @@
                  let colPx = 35;
                  $.ajax({
                     url: "./test.json",
                     url: baseUrl + "/basMap/lev/1/auth",
                     headers: {
                        'token': localStorage.getItem('token')
                     },
                     method: "get",
                     success: (res) => {
                        let data = res.data;
@@ -138,75 +153,32 @@
               },
               openCrn(id) {
                  this.crnParam.crnNo = id;
                  this.activateCard = 'crn';
               },
               openRgv(id) {
                  this.rgvWindow = true; //打开RGV信息弹窗
                  $(".detailed").empty();
                  $('.detailed').append(id + '号RGV');
                  $.ajax({
                     url: baseUrl + "/console/rgv/detail",
                     headers: {
                        'token': localStorage.getItem('token')
                     },
                     data: {
                        rgvNo: id
                     },
                     method: 'post',
                     success: function(res) {
                        for (var val in res.data) {
                           var find = $("#rgvWindow").find(":input[name='" + val + "']");
                           if (find[0].type === 'text') {
                              find.val(res.data[val]);
                           } else if (find[0].type === 'checkbox') {
                              find.attr("checked", res.data[val] === 'Y');
                           }
                        }
                     }
                  })
                  this.rgvParam.rgvNo = id;
                  this.activateCard = 'rgv';
               },
               openSite(id) {
                  this.siteWindow = true; //打开站点信息弹窗
                  $(".detailed").empty();
                  $('.detailed').append(id + '站点详细信息');
                  $.ajax({
                     url: baseUrl + "/console/site/detail",
                     headers: {
                        'token': localStorage.getItem('token')
                     },
                     data: {
                        siteId: id
                     },
                     method: 'post',
                     success: function(res) {
                        for (var val in res.data) {
                           var find = $("#siteWindow").find(":input[name='" + val + "']");
                           if (find[0].type === 'text') {
                              find.val(res.data[val]);
                           } else if (find[0].type === 'checkbox') {
                              find.attr("checked", res.data[val] === 'Y');
                           }
                        }
                     }
                  })
                  this.devpParam.stationId = id;
                  this.activateCard = 'devp';
               },
               getSiteInfo() {
                  //获取输送站点数据
                  $.ajax({
                     url: baseUrl + "/console/latest/data/site",
                     url: baseUrl + "/console/latest/data/station",
                     headers: {'token': localStorage.getItem('token')},
                     method: 'POST',
                     success: function (res) {
                        if (res.code === 200) {
                           var sites = res.data;
                           for (var i = 0; i < sites.length; i++){
                              var siteEl = $("#site-"+sites[i].siteId);
                              siteEl.attr("class", "site " + sites[i].siteStatus);
                              if (sites[i].workNo != null && sites[i].workNo>0) {
                                 siteEl.html(sites[i].siteId + "[" + sites[i].workNo + "]");
                              var siteEl = $("#site-"+sites[i].stationId);
                              siteEl.attr("class", "site " + sites[i].stationStatus);
                              if (sites[i].taskNo != null && sites[i].taskNo>0) {
                                 siteEl.html(sites[i].stationId + "[" + sites[i].taskNo + "]");
                              } else {
                                 siteEl.html(sites[i].siteId);
                                 siteEl.html(sites[i].stationId);
                              }
                           }
                        } else if (res.code === 403) {
@@ -293,9 +265,9 @@
                           if (that.rgvPosition.length == 0) {
                              let position = []
                              for (var i = 0; i < rgvs.length; i++) {
                                 var rgvEl = $("#rgv-" + rgvs[i].rgvId);
                                 var rgvEl = $("#rgv-" + rgvs[i].rgvNo);
                                 position.push({
                                    id: rgvs[i].rgvId,
                                    id: rgvs[i].rgvNo,
                                    trackSiteNo: rgvs[i].trackSiteNo,
                                    initLeft: rgvEl.offset().left
                                 })
@@ -305,7 +277,7 @@
                           }
                           for (var i = 0; i < rgvs.length; i++) {
                              var rgvEl = $("#rgv-" + rgvs[i].rgvId);
                              var rgvEl = $("#rgv-" + rgvs[i].rgvNo);
                              if (rgvs[i].rgvStatus == 'IDLE') {
                                 rgvEl.attr("class", "rgv-item");
                              }else if (rgvs[i].rgvStatus == 'WORKING') {
@@ -315,38 +287,13 @@
                              let trackSiteNo = rgvs[i].trackSiteNo;
                              let trackSiteEl = $("#rgvTrackSiteNo-" + trackSiteNo);
                              let flag = false;
                              that.rgvPosition.forEach((item) => {
                                 if (item.id == rgvs[i].rgvId) {
                                    if (item.trackSiteNo != trackSiteNo) {
                                       flag = true
                                    }
                                 }
                              })
                              if (flag) {
                                 let finalOffset = 0;
                                 let targetPosition = trackSiteEl.parent().parent().position().left;
                                 let rgvPosition = rgvEl.position().left;
                                 let calcResult = targetPosition - rgvPosition
                                 if (calcResult > 0) {
                                    finalOffset = targetPosition + trackSiteEl.width();
                                 }else {
                                    finalOffset = targetPosition;
                                 }
                                 rgvEl.animate({left: finalOffset + "px"}, 500);
                                 let position = []
                                 that.rgvPosition.forEach((item) => {
                                    if (item.id == rgvs[i].rgvId) {
                                       item.trackSiteNo = trackSiteNo
                                    }
                                    position.push(item)
                                 })
                                 that.rgvPosition = position
                              }
                              let parentLeft = rgvEl.offsetParent().offset().left;
                              let targetPosition = trackSiteEl.parent().parent().offset().left - parentLeft;
                              let rgvPosition = rgvEl.position().left;
                              let zoomFactor = that.mapSettingParam.zoom ? (that.mapSettingParam.zoom / 100) : 1;
                              if (zoomFactor <= 0) { zoomFactor = 1; }
                              let finalOffset = targetPosition / zoomFactor;
                              rgvEl.animate({left: finalOffset + "px"}, 500);
                           }
                        } else if (res.code === 403) {
                           parent.location.href = baseUrl + "/login";
@@ -454,6 +401,17 @@
                     return -1;
                  }
               },
               getStationId(obj) {
                  if (this.isJson(obj)) {
                     let data = JSON.parse(obj)
                     if (data.stationId == null || data.stationId == undefined) {
                        return -1;
                     }
                     return data.stationId;
                  }else {
                     return -1;
                  }
               },
               getTrackSiteNo(obj) {
                  if (this.isJson(obj)) {
                     let data = JSON.parse(obj)