|
@@ -0,0 +1,1133 @@
|
|
|
+var vm = new Vue({
|
|
|
+ el: '#app',
|
|
|
+ data: {
|
|
|
+ dom_1: Object,
|
|
|
+ dom_2: Object,
|
|
|
+ myChart_1: Object,//Echarts1图表
|
|
|
+ myChart_2: Object,//Echarts1图表
|
|
|
+ option_1: Object,//Echarts2图表option配置项
|
|
|
+ option_2: Object,//Echarts2图表option配置项
|
|
|
+
|
|
|
+ oees_1: {},//Echarts1图表数据
|
|
|
+ oees_2: {},//Echarts2图表数据
|
|
|
+
|
|
|
+ outputInfo: '',//产能明细表格标题
|
|
|
+
|
|
|
+ period: 0,//0, by shift、day、week、month标识
|
|
|
+ summaryflag: false,//汇总页标识
|
|
|
+ chamberflag: false,//chamber标识(用于隐藏产量)
|
|
|
+
|
|
|
+
|
|
|
+ parentNode: {},//汇总页父节点
|
|
|
+ parentNodes: {},//汇总页所在产线所有设备id
|
|
|
+
|
|
|
+ OEEExtendSetting1: ["稼动率", "待料率", "故障率"], //产能数据类别细分
|
|
|
+ OEEExtendSetting2: ["运行时间", "待料时间", "故障时间", "", "", "", "", "", ""],//产能数据类别细分,
|
|
|
+ PerHourFields: ["autoRunTime", "idleTime", "alarmTime", "loadMATTime", "reservedOne", "reservedThree", "alarmSum", "loadMATSum", "reservedTwo"],
|
|
|
+ OEEFields: ["runTime", "idelTime", "downTime", "loadMATTime", "reservedOne", "reservedThree", "alarmSum", "loadMATSum", "reservedTwoSum"],
|
|
|
+ OEERateFields: ["runTimeRate", "idelTimeRate", "downTimeRate", "loadMATTimeRate", "reservedOneTimeRate", "reservedThreeTimeRate"],
|
|
|
+ color: ['#5b9bd5', '#ed7d31', '#a5a5a5', '#008080', '#f47a75', '#765005', "#8B658B", "#C71585", "#8B2500", "#8B3A62", "#53868B"],//echarts图表配色
|
|
|
+
|
|
|
+ zTreeObj: Object//tree目录对象
|
|
|
+
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.init()
|
|
|
+ this.getProductionLineMachineTree()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ //初始化
|
|
|
+ init() {
|
|
|
+ $("#container2").hide();
|
|
|
+ $(".date").datepicker({
|
|
|
+ format: 'yyyy-mm-dd',
|
|
|
+ language: 'zh-CN',
|
|
|
+ autoclose: true,
|
|
|
+ todayBtn: 'linked'
|
|
|
+ }).on('changeDate', function () {
|
|
|
+
|
|
|
+ }).on('keydown', function (e) {
|
|
|
+ return false;
|
|
|
+ });
|
|
|
+
|
|
|
+ //zTreeObj = $.fn.zTree.init($("#treeDemo"), settings, res); //初始化树
|
|
|
+ //zTreeObj.expandAll(true); //true 节点全部展开、false节点收缩
|
|
|
+
|
|
|
+ this.dom_1 = document.getElementById('container1');
|
|
|
+ this.myChart_1 = echarts.init(this.dom_1, 'vintage', {
|
|
|
+ renderer: 'canvas',
|
|
|
+ useDirtyRect: false
|
|
|
+ });
|
|
|
+ this.dom_2 = document.getElementById('container2');
|
|
|
+ this.myChart_2 = echarts.init(this.dom_2, 'vintage', {
|
|
|
+ renderer: 'canvas',
|
|
|
+ useDirtyRect: false
|
|
|
+ });
|
|
|
+ this.option_1 = {
|
|
|
+ grid: {
|
|
|
+ left: '4%',
|
|
|
+ right: '10%',
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'axis',
|
|
|
+ axisPointer: {
|
|
|
+ type: 'cross',
|
|
|
+ crossStyle: {
|
|
|
+ color: '#999'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ toolbox: {
|
|
|
+ right: '10%',
|
|
|
+ feature: {
|
|
|
+ dataZoom: { yAxisIndex: 'none' },
|
|
|
+ mySaveAsExcel: {
|
|
|
+ show: true,
|
|
|
+ title: 'save excel',
|
|
|
+ icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',
|
|
|
+ onclick: () => {
|
|
|
+ this.exportExcelTemplate(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ iconStyle: {
|
|
|
+ borderColor: "white",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ color: ['#5b9bd5', '#ed7d31', '#a5a5a5', '#008080', '#546fc6'],
|
|
|
+ xAxis: {
|
|
|
+ type: 'category',
|
|
|
+ data: [],
|
|
|
+ axisLabel: {
|
|
|
+ show: 'true',
|
|
|
+ interval: 0,
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 14
|
|
|
+ }
|
|
|
+ },
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: 'value',
|
|
|
+ max: 100,
|
|
|
+ axisLabel: {
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 14,
|
|
|
+ formatter: '{value} %'
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true, // 是否显示轴线
|
|
|
+ lineStyle: {
|
|
|
+ color: '#e0e6f1', // 刻度线的颜色
|
|
|
+ width: 1, // 刻度线的宽度
|
|
|
+ type: 'dashed' // 刻度线的类型
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'value',
|
|
|
+ //max: 8000,
|
|
|
+ axisLabel: {
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 14,
|
|
|
+ formatter: '{value} pcs'
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: false, // 是否显示轴线
|
|
|
+ lineStyle: {
|
|
|
+ color: '#e0e6f1', // 刻度线的颜色
|
|
|
+ width: 1, // 刻度线的宽度
|
|
|
+ type: 'dashed' // 刻度线的类型
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ legend: {
|
|
|
+ data: ['稼动率', '待料率', '故障率', '换料率', '产能'],
|
|
|
+ textStyle: {
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 14
|
|
|
+ }
|
|
|
+ },
|
|
|
+ series: []
|
|
|
+ };
|
|
|
+ this.option_2 = {
|
|
|
+ title: {
|
|
|
+ left: 'center',
|
|
|
+ text: '单台稼动率明细',
|
|
|
+ textStyle: {
|
|
|
+ color: "white"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ grid: {
|
|
|
+ left: '10%',
|
|
|
+ right: '10%',
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'axis',
|
|
|
+ axisPointer: {
|
|
|
+ type: 'cross',
|
|
|
+ crossStyle: {
|
|
|
+ color: '#999'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ toolbox: {
|
|
|
+ right: '10%',
|
|
|
+ feature: {
|
|
|
+ dataZoom: { yAxisIndex: 'none' },
|
|
|
+ mySaveAsExcel: {
|
|
|
+ show: true,
|
|
|
+ title: 'save excel',
|
|
|
+ icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',
|
|
|
+ onclick: () => {
|
|
|
+ this.exportExcelTemplate(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ iconStyle: {
|
|
|
+ borderColor: "white",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ color: ['#5b9bd5', '#ed7d31', '#a5a5a5', '#008080', '#546fc6'],
|
|
|
+ xAxis: {
|
|
|
+ type: 'category',
|
|
|
+ data: [],
|
|
|
+ axisLabel: {
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 14,
|
|
|
+ interval: 0
|
|
|
+ //,rotate: 30
|
|
|
+ }
|
|
|
+ },
|
|
|
+ yAxis: [
|
|
|
+ {
|
|
|
+ type: 'value',
|
|
|
+ max: function (value) {
|
|
|
+ var val = Math.ceil(value.max * 1.2);
|
|
|
+ if (val >= 100) {
|
|
|
+ return 100;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return val;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ axisLabel: {
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 14,
|
|
|
+ formatter: '{value} %'
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: true, // 是否显示轴线
|
|
|
+ lineStyle: {
|
|
|
+ color: '#e0e6f1', // 刻度线的颜色
|
|
|
+ width: 1, // 刻度线的宽度
|
|
|
+ type: 'dashed' // 刻度线的类型
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ type: 'value',
|
|
|
+ //max: 8000,
|
|
|
+ axisLabel: {
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 14,
|
|
|
+ formatter: '{value} %'
|
|
|
+ },
|
|
|
+ splitLine: {
|
|
|
+ show: false, // 是否显示轴线
|
|
|
+ lineStyle: {
|
|
|
+ color: '#e0e6f1', // 刻度线的颜色
|
|
|
+ width: 1, // 刻度线的宽度
|
|
|
+ type: 'dashed' // 刻度线的类型
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ legend: {
|
|
|
+ data: ['稼动率', '待料率', '故障率'],
|
|
|
+ textStyle: {
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 14
|
|
|
+ },
|
|
|
+ "top": "5.5%"
|
|
|
+ },
|
|
|
+ series: []
|
|
|
+ };
|
|
|
+ this.myChart_1.on('click', (params) => this.getOutputs(params, 1));
|
|
|
+ if (this.option_1 && typeof option_1 === 'object') {
|
|
|
+ this.myChart_1.setOption(this.option_1);
|
|
|
+ }
|
|
|
+ this.myChart_2.on('click', (params) => this.getOutputs(params, 2));
|
|
|
+ if (this.option_3 && typeof option_3 === 'object') {
|
|
|
+ this.myChart_2.setOption(this.option_2);
|
|
|
+ }
|
|
|
+ window.addEventListener('resize', this.myChart_1.resize);
|
|
|
+ window.addEventListener('resize', this.myChart_2.resize);
|
|
|
+ },
|
|
|
+ //图表柱子点击事件 function参数(参数[柱子]、图表序号)
|
|
|
+ //chartIndex == 1:
|
|
|
+ // 1)汇总页:获取数据并展示echarts2 + 表格数据更新
|
|
|
+ // 2)单台设备:表格数据更行
|
|
|
+ getOutputs(params, chartIndex) {
|
|
|
+ let _this = this;
|
|
|
+ if (params.componentType === 'series') {
|
|
|
+ if (_this.summaryflag) {
|
|
|
+ var OEETableData;
|
|
|
+ var OEEExtendSetting2_Temp = [];
|
|
|
+ if (chartIndex == 1) {
|
|
|
+ //汇总页第一个echarts柱状点击事件
|
|
|
+ var ids = Object.keys(_this.parentNodes).toString();
|
|
|
+ var OEEExtendSteeings = _this.getOEEExtendSettings(ids);
|
|
|
+ if (_this.chamberflag) {
|
|
|
+ OEETableData = { outPutPerHours: [], alarmSum: 0, downTime: 0, idelTime: 0, runTime: 0, date: null, shift: "" };
|
|
|
+ _this.oees_2 = {};
|
|
|
+ for (var item in _this.oees_1) {
|
|
|
+ _this.oees_2[item] = [_this.oees_1[item][params.dataIndex]];
|
|
|
+ }
|
|
|
+ for (var item in _this.oees_2) {
|
|
|
+
|
|
|
+ OEETableData.date = _this.oees_2[item].date;
|
|
|
+ OEETableData.shift = _this.oees_2[item].shift;
|
|
|
+ _this.oees_2[item][0].outPutPerHours.forEach(function (row, i) {
|
|
|
+ if (OEETableData.outPutPerHours[i] == undefined) {
|
|
|
+ OEETableData.outPutPerHours[i] = {
|
|
|
+ alarmSum: row.alarmSum,
|
|
|
+ alarmTime: row.alarmTime,
|
|
|
+ autoRunTime: row.autoRunTime,
|
|
|
+ dataTime: row.dataTime,
|
|
|
+ idleTime: row.idleTime,
|
|
|
+ loadMATSum: row.loadMATSum,
|
|
|
+ loadMATTime: row.loadMATTime,
|
|
|
+ moduleType: row.moduleType,
|
|
|
+ outPut: row.outPut,
|
|
|
+ period: row.period,
|
|
|
+ reservedOne: row.reservedOne,
|
|
|
+ reservedThree: row.reservedThree,
|
|
|
+ reservedTwo: row.reservedTwo
|
|
|
+ };
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ OEETableData.outPutPerHours[i].alarmSum += row.alarmSum;
|
|
|
+ OEETableData.outPutPerHours[i].alarmTime += row.alarmTime;
|
|
|
+ OEETableData.outPutPerHours[i].autoRunTime += row.autoRunTime;
|
|
|
+ OEETableData.outPutPerHours[i].idleTime += row.idleTime;
|
|
|
+ OEETableData.outPutPerHours[i].loadMATSum += row.loadMATSum;
|
|
|
+ OEETableData.outPutPerHours[i].loadMATTime += row.loadMATTime;
|
|
|
+ OEETableData.outPutPerHours[i].outPut += row.outPut;
|
|
|
+ OEETableData.outPutPerHours[i].reservedOne += row.reservedOne;
|
|
|
+ OEETableData.outPutPerHours[i].reservedThree += row.reservedThree;
|
|
|
+ OEETableData.outPutPerHours[i].reservedTwo += row.reservedTwo;
|
|
|
+ }
|
|
|
+ OEETableData.alarmSum += row.alarmSum;
|
|
|
+ OEETableData.downTime += row.alarmTime;
|
|
|
+ OEETableData.idelTime += row.idleTime;
|
|
|
+ OEETableData.runTime += row.autoRunTime;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ var data_temp = _this.oees_1[Object.keys(_this.oees_1)[0]][params.dataIndex];
|
|
|
+ OEETableData = data_temp;
|
|
|
+ $.ajax({
|
|
|
+ url: '/ReportForm/GetMachineStatisticV4',
|
|
|
+ type: 'POST',
|
|
|
+ async: false,
|
|
|
+ data: {
|
|
|
+ "id": ids,
|
|
|
+ "startTime": data_temp.startTime,
|
|
|
+ "endTime": data_temp.startTime,
|
|
|
+ "peroid": _this.period,
|
|
|
+ "dayOrnight": data_temp.shift == "白班" ? 1 : 2
|
|
|
+ },
|
|
|
+ success: function (rev) {
|
|
|
+ if (rev.code == 0) {
|
|
|
+ _this.oees_2 = rev.data;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ var OEE = _this.oees_2;
|
|
|
+ var x_data = [];
|
|
|
+ var series_data = {};
|
|
|
+ var production = [];
|
|
|
+ for (var item in OEE) {
|
|
|
+ x_data.push(_this.parentNodes[item]);
|
|
|
+ OEEExtendSteeings[item][0].forEach(function (row, index) {
|
|
|
+ if (row != "") {
|
|
|
+ if (!(row in series_data)) {
|
|
|
+ series_data[row] = [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ for (var item in OEE) {
|
|
|
+ for (var field in series_data) {
|
|
|
+ var position = OEEExtendSteeings[item][0].indexOf(field);
|
|
|
+ if (position != -1) {
|
|
|
+ series_data[field].push(OEE[item][0][_this.OEERateFields[position]]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ series_data[field].push(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ production.push(OEE[item][0].outputs);
|
|
|
+ }
|
|
|
+ _this.option_2.xAxis.data = x_data;
|
|
|
+ _this.option_2.legend.data = [];
|
|
|
+ _this.option_2.color = [];
|
|
|
+ _this.option_2.series = [];
|
|
|
+ var series_data_keys = Object.keys(series_data);
|
|
|
+ for (var i in series_data_keys) {
|
|
|
+ _this.option_2.series.push({
|
|
|
+ type: 'value',
|
|
|
+ name: series_data_keys[i],
|
|
|
+ data: series_data[series_data_keys[i]],
|
|
|
+ type: 'bar',
|
|
|
+ stack: "stack1",
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 12
|
|
|
+ }
|
|
|
+ });
|
|
|
+ _this.option_2.color.push(_this.color[i]);
|
|
|
+ _this.option_2.legend.data.push(series_data_keys[i]);
|
|
|
+ }
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ _this.option_2.series.push({
|
|
|
+ type: 'value',
|
|
|
+ name: '产能',
|
|
|
+ data: production,
|
|
|
+ type: 'bar',
|
|
|
+ axisLabel: {
|
|
|
+ formatter: '{value} pcs'
|
|
|
+ },
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 12
|
|
|
+ },
|
|
|
+ yAxisIndex: 1
|
|
|
+ })
|
|
|
+ _this.option_2.legend.data.push('产能');
|
|
|
+ _this.option_2.color.push('#546fc6');
|
|
|
+ }
|
|
|
+
|
|
|
+ _this.option_2.title.text = _this.parentNode.name + " " + params.name.replace("\r\n", " ") + " 单台稼动率明细";
|
|
|
+ $("#container2").show();
|
|
|
+
|
|
|
+ _this.myChart_2.clear();
|
|
|
+ _this.myChart_2.setOption(_this.option_2, true);//true重绘
|
|
|
+ _this.myChart_2.resize();
|
|
|
+ OEEExtendSetting2_Temp = _this.OEEExtendSetting2;
|
|
|
+ _this.outputInfo = params.name;
|
|
|
+ }
|
|
|
+ else if (chartIndex == 2) {
|
|
|
+ //汇总页第二个echarts柱状点击事件
|
|
|
+ OEETableData = _this.oees_2[Object.keys(_this.oees_2)[params.dataIndex]][0];
|
|
|
+ if (_this.period == 0) {
|
|
|
+ _this.outputInfo = OEETableData.date + " " + OEETableData.shift + " 【" + params.name + "】";
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ _this.outputInfo = OEETableData.date + " 【" + params.name + "】";
|
|
|
+ }
|
|
|
+ var machineid = _this.findKey(_this.parentNodes, params.name);
|
|
|
+ OEEExtendSetting2_Temp = _this.getOEEExtendSettings(machineid)[machineid][1];
|
|
|
+ }
|
|
|
+
|
|
|
+ var num;
|
|
|
+ if (_this.chamberflag) {
|
|
|
+ num = 2;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ num = 4;
|
|
|
+ }
|
|
|
+ OEEExtendSetting2_Temp.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ var width = num > 10 ? (100 / num) : 10;
|
|
|
+ var htmlstr = '<thead>< tr >'
|
|
|
+ + '<th style="width: ' + width + '%">时段</th>'
|
|
|
+ + '<th style="width: ' + width + '%">机种</th>';
|
|
|
+ OEEExtendSetting2_Temp.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ htmlstr += '<th style="width: ' + width + '%">' + row.replace("时间", "时间(min)") + '</th>';
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ htmlstr = htmlstr
|
|
|
+ + '<th style = "width: ' + width + '%"> 产能(pcs)</th>'
|
|
|
+ + '<th style="width: ' + width + '%">TT(s/pcs)</th>';
|
|
|
+ }
|
|
|
+
|
|
|
+ var moduleTypelist = [];
|
|
|
+ for (var item in OEETableData.outPutPerHours) {
|
|
|
+ if (!moduleTypelist.includes(OEETableData.outPutPerHours[item].moduleType)) {
|
|
|
+ moduleTypelist.push(OEETableData.outPutPerHours[item].moduleType);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_this.period == 0 || _this.period == 1) {
|
|
|
+ htmlstr = htmlstr + '<tbody><tr>'
|
|
|
+ + '<td>' + OEETableData.outPutPerHours[item].period + '</td>'
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ var datetime = moment(OEETableData.outPutPerHours[item].dataTime);
|
|
|
+ htmlstr = htmlstr + '<tbody><tr>'
|
|
|
+ + '<td>' + datetime.format('YYYY-MM-DD') + '</td>';
|
|
|
+ }
|
|
|
+
|
|
|
+ var datetime = moment(OEETableData.outPutPerHours[item].dataTime);
|
|
|
+ htmlstr = htmlstr + '<td>' + OEETableData.outPutPerHours[item].moduleType + '</td>';
|
|
|
+ OEEExtendSetting2_Temp.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ if (i <= 5) {
|
|
|
+ htmlstr = htmlstr + '<td>' + Math.round(OEETableData.outPutPerHours[item][_this.PerHourFields[i]] / 60 * 10) / 10 + '</td>';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ htmlstr = htmlstr + '<td>' + OEETableData.outPutPerHours[item][_this.PerHourFields[i]] + '</td>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ htmlstr = htmlstr + '<td>' + OEETableData.outPutPerHours[item].outPut + '</td>'
|
|
|
+ + '<td>' + OEETableData.outPutPerHours[item].tt + '</td>'
|
|
|
+ + '</tr></tbody>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ htmlstr = htmlstr + '<tbody><tr>'
|
|
|
+ + '<td>合计</td>'
|
|
|
+ + '<td>' + moduleTypelist.toString() + '</td>';
|
|
|
+ OEEExtendSetting2_Temp.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ if (i <= 5) {
|
|
|
+ htmlstr = htmlstr + '<td>' + Math.round(OEETableData[_this.OEEFields[i]] / 60 * 10) / 10 + '</td>';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ htmlstr = htmlstr + '<td>' + OEETableData[_this.OEEFields[i]] + '</td>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ if (OEETableData.outputs != 0) {
|
|
|
+ TT = Math.round(OEETableData.runTime / OEETableData.outputs * 10) / 10;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ TT = 0;
|
|
|
+ }
|
|
|
+ htmlstr = htmlstr
|
|
|
+ + '<td>' + OEETableData.outputs + '</td>'
|
|
|
+ + '<td>' + TT + '</td>'
|
|
|
+ + '</tr></tbody>';
|
|
|
+ }
|
|
|
+ $("#data").html(htmlstr);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ //单台设备产能表格更新
|
|
|
+ var oee = _this.oees_1[Object.keys(this.oees_1)[0]][params.dataIndex];
|
|
|
+ var outputs = oee.outPutPerHours;
|
|
|
+ if (_this.period == 0) {
|
|
|
+ this.outputInfo = oee.date + ' ' + oee.shift;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ this.outputInfo = oee.date;
|
|
|
+ }
|
|
|
+ var num = 4;
|
|
|
+ _this.OEEExtendSetting2.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ var width = 100 / num;
|
|
|
+
|
|
|
+ var htmlstr = '<thead>< tr >'
|
|
|
+ + '<th style="width: ' + width + '%">时段</th>'
|
|
|
+ + '<th style="width: ' + width + '%">机种</th>';
|
|
|
+ _this.OEEExtendSetting2.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ htmlstr += '<th style="width: ' + width + '%">' + row.replace("时间", "时间(min)") + '</th>';
|
|
|
+ }
|
|
|
+ });
|
|
|
+ htmlstr = htmlstr
|
|
|
+ + '<th style = "width: ' + width + '%"> 产能(pcs)</th>'
|
|
|
+ + '<th style="width: ' + width + '%">TT(s/pcs)</th>';
|
|
|
+
|
|
|
+ var moduleTypelist = [];
|
|
|
+ for (var item in outputs) {
|
|
|
+ if (!moduleTypelist.includes(outputs[item].moduleType)) {
|
|
|
+ moduleTypelist.push(outputs[item].moduleType);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_this.period == 0 || _this.period == 1) {
|
|
|
+ htmlstr = htmlstr + '<tbody><tr>'
|
|
|
+ + '<td>' + outputs[item].period + '</td>'
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ var datetime = moment(outputs[item].dataTime);
|
|
|
+ htmlstr = htmlstr + '<tbody><tr>'
|
|
|
+ + '<td>' + datetime.format('YYYY-MM-DD') + '</td>';
|
|
|
+ }
|
|
|
+
|
|
|
+ var datetime = moment(outputs[item].dataTime);
|
|
|
+ htmlstr = htmlstr + '<td>' + outputs[item].moduleType + '</td>';
|
|
|
+ _this.OEEExtendSetting2.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ if (i <= 5) {
|
|
|
+ htmlstr = htmlstr + '<td>' + Math.round(outputs[item][_this.PerHourFields[i]] / 60 * 10) / 10 + '</td>';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ htmlstr = htmlstr + '<td>' + outputs[item][_this.PerHourFields[i]] + '</td>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ htmlstr = htmlstr + '<td>' + outputs[item].outPut + '</td>'
|
|
|
+ + '<td>' + outputs[item].tt + '</td>'
|
|
|
+ + '</tr></tbody>';
|
|
|
+ }
|
|
|
+ htmlstr = htmlstr + '<tbody><tr>'
|
|
|
+ + '<td>合计</td>'
|
|
|
+ + '<td>' + moduleTypelist.toString() + '</td>';
|
|
|
+ _this.OEEExtendSetting2.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ if (i <= 5) {
|
|
|
+ htmlstr = htmlstr + '<td>' + Math.round(oee[_this.OEEFields[i]] / 60 * 10) / 10 + '</td>';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ htmlstr = htmlstr + '<td>' + oee[_this.OEEFields[i]] + '</td>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ var TT = 0;
|
|
|
+ if (oee.outputs != 0) {
|
|
|
+ TT = Math.round(oee.runTime / oee.outputs * 10) / 10;
|
|
|
+ }
|
|
|
+ htmlstr = htmlstr
|
|
|
+ + '<td>' + oee.outputs + '</td>'
|
|
|
+ + '<td>' + TT + '</td>'
|
|
|
+ + '</tr></tbody>';
|
|
|
+ $("#data").html(htmlstr);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //获取产线设备数据并更新目录
|
|
|
+ getProductionLineMachineTree() {
|
|
|
+ let _this = this;
|
|
|
+ var setting = {
|
|
|
+ view: {
|
|
|
+ showIcon: false
|
|
|
+ },
|
|
|
+ callback: {
|
|
|
+ onClick: function (event, treeId, treeNode) {
|
|
|
+ _this.selected();
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ ///下拉框
|
|
|
+ var setting1 = {
|
|
|
+ check: {
|
|
|
+ enable: true,
|
|
|
+ nocheckInherit: true,
|
|
|
+ chkboxType: { "Y": "ps", "N": "ps" }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $.ajax({
|
|
|
+ url: '/ProductionLine/GetProductionLineMachineTreeV1',
|
|
|
+ type: 'GET',
|
|
|
+ async: false,
|
|
|
+ success: function (zNodes) {
|
|
|
+ _this.zTreeObj = $.fn.zTree.init($('#productionLineTree'), setting, zNodes);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ },
|
|
|
+ //查询按钮点击事件,获取数据并更行echarts1
|
|
|
+ getOEES() {
|
|
|
+ let _this = this
|
|
|
+ var nodes = _this.zTreeObj.getSelectedNodes()[0];
|
|
|
+ if (nodes == null) {
|
|
|
+ alert("请选择设备!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if ($("#selectPeroid").val() == 0 && Math.floor(Math.abs(Date.parse($("#date2").val()) - Date.parse($("#date1").val())) / (1000 * 3600 * 24)) > 10) {
|
|
|
+ alert("按班统计时,不可超过10日!!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if ($("#selectPeroid").val() == 1 && Math.floor(Math.abs(Date.parse($("#date2").val()) - Date.parse($("#date1").val())) / (1000 * 3600 * 24)) > 20) {
|
|
|
+ alert("按天统计时,不可超过20日!!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ _this.period = $("#selectPeroid").val();
|
|
|
+ _this.chamberflag = false;
|
|
|
+ if (nodes.name == "汇总") {
|
|
|
+ _this.summaryflag = true;
|
|
|
+ _this.parentNodes = {};
|
|
|
+ var parentNodes = nodes.getParentNode();
|
|
|
+ _this.parentNode = parentNodes;
|
|
|
+ if (parentNodes.name == "Y5 Chamber") {
|
|
|
+ _this.chamberflag = true;
|
|
|
+ }
|
|
|
+ parentNodes.children.forEach(function (item) {
|
|
|
+ if (item.name != "汇总") {
|
|
|
+ _this.parentNodes[item.id] = item.name;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $("#container2").hide();
|
|
|
+ _this.summaryflag = false;
|
|
|
+ if (nodes.name.includes("Chamber")) {
|
|
|
+ _this.chamberflag = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var OEESettings = _this.getOEEExtendSettings(nodes.id);
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ _this.OEEExtendSetting1 = OEESettings[nodes.id][0];
|
|
|
+ _this.OEEExtendSetting2 = OEESettings[nodes.id][1];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ _this.OEEExtendSetting1 = OEESettings[nodes.id.split(',')[0]][0];
|
|
|
+ _this.OEEExtendSetting2 = OEESettings[nodes.id.split(',')[0]][1];
|
|
|
+ }
|
|
|
+ _this.period = $("#selectPeroid").val();
|
|
|
+
|
|
|
+ $.ajax({
|
|
|
+ url: '/ReportForm/GetMachineStatisticV4',
|
|
|
+ type: 'POST',
|
|
|
+ async: true,
|
|
|
+ data: {
|
|
|
+ "id": nodes.id,
|
|
|
+ "startTime": $("#date1").val(),
|
|
|
+ "endTime": $("#date2").val(),
|
|
|
+ "peroid": _this.period,
|
|
|
+ "dayOrnight": 0
|
|
|
+ },
|
|
|
+ success: function (rev) {
|
|
|
+ if (rev.code === 0) {
|
|
|
+ _this.oees_1 = rev.data;
|
|
|
+ _this.option_1.series = [];
|
|
|
+ _this.option_1.legend.data = [];
|
|
|
+ _this.option_1.color = [];
|
|
|
+ var xData = [];
|
|
|
+ var devicenum = 0;
|
|
|
+ var production = [];
|
|
|
+ var agvdatalist = [[], [], [], [], [], []];
|
|
|
+ for (var i in rev.data) {
|
|
|
+ for (var k in rev.data[i]) {
|
|
|
+ if (devicenum == 0) {
|
|
|
+ if ($("#selectPeroid").val() == 0) {
|
|
|
+ xData.push(rev.data[i][k].date + '\r\n' + rev.data[i][k].shift);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ xData.push(rev.data[i][k].date);
|
|
|
+ }
|
|
|
+ agvdatalist[0].push(rev.data[i][k].runTimeRate);
|
|
|
+ agvdatalist[1].push(rev.data[i][k].idelTimeRate);
|
|
|
+ agvdatalist[2].push(rev.data[i][k].downTimeRate);
|
|
|
+ agvdatalist[3].push(rev.data[i][k].loadMATTimeRate);
|
|
|
+ agvdatalist[4].push(rev.data[i][k].reservedOneTimeRate);
|
|
|
+ agvdatalist[5].push(rev.data[i][k].reservedThreeTimeRate);
|
|
|
+ production.push(rev.data[i][k].outputs);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ agvdatalist[0][k] += rev.data[i][k].runTimeRate;
|
|
|
+ agvdatalist[1][k] += rev.data[i][k].idelTimeRate;
|
|
|
+ agvdatalist[2][k] += rev.data[i][k].downTimeRate;
|
|
|
+ agvdatalist[3][k] += rev.data[i][k].loadMATTimeRate;
|
|
|
+ agvdatalist[4][k] += rev.data[i][k].reservedOneTimeRate;
|
|
|
+ agvdatalist[5][k] += rev.data[i][k].reservedThreeTimeRate;
|
|
|
+ production[k] += rev.data[i][k].outputs;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ devicenum++;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (let i = 0; i < agvdatalist.length; i++) {
|
|
|
+ for (let j = 0; j < agvdatalist[i].length; j++) {
|
|
|
+ agvdatalist[i][j] = (agvdatalist[i][j] / devicenum).toFixed(2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var num = 0;
|
|
|
+ _this.OEEExtendSetting1.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ _this.option_1.series.push({
|
|
|
+ type: 'value',
|
|
|
+ name: row,
|
|
|
+ data: agvdatalist[i],
|
|
|
+ type: 'bar',
|
|
|
+ stack: "stack1",
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 12
|
|
|
+ }
|
|
|
+ })
|
|
|
+ _this.option_1.legend.data.push(row);
|
|
|
+ _this.option_1.color.push(_this.color[num]);
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ _this.option_1.series.push({
|
|
|
+ type: 'value',
|
|
|
+ name: '产能',
|
|
|
+ data: production,
|
|
|
+ type: 'bar',
|
|
|
+ axisLabel: {
|
|
|
+ formatter: '{value} pcs'
|
|
|
+ },
|
|
|
+ label: {
|
|
|
+ show: true,
|
|
|
+ color: 'white',
|
|
|
+ fontSize: 12
|
|
|
+ },
|
|
|
+ yAxisIndex: 1
|
|
|
+ })
|
|
|
+ _this.option_1.legend.data.push('产能');
|
|
|
+ _this.option_1.color.push('#546fc6');
|
|
|
+ }
|
|
|
+ _this.option_1.xAxis.data = xData;
|
|
|
+ _this.myChart_1.clear();
|
|
|
+ _this.myChart_1.setOption(_this.option_1, true);//true重绘
|
|
|
+
|
|
|
+ var param_temp = {
|
|
|
+ componentType: 'series',
|
|
|
+ name: _this.option_1.xAxis.data.slice(-1)[0],
|
|
|
+ dataIndex: _this.option_1.xAxis.data.length - 1
|
|
|
+ }
|
|
|
+ _this.getOutputs(param_temp, 1);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ alert(rev.message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ },
|
|
|
+ //导出产能数据 function参数(图表序号)
|
|
|
+ exportExcelTemplate(chartIndex) {
|
|
|
+ let _this = this;
|
|
|
+ var excelName = "";
|
|
|
+ var sheetName = 'sheet1';
|
|
|
+ var workbook = {
|
|
|
+ SheetNames: [sheetName],
|
|
|
+ Sheets: {}
|
|
|
+ };
|
|
|
+ var sheet = {};
|
|
|
+
|
|
|
+ if (chartIndex == 1) {
|
|
|
+ var colNamelist = ['日期'];
|
|
|
+ var colTimeFields = [];
|
|
|
+ var colRateFields = [];
|
|
|
+ var TimeDataList = [];
|
|
|
+ var RateDataList = [];
|
|
|
+ var flag = 0;
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ colNamelist.push('产量(pcs)');
|
|
|
+ }
|
|
|
+
|
|
|
+ _this.OEEExtendSetting2.forEach(function (row, i) {
|
|
|
+ if (i < 6 && row != "") {
|
|
|
+ colNamelist.push(row);
|
|
|
+ colTimeFields.push(_this.OEEFields[i]);
|
|
|
+ TimeDataList.push([]);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ _this.OEEExtendSetting1.forEach(function (row, i) {
|
|
|
+ if (row != "") {
|
|
|
+ colNamelist.push(row);
|
|
|
+ colRateFields.push(_this.OEERateFields[i]);
|
|
|
+ RateDataList.push([]);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ var devicenum = 0;
|
|
|
+ var dateproductionlist = [[], []];
|
|
|
+ var oee_data = _this.oees_1;
|
|
|
+ for (var item in oee_data) {
|
|
|
+ for (var k in oee_data[item]) {
|
|
|
+ if (devicenum == 0) {
|
|
|
+ if (_this.period == 0) {
|
|
|
+ dateproductionlist[0].push(oee_data[item][k].date + ' ' + oee_data[item][k].shift);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ dateproductionlist[0].push(oee_data[item][k].date);
|
|
|
+ }
|
|
|
+
|
|
|
+ dateproductionlist[1].push(oee_data[item][k].outputs);
|
|
|
+ }
|
|
|
+ colTimeFields.forEach(function (row, i) {
|
|
|
+ if (TimeDataList[i][k] == undefined) {
|
|
|
+ TimeDataList[i][k] = parseFloat(oee_data[item][k][row]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ TimeDataList[i][k] += parseFloat(oee_data[item][k][row]);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ colRateFields.forEach(function (row, i) {
|
|
|
+ if (RateDataList[i][k] == undefined) {
|
|
|
+ RateDataList[i][k] = parseFloat(oee_data[item][k][row]);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ RateDataList[i][k] += parseFloat(oee_data[item][k][row]);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ devicenum++;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rownum = dateproductionlist[0].length + 1;
|
|
|
+ sheet['!ref'] = 'A1:' + String.fromCharCode(64 + colNamelist.length) + rownum;
|
|
|
+ sheet['!cols'] = [];
|
|
|
+ for (let i = 0; i < colNamelist.length; i++) {
|
|
|
+ sheet['!cols'].push({ wch: 14 });
|
|
|
+ sheet[String.fromCharCode(65 + i) + 1] = { t: "s", v: colNamelist[i].replace("时间", "时间(min)").replace("率", "率(%)") };
|
|
|
+ }
|
|
|
+
|
|
|
+ for (var i in dateproductionlist[0]) {
|
|
|
+ var j = 0;
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (parseInt(i) + 2)] = { v: dateproductionlist[0][i] };
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (parseInt(i) + 2)] = { v: dateproductionlist[1][i] };
|
|
|
+ }
|
|
|
+ for (var k in TimeDataList) {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (parseInt(i) + 2)] = { v: Math.round(TimeDataList[k][i] / 60 * 10) / 10 };
|
|
|
+ }
|
|
|
+ for (var k in RateDataList) {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (parseInt(i) + 2)] = { v: Math.round(RateDataList[k][i] / devicenum * 100) / 100 };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ excelName = _this.parentNode.name + " " + _this.zTreeObj.getSelectedNodes()[0].name;
|
|
|
+ }
|
|
|
+ else if (chartIndex == 2) {
|
|
|
+ var colTimeNames = [];
|
|
|
+ var colRateNames = [];
|
|
|
+ var colNamelist = ['设备', '日期'];
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ colNamelist.push('产量(pcs)');
|
|
|
+ }
|
|
|
+ var oee_data = _this.oees_2;
|
|
|
+ var ids = Object.keys(_this.parentNodes).toString();
|
|
|
+ var OEEExtendSteeings = _this.getOEEExtendSettings(ids);
|
|
|
+ for (var item in OEEExtendSteeings) {
|
|
|
+ for (var j in OEEExtendSteeings[item][1]) {
|
|
|
+ var str_temp = OEEExtendSteeings[item][1][j];
|
|
|
+ if (str_temp != "" && j < 6 && colTimeNames.indexOf(str_temp) == -1) {
|
|
|
+ colTimeNames.push(str_temp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (var j in OEEExtendSteeings[item][0]) {
|
|
|
+ var str_temp = OEEExtendSteeings[item][0][j];
|
|
|
+ if (str_temp != "" && colRateNames.indexOf(str_temp) == -1) {
|
|
|
+ colRateNames.push(str_temp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ colTimeNames.forEach(function (row) {
|
|
|
+ colNamelist.push(row);
|
|
|
+ })
|
|
|
+ colRateNames.forEach(function (row) {
|
|
|
+ colNamelist.push(row);
|
|
|
+ })
|
|
|
+
|
|
|
+ var rownum = Object.keys(oee_data).length + 1;
|
|
|
+ sheet['!ref'] = 'A1:' + String.fromCharCode(64 + colNamelist.length) + rownum;
|
|
|
+ sheet['!cols'] = [];
|
|
|
+ for (let i = 0; i < colNamelist.length; i++) {
|
|
|
+ sheet['!cols'].push({ wch: 14 });
|
|
|
+ sheet[String.fromCharCode(65 + i) + 1] = { t: "s", v: colNamelist[i].replace("时间", "时间(min)").replace("率", "率(%)") };
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var row_Index = 0;
|
|
|
+ for (var item in oee_data) {
|
|
|
+ var j = 0;
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (row_Index + 2)] = { v: _this.parentNodes[item] };
|
|
|
+ if (_this.period == 0) {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (row_Index + 2)] = { v: oee_data[item][0].date + ' ' + oee_data[item][0].shift };
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (row_Index + 2)] = { v: oee_data[item][0].date };
|
|
|
+ }
|
|
|
+ if (!_this.chamberflag) {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (row_Index + 2)] = { v: oee_data[item][0].outputs };
|
|
|
+ }
|
|
|
+ colTimeNames.forEach(function (row, i) {
|
|
|
+ var index = OEEExtendSteeings[item][1].indexOf(row);
|
|
|
+ if (index != -1) {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (row_Index + 2)] = { v: oee_data[item][0][_this.OEEFields[index]] };
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (row_Index + 2)] = { v: 0 };
|
|
|
+ }
|
|
|
+ })
|
|
|
+ colRateNames.forEach(function (row, i) {
|
|
|
+ var index = OEEExtendSteeings[item][0].indexOf(row);
|
|
|
+ if (index != -1) {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (row_Index + 2)] = { v: oee_data[item][0][_this.OEERateFields[index]] };
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sheet[String.fromCharCode(65 + (j++)) + (row_Index + 2)] = { v: 0 };
|
|
|
+ }
|
|
|
+ })
|
|
|
+ row_Index++;
|
|
|
+ }
|
|
|
+ excelName = _this.parentNode.name + " 单台";
|
|
|
+ }
|
|
|
+
|
|
|
+ workbook.Sheets[sheetName] = sheet;
|
|
|
+
|
|
|
+ // 生成excel的配置项
|
|
|
+ var wopts = {
|
|
|
+ bookType: 'xlsx', // 要生成的文件类型
|
|
|
+ bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
|
|
|
+ type: 'binary'
|
|
|
+ };
|
|
|
+ var wbout = XLSX.write(workbook, wopts);
|
|
|
+ var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" });
|
|
|
+
|
|
|
+ // 字符串转ArrayBuffer
|
|
|
+ function s2ab(s) {
|
|
|
+ var buf = new ArrayBuffer(s.length);
|
|
|
+ var view = new Uint8Array(buf);
|
|
|
+ for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
|
|
|
+ return buf;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.openDownloadDialog(blob, excelName + '-稼动数据' + '.xlsx');
|
|
|
+ },
|
|
|
+ openDownloadDialog(url, saveName) {
|
|
|
+ if (typeof url == 'object' && url instanceof Blob) {
|
|
|
+ url = URL.createObjectURL(url); // 创建blob地址
|
|
|
+ }
|
|
|
+ var aLink = document.createElement('a');
|
|
|
+ aLink.href = url;
|
|
|
+ aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
|
|
|
+ var event;
|
|
|
+ if (window.MouseEvent) event = new MouseEvent('click');
|
|
|
+ else {
|
|
|
+ event = document.createEvent('MouseEvents');
|
|
|
+ event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
|
|
+ }
|
|
|
+ aLink.dispatchEvent(event);
|
|
|
+ },
|
|
|
+ //根据选择的period更新时间选择框
|
|
|
+ selected() {
|
|
|
+ var v = $("#selectPeroid").val();
|
|
|
+ if (v == 0 || v == 1 || v == 2 || v == "") {
|
|
|
+ $(".date").datepicker("destroy");
|
|
|
+ $(".date").datepicker({
|
|
|
+ minViewMode: 'days',
|
|
|
+ format: 'yyyy-mm-dd',
|
|
|
+ language: 'zh-CN',
|
|
|
+ autoclose: true,
|
|
|
+ todayBtn: 'linked'
|
|
|
+ }).on('changeDate', function () {
|
|
|
+
|
|
|
+ }).on('keydown', function (e) {
|
|
|
+ return false;
|
|
|
+ });
|
|
|
+ var date1;
|
|
|
+ if (v == 0) {
|
|
|
+ date1 = new Date(new Date().setDate(new Date().getDate() - 7));
|
|
|
+ }
|
|
|
+ else if (v == 1) {
|
|
|
+ date1 = new Date(new Date().setDate(new Date().getDate() - 14));
|
|
|
+ }
|
|
|
+ else if (v == 2) {
|
|
|
+ date1 = new Date(new Date().setDate(new Date().getDate() - 21));
|
|
|
+ }
|
|
|
+ var date2 = new Date(new Date().setDate(new Date().getDate() - 1));
|
|
|
+ var date1_1 = moment(date1);
|
|
|
+ var date2_1 = moment(date2);
|
|
|
+ $("#date1").datepicker('update', date1_1.format('YYYY-MM-DD'));
|
|
|
+ $("#date2").datepicker('update', date2_1.format('YYYY-MM-DD'));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $(".date").datepicker("destroy");
|
|
|
+ $(".date").datepicker({
|
|
|
+ minViewMode: 'months',
|
|
|
+ format: 'yyyy-mm',
|
|
|
+ language: 'zh-CN',
|
|
|
+ autoclose: true,
|
|
|
+ todayBtn: 'linked'
|
|
|
+ }).on('changeDate', function () {
|
|
|
+
|
|
|
+ }).on('keydown', function (e) {
|
|
|
+ return false;
|
|
|
+ });
|
|
|
+ var date1 = new Date(new Date().setDate(new Date().getDate() - 30));
|
|
|
+ var date2 = new Date(new Date().setDate(new Date().getDate() - 1));
|
|
|
+ var date1_1 = moment(date1);
|
|
|
+ var date2_1 = moment(date2);
|
|
|
+ $("#date1").datepicker('update', date1_1.format('YYYY-MM'));
|
|
|
+ $("#date2").datepicker('update', date2_1.format('YYYY-MM'));
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //获取设备的自定义标签信息 参数ids(id1,id2,……,id3,id4)
|
|
|
+ getOEEExtendSettings(ids) {
|
|
|
+ var temp = {};
|
|
|
+ var _this = this;
|
|
|
+ if (ids != "") {
|
|
|
+ $.ajax({
|
|
|
+ url: '/ReportForm/GetOEEExtendSetting',
|
|
|
+ type: 'POST',
|
|
|
+ async: false,
|
|
|
+ data: {
|
|
|
+ "ids": ids
|
|
|
+ },
|
|
|
+ success: function (rst) {
|
|
|
+ if (rst.code == 0) {
|
|
|
+ for (var item in rst.data) {
|
|
|
+ var OEEExtendSetting1_temp = ["稼动率", "待料率", "故障率"];
|
|
|
+ var OEEExtendSetting2_temp = ["运行时间", "待料时间", "故障时间"];
|
|
|
+ var templist1 = ["", "", ""];
|
|
|
+ var templist2 = ["", "", "", "", "", ""];
|
|
|
+ var settinglist = rst.data[item].split(",");
|
|
|
+ if (settinglist.length == 5) {
|
|
|
+ for (let i = 0; i < 5; i = i + 2) {
|
|
|
+ if (settinglist[i] != "") {
|
|
|
+ templist1[i / 2] = settinglist[i].replace("时间", "率");
|
|
|
+ templist2[i / 2] = settinglist[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (let i = 1; i < 5; i = i + 2) {
|
|
|
+ if (settinglist[i] != "") {
|
|
|
+ templist2[(i - 1) / 2 + 4] = settinglist[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ templist2[3] = _this.chamberflag ? "" : "报警次数";
|
|
|
+ temp[item] = [OEEExtendSetting1_temp.concat(templist1), OEEExtendSetting2_temp.concat(templist2)];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return temp;
|
|
|
+ },
|
|
|
+ //根据value获取key
|
|
|
+ findKey(obj, value, compare = (a, b) => a === b) {
|
|
|
+ Object.keys(obj).find(k => {
|
|
|
+ compare(obj[k], value)
|
|
|
+ })
|
|
|
+ return Object.keys(obj).find(k => compare(obj[k], value))
|
|
|
+ }
|
|
|
+ },
|
|
|
+ filters: {
|
|
|
+
|
|
|
+ },
|
|
|
+ created: function () {
|
|
|
+
|
|
|
+ },
|
|
|
+ destroyed: function () {
|
|
|
+
|
|
|
+ }
|
|
|
+})
|