大屏修改

This commit is contained in:
liuhanqing
2026-05-06 09:09:29 +08:00
parent ec2bbe1b83
commit c7ab332b65
22 changed files with 585 additions and 25505 deletions

View File

@@ -0,0 +1,451 @@
* {
margin: 0;
padding: 0;
}
body {
position: absolute;
height: 100%;
width: 100%;
transform: scale(0.8);
background-image: url('../img/bj.png');
background-size: 1920px 1080px;
/* 背景图片覆盖整个元素 */
background-repeat: no-repeat;
/* 背景图片不重复 */
}
.riqi {
font-size: 20px;
color: rgb(255, 255, 255);
text-align: right;
margin-top: 5px;
}
.shijian {
text-align: right;
font-size: 45px;
color: rgb(254, 254, 254);
font-weight: bold;
}
.datetime-box {
position: absolute;
top: 1%;
right: 1%;
display: flex;
flex-direction: column;
align-items: flex-end;
z-index: 10;
}
.header-container {
position: relative;
width: 100%;
height: 100px;
}
.zi {
width: 100%;
margin-top: 15px;
text-align: center;
position: absolute;
font-size: 55px;
font-weight: bold;
background: linear-gradient(0deg, #fff, #00fff9, #fff);
-webkit-background-clip: text;
background-clip: text;
-webkit-text-fill-color: transparent;
text-fill-color: transparent;
}
.zi::before {
z-index: -1;
content: '数 据 可 视 化 看 板';
position: absolute;
text-shadow: 1px 1px 10px #00ddcf;
}
.content-wrapper {
position: absolute;
top: 100px;
width: 96%;
left: 2%;
height: 88%;
display: flex;
flex-direction: column;
}
.lanes-container {
display: flex;
justify-content: space-between;
height: 60%;
width: 100%;
}
.lane-column {
width: 32%;
height: 100%;
display: flex;
flex-direction: column;
}
.lane-header {
text-align: center;
color: #00fff9;
font-size: 30px;
font-weight: bold;
margin-bottom: 5px;
background: rgba(0, 255, 255, 0.1);
padding: 5px;
border-radius: 5px;
}
.lane-part {
flex: 1;
position: relative;
background-image: url('../img/kuang.png');
background-size: 100% 100%;
background-repeat: no-repeat;
margin-bottom: 10px;
}
.lane-part .divHead {
position: absolute;
width: 84%;
height: 1px;
top: 6%; /* Changed from margin-top to top for height-relative positioning */
left: 8%;
margin-top: 0;
margin-left: 0;
background-image: url('../img/kuang_tou.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
.alarm-section {
height: 37%;
width: 100%;
background-image: url('../img/kuang.png');
background-size: 100% 100%;
position: relative;
margin-top: 1%;
}
.alarm-section .divHead {
position: absolute;
width: 20%;
height: 1px;
top: 6%;
left: 1%;
margin-top: 0;
margin-left: 0;
background-image: url('../img/kuang_tou.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
.divHead {
/* Fallback/Original definition if needed, but overridden above */
position: absolute;
width: 84%;
height: 1px;
margin-top: 16%;
margin-left: 8%;
background-image: url('../img/kuang_tou.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
.name {
position: absolute;
color: #0dede4;
font-weight: bold;
bottom: 5px;
font-size: 26px;
}
.name1 {
position: absolute;
width: 35px;
height: 15px;
bottom: 10px;
right: 2px;
background-image: url('../img/kuang_you.png');
background-size: 100% 100%;
background-repeat: no-repeat;
}
.part-content {
width: 100%;
height: 80%;
position: absolute;
top: 15%;
}
.alarm-list-container {
position: absolute;
top: 18%;
width: 96%;
left: 2%;
height: 78%;
overflow: hidden;
}
.alarm-content-scroll {
height: calc(100% - 44px);
overflow: hidden;
position: relative;
width: 100%;
}
.alarm-items {
list-style: none;
padding: 0;
margin: 0;
}
.alarm-item {
display: flex;
flex-flow: row nowrap;
justify-content: space-around;
border-bottom: 1px solid #00ffff57;
color: #fff;
}
.alarm-item p {
margin: 0;
padding-top: 6px;
padding-bottom: 6px;
width: 25%;
text-align: center;
word-break: break-all;
height: 44px;
font-size: 28px;
line-height: 32px;
}
/* Reuse existing list styles for alarm */
.kuang {
width: 100%;
margin: 0;
padding: 0;
}
.kuang>li {
color: #fff;
width: 100%;
display: flex;
flex-flow: row nowrap;
justify-content: space-around;
border-bottom: 1px solid #00ffff57;
}
.kuang>li>p {
margin: 0;
padding-top: 6px;
padding-bottom: 6px;
width: 25%; /* 4 columns for alarm list */
text-align: center;
word-break: break-all;
height: 44px;
font-size: 28px;
}
.kuang>li:first-child {
color: #ffb742;
text-align: center;
height: 44px;
background: #013132;
/* font-weight: bold; */
font-size: 30px;
position: relative;
}
/* Lane list styles */
.lane-list {
width: 90%;
margin-left: 5%;
padding: 0;
list-style: none;
}
.lane-item {
display: flex;
justify-content: space-around;
border-bottom: 1px solid #00ffff57;
color: #fff;
}
.lane-item p {
margin: 0;
padding: 5px 0;
width: 25%;
text-align: center;
font-size: 26px;
}
.lane-item.header {
background: #013132;
color: #ffb742;
font-weight: bold;
font-size: 30px;
}
/* ===== 服务器设置按钮 ===== */
.setting-btn-box {
position: absolute;
top: 50%;
left: 1%;
transform: translateY(-50%);
z-index: 20;
}
.setting-btn {
background: rgba(0, 255, 249, 0.08);
border: 1px solid #00fff9;
color: #00fff9;
font-size: 20px;
padding: 6px 18px;
border-radius: 6px;
cursor: pointer;
letter-spacing: 2px;
transition: background 0.2s;
}
.setting-btn:hover {
background: rgba(0, 255, 249, 0.2);
}
/* ===== 弹窗遮罩 ===== */
.setting-modal-mask {
display: none;
position: fixed;
top: 0; left: 0;
width: 100%; height: 100%;
background: rgba(0, 0, 0, 0.6);
z-index: 1000;
}
/* ===== 弹窗主体 ===== */
.setting-modal {
display: none;
position: fixed;
top: 50%; left: 50%;
transform: translate(-50%, -50%);
width: 480px;
background: #021e23;
border: 1px solid #00fff9;
border-radius: 12px;
z-index: 1001;
box-shadow: 0 0 40px rgba(0, 255, 249, 0.3);
padding: 0 0 24px;
}
.setting-modal-title {
text-align: center;
color: #00fff9;
font-size: 28px;
font-weight: bold;
padding: 20px 0 14px;
border-bottom: 1px solid rgba(0, 255, 249, 0.2);
letter-spacing: 4px;
}
.setting-modal-body {
padding: 24px 36px 8px;
}
.setting-row {
display: flex;
align-items: center;
margin-bottom: 22px;
}
.setting-label {
color: #ffb742;
font-size: 24px;
width: 80px;
flex-shrink: 0;
letter-spacing: 2px;
}
.setting-options {
display: flex;
gap: 16px;
}
.setting-option {
padding: 8px 28px;
border: 1px solid #00fff9;
border-radius: 6px;
color: #00fff9;
font-size: 22px;
cursor: pointer;
transition: all 0.2s;
letter-spacing: 2px;
}
.setting-option:hover {
background: rgba(0, 255, 249, 0.15);
}
.setting-option.active {
background: #00fff9;
color: #021e23;
font-weight: bold;
}
.setting-preview {
margin-top: 4px;
padding: 10px 14px;
background: rgba(0, 255, 249, 0.06);
border-radius: 6px;
color: #aafffd;
font-size: 18px;
line-height: 1.8;
min-height: 56px;
letter-spacing: 1px;
}
.setting-modal-footer {
display: flex;
justify-content: center;
gap: 24px;
margin-top: 20px;
}
.setting-save-btn {
background: #00fff9;
color: #021e23;
border: none;
font-size: 22px;
font-weight: bold;
padding: 8px 40px;
border-radius: 6px;
cursor: pointer;
letter-spacing: 4px;
transition: opacity 0.2s;
}
.setting-save-btn:hover {
opacity: 0.85;
}
.setting-cancel-btn {
background: transparent;
color: #aaa;
border: 1px solid #555;
font-size: 22px;
padding: 8px 40px;
border-radius: 6px;
cursor: pointer;
letter-spacing: 4px;
transition: all 0.2s;
}
.setting-cancel-btn:hover {
border-color: #888;
color: #ccc;
}

128
unpackage/cache/wgt/H52AA0236/index.html vendored Normal file
View File

@@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/index.css">
<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>
<!-- <script type="text/javascript" src="js/echarts.min.js"></script> -->
<script type="text/javascript" src="js/echarts.min.old.js"></script>
<title>大屏监控</title>
</head>
<body>
<div class="header-container">
<div class="tou">
<div class="zi">数 据 可 视 化 看 板</div>
<img src="img/tou.png">
</div>
<div class="datetime-box">
<div class="shijian"></div>
<div class="riqi"></div>
</div>
<!-- 服务器设置按钮 -->
<div class="setting-btn-box">
<button class="setting-btn" onclick="openSettingModal()">⚙ 服务器设置</button>
</div>
</div>
<!-- 服务器设置弹窗 -->
<div class="setting-modal-mask" id="settingModalMask" onclick="closeSettingModal()"></div>
<div class="setting-modal" id="settingModal">
<div class="setting-modal-title">服务器设置</div>
<div class="setting-modal-body">
<!-- 仓库选择 -->
<div class="setting-row">
<div class="setting-label">仓库</div>
<div class="setting-options" id="warehouseOptions">
<div class="setting-option" data-value="02" onclick="selectOption('warehouse', this)">二联</div>
<div class="setting-option" data-value="01" onclick="selectOption('warehouse', this)">三联</div>
</div>
</div>
<!-- 端口选择 -->
<div class="setting-row">
<div class="setting-label">端口</div>
<div class="setting-options" id="typeOptions">
<div class="setting-option" data-value="1" onclick="selectOption('type', this)">入库端</div>
<div class="setting-option" data-value="2" onclick="selectOption('type', this)">出库端</div>
</div>
</div>
<!-- 当前生效配置预览 -->
<div class="setting-preview" id="settingPreview"></div>
</div>
<div class="setting-modal-footer">
<button class="setting-save-btn" onclick="saveSettings()">保 存</button>
<button class="setting-cancel-btn" onclick="closeSettingModal()">取 消</button>
</div>
</div>
<div class="content-wrapper">
<div class="lanes-container">
<!-- Lane 1 -->
<div class="lane-column">
<div class="lane-header">1巷道</div>
<div class="lane-part">
<div class="divHead">
<div class="name">任务监控</div>
<div class="name1"></div>
</div>
<div class="part-content" id="lane1"></div>
</div>
</div>
<!-- Lane 2 -->
<div class="lane-column">
<div class="lane-header">2巷道</div>
<div class="lane-part">
<div class="divHead">
<div class="name">任务监控</div>
<div class="name1"></div>
</div>
<div class="part-content" id="lane2"></div>
</div>
</div>
<!-- Lane 3 -->
<div class="lane-column">
<div class="lane-header">3巷道</div>
<div class="lane-part">
<div class="divHead">
<div class="name">任务监控</div>
<div class="name1"></div>
</div>
<div class="part-content" id="lane3"></div>
</div>
</div>
</div>
<!-- Alarm Section -->
<div class="alarm-section">
<div class="divHead">
<div class="name">报警信息</div>
<div class="name1"></div>
</div>
<div class="alarm-list-container" id="alarm-list">
<ul class="kuang">
<li>
<p>任务号</p>
<p>时间</p>
<p>类型</p>
<p>详情</p>
</li>
</ul>
<div class="alarm-content-scroll">
<ul class="alarm-items">
<!-- Dynamic content will go here -->
</ul>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>

View File

@@ -0,0 +1,796 @@
// ===== 仓库/端口 IP 映射 =====
var warehouseIpMap = {
"02": "http://172.19.40.46:10012", // 二联
"01": "http://172.19.50.70:10012" // 三联
};
// ===== 从 localStorage 读取配置,默认二联/入库端 =====
var warehouseId = localStorage.getItem("warehouseId") || "02";
var type = localStorage.getItem("type") || "1";
var ip = warehouseIpMap[warehouseId];
function getData() {
$.ajax({
url: ip+"/api/stock/all",
type: "GET",
dataType: "JSON",
success: function(res) {
shuzi(res.data)
liebiao(res.data)
}
})
}
function getData2() {
$.ajax({
url: ip+"/api/stock/cargoSpace/pie",
type: "GET",
dataType: "JSON",
success: function(res) {
pieCharts(res.data.pie)
$("#total").html(res.data.totalCargoSpace)
}
})
$.ajax({
url: ip+"/api/stock/inout/stat",
type: "GET",
dataType: "JSON",
success: function(res) {
tiaoxintu(res.data.drrk,res.data.drck)
zhuzhuangzhexiantu(res.data.statistic)
zhexiantu('bzrk', 'rgb(5, 243, 255)', 'rgb(3, 148, 153)', 'rgb(1, 77, 80)', res.data.bzrk)
zhexiantu('bzck','rgb(25, 255, 236)', 'rgb(16, 171, 158)', 'rgb(6, 62, 57)' , res.data.bzck)
}
})
}
function shuzi(res){
let totalQuantity=res.totalQuantity+""
let dom=''
for (let i = 0; i < totalQuantity.length; i++) {
dom+='<div class="shuzi1">'+totalQuantity[i]+'</div>'
}
dom+='<div class="shuzi1" style="color: #ffb742;font-size: 32px;line-height: 60px;">件</div>'
$("#shuzi").html(dom)
}
// 饼图
function pieCharts(data) {
var chartDom = document.getElementById('middleDiv');
var myChart = echarts.init(chartDom);
var option;
option = {
color: myColor1,
legend: {
bottom: 60,
itemWidth: 30,
itemHeight: 20,
// itemGap:100,
textStyle: {
fontSize: 20,
color: '#fff',
padding: [0, 10]
}
},
series: [{
name: 'Nightingale Chart',
type: 'pie',
radius: [160, 260],
center: ['50%', '43%'],
// roseType: 'area',
itemStyle: {
borderRadius: 8
},
label: {
show: true,
textStyle: {
fontSize: 24,
color: "#fff",
},
formatter: '{b}{c}\n{d}%'
},
data: data
}]
};
option && myChart.setOption(option);
}
// 条形图
function tiaoxintu(a,b) {
var chartDom1 = document.getElementById('drcrk');
var myChart = echarts.init(chartDom1);
var option;
const builderJson = {
all: Number(a)+Number(b),
charts: {
出库量: b,
入库量: a,
}
};
var myColor = ["#19ffec", "#19ffec"]
const canvas = document.createElement('canvas');
option = {
backgroundColor: {
type: 'pattern',
image: canvas,
repeat: 'repeat'
},
tooltip: {},
title: [{
subtext: '总计 ' + builderJson.all + ' 件',
left: 'center',
subtextStyle: {
color: '#ffb742',
fontSize: 20
}
}],
grid: [{
top: 40,
left: 80,
bottom: 110
}],
xAxis: [{
type: 'value',
max: builderJson.all,
axisLabel: {
color: '#00fff9',
fontSize: 20
},
splitLine: {
show: false
}
}],
yAxis: [{
type: 'category',
data: Object.keys(builderJson.charts),
axisLabel: {
interval: 0,
color: '#00fff9',
fontSize: 20,
rotate: 30
},
splitLine: {
show: false
}
}],
series: [{
type: 'bar',
stack: 'chart',
z: 3,
label: {
color: '#fff',
position: 'right',
show: true,
fontSize: 20
},
itemStyle: {
barBorderRadius: 5,
// 修改每个柱子的颜色
color: function(params) {
var num = myColor.length;
return myColor[params.dataIndex % num]
},
},
// 修改柱子的距离
barCategoryGap: 0,
// 柱子的宽度
barWidth: 10,
data: Object.keys(builderJson.charts).map(function(key) {
return builderJson.charts[key];
})
},
{
type: 'bar',
stack: 'chart',
silent: true,
itemStyle: {
barBorderRadius: 2,
color: '#0b4a54'
},
data: Object.keys(builderJson.charts).map(function(key) {
return builderJson.all - builderJson.charts[key];
})
}
]
};
option && myChart.setOption(option);
}
// 柱状图折现图
function zhuzhuangzhexiantu(data) {
var chartDom = document.getElementById('dycrk');
var myChart = echarts.init(chartDom);
var option;
var labelOption
labelOption = {
show: true,
position: "top",
verticalAlign: 'middle',
fontSize: 15,
color: "#ffffff"
};
option = {
legend: {
left: "65%",
textStyle: {
fontSize: 15,
color: "#19ffec"
},
},
tooltip: {},
dataset: {
dimensions: ['mouth', '入库', '出库'],
source: data
},
grid: {
top: "20%",
left: '5%',
right: '5%',
bottom: '5%',
show: false, //显示边框
borderColor: "#012f4a", //边框颜色
containLabel: true //包含刻度文字在内
},
xAxis: {
type: 'category',
axisLabel: {
color: '#00f2f1', //文本颜色
fontSize: 15
}
},
yAxis: {
axisLabel: {
color: '#00f2f1', //文本颜色
fontSize: 15
},
splitLine: {
lineStyle: {
color: "rgba(25,255,255,.3)"
}
}
},
series: [{
type: "bar",
showBackground: false,
barWidth: '50%',
label: labelOption,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: '#19ffec'
},
{
offset: 0.6,
color: '#07554e'
},
{
offset: 1,
color: '#04252b'
}
])
}
}, {
type: "line",
showBackground: true,
label: labelOption,
itemStyle: {
color: '#ffb742'
}
}]
};
option && myChart.setOption(option);
}
// 折线图
function zhexiantu(a, b, c, d, e) {
var chartDom = document.getElementById(a);
var myChart = echarts.init(chartDom);
var option;
var labelOption = {
show: true,
position: "top",
verticalAlign: 'middle',
fontSize: 15,
color: "#ffb742"
};
option = {
xAxis: {
type: 'category',
boundaryGap: false, //坐标轴两边不留白
axisLabel: {
color: '#00f2f1', //文本颜色
fontSize: 15
},
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value',
axisLabel: {
color: '#00f2f1', //文本颜色
fontSize: 15
},
splitLine: {
lineStyle: {
// 设置背景横线
color: "#097176",
}
}
},
grid: {
left: '5%',
top: '10%',
// right: '4%',
bottom: '5%',
containLabel: true
},
series: [{
data: e,
type: 'line',
smooth: 0.2,
itemStyle: {
color: b
},
label: labelOption,
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: c
},
{
offset: 1,
color: d
}
])
}
}]
};
option && myChart.setOption(option);
}
var biaoshi = 0
function info() {
var tr = $("#aa ul>li:eq(1)").clone();
var height = $("#kcxx").innerHeight();
var allheight = $("#box").innerHeight()
if (height > allheight) {
$("#aa ul>li:eq(1)").animate({
marginTop: "-1.8rem"
}, 500, function() {
$("#aa ul>li:eq(1)").remove();
})
biaoshi = 1
} else {
biaoshi = 2
}
}
function liebiao(res) {
let data = res.stockMsg
let dom = "";
if (biaoshi == 2) {
$(".tt").remove()
for (var i = 0; i < data.length; i++) {
if (i % 2 == 0) {
dom += "<li class='tt' style='background: #046566'><p>" + data[i].productId +
"</p><p>" + data[i].productName +
"</p><p>" + data[i].lotNo +
"</p><p>" + data[i].quantity + "</p></li>"
} else {
dom += "<li class='tt' style='background: #05383c'><p>" + data[i].productId +
"</p><p>" + data[i].productName +
"</p><p>" + data[i].lotNo +
"</p><p>" + data[i].quantity + "</p></li>"
}
}
$("#kcxx").append(dom)
}
}
// 时间
var t = null;
$(document).ready(function() {
time()
// getData()
// window.setInterval("getData()", 10000);
// getData2()
// window.setInterval("getData2()", 3000);
// info()
// window.setInterval("info()", 3000);
// mockAlarmData();
getAlarmData();
window.setInterval(getAlarmData, 1500);
getLaneData();
window.setInterval(getLaneData, 1500);
// window.setInterval(scrollAlarmList, 1000);
})
function getAlarmData() {
$.ajax({
url: ip + "/api/screen/selectFaultRecord?warehouseId="+warehouseId+"&type="+type,
type: "GET",
dataType: "JSON",
success: function(res) {
if (res.code === 200) {
renderAlarmData(res.data);
}
},
error: function(err) {
console.log("Error fetching alarm data", err);
}
})
}
function renderAlarmData(data) {
var dom = "";
// Ensure we have data
if (!data || data.length === 0) {
$(".alarm-items").html("");
return;
}
for (var i = 0; i < data.length; i++) {
var item = data[i];
var bg = i % 2 == 0 ? "#046566" : "#05383c";
// Map fields
// Time: Extract HH:mm:ss from startTime "yyyy-MM-dd HH:mm:ss"
var timeStr = item.startTime ? item.startTime.split(' ')[1] : "";
// Type: Default to "故障"
var type = "故障";
var color = "#ff4d4d"; // Red for fault
// Detail: deviceName + fault description
var faultDesc = item.fault;
/*if (item.deviceType === "ddj") {
faultDesc = faultDesc;
} else if (item.deviceType === "ssj") {
faultDesc = faultDesc;
}*/
var detail = (item.deviceName || "") + " " + (faultDesc || "");
// Task No
var taskNo = item.taskNo || "";
dom += "<li class='alarm-item' style='background: " + bg + "'>" +
"<p>" + taskNo + "</p>" +
"<p>" + timeStr + "</p>" +
"<p style='color:" + color + "'>" + type + "</p>" +
"<p>" + detail + "</p>" +
"</li>";
}
$(".alarm-items").html(dom);
}
function getLaneData() {
$.ajax({
url: ip + "/api/screen/selectJobListByWarehouseIdAndType?warehouseId="+warehouseId+"&type="+type,
type: "GET",
dataType: "JSON",
success: function(res) {
if (res.code === 200) {
renderLaneData(res.data);
}
},
error: function(err) {
console.log("Error fetching lane data", err);
}
})
}
function renderLaneData(data) {
var laneIds = ['1', '2', '3']; // Keys in the data object
laneIds.forEach(function(key) {
var list = data[key] || [];
var content = "";
content += "<ul class='lane-list'>";
// Header
content += "<li class='lane-item header'>" +
"<p>任务号</p>" +
"<p>托盘码</p>" +
"<p>类型</p>" +
"<p>状态</p>" +
"</li>";
for (var i = 0; i < list.length; i++) {
var item = list[i];
var taskId = item.taskNo;
var palletId = item.trayCode || "";
var typeName = getTaskTypeName(item.inOrOut);
var statusName = getTaskStatusName(item.status);
var statusColor = (statusName === "执行中" || statusName === "完成") ? "#00ffc0" : "#ffb742";
var typeColor = (typeName.indexOf("入") > -1) ? "#0dede4" : "#ff7e00";
var bg = i % 2 == 0 ? "rgba(4, 101, 102, 0.5)" : "rgba(5, 56, 60, 0.5)";
content += "<li class='lane-item' style='background: " + bg + "'>" +
"<p>" + taskId + "</p>" +
"<p>" + palletId + "</p>" +
"<p style='color:" + typeColor + "'>" + typeName + "</p>" +
"<p style='color:" + statusColor + "'>" + statusName + "</p>" +
"</li>";
}
content += "</ul>";
$("#lane" + key).html(content);
});
}
function getTaskTypeName(code) {
// 空值/假值直接返回空字符串(保留原逻辑)
if (!code) return "";
// 将编码转为数字(兼容字符串/数字类型入参),判断大小后返回对应名称
const numCode = Number(code);
return numCode > 20 ? "出库" : "入库";
}
function getTaskStatusName(code) {
if (!code) return "";
if (code === "4") return "完成";
if (code === "0") return "创建";
if (code === "1" || code == "2" || code == "3") return "执行中";
return code;
}
function getDdjFaultDescription(value) {
if (value === "0") return "待机";
if (value === "1") return "工作";
if (value === "1031") return "急停";
if (value === "1032") return "货叉不在中位";
if (value === '1033') return "行走变频报警";
if (value === "1034") return "升降变频报警";
if (value === "1035") return "货叉变频报警";
if (value === "1036") return "货叉变频报警";
if (value === "1037") return "运行限位故障";
if (value === "1038") return "升降限位故障";
if (value === "1039") return "运行不能纠偏";
if (value === "1040") return "升降不能纠偏";
if (value === "1041") return "水平测距出错";
if (value === "1042") return "垂直BPS出错";
if (value === "1043") return "超速保护";
if (value === "1044") return "前边超宽";
if (value === "1045") return "后边超宽";
if (value === "1046") return "左边歪斜";
if (value === "1047") return "右边歪斜";
if (value === "1048") return "超高1";
if (value === "1049") return "超高2";
if (value === "1050") return "放货完毕货叉有货";
if (value === "1051") return "取货时货叉有货";
if (value === "1052") return "放货目标有货";
if (value === "1053") return "取货完毕无货";
if (value === "1054") return "放货时货叉无货";
if (value === "1055") return "货叉动作超时";
if (value === "1056") return "货叉不能纠偏";
if (value === "1057") return "微升降超时";
if (value === "1058") return "松绳过载";
if (value === "1059") return "设定超限";
if (value === "1060") return "取双伸时单伸有货";
if (value === "1061") return "放双伸时单伸有货";
if (value === "1062") return "入库输送机任务不符";
if (value === "1063") return "安全门打开";
if (value === "9999") return "设备未联机";
return value;
}
function getSsjFaultDescription(value) {
if (value == 101) return "前超长";
if (value == 102) return "后超长";
if (value == 103) return "左超宽";
if (value == 104) return "右超宽";
if (value == 105) return "超高";
if (value == 106) return "称重异常";
return value;
}
function time() {
clearTimeout(t);
dt = new Date();
var y = dt.getFullYear();
var mt = dt.getMonth() + 1;
var day = dt.getDate();
var h = dt.getHours();
var m = dt.getMinutes();
var s = dt.getSeconds();
var a = new Date().getDay();
var b = "";
switch (a) {
case 0:
b = "日";
break;
case 1:
b = "一";
break;
case 2:
b = "二";
break;
case 3:
b = "三";
break;
case 4:
b = "四";
break;
case 5:
b = "五";
break;
default:
b = "六";
}
document.querySelector(".riqi").innerHTML = "星期" + b + "<br>" + y + "年" + mt + "月" + day + "日";
document.querySelector(".shijian").innerHTML = jialing(h) + ":" + jialing(m);
t = setTimeout(time, 1000);
}
function jialing(m) {
if (m < 10) {
m = "0" + m
return m;
} else {
return m;
}
}
function mockAlarmData() {
var alarms = [
{ time: "10:00:01", type: "故障", detail: "1号堆垛机通信中断", status: "未处理" },
{ time: "10:05:23", type: "警告", detail: "2号入库口货物堆积", status: "处理中" },
{ time: "10:15:11", type: "故障", detail: "3号出库口光电异常", status: "未处理" },
{ time: "10:20:45", type: "提示", detail: "系统自动备份完成", status: "已完成" },
{ time: "10:30:00", type: "警告", detail: "库位占用率过高", status: "处理中" },
{ time: "10:35:12", type: "故障", detail: "1号巷道急停按下", status: "未处理" },
{ time: "10:40:00", type: "提示", detail: "入库任务下发成功", status: "已完成" },
{ time: "10:45:30", type: "警告", detail: "网络延迟较高", status: "处理中" }
];
var dom = "";
for (var i = 0; i < alarms.length; i++) {
var bg = i % 2 == 0 ? "#046566" : "#05383c";
var color = alarms[i].type === "故障" ? "#ff4d4d" : (alarms[i].type === "警告" ? "#ffb742" : "#fff");
dom += "<li class='alarm-item' style='background: " + bg + "'>" +
"<p>" + alarms[i].time + "</p>" +
"<p style='color:" + color + "'>" + alarms[i].type + "</p>" +
"<p>" + alarms[i].detail + "</p>" +
"<p>" + alarms[i].status + "</p>" +
"</li>";
}
$(".alarm-items").html(dom);
}
function scrollAlarmList() {
var list = $(".alarm-items");
var firstItem = list.find("li:first");
if (firstItem.length === 0) return;
var height = firstItem.outerHeight(true);
// Default to some height if 0 (e.g. if hidden)
if (height === 0) height = 44;
if (list.children().length >= 1) {
firstItem.animate({
marginTop: -height + "px"
}, 600, function() {
firstItem.css("marginTop", 0).appendTo(list);
});
}
}
function mockLaneData() {
// Generate mock data for 3 lanes (merged inbound/outbound)
var laneIds = ['lane1', 'lane2', 'lane3'];
laneIds.forEach(function(id) {
var content = "";
// Create a list structure
content += "<ul class='lane-list'>";
// Header
content += "<li class='lane-item header'>" +
"<p>任务号</p>" +
"<p>托盘码</p>" +
"<p>类型</p>" +
"<p>状态</p>" +
"</li>";
// Randomly generate 4-8 rows of data
var rowCount = Math.floor(Math.random() * 5) + 4;
for (var i = 0; i < rowCount; i++) {
var taskId = "T" + Math.floor(Math.random() * 10000);
var palletId = "P" + Math.floor(Math.random() * 1000);
var type = Math.random() > 0.5 ? "入库" : "出库";
var status = Math.random() > 0.5 ? "执行中" : "等待中";
var statusColor = status === "执行中" ? "#00ffc0" : "#ffb742";
var typeColor = type === "入库" ? "#0dede4" : "#ff7e00";
var bg = i % 2 == 0 ? "rgba(4, 101, 102, 0.5)" : "rgba(5, 56, 60, 0.5)";
content += "<li class='lane-item' style='background: " + bg + "'>" +
"<p>" + taskId + "</p>" +
"<p>" + palletId + "</p>" +
"<p style='color:" + typeColor + "'>" + type + "</p>" +
"<p style='color:" + statusColor + "'>" + status + "</p>" +
"</li>";
}
content += "</ul>";
$("#" + id).html(content);
});
}
// ===== 服务器设置弹窗 =====
// 临时选中状态(未保存前不生效)
var _pendingWarehouse = warehouseId;
var _pendingType = type;
function openSettingModal() {
_pendingWarehouse = warehouseId;
_pendingType = type;
// 初始化选中状态
$("#warehouseOptions .setting-option").each(function() {
$(this).toggleClass("active", $(this).data("value") === _pendingWarehouse);
});
$("#typeOptions .setting-option").each(function() {
$(this).toggleClass("active", $(this).data("value") + "" === _pendingType + "");
});
updatePreview();
$("#settingModalMask").fadeIn(200);
$("#settingModal").fadeIn(200);
}
function closeSettingModal() {
$("#settingModalMask").fadeOut(200);
$("#settingModal").fadeOut(200);
}
function selectOption(group, el) {
var val = $(el).data("value") + "";
if (group === "warehouse") {
_pendingWarehouse = val;
$("#warehouseOptions .setting-option").removeClass("active");
} else {
_pendingType = val;
$("#typeOptions .setting-option").removeClass("active");
}
$(el).addClass("active");
updatePreview();
}
function updatePreview() {
var whName = _pendingWarehouse === "02" ? "二联" : "三联";
var typeName = _pendingType === "1" ? "入库端" : "出库端";
var previewIp = warehouseIpMap[_pendingWarehouse];
$("#settingPreview").html(
"仓库:<b>" + whName + "</b> 端口:<b>" + typeName + "</b><br>" +
"IP:" + previewIp
);
}
function saveSettings() {
// 更新全局变量
warehouseId = _pendingWarehouse;
type = _pendingType;
ip = warehouseIpMap[warehouseId];
// 持久化到 localStorage
localStorage.setItem("warehouseId", warehouseId);
localStorage.setItem("type", type);
closeSettingModal();
// 立即刷新数据
getAlarmData();
getLaneData();
}

File diff suppressed because one or more lines are too long