This commit is contained in:
猫猫guowen
2025-09-30 15:33:28 +08:00
parent 6b40172345
commit 0f2721f479
20 changed files with 428 additions and 239 deletions

View File

@@ -0,0 +1,53 @@
package com.ruoyi.dynamicMonitoring.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.dynamicMonitoring.service.IDynamicMonitoringService;
/**
* 大屏堆垛机数据Controller
*
* @author ruoyi
*/
@RestController
@RequestMapping("/dynamicMonitoring/list")
public class DynamicMonitoringController {
@Autowired
private IDynamicMonitoringService largeScreenDdjService;
/**
* 查询堆垛机数据列表
*/
@GetMapping("/ddjList")
public AjaxResult ddjList() {
List<Map<String, Object>> list = largeScreenDdjService.queryDdjList();
return AjaxResult.success(list);
}
/**
* 查询输送机数据列表
*/
@GetMapping("/ssjList")
public AjaxResult ssjList() {
List<Map<String, Object>> list = largeScreenDdjService.querySsjList();
return AjaxResult.success(list);
}
/**
* 查询异常设备列表
*/
@GetMapping("/alarmList")
public AjaxResult alarmList() {
Map<String, Object> alarmData = largeScreenDdjService.queryAlarmList();
AjaxResult result = new AjaxResult(200, "操作成功");
result.put("alarm", alarmData.get("alarm"));
return result;
}
}

View File

@@ -0,0 +1,32 @@
package com.ruoyi.dynamicMonitoring.service;
import java.util.List;
import java.util.Map;
/**
* 大屏堆垛机数据Service接口
*
* @author ruoyi
*/
public interface IDynamicMonitoringService {
/**
* 查询堆垛机数据列表
*
* @return 堆垛机数据列表
*/
public List<Map<String, Object>> queryDdjList();
/**
* 查询输送机数据列表
*
* @return 输送机数据列表
*/
public List<Map<String, Object>> querySsjList();
/**
* 查询异常设备列表
*
* @return 异常设备列表
*/
public Map<String, Object> queryAlarmList();
}

View File

