//车间看板 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' +firstArr[j].name + '' if (j == headArr.length) { headStr += '' } } //二级表头 for (var i = 0; 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 } }