//车间看板
var interval_do = null;// 页面刷新定时器
clearInterval(interval_do);
var MyMarhq_1 = '';// 滚动定时器
clearInterval(MyMarhq_1);
$(function() {
doData()
interval_do = setInterval(getKanbanData, 60 * 1000); // 启动,执行默认方法
})
function doData() {
setTitle()
setBox1()
setBox2()
setBox3()
}
function setTitle() {
if (RESULT.data.DATA_0.result == 1) {
return false
}
var list = RESULT.data.DATA_0.data[0]
$("#title_0").text(list.TITILE0)
$("#title_1").text(list.TITILE1)
$("#title_2").text(list.TITILE2)
$("#title_3").text(list.TITILE3)
}
function setBox1() {
if (RESULT.data.DATA_1.result == 1) {
return false
}
var dataList = RESULT.data.DATA_1.data
var Items = dataList
$('.tbl-body tbody').empty();
$('.tbl-header tbody').empty();
$('.tbl-body thead').empty();
$('.tbl-header thead').empty();
var headStr = '';
var str = '';
var temp = Items[0]
var headArr = getObjectKeys(temp)
var originalArr = [];// 原始数据,未处理过的表头名称
var layer=1;//标识,区分是否为多级表头
for (var i = 0; i < headArr.length; i++) {
var v=isNull(temp[headArr[i]])
originalArr.push(v)
if(layer==1&&v.indexOf("|")!=1){
layer=2
}
}
//设置表头字段-若layer=1则只含一级表头,若layer=2则含有二级表头
if(layer==1){
for (var i = 0; i < headArr.length; i++) {
if (i == 0) {
headStr = '
'
}
headStr += '' + isNull(temp[headArr[i]]) + ' | '
if (i == headArr.length) {
headStr += '
'
}
}
}else{
var firstArr = [];// 存一级表头的数据
var secondArr = [];// 存二级表头的数据
var titleName = ""// 当前的一级表头
var colsValue = 0// 所占列数记录数
for (var i = 0; i < originalArr.length; i++) {
if (originalArr[i].indexOf("|") == -1) {//不分级的表头
var arr = {}
arr['name'] = originalArr[i];// 列名
arr['cols'] = 1;// 所占列数
arr['rows'] = 2;// 所占行数
firstArr.push(arr)
} else {
var first = originalArr[i].substring(0, originalArr[i].indexOf("|"))
if (titleName != first) {// 上个一级表头数据已经遍历完成
if (titleName == "") {// 第一个一级表头
titleName = first
colsValue++;// 开始记录列数
secondArr.push(originalArr[i].substring(originalArr[i].indexOf("|") + 1, originalArr[i].length))
} else {
var arr = {}
arr['name'] = titleName;// 列名
arr['cols'] = colsValue;// 所占列数
arr['rows'] = 1;// 所占行数
firstArr.push(arr);// 将上一记录保存
titleName = first;
colsValue = 1;// 重新记录列数,含本次记录
secondArr.push(originalArr[i].substring(originalArr[i].indexOf("|") + 1, originalArr[i].length))
}
} else {
colsValue++
secondArr.push(originalArr[i].substring(originalArr[i].indexOf("|") + 1, originalArr[i].length))
}
if (i == originalArr.length - 1) {// 处理最后一项字段
var arr = {}
arr['name'] = titleName;// 列名
arr['cols'] = colsValue;// 所占列数
arr['rows'] = 1;// 所占行数
firstArr.push(arr);// 将上一记录保存
}
}
}
// 数据插入表头-一级、二级分开处理
// 一级表头
for(var j=0;j'
}
headStr += '' +firstArr[j].name + ' | '
if (j == headArr.length) {
headStr += ''
}
}
//二级表头
for (var i = 0; i '
}
headStr += '' + secondArr[i] + ' | '
if (i == headArr.length) {
headStr += ''
}
}
}
$('.tbl-body thead').append(headStr);
$('.tbl-header thead').append(headStr);
for (var j = 1; j < Items.length; j++) {
var item = Items[j]
for (var q = 0; q < headArr.length; q++) {
if (q == 0) {
str += ''
}
str += '' + isNull(item[headArr[q]]) + ' | '
if (q == headArr.length) {
str += '
'
}
}
}
$('.tbl-body tbody').append(str);
$('.tbl-header tbody').append(str);
if (MyMarhq_1 != null) {// 判断计时器是否为空-关闭
clearInterval(MyMarhq_1);
MyMarhq_1 = null;
}
if (Items.length > 8) {
$('.tbl-body tbody').html($('.tbl-body tbody').html() + $('.tbl-body tbody').html());
$('.tbl-body').css('top', '0');
var tblTop = 0;
var speedhq = 50; // 数值越大越慢
var outerHeight = $('.tbl-body tbody').find("tr").outerHeight();
function Marqueehq() {
if (tblTop <= -outerHeight * Items.length) {
tblTop = 0;
} else {
tblTop -= 1;
}
$('.tbl-body').css('top', tblTop + 'px');
}
MyMarhq_1 = setInterval(Marqueehq, speedhq);
// 鼠标移上去取消事件
$(".tbl-header tbody").hover(function() {
clearInterval(MyMarhq_1);
}, function() {
clearInterval(MyMarhq_1);
MyMarhq_1 = setInterval(Marqueehq, speedhq);
})
}
}
function setBox2() {
if (RESULT.data.DATA_2.result == 1) {
return false
}
var dataList = RESULT.data.DATA_2.data
var xData = []// 工单
var yData1 = []// 计划数量
var yData2 = []// 实际数量
if (dataList) {
for (var i = 0; i < dataList.length; i++) {
xData.push(dataList[i].TASK_NO) // 工单
yData1.push(dataList[i].PLAN_QTY) // 计划数量
yData2.push(dataList[i].ACT_QTY) // 实际数量
}
option = {
grid : {
left : '2%',
right : '2%',
bottom : '1%',
top : '20%',
containLabel : true
},
legend : {
data : [ '计划数量', '实际数量' ],
// orient: 'vertical',
x : 'right', // 可设定图例在左、右、居中
top : 0,
textStyle : {
fontSize : fontSize(0.24),// 字体大小
color : '#ffffff'// 字体颜色
},
},
color : [ '#1D9FFF', '#02F3F0' ],
xAxis : {
type : 'category',
data : xData,
axisLabel : {
show : true,
interval : 0,
rotate:25,
textStyle : {
color : '#ffffff',
fontSize : fontSize(0.24),
}
},
axisLine : {
lineStyle : {
color : '#FFFFFF'
}
},
},
yAxis : {
name : '数量',
type : 'value',
splitLine : {
show : false
},
axisLabel : {
// formatter : '{value} ',
textStyle : {
color : '#ffffff',
fontSize : fontSize(0.24),// 字体大小
}
},
axisLine : {
lineStyle : {
color : '#FFFFFF'
}
},
},
series : [ {
name : '计划数量',
data : yData1,
type : 'bar',
barMaxWidth : 25,// 柱图宽度
label : {
show : true,
position : 'top',
textStyle : {
fontSize : fontSize(0.24),// 字体大小
}
},
}, {
name : '实际数量',
data : yData2,
type : 'bar',
barMaxWidth : 25,// 柱图宽度
label : {
show : true,
position : 'top',
textStyle : {
fontSize : fontSize(0.24),// 字体大小
}
},
} ]
};
}
// 创建echarts对象在哪个节点上
var myCharts1 = echarts.init(document.getElementById('part_2'));
// 将选项对象赋值给echarts对象。
myCharts1.setOption(option, true);
}
function setBox3() {
if (RESULT.data.DATA_3.result == 1) {
return false
}
var dataList = RESULT.data.DATA_3.data
var xData = []// 工单
var yData1 = []// 计划数量
var yData2 = []// 实际数量
var maxVlaue = 0;// 数量坐标的最大值
if (dataList) {
for (var i = 0; i < dataList.length; i++) {
xData.push(dataList[i].DEFECT_NAME) // 不良名称
yData1.push(dataList[i].QTY) // 不良数量
maxVlaue += Number(dataList[i].QTY)
yData2.push(Number(dataList[i].ACT)) // 累计不良折线
}
option = {
grid : {
left : '4%',
right : '4%',
bottom : '4%',
top : '20%',
containLabel : true
},
legend : {
data : [ '不良数量', '累计不良折线' ],
// orient: 'vertical',
x : 'center', // 可设定图例在左、右、居中
top : 0,
textStyle : {
fontSize : fontSize(0.24),// 字体大小
color : '#ffffff'// 字体颜色
},
},
color : [ '#3062FF', '#FAEF9B' ],
xAxis : {
type : 'category',
data : xData,
axisLabel : {
show : true,
interval : 0,
rotate : 25,
textStyle : {
color : '#ffffff',
fontSize : fontSize(0.22),
},
},
axisLine : {
lineStyle : {
color : '#FFFFFF'
}
},
},
yAxis : [ {
name : '数量',
type : 'value',
max : maxVlaue,
splitLine : {
show : false
},
axisLabel : {
// formatter : '{value} ',
textStyle : {
color : '#ffffff',
fontSize : fontSize(0.24),// 字体大小
}
},
axisLine : {
lineStyle : {
color : '#FFFFFF'
}
},
}, {
name : '(%)',
type : 'value',
splitLine : {
show : false
},
axisLabel : {
// formatter : '{value} ',
textStyle : {
color : '#ffffff',
fontSize : fontSize(0.24),// 字体大小
}
},
axisLine : {
lineStyle : {
color : '#FFFFFF'
}
},
} ],
series : [ {
name : '不良数量',
data : yData1,
type : 'bar',
barMaxWidth : 25,// 柱图宽度
label : {
show : true,
position : 'top',
textStyle : {
fontSize : fontSize(0.24),// 字体大小
}
},
}, {
name : '累计不良折线',
data : yData2,
type : 'line',
yAxisIndex : 1,
label : {
show : true,
position : 'bottom',
textStyle : {
fontSize : fontSize(0.24),// 字体大小
}
},
markLine : {
symbol : "none",
data : [ {
silent : true, // 鼠标悬停事件 true没有,false有
label : {
// formatter : '标产',
show : false,
},
lineStyle : { // 警戒线的样式 ,虚实 颜色
type : "solid",
color : "#FF3366",
},
yAxis : 0.8
// 警戒线的标注值,可以有多个yAxis,多条警示线
} ]
}
} ]
};
}
// 创建echarts对象在哪个节点上
var myCharts1 = echarts.init(document.getElementById('part_3'));
// 将选项对象赋值给echarts对象。
myCharts1.setOption(option, true);
}
function getObjectKeys(object) {
var keys = [];
for ( var property in object)
keys.push(property);
return keys;
}
function getKanbanData() {
getDataType();
}
//获取屏幕宽度并计算比例-设置echarts文字
function fontSize(res) {
var docEl = document.documentElement, clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
if (!clientWidth)
return;
var fontSize = 100 * (clientWidth / 2880);// 原:1920/2400/2880
return res * fontSize;
}
function getDataType() {
var params = {
"kanbanNo" : FTYPE,
"frequency" : FREQUENCY,
"lineNo" : ""
};
$.ajax({
type : "GET",
url : context + "kanban/getTemplateList",
data : params,
dataType : "json",
success : function(res) {
console.log(res)
if (res.result) {
RESULT = res
doData()
} else {
// clearInterval(interval_do);//错误-关闭定时器
}
}
});
}
function isNull(str) {
if (str == null) {
return ""
} else {
return str
}
}