@@ -0,0 +1,121 @@
package com.ruoyi.dynamicMonitoring.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.device.ddj.domain.MsgDdj;
import com.ruoyi.device.ddj.mapper.MsgDdjMapper;
import com.ruoyi.device.ssj.domain.DeviceSsj;
import com.ruoyi.device.ssj.mapper.DeviceSsjMapper;
import com.ruoyi.dynamicMonitoring.service.IDynamicMonitoringService;
/**
* 大屏堆垛机数据Service业务层处理
*
* @author ruoyi
*/
@Service
public class DynamicMonitoringServiceImpl implements IDynamicMonitoringService {
@Autowired
private MsgDdjMapper msgDdjMapper;
@Autowired
private DeviceSsjMapper deviceSsjMapper;
/**
* 查询堆垛机数据列表
*
* @return 堆垛机数据列表
*/
@Override
public List<Map<String, Object>> queryDdjList() {
List<MsgDdj> ddjList = msgDdjMapper.selectMsgDdjList(null);
List<Map<String, Object>> resultList = new ArrayList<>();
for (MsgDdj ddj : ddjList) {
Map<String, Object> map = new HashMap<>();
map.put("id", ddj.getId().toString());
map.put("name", ddj.getName());
map.put("zxjd", ddj.getJdbz().toString());
map.put("sbzt", ddj.getSbzt().toString());
map.put("rwh", ddj.getRwh().toString());
map.put("yp", ddj.getYph().toString());
map.put("ywz", ddj.getYlh().toString());
map.put("yc", ddj.getYch().toString());
map.put("mbp", ddj.getMbph().toString());
map.put("mbwz", ddj.getMblh().toString());
map.put("mbc", ddj.getMbch().toString());
resultList.add(map);
}
return resultList;
}
/**
* 查询输送机数据列表
*
* @return 输送机数据列表
*/
@Override
public List<Map<String, Object>> querySsjList() {
List<DeviceSsj> ssjList = deviceSsjMapper.selectDeviceSsjList(null);
List<Map<String, Object>> resultList = new ArrayList<>();
for (DeviceSsj ssj : ssjList) {
Map<String, Object> map = new HashMap<>();
map.put("id", ssj.getDeviceCode());
map.put("name", ssj.getName());
map.put("kx", String.valueOf(ssj.getKx()));
map.put("dw", String.valueOf(ssj.getDw()));
map.put("rwh", String.valueOf(ssj.getTaskNo()));
map.put("sbzt", ssj.getException());
map.put("trayCode", ssj.getTrayCode());
resultList.add(map);
}
return resultList;
}
/**
* 查询异常设备列表
*
* @return 异常设备列表
*/
@Override
public Map<String, Object> queryAlarmList() {
List<Map<String, Object>> alarmList = new ArrayList<>();
// 查询堆垛机状态异常的设备(状态码>1000)
List<MsgDdj> ddjList = msgDdjMapper.selectMsgDdjList(null);
for (MsgDdj ddj : ddjList) {
if (ddj.getSbzt() != null && ddj.getSbzt() > 1000) {
Map<String, Object> map = new HashMap<>();
map.put("id", ddj.getId().toString());
map.put("name", "堆垛机");
map.put("code", ddj.getSbzt().toString());
map.put("content", null);
alarmList.add(map);
}
}
// 查询输送机状态异常的设备(状态码>3)
List<DeviceSsj> ssjList = deviceSsjMapper.selectDeviceSsjList(null);
for (DeviceSsj ssj : ssjList) {
if (ssj.getException() > 3) {
Map<String, Object> map = new HashMap<>();
map.put("id", ssj.getDeviceCode());
map.put("name", "输送机");
map.put("code", String.valueOf(ssj.getException()));
map.put("content", null);
alarmList.add(map);
}
}
Map<String, Object> result = new HashMap<>();
result.put("alarm", alarmList);
return result;
}
}

View File

@@ -1,37 +0,0 @@
package com.ruoyi.largeScreen.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.ruoyi.common.annotation.Anonymous;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.largeScreen.service.ILargeScreenDdjService;
/**
* 大屏堆垛机数据Controller
*
* @author ruoyi
*/
@RestController
@RequestMapping("/largeScreen/ddj")
public class LargeScreenDdjController {
@Autowired
private ILargeScreenDdjService largeScreenDdjService;
/**
* 查询堆垛机数据列表
*/
@GetMapping("/list")
public AjaxResult list() {
Map<String, Object> result = new HashMap<>();
result.put("msg", "操作成功");
result.put("code", 0);
result.put("data", largeScreenDdjService.queryDdjList());
return AjaxResult.success(result);
}
}

View File

@@ -1,18 +0,0 @@
package com.ruoyi.largeScreen.service;
import java.util.List;
import java.util.Map;
/**
* 大屏堆垛机数据Service接口
*
* @author ruoyi
*/
public interface ILargeScreenDdjService {
/**
* 查询堆垛机数据列表
*
* @return 堆垛机数据列表
*/
public List<Map<String, Object>> queryDdjList();
}

View File

@@ -1,51 +0,0 @@
package com.ruoyi.largeScreen.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.device.ddj.domain.MsgDdj;
import com.ruoyi.device.ddj.mapper.MsgDdjMapper;
import com.ruoyi.largeScreen.service.ILargeScreenDdjService;
/**
* 大屏堆垛机数据Service业务层处理
*
* @author ruoyi
*/
@Service
public class LargeScreenDdjServiceImpl implements ILargeScreenDdjService {
@Autowired
private MsgDdjMapper msgDdjMapper;
/**
* 查询堆垛机数据列表
*
* @return 堆垛机数据列表
*/
@Override
public List<Map<String, Object>> queryDdjList() {
List<MsgDdj> ddjList = msgDdjMapper.selectMsgDdjList(null);
List<Map<String, Object>> resultList = new ArrayList<>();
for (MsgDdj ddj : ddjList) {
Map<String, Object> map = new HashMap<>();
map.put("id", ddj.getId().toString());
map.put("name", ddj.getName());
map.put("zxjd", ddj.getJdbz().toString());
map.put("sbzt", ddj.getSbzt().toString());
map.put("rwh", ddj.getRwh().toString());
map.put("yp", ddj.getYph().toString());
map.put("ywz", ddj.getYlh().toString());
map.put("yc", ddj.getYch().toString());
map.put("mbp", ddj.getMbph().toString());
map.put("mbwz", ddj.getMblh().toString());
map.put("mbc", ddj.getMbch().toString());
resultList.add(map);
}
return resultList;
}
}

