diff --git a/ruoyi-admin/src/main/resources/templates/index.html b/ruoyi-admin/src/main/resources/templates/index.html index c9451405..7b5ab723 100644 --- a/ruoyi-admin/src/main/resources/templates/index.html +++ b/ruoyi-admin/src/main/resources/templates/index.html @@ -181,7 +181,7 @@
  • - -
    +
    +
    成品料号分析统计
    -
    -

    - - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    料号物料名称占比
    3325454555yk测试-原材料80%
    1000000000yk测试-原材料267%
    3325454564yk测试-原材料398%
    3325454554yk测试-原材料458%
    + +
    +

    + - + +

    +
    + +
    + + + + + + + + + + + + +
    料号物料名称占比
    +
    -
    +
    周产量
    -

    - - -

    -
    +
    +

    + - + +

    +
    + +
    - +
    @@ -106,7 +99,7 @@ 生产订单 料号 - 物业名称 + 物料名称 业务部 工程部 采购部 @@ -170,6 +163,46 @@ + + // + function getFinalProduct(limit = null){ + var beginDate = $("#finalProductBeginTime").val(); + var endDate = $("#finalProductEndTime").val(); + + var data = { + beginDate: beginDate, + endDate: endDate, + } + if(limit != null){ + data.limit = limit + } + $.ajax({ + url: '/system/makeorderbom/getIndexList', + method: 'GET', + data: data, + dataType: 'json', + success: function(responseData) { + var tbody = $('#materialTable tbody'); + tbody.empty(); // 清空现有内容 + // 遍历数据并生成表格行 + responseData.forEach(function(item) { + var row = ` + ${item.materialNo} + ${item.materialName} + ${item.orderRate}% + `; + tbody.append(row); + }); + if(responseData.length === 0){ + console.log("response:"+responseData.length); + var row = `该段时间内暂无物料数据`; + tbody.append(row); + } + }, + error: function(error) { + console.error('Error fetching data:', error); + } + }); + + } + + /*获取时间段(根据自然周划分)*/ + function getWeekRangesPastMonth() { + const result = []; + + var weekStartStr = $("#productionBeginTime").val(); + var weekStart = new Date(weekStartStr); + var weekEndStr = $("#productionEndTime").val(); + var weekEndTime = new Date(weekEndStr); + + // 检查是否成功创建了Date对象 + if (isNaN(weekStart.getTime())||isNaN(weekEndTime.getTime())) { + console.error("无法识别的日期格式,请确保输入正确的日期。"); + } else { + // 计算该日期所在周的第一天(即星期一) + const dayOfWeekStart = weekStart.getDay() || 7; // 如果是周日,则返回7 + weekStart.setDate(weekStart.getDate() - (dayOfWeekStart - 1)); + } + + while (weekStart < weekEndTime) { + const weekEnd = new Date(weekStart.getTime() + (6 * 24 * 60 * 60 * 1000)); // 每周结束于周日 + // 如果周末超过了当前日期,则调整为当前日期 + if (weekEnd > nowDate) { + weekEnd.setTime(nowDate.getTime()); + } + result.push({ + start: new Date(weekStart), // 使用new Date确保日期对象是独立的 + end: new Date(weekEnd) + }); + // 移动到下一周 + weekStart.setDate(weekStart.getDate() + 7); + } + return result; + } + + /*获取周产量*/ + function getWeekProduction(){ + const weekRanges = getWeekRangesPastMonth(); + var weekRangeStr = []; + weekRanges.forEach(week => { + var weekStr = formatDateWithoutYear(week.start) + '~' + formatDateWithoutYear(week.end); + weekRangeStr.push(weekStr); + }); + classificationPassRate.setOption({ + xAxis: { + data: weekRangeStr // 更新 x 轴的数据 + }, + }); + + var beginDate = $("#productionBeginTime").val(); + var endDate = $("#productionEndTime").val(); + + var data = { + beginDate: beginDate, + endDate: endDate, + } + var increments = []; + $.ajax({ + url: '/warehouse/storageOrder/getIndexList', + method: 'GET', + data: data, + dataType: 'json', + success: function(responseData) { + increments.push(0); + for (var i = 1; i < responseData.length; i++) { + var increment = responseData[i] - responseData[i - 1]; + increments.push(increment); + } + classificationPassRate.setOption({ + series:[ + { + name: "增量", + type: "line", + smooth: false, // 线条是否平滑 + itemStyle: { + normal: { + color: "#23c6c8", + label: { + show: true, + position: "top", + formatter: function(p) { + return p.value > 0 ? (p.value) : ''; + } + } + } + }, + data: increments, + }, + { + name: '数量', + data: responseData + } + ] + }); + }, + error: function(error) { + console.error('Error fetching data:', error); + } + }); + } + + + function initWeekProductionChart(){ + var classificationPassRateDom = document.getElementById('classificationPassRate'); + classificationPassRate = echarts.init(classificationPassRateDom, null, { + renderer: 'canvas', + useDirtyRect: false + }); + var classificationPassRateOption = { + title: { + textStyle: { + align: 'center', + color: '#fff', + fontSize: 20, + }, + top: '5%', + left: '5%', + }, + tooltip: { + trigger: "axis", + axisPointer: { + type: "shadow", + label: { + show: true + } + } + }, + xAxis: { + name:'时间', + type: 'category', + data: [], + axisTick: {show:true}, + axisLabel: { + show: true, + fontSize: 10, //设置坐标轴文本标签的字体大小 + }, + axisLine: { + symbol: ['none','arrow'], + symbolSize: [4, 4], + show: true, //隐藏X轴轴线 + /*lineStyle: { + color: 'blue' + }*/ + }, + }, + yAxis: { + name:'数量', + top: "1%", + axisTick: { + show: true //隐藏X轴刻度 + }, + type: 'value', + axisLabel: { + show: true, + fontSize: 10, //设置坐标轴文本标签的字体大小 + }, + axisLine: { + symbol: ['none','arrow'], + symbolSize: [4, 4], + show: true, //隐藏X轴轴线 + /*lineStyle: { + color: 'blue' + }*/ + }, + }, + legend: { + data: ["增量", "数量"], + right:"1%", + top: "1%", + textStyle: { + color: "black" + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '15%', + containLabel: true + }, + dataZoom: [ + { + type: 'slider', // 滑动条型数据区域缩放组件 + startValue: 0, // 初始时显示的第一个柱子的索引 + endValue: 3, // 初始时显示的最后一个柱子的索引(即前4个柱子) + height: 10, + top: '85%', // 将滑动条放置在图表下方 + showDataShadow: false, + textStyle: false, + }, + { + type: 'inside', // 支持鼠标滚轮和触控板缩放和平移 + startValue: 0, + endValue: 3, + showDataShadow: false, + } + ], + series: [ + { + name: "增量", + type: "line", + itemStyle: { + normal: { + color: "#23c6c8", + label: { + show: true, + position: "top", + formatter: function(p) { + return p.value > 0 ? (p.value) : ''; + } + } + } + }, + }, + { + name: "数量", + type: "bar", + barWidth: '20%', + areaStyle:{ + color: "black" + }, + itemStyle: { + normal: { + color:"#1c84c6" + } + }, + } + ] + }; + if (classificationPassRateOption && typeof classificationPassRateOption === 'object') { + classificationPassRate.setOption(classificationPassRateOption); + } + window.addEventListener('resize', classificationPassRate.resize); + } + + - +