let table, layer, form; let myChart = null, myChart2 = null; const tipsArr = [ '定期开展技能培训与考核,并对施工工具进行例行检查,确保安全与效率。', '加强技能培训,定期组织考试,同时落实施工工具的日常检查制度。', '定期安排技能培训及考核,并严格执行施工工具的定期检查管理。', '持续强化技能培训与考核,同时确保施工工具按时检查,保障作业安全。', '定期组织技能培训和考试,并做好施工工具的维护与定期检查工作。', ]; layui.use(['layer', 'table', 'form'], function () { layer = layui.layer; table = layui.table; form = layui.form; // 响应成功后的拦截器 $.ajaxSetup({ beforeSend: function (xhr, options) { var originalSuccess = options.success options.success = function (data, textStatus, jqXhr) { data = modifyResponseData(data); // success(data,textStatus, jqXhr); originalSuccess.apply(this, arguments) } } }) initTable(); }); function initTable() { let userName = $('#userName').val(); let teamName = $('#teamName').val(); let bidCode = parent.parent.$('#bidPro').val() const url = commonUrl + "screen/largeScreen/workerEfficiency/getList"; table.render({ elem: '#demo2', id: 'demo2', url: url, skin: 'line', page: true, height: 'full-140', headers: { "decrypt": "decrypt", "Authorization": token }, where: { bidCode: bidCode, teamName: teamName, userName: userName, }, cols: [[ { type: 'numbers', title: '序号', width: '6%' }, // 添加序号列 { field: 'userName', title: '班组长', align: 'center', width: '10%' }, { field: 'teamName', title: '班组', align: 'center', width: '15%' }, { field: 'gxName', title: '工序', align: 'center', width: '35%', templet: function (d) { if (d.gxName) { if (d.gxName.length > 100) { return '' + d.gxName.substring(0, 100) + '...' } else { return '' + d.gxName + '' } } else { return ''; } } }, { field: 'planDay', title: '计划完成天数', align: 'center', width: '12%', }, { field: 'actualDay', title: '实际完成天数', align: 'center', width: '12%', }, /* { field: 'workStandard', title: '作业内容', align: 'center', width: '19%', templet: function (d) { if (d.workStandard) { if (d.workStandard.length > 60) { return '' + d.workStandard.substring(0, 60) + '...' } else { return '' + d.workStandard + '' } } else { return ''; } } }, */ { title: '效率评级', align: 'center', width: '10%', templet: function (d) { let color = '', title = ''; let planDay = d.planDay; let actualDay = d.actualDay; if (planDay > actualDay ) { color = 'green', title = '高效'; } else if (planDay === actualDay) { color = 'yellow', title = '达标'; } else if (planDay < actualDay) { color = 'red', title = '低效'; } return '

' + title + '

'; } } ]], initComplete: function () { // 在表格渲染完成后,重新渲染序号列 var that = this.elem.next(); var tool = that.children('.layui-table-box').children('.layui-table-fixed').children('.layui-table-body').children('.layui-table'); tool.find("tr").each(function (index, item) { $(this).find('td[data-field="LAY_TABLE_INDEX"]').text(index + 1); }); }, done: function (res, curr, count, origin) { // console.log(res); if (res.data && res.data.length > 0) { initEcharts(res.data[0]); } } }) table.on('row(demo2)', function (obj) { initEcharts(obj.data); }); } function query() { let userName = $('#userName').val(); let teamName = $('#teamName').val(); let bidCode = parent.parent.$('#bidPro').val() table.reload("demo2", { page: { curr: 1, }, where: { bidCode: bidCode, teamName: teamName, userName: userName, }, }, ); } // 初始化 echarts function initEcharts(data) { if (myChart && myChart2) { myChart.dispose(); myChart2.dispose(); } myChart = echarts.init(document.getElementById("oneEcharts")); myChart2 = echarts.init(document.getElementById("twoEcharts")); $('#suggestion').empty(); initEchartsOne(data); let planDay = data.planDay; let actualDay = data.actualDay; if (planDay < actualDay) { initEchartsTwo(data); const randomIndex = Math.floor(Math.random() * tipsArr.length); // 生成 0~4 的随机整数 const randomItem = tipsArr[randomIndex]; $('#suggestion').append('

建议:'+randomItem+'

'); } } function average(a, b) { return +((a + b) / 2).toFixed(3); // 限制 10 位小数 } function initEchartsOne(obj) { const data = [obj.actualDay]; const data2 = [obj.planDay]; const colorArr1 = ["rgba(11, 83, 128)", "rgba(2, 143, 224)", "#2a7fcc"]; const colorArr2 = ["rgb(12, 109, 122)", "rgba(1, 241, 228)", "#5ce1d6"]; var color1 = { type: "linear", x: 0, x2: 1, y: 0, y2: 0, colorStops: [ { offset: 0, color: colorArr1[0], }, { offset: 0.5, color: colorArr1[0], }, { offset: 0.5, color: colorArr1[1], }, { offset: 1, color: colorArr1[1], }, ], }; var color2 = { type: "linear", x: 0, x2: 1, y: 0, y2: 0, colorStops: [ { offset: 0, color: colorArr2[0], }, { offset: 0.5, color: colorArr2[0], }, { offset: 0.5, color: colorArr2[1], }, { offset: 1, color: colorArr2[1], }, ], }; var barWidth = 18; const option = { backgroundColor: 'transparent', legend: { top: '3%', right: '3%', textStyle: { fontSize: '12px', color: '#FFF', } }, tooltip: { trigger: 'axis', formatter: function (params) { var str = params[0].name + ":"; let gxName = ''; if (obj.gxName) { if (obj.gxName.length > 80) { gxName = obj.gxName.substring(0, 80) + '...' ; } else { gxName = obj.gxName; } } str += "
" + "工序:" + gxName; params.filter(function (item) { if (item.componentSubType == "bar") { str += "
" + item.seriesName + ":" + item.value; } }); return str; }, }, //图表大小位置限制 /* grid: { x: '5%', x2: '5%', y: '5%', y2: '5%', }, */ xAxis: { data: [obj.userName], //坐标轴 axisLine: { show: true, lineStyle: { width: 1, color: '#214776' }, textStyle: { color: '#fff', fontSize: '10' } }, type: 'category', axisLabel: { textStyle: { color: '#C5DFFB', fontWeight: 500, fontSize: '14' } }, axisTick: { textStyle: { color: '#fff', fontSize: '16' }, show: false, }, axisLine: { //坐标轴轴线相关设置。数学上的x轴 show: true, lineStyle: { type: 'dashed',//线的类型 虚线 color: '#DEDEDE', }, }, }, yAxis: { name: '效率对标分析', nameTextStyle: { color: '#DEDEDE', fontSize: 12, padding: 10, }, // min: 0,//最小 // max: obj.max,//最大 // interval: obj.interval,//相差 type: 'value', splitLine: { show: true, lineStyle: { type: 'dashed',//线的类型 虚线0 opacity: 0.2//透明度 }, }, axisTick: { show: false }, axisLine: { show: false, }, //坐标值标注 axisLabel: { show: true, textStyle: { color: '#C5DFFB', } }, }, series: [ { z: 1, name: '实际天数', type: "bar", barWidth: barWidth, barGap: "0%", data: data, itemStyle: { normal: { color: color1, } }, }, { z: 3, name: '实际天数', type: "pictorialBar", symbolPosition: "end", data: data, symbol: "diamond", symbolOffset: ["-75%", "-60%"], symbolSize: [18, 12], itemStyle: { normal: { borderWidth: 2, color: colorArr1[2] }, }, }, { z: 1, name: '计划天数', type: "bar", barWidth: barWidth, barGap: "50%", data: data2, itemStyle: { normal: { color: color2, } }, }, { z: 3, name: '计划天数', type: "pictorialBar", symbolPosition: "end", data: data2, symbol: "diamond", symbolOffset: ["75%", "-60%"], symbolSize: [18, 12], itemStyle: { normal: { borderWidth: 2, color: colorArr2[2] }, }, tooltip: { show: false, }, }, ], } myChart.setOption(option, true); window.addEventListener("resize", function () { myChart.resize(); }); } /* 变化趋势 */ function initEchartsTwo(data) { let nameList = ['专业技能不足', '工具故障','设备维保','环境变化']; let valueList = [{ name: '专业技能不足', value: 4 }, { name: '工具故障', value: 1 },{ name: '设备维保', value: 1 },{ name: '环境变化', value: 1 }]; const option = { grid: { top: 0, bottom: 0, left: 0, right: 0, }, /* title: { text: "效率低下原因", x: "center", }, */ title: [ // 中心比例 { text: '效率低下原因', x: 'center', textStyle: { fontSize: 16, color: '#fff', // fontWeight: 'bold', }, }], tooltip: { trigger: "item", formatter: "{a}
{b} : {c} ({d}%)", }, legend: { show: false, data: nameList, }, series: [ { name: "效率低下分析", type: "pie", radius: "65%", center: ["50%", "50%"], label: { show: true, formatter: "{b} {d}%", }, data: valueList, }, ], }; myChart2.setOption(option, true); window.addEventListener("resize", function () { myChart2.resize(); }); }