View File

@@ -19,10 +19,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="dw" column="dw" /> <result property="dw" column="dw" />
<result property="trayCode" column="tray_code" /> <result property="trayCode" column="tray_code" />
<result property="taskNo" column="task_no" /> <result property="taskNo" column="task_no" />
<result property="exception" column="exception" />
<result property="traySize" column="tray_size" />
<result property="allowPut" column="allow_put" />
</resultMap> </resultMap>
<sql id="selectDeviceSsjVo"> <sql id="selectDeviceSsjVo">
select id, device_code , name , type, ip_address, plc_db_read_address, is_active, create_time, plc_db_write_address, rkqq, kx, dw, tray_code, task_no from device_ssj select id, device_code , name , type, ip_address, plc_db_read_address, is_active, create_time, plc_db_write_address, rkqq, kx, dw, tray_code, task_no,exception,tray_size,allow_put from device_ssj
</sql> </sql>
<select id="selectDeviceSsjList" parameterType="DeviceSsj" resultMap="DeviceSsjResult"> <select id="selectDeviceSsjList" parameterType="DeviceSsj" resultMap="DeviceSsjResult">
@@ -40,6 +43,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="dw != null and dw != ''"> and dw = #{dw}</if> <if test="dw != null and dw != ''"> and dw = #{dw}</if>
<if test="trayCode != null and trayCode != ''"> and tray_code = #{trayCode}</if> <if test="trayCode != null and trayCode != ''"> and tray_code = #{trayCode}</if>
<if test="taskNo != null and taskNo != ''"> and task_no = #{taskNo}</if> <if test="taskNo != null and taskNo != ''"> and task_no = #{taskNo}</if>
<if test="exception != null and exception != ''"> and exception = #{exception}</if>
<if test="traySize != null and traySize != ''"> and tray_size = #{traySize}</if>
<if test="allowPut != null and allowPut != ''"> and allow_put = #{allowPut}</if>
</where> </where>
</select> </select>

View File

@@ -12,9 +12,9 @@ body {
margin-top: 0; margin-top: 0;
margin-left: 0; margin-left: 0;
z-index: -99; /* 确保在最底层 */ z-index: -99; /* 确保在最底层 */
height: 500px; height: 870px;
width: 500px; width: 1700px;
transform: scale(0.9); transform: scale(1);
transform-origin: center center; transform-origin: center center;
cursor: default; cursor: default;
} }

View File

