需求:根据所获取数据,显示每个机器实时运转状况,Echarts显示最近9笔数据,数据框以及运行状态显示最新一笔数据
效果:
逻辑:
1,根据后台数据创建DOM,则前台基本不用写标签了,前台aspx代码如下:(本需求使用LayUI.JS框架)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProductionKanBan.aspx.cs" Inherits="KanBanManage_ProductionKanBan" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>生产看板</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="../layuicms2.0/layui/css/layui.css" media="all" />
<script type="text/javascript" src="../layuicms2.0/layui/layui.js"></script>
<script type="text/javascript" src="../layuicms2.0/jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="JScript/AHDataChose.js"></script>
<script src="JScript/echarts-all.js"></script>
<script src="JScript/infographic.js"></script>
<%--提前将样式写好--%>
<style>
.Number {
margin:auto;
width:26vw;
font-size:20px;
text-align:center;
line-height:30px;
}
.layui-data{
float:left;
}
.staion {
display:inline-block;
float:right;
margin-top:4px;
}
.ui-jqgrid {
display:none;
}
.layui-data {
display:inline-block;
margin-left:4px;
border-right:1px solid #E0DEDB;
border-bottom:1px solid #E0DEDB;
width:calc(32vw + 3px);
height:44vw;
}
.layui-form-label {
padding:6px;
width:5vw;
font-size:12px;
text-align:center;
}
.layui-input-block {
display:inline-block;
width:10vw;
}
.echarts{
margin-left:-42px;
height: 300px;
width:39vw
}
.layui-badge {
display:inline-block;
float:right;
margin-top:4px;
font-size:14px;
height:24px;
line-height:24px;
width:52px;
}
input {
width:8vw;
margin-top:6px;
}
.layui-table-box{
display:none;
}
.PutDataLeft {
display:inline-block;
width:16vw;
float:left;
}
</style>
</head>
<body>
<%--使用Layui readerTable方法访问数据库,为什么,看JS就会明白--%>
<table id="gridList" style="display:none"></table>
<%--动态创建DOM元素的容器--%>
<div class="panel panel-default" style="margin-bottom: 10px;">
</div>
</body>
</html>
2,JS文件则需要大做文章,获取数据,更具数据渲染DOM,并赋值对应DOM中,代码如下:
window.onload = function () {
var table = layui.table;
var i = 0;
var Station;
var MacCodedata = [];
//获取各个机台最新的五笔数据
$.ajax({
type: "post",
datatype: "json",
url: "Handler/ProductionHandler.ashx?action=GetGatherData",
error: function (result) {
},
success: function (result) {
MacCodedata = result;
//成功获取数据后调用创建DOM元素函数
CreatDom();
}
});
function CreatDom() {
//根据Layui table.render函数获取各个机台最新的一笔数据
layui.use('table', function () {
var table = layui.table;
table.render({
elem: '#gridList',
url: '../../WebService.asmx/getGatherData',
method: 'post',
cols: [[
{
//前台创建Table标签是为了引用其cols参数,因该参数中templet,是根据数据循环渲染,这样即可省去我们进行一一赋值的烦恼,精确而节省代码
templet: function (d) {
i++;
//每次循环清空Echarts数据
var EchartTime = [];
var EchartRespeed = [];
var EchartMespeed = [];
var EchartMeter = [];
//根据State数据返回机台是运行或停止中状态,即返回对应标签
if (d.State == 1) {
Station = '<span class=\"layui-badge layui-bg-green\">运行中</span>\n';
} else if (d.State == 0) {
Station = '<span class=\"layui-badge\">停机中</span>\n';
}
//根据第一个$.ajax方法获取了MacCodedata数据,这里就可以通过判断机台编号对应,那些数据是有用的,即那些机台此时有在线上运作
for (var j = 0; j < MacCodedata.length; j++) {
if (d.MacCode == MacCodedata[j].MacCode) {
//获取Echarts各个数据push至数组中
EchartTime.push((MacCodedata[j].Intime))
EchartRespeed.push((MacCodedata[j].Rspeed))
EchartMespeed.push((MacCodedata[j].Mspeed))
EchartMeter.push((MacCodedata[j].Meter))
}
}
//将所需要创建的DOM元素Append至panel-default中
$(".panel-default").append(
'<div class="layui-data" >\n' +
' <div class="Number" >\n' +
' ' + d.MacCode + ' \n' +
Station +
' </div>\n' +
' <div class="PutDataLeft">\n' +
' <label class="layui-form-label">绞距</label>\n' +
' <input type="text" readonly="true" value=' + '"' + d.Lays + '"' + '>\n' +
' </div>\n' +
' <div class="PutDataLeft">\n' +
' <label class="layui-form-label">收线张力</label>\n' +
' <input type="text" readonly="true" value=' + '"' + d.TakeUpTension + '"' + '>\n' +
' </div>\n' +
' <div class="PutDataLeft">\n' +
' <label class="layui-form-label">转速</label>\n' +
' <input type="text" readonly="true" value=' + '"' + d.Rspeed + '"' + '>\n' +
' </div>\n' +
' <div class="PutDataLeft">\n' +
' <label class="layui-form-label">卷包张力</label>\n' +
' <input type="text" readonly="true" value=' + '"' + d.WAroundTension + '"' + '>\n' +
' </div>\n' +
' <div class="PutDataLeft">\n' +
' <label class="layui-form-label">米数</label>\n' +
' <input type="text" readonly="true" value=' + '"' + d.Meter + '"' + '>\n' +
' </div>\n' +
' <div class="PutDataLeft">\n' +
' <label class="layui-form-label">主机转速</label>\n' +
' <input type="text" readonly="true" value=' + '"' + d.Mspeed + '"' + '>\n' +
' </div>\n' +
' <div id=' + '"AH' + i + '"' + ' class="echarts"></div>\n' +
' </div>'
)
//调用Echarts函数动态渲染赋值对应Echarts
CreateEchart(i, EchartTime, EchartRespeed, EchartMespeed, EchartMeter);
}
}
]]
})
});
}
function CreateEchart(i, EchartTime, EchartRespeed, EchartMespeed, EchartMeter) {
var ID = 'AH' + i + ''
//循环创建对应Echarts
var myChart = echarts.init(document.getElementById(ID));
option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
toolbox: {
feature: {
dataView: { show: true, readOnly: false },
magicType: { show: true, type: ['line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
xAxis: [
{
type: 'category',
data: EchartTime,
axisPointer: {
type: 'shadow'
}
}
],
yAxis: [
{
type: 'value',
name: 'Mspeed',//主机转速
min: 0,
max: 10000,
interval: 1000,
axisLabel: {
formatter: '{value}'
}
},
{
type: 'value',
name: 'Rspeed',//专速
min: 0,
max: 200,
interval: 40,
axisLabel: {
formatter: '{value}'
}
}
],
series: [
{
name: 'Mspeed',
type: 'line',
itemStyle: {
normal: {
lineStyle: {
type: 'solid',
width: 2
}
}
},
data: EchartMespeed
},
{
name: 'Meter',
type: 'line',
itemStyle: {
normal: {
lineStyle: {
type: 'solid',
width: 2
}
}
},
data: EchartMeter
},
{
name: 'Rspeed',
type: 'bar',
yAxisIndex: 1,
barWidth: 14,
data: EchartRespeed,
itemStyle: {
normal: {
color: '#429EFF',
label: {
show: true,
position: 'top',
textStyle: {
color: '#429EFF',
fontSize: 12
}
}
}
}
}
]
}
myChart.setOption(option);
}
}