| | |
| | | </div> |
| | | <div v-else-if="col.type == 'crn'"> |
| | | <div class="crn-item" v-if="getDeviceNo(col.value) != -1" :style="{width: col.width}" :id="'crn-' + getDeviceNo(col.value)" @click="openCrn(getDeviceNo(col.value))">{{getDeviceNo(col.value)}}</div> |
| | | <div class="track-item" v-if="getTrackSiteNo(col.value) == -1"></div> |
| | | <div class="track-item" v-else :id="'crnTrackSiteNo-' + getTrackSiteNo(col.value)"></div> |
| | | <div class="track-item track-crn" v-if="getTrackSiteNo(col.value) == -1"></div> |
| | | <div class="track-item track-crn" v-else :id="'crnTrackSiteNo-' + getTrackSiteNo(col.value)"></div> |
| | | </div> |
| | | </td> |
| | | |
| | |
| | | currentLev: 1, |
| | | systemStatus: true,//系统运行状态 |
| | | consoleInterval: null,//定时器存储变量 |
| | | crnInitPosition: [], |
| | | rgvPosition: [], |
| | | activateCard: 'crn', |
| | | crnParam: { |
| | |
| | | if (res.code === 200) { |
| | | var crns = res.data; |
| | | |
| | | if (that.crnInitPosition.length == 0) { |
| | | let position = [] |
| | | for (var i = 0; i < crns.length; i++) { |
| | | var crnEl = $("#crn-" + crns[i].crnId); |
| | | if(crnEl.offset() == undefined) { |
| | | continue; |
| | | } |
| | | position.push({ |
| | | id: crns[i].crnId, |
| | | left: crnEl.offset().left + crnEl.width() |
| | | }) |
| | | } |
| | | that.crnInitPosition = position |
| | | return; |
| | | } |
| | | |
| | | let crnList = [] |
| | | for (var i = 0; i < crns.length; i++) { |
| | | var crnEl = $("#crn-" + crns[i].crnId); |
| | | crnEl.attr("class", "crn-item " + crns[i].crnStatus); |
| | | |
| | | if (crns[i].bay < 0 || crns[i].bay === -2) { |
| | | crns[i].bay = 1 |
| | | let bay = parseInt(crns[i].bay, 10); |
| | | if (isNaN(bay) || bay < 1 || bay === -2) { |
| | | bay = 1; |
| | | } |
| | | |
| | | let basePosition = 0; |
| | | that.crnInitPosition.forEach((item) => { |
| | | if (item.id == crns[i].crnId) { |
| | | basePosition = item.left |
| | | // 根据列值定位到当前行的目标单元格,避免随机偏移导致的误差 |
| | | let targetCell = that.getCrnTargetCell(crnEl, bay); |
| | | if (!targetCell || targetCell.length === 0) { |
| | | continue; |
| | | } |
| | | }) |
| | | if (targetCell.offset() == undefined) { |
| | | continue; |
| | | } |
| | | if (crnEl.offsetParent().offset() == undefined) { |
| | | continue; |
| | | } |
| | | |
| | | var offSet = crns[i].offset; |
| | | let finalOffset = basePosition + offSet; |
| | | if (finalOffset < basePosition) { |
| | | finalOffset = basePosition; |
| | | let parentLeft = crnEl.offsetParent().offset().left; |
| | | let cellLeft = targetCell.offset().left - parentLeft; |
| | | let offsetWithinCell = (targetCell.outerWidth() - crnEl.outerWidth()) / 2; |
| | | let zoomFactor = that.mapSettingParam.zoom ? (that.mapSettingParam.zoom / 100) : 1; |
| | | if (zoomFactor <= 0) { zoomFactor = 1; } |
| | | |
| | | let finalOffset = (cellLeft + offsetWithinCell) / zoomFactor; |
| | | if(finalOffset < 0) { |
| | | finalOffset = 0; |
| | | } |
| | | |
| | | crnEl.animate({left: finalOffset + 'px'}, 1000); |
| | | |
| | | crnList.push({ |
| | |
| | | } |
| | | }); |
| | | }, |
| | | getCrnTargetCell(crnEl, bay) { |
| | | if (!crnEl || bay == null) { |
| | | return null; |
| | | } |
| | | let rowEl = crnEl.closest('tr'); |
| | | if (!rowEl || rowEl.length === 0) { |
| | | return null; |
| | | } |
| | | let targetCell = null; |
| | | let colCounter = 0; |
| | | let startCount = false; |
| | | rowEl.find('td').each(function () { |
| | | // 以当前行中首次出现的track-item为起点进行列计数 |
| | | const isTrackCrn = $(this).find('.track-crn').length > 0; |
| | | if (!startCount && !isTrackCrn) { |
| | | return; |
| | | } |
| | | let span = parseInt($(this).attr('colspan'), 10); |
| | | if (isNaN(span) || span < 1) { |
| | | span = 1; |
| | | } |
| | | if (!startCount && isTrackCrn) { |
| | | startCount = true; |
| | | } |
| | | colCounter += span; |
| | | if (targetCell == null && colCounter >= bay) { |
| | | targetCell = $(this); |
| | | return false; |
| | | } |
| | | }); |
| | | return targetCell; |
| | | }, |
| | | getDeviceNo(obj) { |
| | | if (this.isJson(obj)) { |
| | | let data = JSON.parse(obj) |