diff --git a/js/pages/dataAnalysisOctober/engineeringSafetyAnalysis.js b/js/pages/dataAnalysisOctober/engineeringSafetyAnalysis.js index 898402c..c2599a9 100644 --- a/js/pages/dataAnalysisOctober/engineeringSafetyAnalysis.js +++ b/js/pages/dataAnalysisOctober/engineeringSafetyAnalysis.js @@ -1,5 +1,6 @@ let table, layer, form, laydate; -let myChart = null, myChart2 = null; +let ballMachineData = [] // 存储球机列表数据 +let selectedBallName = "" // 当前选中的球机名称 layui.use(['layer', 'table', 'form', 'laydate'], function () { layer = layui.layer; table = layui.table; @@ -15,9 +16,6 @@ layui.use(['layer', 'table', 'form', 'laydate'], function () { initTable(); // 工程安全分析-球机列表 getBallSelect() - - initTable2(); - }); function initTable(startTime, endTime) { @@ -71,10 +69,10 @@ function query() { endTime = ""; } initTable(startTime, endTime); + initTable2(startTime, endTime,selectedBallName); } function getBallSelect() { - const url = commonUrl + "screen/proSafety/selectBallSelect" ajaxRequestGet( url, @@ -101,60 +99,51 @@ function getBallSelect() { /* 实时检测赋值 */ function setData(data) { - if (data) { - console.log(data) - const dynamicList = document.getElementById('dynamic-list'); - dynamicList.innerHTML = ''; // 清空现有内容 + if (data && data.length > 0) { + ballMachineData = data + + const dynamicList = document.getElementById("dynamic-list") + dynamicList.innerHTML = "" // 清空现有内容 data.forEach((item, index) => { - const listItem = document.createElement('li'); - listItem.className = index === 0 ? 'layout check' : 'layout nocheck'; - listItem.textContent = item.ballName; - listItem.onclick = function() { - changeDynamicData(this, index); - }; - dynamicList.appendChild(listItem); - }); + const listItem = document.createElement("li") + listItem.className = index === 0 ? "layout check" : "layout nocheck" + listItem.textContent = item.ballName + listItem.onclick = function () { + changeDynamicData(this, index) + } + dynamicList.appendChild(listItem) + }) + + if (data.length > 0) { + selectedBallName = data[0].ballName + // 获取当前时间范围 + const startTime = $("#ID-laydate-start-date-1").val() || "" + const endTime = $("#ID-laydate-end-date-1").val() || "" + // 加载第一个球机的视频数据 + initTable2(startTime, endTime, selectedBallName) + } } } - function changeDynamicData(element, index){ + function changeDynamicData(element, index) { // 移除所有选中状态 - const dynamicItems = document.querySelectorAll('#dynamic-list .layout'); - dynamicItems.forEach(item => { - item.className = 'layout nocheck'; - }); + const dynamicItems = document.querySelectorAll("#dynamic-list .layout") + dynamicItems.forEach((item) => { + item.className = "layout nocheck" + }) // 设置当前选中项 - element.className = 'layout check'; + element.className = "layout check" - // 显示选中项信息 - const selectedItem = responseData.data[index]; - const display = document.getElementById('selected-data'); + selectedBallName = ballMachineData[index].ballName - let displayHTML = ` -
选中项: ${selectedItem.ballName}
-
索引: ${index}
- `; - - // 添加其他非空字段 - Object.keys(selectedItem).forEach(key => { - if (selectedItem[key] !== null && key !== 'ballName') { - displayHTML += `
${key}: ${selectedItem[key]}
`; - } - }); - display.innerHTML = displayHTML; + // 获取当前时间范围 + const startTime = $("#ID-laydate-start-date-1").val() || "" + const endTime = $("#ID-laydate-end-date-1").val() || "" + // 重新加载视频数据 + initTable2(startTime, endTime, selectedBallName) } - // 页面加载完成后初始化 - window.onload = function() { - // 默认选中第一个动态项 - const firstDynamicItem = document.querySelector('#dynamic-list .layout'); - if (firstDynamicItem) { - changeDynamicData(firstDynamicItem, 0); - } - }; - - } function initTable2(startTime, endTime,ballName) { @@ -168,125 +157,152 @@ function initTable2(startTime, endTime,ballName) { "Authorization": token }, data: { - startTime:'2025-10-12', - endTime:'2025-10-17', - ballName:'测试球机', + startTime:startTime, + endTime:endTime, + ballName:ballName, page: '1', limit: '10' }, - success: function (data) { - const container = document.getElementById('demo2-container'); - container.innerHTML = ''; // 清空容器 + success: (response) => { + const container = document.getElementById("demo2-container") + container.innerHTML = "" // 清空容器 + + if (response.code === 0 && response.data && response.data.length > 0) { + response.data.forEach((item) => { + const card = document.createElement("div") + card.className = "card" + card.style.cssText = `width: calc(20% - 10px);height: 150px;display: flex;flex-direction: column;overflow: hidden;cursor: pointer;` - if (data.data && data.data.length > 0) { - data.data.forEach(item => { - const card = document.createElement('div'); - card.className = 'card'; - card.style.cssText = ` width: calc(20% - 10px);height: 150px;background-color: #1a3a4c;border: none;border-radius: 8px;display: flex;flex-direction: column;overflow: hidden;`; // 创建图片区域 - const imgDiv = document.createElement('div'); - imgDiv.style.cssText = ` flex: 1;background-color: #2a4a5c;display: flex;align-items: center;justify-content: center;color: #fff;font-size: 12px;`; - imgDiv.textContent = data.name; - card.appendChild(imgDiv); + const imgDiv = document.createElement("div") + imgDiv.style.cssText = `flex: 1;display: flex;align-items: center;justify-content: center;overflow: hidden;` + + // 显示实际图片 + if (item.imagePath) { + const img = document.createElement("img") + img.src = commonUrl + item.imagePath // 拼接完整图片路径 + img.style.cssText = `width: 100%;height: 100%;object-fit: cover;` + img.onerror = function () { + // 图片加载失败时显示文字 + this.style.display = "none" + imgDiv.innerHTML = `${item.name || "图片加载失败"}` + } + imgDiv.appendChild(img) + } else { + imgDiv.innerHTML = `${item.name || "暂无图片"}` + } + + card.appendChild(imgDiv) + // 创建信息区域 - const infoDiv = document.createElement('div'); - infoDiv.style.cssText = `padding: 5px;background-color: #1a3a4c;color: #fff;font-size: 12px;display: flex;justify-content: space-between;`; + const infoDiv = document.createElement("div") + infoDiv.style.cssText = `padding: 5px;color: #fff;font-size: 12px;display: flex;justify-content: space-between;` - const dateSpan = document.createElement('span'); - dateSpan.textContent = item.createTime; + const dateSpan = document.createElement("span") + dateSpan.textContent = item.createTime || "XXX-XX-XX" - const statusSpan = document.createElement('span'); - statusSpan.textContent = data.name; + const statusSpan = document.createElement("span") + statusSpan.textContent = item.name || "未知" - infoDiv.appendChild(dateSpan); - infoDiv.appendChild(statusSpan); - card.appendChild(infoDiv); + infoDiv.appendChild(dateSpan) + infoDiv.appendChild(statusSpan) + card.appendChild(infoDiv) - container.appendChild(card); - }); + container.appendChild(card) + }) // 添加 Layui 分页 - layui.use('laypage', function () { - var laypage = layui.laypage; + layui.use("laypage", () => { + var laypage = layui.laypage laypage.render({ - elem: 'demo2-pagination', // 分页容器ID - count: data.data.length, // 总条数 - limit: 10, // 每页显示条数 - curr: 1, // 当前页 - layout: ['prev', 'page', 'next', 'skip', 'count', 'limit'], // 布局 - prev: '', // 上一页图标 - next: '', // 下一页图标 - theme: '#3ACAB8', // 主题色 - jump: function (obj, first) { - if (!first) { // 非首次触发 - // 获取当前页码和每页条数 - const currentPage = obj.curr; - const pageSize = obj.limit; + elem: "demo2-pagination", + count: response.total || response.data.length, // 使用total字段 + limit: 10, + curr: 1, + layout: ["prev", "page", "next", "skip", "count", "limit"], + prev: '', + next: '', + theme: "#3ACAB8", + jump: (obj, first) => { + if (!first) { + const currentPage = obj.curr + const pageSize = obj.limit - // 计算起始索引和结束索引 - const startIndex = (currentPage - 1) * pageSize; - const endIndex = startIndex + pageSize; - - // 重新获取数据(这里需要根据实际API调整) + // 重新获取数据 $.ajax({ - url: commonUrl + "screen/proSafety/selectProSafetyVideo", + url: url, type: "get", headers: { - "decrypt": "decrypt", - "Authorization": token + decrypt: "decrypt", + Authorization: token, }, data: { - startTime:startTime, - endTime:endTime, - ballName:ballName, + startTime: startTime, + endTime: endTime, + ballName: ballName, page: currentPage, - limit: pageSize + limit: pageSize, }, - success: function (data) { - // 清空容器 - const container = document.getElementById('demo2-container'); - container.innerHTML = ''; + success: (pageResponse) => { + const container = document.getElementById("demo2-container") + container.innerHTML = "" - // 渲染当前页的数据 - if (data.data && data.data.length > 0) { - const pageData = data.data.slice(startIndex, endIndex); + if (pageResponse.code === 0 && pageResponse.data && pageResponse.data.length > 0) { + pageResponse.data.forEach((item) => { + const card = document.createElement("div") + card.className = "card" + card.style.cssText = `width: calc(20% - 10px);height: 150px;display: flex;flex-direction: column;overflow: hidden;cursor: pointer;` - pageData.forEach(item => { - const card = document.createElement('div'); - card.className = 'card'; - card.style.cssText = ` width: calc(20% - 10px);height: 150px;background-color: #1a3a4c;border: none;border-radius: 8px;display: flex;flex-direction: column;overflow: hidden;`; + const imgDiv = document.createElement("div") + imgDiv.style.cssText = `flex: 1;display: flex;align-items: center;justify-content: center;overflow: hidden;` - // 创建图片区域 - const imgDiv = document.createElement('div'); - imgDiv.style.cssText = ` flex: 1;background-color: #2a4a5c;display: flex;align-items: center;justify-content: center;color: #fff;font-size: 12px;`; - imgDiv.textContent = '未带安全帽'; - card.appendChild(imgDiv); + if (item.imagePath) { + const img = document.createElement("img") + img.src = commonUrl + item.imagePath + img.style.cssText = `width: 100%;height: 100%;object-fit: cover;` + img.onerror = function () { + this.style.display = "none" + imgDiv.innerHTML = `${item.name || "图片加载失败"}` + } + imgDiv.appendChild(img) + } else { + imgDiv.innerHTML = `${item.name || "暂无图片"}` + } - // 创建信息区域 - const infoDiv = document.createElement('div'); - infoDiv.style.cssText = ` padding: 5px;background-color: #1a3a4c;color: #fff;font-size: 12px;display: flex;justify-content: space-between;`; + card.appendChild(imgDiv) - const dateSpan = document.createElement('span'); - dateSpan.textContent = item.date || 'XXX-XX-XX'; + const infoDiv = document.createElement("div") + infoDiv.style.cssText = `padding: 5px;color: #fff;font-size: 12px;display: flex;justify-content: space-between;` - const statusSpan = document.createElement('span'); - statusSpan.textContent = '未带安全帽'; + const dateSpan = document.createElement("span") + dateSpan.textContent = item.createTime || "XXX-XX-XX" - infoDiv.appendChild(dateSpan); - infoDiv.appendChild(statusSpan); - card.appendChild(infoDiv); + const statusSpan = document.createElement("span") + statusSpan.textContent = item.name || "未知" - container.appendChild(card); - }); + infoDiv.appendChild(dateSpan) + infoDiv.appendChild(statusSpan) + card.appendChild(infoDiv) + + container.appendChild(card) + }) } - } - }); + }, + }) } - } - }); - }); + }, + }) + }) + } else { + // 没有数据时显示提示 + container.innerHTML = '
暂无数据
' } - } + }, + error: (xhr, status, error) => { + console.error("视频数据加载失败:", error) + const container = document.getElementById("demo2-container") + container.innerHTML = '
数据加载失败
' + }, }); } diff --git a/js/pages/dataAnalysisOctober/environDetection.js b/js/pages/dataAnalysisOctober/environDetection.js index 0200732..63d0dd2 100644 --- a/js/pages/dataAnalysisOctober/environDetection.js +++ b/js/pages/dataAnalysisOctober/environDetection.js @@ -209,6 +209,31 @@ function initTemperatureHumidityChart(timeData, temperatureData, humidityData) { }, }, ], + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [ { name: "温度", @@ -312,6 +337,31 @@ function initNoiseChart(timeData, noiseData) { } } }, + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [ { name: '噪声', @@ -403,6 +453,31 @@ function initWindSpeedChart(timeData, noiseData) { } } }, + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [ { name: '噪声', @@ -523,6 +598,31 @@ function initAirQualityChart(timeData, pm25Data, pm10Data) { } } }, + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [ { name: 'PM2.5', diff --git a/js/pages/dataAnalysisOctober/proQualityAnalysis.js b/js/pages/dataAnalysisOctober/proQualityAnalysis.js index 6020bc3..12b4bbf 100644 --- a/js/pages/dataAnalysisOctober/proQualityAnalysis.js +++ b/js/pages/dataAnalysisOctober/proQualityAnalysis.js @@ -270,6 +270,31 @@ function initCivilEngineering(acceptItem, notAcceptItem,nameTitle) { color: '#BDC2C2', }, }, + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [ { type: 'custom', @@ -617,6 +642,31 @@ function initElectrical(acceptItem, notAcceptItem,nameTitle) { color: '#BDC2C2', }, }, + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [ { type: 'custom', diff --git a/js/pages/dataAnalysisOctober/projectProgress.js b/js/pages/dataAnalysisOctober/projectProgress.js index 9cb3359..bbd4f8b 100644 --- a/js/pages/dataAnalysisOctober/projectProgress.js +++ b/js/pages/dataAnalysisOctober/projectProgress.js @@ -76,7 +76,6 @@ function getProProgress(startTime, endTime) { var civilEngineeringEchartsData = civilEngineeringData["echarts"]; getCivilEngineering(civilEngineeringEchartsData) var civilEngineeringPercentData = civilEngineeringData["percent"]; - initCivilEngineeringPercent(civilEngineeringPercentData) } @@ -216,6 +215,31 @@ function initCivilEngineering(date, plannedCount, actualCount) { show: false, }, }], + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [{ name: '计划', type: 'line', @@ -392,6 +416,31 @@ function initElectrical(date, plannedCount, actualCount) { show: false, }, }], + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [{ name: '计划', type: 'line', diff --git a/js/pages/dataAnalysisOctober/resourceRateAnalysis.js b/js/pages/dataAnalysisOctober/resourceRateAnalysis.js index 4101340..7acb544 100644 --- a/js/pages/dataAnalysisOctober/resourceRateAnalysis.js +++ b/js/pages/dataAnalysisOctober/resourceRateAnalysis.js @@ -46,6 +46,7 @@ function getDeviceEcharts(){ console.log( data['deviceEcharts']) let deviceEchartsList = data['deviceEcharts']; //设备情况的echarts let deviceUtilization = data.deviceUtilization; //设备利用率 + document.getElementById("deviceUtilization").innerHTML = deviceUtilization +'%'; let efficiency = data['efficiency']; // 效率分析 getEfficiencyTable(efficiency) let todayDutyRate = data.todayDutyRate; //今日到岗率 @@ -53,6 +54,7 @@ function getDeviceEcharts(){ let workerEcharts = data['workerEcharts']; //一周到岗人数趋势 getTrend(workerEcharts) let workerUtilization = data.workerUtilization; //人员利用率 + document.getElementById("workerUtilization").innerHTML = workerUtilization +'%'; let yesterdayDutyRate = data.yesterdayDutyRate; //昨日到岗率 document.getElementById("yesterdayDutyRate").innerHTML = yesterdayDutyRate +'%'; } @@ -176,6 +178,31 @@ function initTrend(date,actualCount,shouldCount) { show: false, }, }], + "dataZoom": [{ + "show": true, + "height": 12, + "xAxisIndex": [ + 0 + ], + bottom:'8%', + "start": 10, + "end": 90, + handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z', + handleSize: '110%', + handleStyle:{ + color:"#d3dee5", + + }, + textStyle:{ + color:"#fff"}, + borderColor:"#90979c" + }, { + "type": "inside", + "show": true, + "height": 15, + "start": 1, + "end": 35 + }], series: [{ name: '实到', type: 'line', diff --git a/pages/dataAnalysisOctober/engineeringSafetyAnalysis.html b/pages/dataAnalysisOctober/engineeringSafetyAnalysis.html index 3f3dda3..e296671 100644 --- a/pages/dataAnalysisOctober/engineeringSafetyAnalysis.html +++ b/pages/dataAnalysisOctober/engineeringSafetyAnalysis.html @@ -96,9 +96,9 @@ .card { width: calc(20% - 10px); /* 每行五个,减去间距 */ height: 150px; - background-color: #1a3a4c; + /*background-color: #1a3a4c;*/ border: none; - border-radius: 8px; + /*border-radius: 8px;*/ display: flex; flex-direction: column; overflow: hidden; diff --git a/pages/dataAnalysisOctober/resourceRateAnalysis.html b/pages/dataAnalysisOctober/resourceRateAnalysis.html index 5786c11..9f0bf73 100644 --- a/pages/dataAnalysisOctober/resourceRateAnalysis.html +++ b/pages/dataAnalysisOctober/resourceRateAnalysis.html @@ -26,14 +26,13 @@ width: 100%; height: 100%; display: flex; - flex-direction: row; + flex-direction: column; } .left-box { width: 49.5%; hegiht: 100%; display: flex; - flex-direction: column; } .right-box { @@ -41,12 +40,11 @@ width: 49.5%; hegiht: 100%; display: flex; - flex-direction: column; } .box-one { width: 100%; - height: 33%; + height: 100%; } .box-two { @@ -265,7 +263,7 @@ .personnelStatus-top-box { box-shadow: 0px 0px 4px 0px rgba(8, 220, 224, 0.8); border-radius: 2px 2px 2px 2px; - height: 100%; + height: 50%; width: 32%; display: flex; flex-direction: column; @@ -281,9 +279,9 @@ } .personnel-card-title { - font-size: 14px; - margin: 15px 0 10px 0; - text-align: center; + font-size: 18px; + margin: 50px 0 10px 20px; + text-align: left; } .personnel-stat-row { @@ -468,61 +466,65 @@
-
-
-
-

75%

-

人员利用率

-
+ +
+
+
+
+

0%

+

人员利用率

+
+
+
+

0%

+

设备利用率

+
+
+ + + + + +
-
-

80%

-

设备利用率

-
+
+
+
+
+
+
-
-

90%

-

材料利用率

-
+
+
+
+
+
到岗情况
+
+
+
+
+ 今日到岗率 +
-
-
-
-
-
-
-
设备总数
-
18 -
-
-
-
-
-
-
在运设备总数
-
15 -
-
-
-
-
-
-
本月使用率
-
80% -
-
-
-
-
-
-
同比
-
+3% -
-
+
+
+
+
+ 昨日到岗率
+
+
+
+
+
+ + +
diff --git a/pages/dataAnalysisOctober/workerEfficiencyAnalysis.html b/pages/dataAnalysisOctober/workerEfficiencyAnalysis.html new file mode 100644 index 0000000..960e77d --- /dev/null +++ b/pages/dataAnalysisOctober/workerEfficiencyAnalysis.html @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + 工人效率分析 + + +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+ +
+
+ + + + +