@@ -12,7 +12,7 @@
<h1 id="pageTitle" style="position: absolute; left: 50%; transform: translateX(-50%); margin: 0; padding: 20px 0;">2D可视化监控系统</h1> <h1 id="pageTitle" style="position: absolute; left: 50%; transform: translateX(-50%); margin: 0; padding: 20px 0;">2D可视化监控系统</h1>
<!-- 报警信息容器 --> <!-- 报警信息容器 -->
<div id="alarm-container" style="position: fixed; bottom: 70px; left: 50%; transform: translateX(-50%); width: 600px; height: 40px; background: linear-gradient(135deg, #999999, #777777); border-radius: 8px; box-shadow: 0 4px 15px rgba(153, 153, 153, 0.3); display: block; z-index: 1000; color: white; font-family: 'Microsoft YaHei', sans-serif; overflow: hidden;margin-bottom: 150px;margin-left: -100px"> <div id="alarm-container" style="position: fixed; left: 50%; transform: translateX(-50%); width: 600px; height: 40px; background: linear-gradient(135deg, #999999, #777777); border-radius: 8px; box-shadow: 0 4px 15px rgba(153, 153, 153, 0.3); display: block; z-index: 1000; color: white; font-family: 'Microsoft YaHei', sans-serif; overflow: hidden;margin-bottom: 80px;margin-left: -60px">
<div style="display: flex; align-items: center; height: 100%; padding: 0 15px;"> <div style="display: flex; align-items: center; height: 100%; padding: 0 15px;">
<div style="font-size: 14px; font-weight: bold; margin-right: 10px; white-space: nowrap;"> <div style="font-size: 14px; font-weight: bold; margin-right: 10px; white-space: nowrap;">
🚨 <span id="alarm-count">0</span>条报警 🚨 <span id="alarm-count">0</span>条报警
@@ -35,7 +35,7 @@
<div onclick="closeBox()" style="cursor: pointer; position: absolute; right: 8px; top: 8px; font-size: 18px; color: white; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: all 0.3s ease; background-color: rgba(255, 255, 255, 0.2); z-index: 1000;" onmouseover="this.style.backgroundColor='rgba(255, 255, 255, 0.3)'" onmouseout="this.style.backgroundColor='rgba(255, 255, 255, 0.2)'">×</div> <div onclick="closeBox()" style="cursor: pointer; position: absolute; right: 8px; top: 8px; font-size: 18px; color: white; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: all 0.3s ease; background-color: rgba(255, 255, 255, 0.2); z-index: 1000;" onmouseover="this.style.backgroundColor='rgba(255, 255, 255, 0.3)'" onmouseout="this.style.backgroundColor='rgba(255, 255, 255, 0.2)'">×</div>
<div id="device-details" style="font-size: 13px; line-height: 1.5; margin-top: 40px;"></div> <div id="device-details" style="font-size: 13px; line-height: 1.5; margin-top: 40px;"></div>
</div> </div>
<script src="https://cdn.jsdelivr.net/npm/axios@1.6.7/dist/axios.min.js"></script> <script src="/monitor/js/axios.min.js"></script>
<!-- 1. 先引入本地的 request.js(路径完全可控,不会错)--> <!-- 1. 先引入本地的 request.js(路径完全可控,不会错)-->
<script src="/monitor/js/request.js"></script> <script src="/monitor/js/request.js"></script>
<!-- 2. 再引入你的业务脚本 --> <!-- 2. 再引入你的业务脚本 -->

File diff suppressed because one or more lines are too long

View File

@@ -2,22 +2,39 @@
// 查询堆垛机数据列表 // 查询堆垛机数据列表
function listDdj() { function listDdj() {
request({ request({
url: '/largeScreen/ddj/list', url: '/dev-api/dynamicMonitoring/list/ddjList',
method: 'get' method: 'get'
}).then(response => { }).then(response => {
console.log('接口返回数据:', response);
handleStackerDataSuccess(response) handleStackerDataSuccess(response)
}).catch(error => { }).catch(error => {
console.error('堆垛机数据获取失败:', error); console.error('堆垛机数据获取失败:', error);
}); });
} }
// $.ajax({
// url: API_URLS.stacker,
// type: 'GET', // 查询输送机数据列表
// dataType: 'json', function listSsj() {
// success: handleStackerDataSuccess, request({
// error: (xhr, status, error) => console.error('堆垛机数据获取失败:', error) url: '/dev-api/dynamicMonitoring/list/ssjList',
// }); method: 'get'
}).then(response => {
handleConveyorDataSuccess(response)
}).catch(error => {
console.error('输送机数据获取失败:', error)
});
}
// 查询报警信息数据列表
function listAlarm() {
request({
url: '/dev-api/dynamicMonitoring/list/alarmList',
method: 'get'
}).then(response => {
console.log("报警信息:",response)
handleAlarmDataSuccess(response)
}).catch(error => {
handleAlarmDataError(response)
});
}
/** /**
* 2D可视化监控系统 - 数据同步和状态管理 * 2D可视化监控系统 - 数据同步和状态管理
* 负责配置同步、设备状态更新、实时数据获取等功能 * 负责配置同步、设备状态更新、实时数据获取等功能
@@ -218,7 +235,7 @@ function startTimers() {
setInterval(updateRgvStatus, 5000); setInterval(updateRgvStatus, 5000);
// 配置同步定时器 // 配置同步定时器
setInterval(getConfig, 1000); // setInterval(getConfig, 1000);
// 启动智能报警更新定时器 // 启动智能报警更新定时器
startSmartAlarmTimer(); startSmartAlarmTimer();
@@ -262,13 +279,7 @@ function updateConveyorStatus() {
return; return;
} }
$.ajax({ listSsj()
url: API_URLS.conveyor,
type: 'GET',
dataType: 'json',
success: handleConveyorDataSuccess,
error: (xhr, status, error) => console.error('输送机数据获取失败:', error)
});
} }
/** /**
@@ -276,7 +287,7 @@ function updateConveyorStatus() {
* @param {Object} response 服务器响应数据 * @param {Object} response 服务器响应数据
*/ */
function handleConveyorDataSuccess(response) { function handleConveyorDataSuccess(response) {
if (!isValidResponse(response) || configEditMode !== 2) { if (configEditMode !== 2) {
return; return;
} }
@@ -298,14 +309,16 @@ function handleConveyorDataSuccess(response) {
* @param {Object} data 设备数据 * @param {Object} data 设备数据
*/ */
function updateConveyorDisplay(conveyor, data) { function updateConveyorDisplay(conveyor, data) {
// 更新中心方块显示状态 // 更新中心方块显示状态
const centerBlock = conveyor.querySelector('.conveyor-center, .roller-conveyor-center'); const centerBlock = conveyor.querySelector('.conveyor-center, .roller-conveyor-center');
if (centerBlock) { if (centerBlock) {
centerBlock.style.display = data.dw === '1' ? 'block' : 'none'; centerBlock.style.display = data.dw === '1' ? 'block' : 'none';
} }
// 更新设备状态指示(故障闪烁) // 更新设备状态指示(故障闪烁)
const hasError = parseInt(data.sbzt) > 100; const hasError = parseInt(data.sbzt) > 3;
conveyor.classList.toggle('breathing-border', hasError); conveyor.classList.toggle('breathing-border', hasError);
} }
@@ -349,9 +362,9 @@ function updateConveyorDisplay(conveyor, data) {
* @param {Object} response 服务器响应数据 * @param {Object} response 服务器响应数据
*/ */
function handleStackerDataSuccess(response) { function handleStackerDataSuccess(response) {
if (!isValidResponse(response) || configEditMode !== 2) {
console.log(11111,response) if (response.data.length==0 || configEditMode != 2) {
return; return;
} }
const stackers = document.querySelectorAll('.stacker'); const stackers = document.querySelectorAll('.stacker');
@@ -712,41 +725,35 @@ function getDeviceRealTimeData(deviceType, deviceId) {
if (deviceType === 'stacker') { if (deviceType === 'stacker') {
// 获取堆垛机实时数据 - 使用配置的URL // 获取堆垛机实时数据 - 使用配置的URL
$.ajax({ request({
url: API_URLS.stacker, url: '/dev-api/dynamicMonitoring/list/ddjList',
type: 'GET', method: 'get'
dataType: 'json', }).then(response => {
success: function(response) { if (response && response.data) {
if (response && response.data) { const deviceData = response.data.find(item => item.id === deviceId);
const deviceData = response.data.find(item => item.id === deviceId); resolve(deviceData || null);
resolve(deviceData || null); } else {
} else { resolve(null);
resolve(null); }
} }).catch(error => {
}, console.error('获取堆垛机数据失败:', error);
error: function(xhr, status, error) { reject('获取堆垛机数据失败');
console.error('获取堆垛机数据失败:', error); });
reject('获取堆垛机数据失败');
}
});
} else if (deviceType === 'conveyor' || deviceType === 'rollerConveyor') { } else if (deviceType === 'conveyor' || deviceType === 'rollerConveyor') {
// 获取输送机实时数据 - 使用配置的URL // 获取输送机实时数据 - 使用配置的URL
$.ajax({ request({
url: API_URLS.conveyor, url: '/dev-api/dynamicMonitoring/list/ssjList',
type: 'GET', method: 'get'
dataType: 'json', }).then(response => {
success: function(response) { if (response && response.data) {
if (response && response.data) { const deviceData = response.data.find(item => item.id === deviceId);
const deviceData = response.data.find(item => item.id === deviceId); resolve(deviceData || null);
resolve(deviceData || null); } else {
} else { resolve(null);
resolve(null); }
} }).catch(error => {
}, console.error('获取输送机数据失败:', error);
error: function(xhr, status, error) { reject('获取输送机数据失败');
console.error('获取输送机数据失败:', error);
reject('获取输送机数据失败');
}
}); });
} else if (deviceType === 'rgv') { } else if (deviceType === 'rgv') {
// 获取RGV实时数据 - 使用配置的URL // 获取RGV实时数据 - 使用配置的URL
@@ -774,6 +781,108 @@ function getDeviceRealTimeData(deviceType, deviceId) {
}); });
} }
function ssjSbzt(a){
if (a==0){
return"未知"
}else if(a==1){
return "手动"
}else if(a==2){
return "自动"
}else if (a==3){
return "运行"
}else if (a==4){
return "输送超时"
}else if(a==5){
return "断路器跳闸"
}else if (a==6){
return "变频器报警"
}else if (a==7){
return "开关任务异常"
}else if (a==8){
return "急停"
}else if (a==9){
return "超界"
}else if(a==10){
return "外型异常"
}else if(a==11){
return "称重异常"
}else if(a==12){
return "扫码异常"
}else {
return a;
}
}
function ddjSbzt(a){
if (a<1000){
return "正常"
}else if(a==1031){
return "急停按下"
}else if (a==1032){
return "货叉不在中位"
}else if (a==1033){
return "运行变频器报警"
}else if (a==1034){
return "升降变频器报警"
}else if (a==1035){
return "货叉变频器报警"
}else if (a==1037){
return "运行限位故障"
}else if(a==1038){
return "升降限位故障"
}else if (a==1039){
return "运行不能纠偏"
}else if (a==1040){
return "升降不能纠偏"
}else if (a==1041){
return "水平测距出错"
}else if (a==1042){
return "垂直BPS出错"
}else if (a==1043){
return "超速保护"
}else if (a==1044){
return "前边超宽"
}else if (a==1045){
return "后边超宽"
}else if (a==1046){
return "左边歪斜"
}else if (a==1047){
return "右边歪斜"
}else if (a==1048){
return "超高1"
}else if (a==1049){
return "超高2"
}else if (a==1050){
return "放货完毕货叉有货"
}else if (a==1051){
return "取货时货叉有货"
}else if (a==1052){
return "放货目标有货"
}else if (a==1053){
return "取货完毕无货"
}else if (a==1054){
return "放货时货叉无货"
}else if (a==1055){
return "货叉动作超时"
}else if (a==1056){
return "货叉不能纠偏"
}else if (a==1057){
return "微升降超时"
}else if (a==1058){
return "松绳过载"
}else if (a==1059){
return "设定超限"
}else if (a==1062){
return "入库输送机任务号不符"
}else if (a==1063){
return "安全门打开"
}else if (a==1064){
return "与安全门通讯中断"
}else {
return a
}
}
/** /**
* 构建设备信息HTML * 构建设备信息HTML
* @param {string} deviceType 设备类型 * @param {string} deviceType 设备类型
@@ -859,7 +968,7 @@ function buildDeviceInfoHTML(deviceType, deviceId, deviceConfig, realTimeData) {
// 堆垛机字段:基于ddj.json // 堆垛机字段:基于ddj.json
const statusValue = parseInt(realTimeData.sbzt); const statusValue = parseInt(realTimeData.sbzt);
const statusColor = statusValue > 1000 ? '#ff4444' : '#00aa00'; const statusColor = statusValue > 1000 ? '#ff4444' : '#00aa00';
const statusText = statusValue > 1000 ? '报警' : '正常'; const statusText = ddjSbzt(statusValue);
const statusBgColor = statusValue > 1000 ? 'rgba(255,68,68,0.1)' : 'rgba(0,170,0,0.1)'; const statusBgColor = statusValue > 1000 ? 'rgba(255,68,68,0.1)' : 'rgba(0,170,0,0.1)';
// 执行阶段文字描述 // 执行阶段文字描述
@@ -933,9 +1042,9 @@ function buildDeviceInfoHTML(deviceType, deviceId, deviceConfig, realTimeData) {
} else if (deviceType === 'conveyor' || deviceType === 'rollerConveyor') { } else if (deviceType === 'conveyor' || deviceType === 'rollerConveyor') {
// 输送机字段:基于Lssj.json // 输送机字段:基于Lssj.json
const statusValue = parseInt(realTimeData.sbzt); const statusValue = parseInt(realTimeData.sbzt);
const statusColor = statusValue > 100 ? '#ff4444' : '#00aa00'; const statusColor = statusValue > 3 ? '#ff4444' : '#00aa00';
const statusText = statusValue > 100 ? '故障' : '正常'; const statusText = ssjSbzt(statusValue)
const statusBgColor = statusValue > 100 ? 'rgba(255,68,68,0.1)' : 'rgba(0,170,0,0.1)'; const statusBgColor = statusValue > 3 ? 'rgba(255,68,68,0.1)' : 'rgba(0,170,0,0.1)';
const hasCargoText = realTimeData.dw === '1' ? '有货物' : '无货物'; const hasCargoText = realTimeData.dw === '1' ? '有货物' : '无货物';
const kxText = realTimeData.kx === '1' ? '空闲' : '不空闲'; const kxText = realTimeData.kx === '1' ? '空闲' : '不空闲';
const cargoColor = realTimeData.dw === '1' ? '#FF9800' : '#9E9E9E'; const cargoColor = realTimeData.dw === '1' ? '#FF9800' : '#9E9E9E';
@@ -1336,13 +1445,7 @@ function updateAlarmStatus() {
return; return;
} }
$.ajax({ listAlarm()
url: API_URLS.alarm,
type: 'GET',
dataType: 'json',
success: handleAlarmDataSuccess,
error: handleAlarmDataError
});
} }
/** /**
@@ -1574,7 +1677,7 @@ function applyContainerStyle(container, style) {
function buildAlarmText(alarms) { function buildAlarmText(alarms) {
const alarmTexts = alarms.map(alarm => { const alarmTexts = alarms.map(alarm => {
const errorCode = alarm.code || alarm.type || '未知'; const errorCode = alarm.code || alarm.type || '未知';
return `【${alarm.id}${alarm.name}】错误代码: ${errorCode},报警信息:${alarm.content}`; return `【${alarm.id}${alarm.name}】错误代码: ${errorCode},报警信息:${ddjSbzt(errorCode)}`;
}); });
return alarmTexts.join(ALARM_CONFIG.TEXT.SEPARATOR); return alarmTexts.join(ALARM_CONFIG.TEXT.SEPARATOR);
} }

View File

@@ -1308,30 +1308,30 @@ $(document).ready(function () {
// **********************定期检查配置文件更新********************** // **********************定期检查配置文件更新**********************
setInterval(function () { // setInterval(function () {
$.ajax({ // $.ajax({
url: 'json/config.json', // url: 'json/config.json',
type: 'GET', // type: 'GET',
dataType: 'json', // dataType: 'json',
cache: false, // 禁用缓存,确保每次都获取最新的配置 // cache: false, // 禁用缓存,确保每次都获取最新的配置
success: function (data) { // success: function (data) {
// 如果配置有变化,更新显示(不论editMode状态) // // 如果配置有变化,更新显示(不论editMode状态)
if (JSON.stringify(data) !== JSON.stringify(config)) { // if (JSON.stringify(data) !== JSON.stringify(config)) {
config = data; // config = data;
// 确保deviceDraggable默认为false // // 确保deviceDraggable默认为false
if (typeof config.deviceDraggable === 'undefined') { // if (typeof config.deviceDraggable === 'undefined') {
config.deviceDraggable = false; // config.deviceDraggable = false;
} // }
// 更新全局config引用 // // 更新全局config引用
window.config = config; // window.config = config;
createBoxes(); // createBoxes();
// 更新设备拖动状态 // // 更新设备拖动状态
updateDevicesDraggableState(); // updateDevicesDraggableState();
} // }
}, // },
error: function (xhr, status, error) { // error: function (xhr, status, error) {
console.error('检查配置更新失败:', error); // console.error('检查配置更新失败:', error);
} // }
}); // });
}, 1000); // 每秒检查一次 // }, 1000); // 每秒检查一次
}); });

View File

@@ -4,7 +4,7 @@ const axios = window.axios;
// 2. 基础配置(无 export 语句) // 2. 基础配置(无 export 语句)
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'; axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
const service = axios.create({ const service = axios.create({
baseURL: '/', // 匹配若依代理,无需改 baseURL: '', // 不使用baseURL前缀,直接使用完整路径
timeout: 10000 timeout: 10000
}); });

View File

@@ -264,7 +264,7 @@
"labels": [ "labels": [
{ {
"id": "bq", "id": "bq",
"content": "一 层", "content": "二 层",
"fontSize": 24, "fontSize": 24,
"fontColor": "#000000", "fontColor": "#000000",
"bgColor": "#ffffff", "bgColor": "#ffffff",
@@ -274,7 +274,7 @@
}, },
{ {
"id": "bq2", "id": "bq2",
"content": "二 层", "content": "一 层",
"fontSize": 24, "fontSize": 24,
"fontColor": "#000000", "fontColor": "#000000",
"bgColor": "#ffffff", "bgColor": "#ffffff",

View File

@@ -192,5 +192,5 @@ aside {
.app-main { .app-main {
padding-top: 78px; // 根据导航栏实际高度调整 padding-top: 78px; // 根据导航栏实际高度调整
min-height: calc(100vh - 78px); // 保持高度正确 min-height: calc(100vh - 78px); // 保持高度正确
height: 930px; height: auto;
} }

View File

@@ -1,24 +0,0 @@
<template>
<div class="monitor-container">
<iframe :src="'/monitor/index.html'" style="width:1920px; height:1080px; border:none;" frameborder="0"></iframe>
</div>
</template>
<script>
export default {
// name: "2d"
}
</script>
<style scoped>
.monitor-container {
height: 100%;
width: 100%;
position: absolute;
top: 0;
left: 0;
overflow: hidden;
}
</style>

View File

@@ -1,23 +1,24 @@
<template> <template>
<div class="monitor-container"> <div class="monitor-container">
<iframe :src="'/monitor/index.html'" style="width:1920px; height:1080px; border:none;" frameborder="0"></iframe> <iframe :src="'/monitor/index.html'" style="width:1920px; height:1080px;transform: scale(0.9);margin-top:-70px;transform-origin: left top; border: none" frameborder="0"></iframe>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
name: "LargeScreenMonitor" // name: "2D"
} }
</script> </script>
<style scoped> <style scoped>
.monitor-container { .monitor-container {
height: 100%; position: relative;
width: 100%;
position: absolute;
top: 0; top: 0;
left: 0; left: 0;
width: 100%;
height: 90vh;
z-index: 1;
background: #fff;
overflow: hidden; overflow: hidden;
} }
</style> </style>