| | |
| | | <meta charset="UTF-8"> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | | <title>智能制造可视化</title> |
| | | <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> |
| | | <%-- <script src="https://csdn.jsdelivr.net/npm/chart.js"></script>--%> |
| | | |
| | | |
| | | <style> |
| | | body { |
| | | font-family: Arial, sans-serif; |
| | |
| | | background-color: #007bff; |
| | | color: white; |
| | | } |
| | | #biaoti{ |
| | | color:black; |
| | | margin-left: 350px; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | <div class="container"> |
| | | <div id="app" class="container"> |
| | | <!-- Header Section --> |
| | | <div class="header"> |
| | | <h1>北玻智能可视化</h1> |
| | | <div class="date-time"> |
| | | <span>数据更新时间: 2025-03-31 12:50:52</span> |
| | | </div> |
| | | <%-- <div class="date-time">--%> |
| | | <%-- <span>数据更新时间: 2025-04-31 12:50:52</span>--%> |
| | | <%-- </div>--%> |
| | | <!-- 搜索栏 --> |
| | | <div class="search-bar"> |
| | | <!-- 产业下拉框 --> |
| | |
| | | |
| | | <!-- 产品大类下拉框 --> |
| | | <select id="product-category-select"> |
| | | <option value="">选择产品大类</option> |
| | | <option value="产品大类1">产品大类1</option> |
| | | <option value="产品大类2">产品大类2</option> |
| | | <option value="产品大类3">产品大类3</option> |
| | | <option value="">全部</option> |
| | | <option value="1">消毒柜</option> |
| | | <option value="2">蒸烤箱</option> |
| | | <option value="3">烟机</option> |
| | | </select> |
| | | |
| | | <!-- 工程下拉框 --> |
| | | <select id="project-select"> |
| | | <option value="">莱阳厨电</option> |
| | | <option value="工程1">工程1</option> |
| | | |
| | | </select> |
| | | |
| | | <!-- 开始日期 --> |
| | |
| | | <input type="date" id="end-date" /> |
| | | |
| | | <!-- 查询按钮 --> |
| | | <button onclick="filterData()">查询</button> |
| | | |
| | | <button @click="filterData()">查询</button> |
| | | <h2 id="biaoti">{{title}}</h2> |
| | | <!-- 重置按钮 --> |
| | | <button class="reset-btn" onclick="resetFilters()">重置</button> |
| | | <%-- <button class="reset-btn" onclick="resetFilters()">重置</button>--%> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | <div class="top-blocks"> |
| | | <div class="top-block"> |
| | | <div class="title">计划完成率</div> |
| | | <div class="value">111.26%</div> |
| | | <div class="value">76.00%</div> |
| | | </div> |
| | | <div class="top-block"> |
| | | <div class="title">工程不良率</div> |
| | |
| | | |
| | | <!-- Chart Section --> |
| | | <div class="chart-container"> |
| | | <!-- 第一个趋势图 (柱状图 - 订单计划和订单完成) --> |
| | | <div class="chart"> |
| | | <canvas id="trendChart1"></canvas> |
| | | </div> |
| | | <!-- 第二个趋势图 (柱状图 - 工程不良台数和工程不良率) --> |
| | | <div class="chart"> |
| | | <canvas id="trendChart2"></canvas> |
| | | </div> |
| | | <!-- 第三个趋势图 (柱状图 - 停机时长和停机时率) --> |
| | | <div class="chart"> |
| | | <canvas id="trendChart3"></canvas> |
| | | </div> |
| | | <div id="trendChart1" class="chart"></div> |
| | | <div id="trendChart2" class="chart"></div> |
| | | <div id="trendChart3" class="chart"></div> |
| | | <!-- 显示曲线图 --> |
| | | <div id="trendChart4" class="chart"></div> |
| | | |
| | | </div> |
| | | |
| | | <!-- Table Section --> |
| | | <div class="side-visual"> |
| | | <table class="data-table"> |
| | | <thead> |
| | | <tr> |
| | | <th>日期</th> |
| | | <th>产品名称</th> |
| | | <th>工厂名称</th> |
| | | <th>线体</th> |
| | | <th>订单计划</th> |
| | | <th>订单完成</th> |
| | | <th>差异</th> |
| | | <th>计划完成率</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody id="table-body"> |
| | | <tr> |
| | | <td>2025-03-30</td> |
| | | <td>智能家电</td> |
| | | <td>菜阳原电</td> |
| | | <td>清毒桶线</td> |
| | | <td>7,098</td> |
| | | <td>7,897</td> |
| | | <td>799</td> |
| | | <td>111.26%</td> |
| | | </tr> |
| | | <tr> |
| | | <td>2025-03-30</td> |
| | | <td>厨房电</td> |
| | | <td>菜阳原电</td> |
| | | <td>焊机A线</td> |
| | | <td>1,898</td> |
| | | <td>2,478</td> |
| | | <td>580</td> |
| | | <td>130.56%</td> |
| | | </tr> |
| | | <tr> |
| | | <td>2025-03-30</td> |
| | | <td>厨房电</td> |
| | | <td>菜阳原电</td> |
| | | <td>焊机B线</td> |
| | | <td>2,300</td> |
| | | <td>2,300</td> |
| | | <td>0</td> |
| | | <td>100.00%</td> |
| | | </tr> |
| | | <tr> |
| | | <td>2025-03-30</td> |
| | | <td>厨房电</td> |
| | | <td>菜阳原电</td> |
| | | <td>厨房自清洁</td> |
| | | <td>2,300</td> |
| | | <td>2,300</td> |
| | | <td>0</td> |
| | | <td>100.00%</td> |
| | | </tr> |
| | | </tbody> |
| | | </table> |
| | | <table class="table table-striped table-hover data-table" style="overflow-x: auto;font-size: 12px;"> |
| | | <thead> |
| | | <tr> |
| | | <th>日期</th> |
| | | <th>产品名称</th> |
| | | <th>工厂名称</th> |
| | | <th>线体</th> |
| | | <th>订单计划</th> |
| | | <th>订单完成</th> |
| | | <th>差异</th> |
| | | <th>计划完成率</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | <tr v-for="(item, index) in shuzu" :key="index"> |
| | | <td>{{ item['0_createtime'] || '暂无数据' }}</td> |
| | | <td>{{ item['1_type'] || '暂无数据' }}</td> |
| | | <td>{{ item['2_factory'] || '暂无数据' }}</td> |
| | | <td>{{ item['3_line'] || '暂无数据' }}</td> |
| | | <td>{{ item['4_plan'] || 0 }}</td> |
| | | <td>{{ item['5_overnum'] || 0 }}</td> |
| | | <td>{{ item['6_difference'] || '暂无数据' }}</td> |
| | | <td>{{ item['7_plan_completion_rate'] || '暂无数据' }}%</td> |
| | | </tr> |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | <!-- Chart.js Script --> |
| | | <script src="../js/jquery-3.4.1.min.js"></script> |
| | |
| | | shuzu:[{}], |
| | | shuzu1:[{}], |
| | | shuzu2:[{}], |
| | | yield:[{}], |
| | | machineElectric:[{}], |
| | | machineWater:[{}], |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | val1: { |
| | | borderColor:'#082352', |
| | | title: { |
| | | // text: '成品库存', |
| | | // left: '290px', |
| | | // top: '0px' |
| | | text:'合格率',//主标题文本 |
| | | left:'center', |
| | | top:'45%', |
| | | left:'50%', |
| | | textStyle:{ |
| | | color:'#454c5c', |
| | | align:'center' |
| | | }, |
| | | subtextStyle:{ |
| | | fontFamily : "微软雅黑", |
| | | color:'#6c7a89', |
| | | } |
| | | |
| | | }, |
| | | |
| | | tooltip: { |
| | | trigger: 'item', |
| | | textStyle:{ |
| | | } |
| | | }, |
| | | legend: { |
| | | // orient: 'vertical', |
| | | left: 'left', |
| | | textStyle:{ |
| | | |
| | | } |
| | | }, |
| | | textStyle:{ |
| | | |
| | | }, |
| | | series: [ |
| | | { |
| | | |
| | | type: 'pie', |
| | | radius : ['40%','70%'], |
| | | center: ['50%', '50%'], |
| | | minAngle:'15', |
| | | label: { |
| | | // position: 'inside', |
| | | show: true, |
| | | formatter(param) { |
| | | // correct the percentage |
| | | return param.name + ' (' + param.percent + '%)'; |
| | | } |
| | | }, |
| | | data: [ |
| | | { value: 300, name: '成品',itemStyle:{color:'#53a2ff'} }, |
| | | { value: 700, name: '次品',itemStyle:{color:'darkseagreen'} } |
| | | ], |
| | | itemStyle: { |
| | | normal:{ |
| | | label:{ |
| | | show:true, |
| | | //formatter: "{b} :\n {c} \n ({d}%)", |
| | | formatter: "{b} :\n ({d}%)", |
| | | position:"inner" |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | ] |
| | | }, |
| | | val1: {}, |
| | | title:"<%= request.getParameter("name") %>", |
| | | |
| | | }, |
| | | methods:{ |
| | | // 提交一次查询刷新 |
| | | filterData() { |
| | | // 获取产品类别 |
| | | const type = document.getElementById('product-category-select').value; |
| | | // 获取日期选择器的值 |
| | | const startDate = document.getElementById('start-date').value; |
| | | const endDate = document.getElementById('end-date').value; |
| | | |
| | | dingdanxiangqing(){ |
| | | let HisArr=""; |
| | | // HisArr = this.$echarts.init(document.getElementById('main2')); |
| | | let a = { |
| | | value: this.shuzu1[0]['6_qualified'], |
| | | // 构造查询参数 |
| | | let canshu1={ |
| | | line:<%= request.getParameter("id") %>, |
| | | type: type, |
| | | startDate: startDate, |
| | | endDate: endDate |
| | | } |
| | | // 清空当前数据 |
| | | this.shuzu = []; |
| | | this.shuzu1 = []; |
| | | // console.log("输出"); |
| | | // console.log(canshu1); |
| | | // 拼接SQL查询语句 |
| | | let sql="{call machine_bigScreen('"+canshu1.line+"','"+canshu1.startDate+"','"+canshu1.endDate+"','"+canshu1.type+"')}"; |
| | | let flag = 2; |
| | | this.loadAjxss('任务查询成功', sql, flag, "shuzu"); |
| | | let sql1="{call machine_bigScreen24('"+canshu.line+"')}"; |
| | | let flag1 = 2; |
| | | // 调用数据加载函数(例如AJAX请求) |
| | | this.loadAjxss('任务查询成功', sql1, flag1, "shuzu1"); |
| | | //console.log(this.shuzu); |
| | | }, |
| | | |
| | | name: "成品", |
| | | itemStyle: { color: '#53a2ff' }, |
| | | label:{fontSize:30} |
| | | echarsInit() { |
| | | let datashijian = []; |
| | | let plans = []; |
| | | let overnums = []; |
| | | |
| | | // 遍历 shuzu 数组提取日期、计划数和完成数 |
| | | for (let i in this.shuzu) { |
| | | // 这里将 createtime 转换成 "MM/DD" 格式的日期 |
| | | let date = this.shuzu[i]["0_createtime"]; |
| | | let day = new Date(date); |
| | | let formattedDate = (day.getMonth() + 1) + "/" + day.getDate(); // 格式化日期 |
| | | datashijian.push(formattedDate); |
| | | |
| | | plans.push(this.shuzu[i]["4_plan"]); // 提取计划数 |
| | | overnums.push(this.shuzu[i]["5_overnum"]); // 提取完成数 |
| | | } |
| | | let b = { |
| | | value: this.shuzu1[0]['7_qualified_not'], |
| | | name: "次品", |
| | | itemStyle: { color: 'darkseagreen' }, |
| | | label:{fontSize:30} |
| | | |
| | | } |
| | | this.val1.title.text="合格率" |
| | | this.val1.title.top="45%" |
| | | this.val1.title.left="45%" |
| | | this.val1.title.textStyle.fontSize=30 |
| | | this.val1.series[0].data[0]=a |
| | | this.val1.series[0].data[1]=b |
| | | // 选择图表容器 |
| | | let HisArr = this.$echarts.init(document.getElementById('trendChart1')); |
| | | |
| | | // 设置 ECharts 配置 |
| | | let option = { |
| | | tooltip: { trigger: 'axis' }, |
| | | legend: { data: ['订单计划', '订单完成'] }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: datashijian |
| | | }, |
| | | yAxis: { type: 'value' }, |
| | | series: [ |
| | | { |
| | | name: '订单计划', |
| | | type: 'bar', |
| | | data: plans, // 使用提取的计划数数据 |
| | | itemStyle: { color: 'rgba(54, 162, 235, 1)' }, // 设置颜色 |
| | | barWidth: '40%' // 设置柱状图宽度 |
| | | }, |
| | | { |
| | | name: '订单完成', |
| | | type: 'bar', |
| | | data: overnums, // 使用提取的完成数数据 |
| | | itemStyle: { color: 'rgba(75, 192, 192, 1)' }, // 设置颜色 |
| | | barWidth: '40%' // 设置柱状图宽度 |
| | | } |
| | | ] |
| | | }; |
| | | |
| | | HisArr.setOption(this.val1); |
| | | this.loading=false |
| | | // 设置图表 |
| | | HisArr.setOption(option); |
| | | this.loading = false; // 结束加载状态 |
| | | }, |
| | | dingdanxiangqing1(){ |
| | | let HisArr=""; |
| | | // HisArr = this.$echarts.init(document.getElementById('main4')); |
| | | let a = { |
| | | value: this.shuzu1[0]['2_smallglass_completed'], |
| | | echarsInit3() { |
| | | let datashijian = []; |
| | | let shutdownTimes = []; |
| | | |
| | | name: "已完成", |
| | | itemStyle: { color: '#53a2ff' }, |
| | | label:{fontSize:30} |
| | | // 检查数据是否存在 |
| | | // 遍历 shuzu 数据提取停机时长数据 |
| | | for (let i in this.shuzu) { |
| | | let date = this.shuzu[i]["0_createtime"]; |
| | | let shutdownNum = this.shuzu[i]["8_shutdownNum"]; |
| | | |
| | | // 格式化日期 |
| | | let day = new Date(date); |
| | | let formattedDate = (day.getMonth() + 1) + "/" + day.getDate(); |
| | | datashijian.push(formattedDate); |
| | | // 停机时长 |
| | | shutdownTimes.push(shutdownNum); |
| | | } |
| | | // 初始化图表 |
| | | let HisArr = this.$echarts.init(document.getElementById('trendChart3')); |
| | | |
| | | } |
| | | let b = { |
| | | value: this.shuzu1[0]['3_smallglass_processing'], |
| | | name: "未完成", |
| | | itemStyle: { color: 'darkseagreen' }, |
| | | label:{fontSize:30} |
| | | let option = { |
| | | tooltip: { trigger: 'axis' }, |
| | | legend: { data: ['停机时长(分)'] }, |
| | | |
| | | } |
| | | this.val1.title.text="订单加工" |
| | | this.val1.title.top="45%" |
| | | this.val1.title.left="45%" |
| | | this.val1.title.textStyle.fontSize=30 |
| | | this.val1.series[0].data[0]=a |
| | | this.val1.series[0].data[1]=b |
| | | HisArr.setOption(this.val1); |
| | | this.loading=false |
| | | xAxis: { |
| | | type: 'category', |
| | | data: datashijian |
| | | }, |
| | | yAxis: { type: 'value' }, |
| | | series: [ |
| | | { |
| | | name: '停机时长(分)', |
| | | type: 'bar', |
| | | data: shutdownTimes, |
| | | itemStyle: { color: 'rgba(255, 99, 132, 1)' }, // 可根据需要调整颜色 |
| | | barWidth: '40%' // 调整柱宽 |
| | | } |
| | | ] |
| | | }; |
| | | |
| | | HisArr.setOption(option); |
| | | this.loading = false; |
| | | }, |
| | | updateLineChart() { |
| | | let datatime = []; |
| | | let sum = []; |
| | | let hourFormatted |
| | | for (let i in this.shuzu1) { |
| | | let hours = this.shuzu1[i]["0_hour"]; |
| | | let production = this.shuzu1[i]["1_total_num"]; |
| | | hourFormatted = new Date(hours).getHours().toString().padStart(2, '0') + ":00"; |
| | | datatime.push(hourFormatted); |
| | | sum.push(production); |
| | | |
| | | } |
| | | let HisArr = this.$echarts.init(document.getElementById('trendChart4')); |
| | | const option = { |
| | | xAxis: { |
| | | type: 'category', |
| | | data: datatime, |
| | | axisLabel: { |
| | | formatter: '{value}:00' |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value' |
| | | }, |
| | | series: [{ |
| | | data: sum, |
| | | type: 'line', |
| | | smooth: true, |
| | | lineStyle: { |
| | | color: 'blue' |
| | | } |
| | | }] |
| | | }; |
| | | |
| | | // 使用新数据更新曲线图 |
| | | HisArr.setOption(option); |
| | | HisArr.resize(); |
| | | this.loading = false; |
| | | } |
| | | |
| | | }, |
| | | watch:{ |
| | | |
| | | shuzu1(){ |
| | | // this.dingdanxiangqing(), |
| | | // this.dingdanxiangqing1() |
| | | } |
| | | |
| | | shuzu(){ |
| | | this.echarsInit(); |
| | | this.echarsInit3(); |
| | | this.updateLineChart(); |
| | | }, |
| | | }, |
| | | async mounted(){ |
| | | |
| | | let sql="" |
| | | let flag=2 |
| | | sql="{call AXJ_dapingxianshi_dingdanshuju2('下片')}" |
| | | this.loadAjxss('大屏总订单数据',sql,flag,"shuzu1") |
| | | // 获取选中的产品类别 |
| | | const type = document.getElementById('product-category-select').value; |
| | | // 获取日期选择器的值 |
| | | const startDate = document.getElementById('start-date').value; |
| | | const endDate = document.getElementById('end-date').value; |
| | | let canshu={ |
| | | line:<%= request.getParameter("id") %>, |
| | | type: type, |
| | | startDate: startDate, |
| | | endDate: endDate |
| | | } |
| | | this.shuzu = []; |
| | | let sql="{call machine_bigScreen('"+canshu.line+"','"+canshu.startDate+"','"+canshu.endDate+"','"+canshu.type+"')}"; |
| | | let flag = 2; |
| | | this.loadAjxss('任务查询成功',sql,flag,"shuzu"); |
| | | |
| | | this.shuzu1 = []; |
| | | let sql1="{call machine_bigScreen24('"+canshu.line+"')}"; |
| | | let flag1 = 2; |
| | | this.loadAjxss('任务查询成功',sql1,flag1,"shuzu1"); |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | await setInterval(()=>{ |
| | | // 获取选中的产品类别 |
| | | const type = document.getElementById('product-category-select').value; |
| | | // 获取日期选择器的值 |
| | | const startDate = document.getElementById('start-date').value; |
| | | const endDate = document.getElementById('end-date').value; |
| | | let canshu={ |
| | | line:<%= request.getParameter("id") %>, |
| | | type: type, |
| | | startDate: startDate, |
| | | endDate: endDate |
| | | } |
| | | // console.log("输出:"); |
| | | // console.log(canshu); |
| | | sql="{call machine_bigScreen('"+canshu.line+"','"+canshu.startDate+"','"+canshu.endDate+"','"+canshu.type+"')}"; |
| | | this.interValLoadAjxs('任务查询成功',sql,flag,"shuzu") |
| | | |
| | | sql="{call AXJ_dapingxianshi_dingdanshuju2('下片')}" |
| | | this.interValLoadAjxs('大屏总订单数据',sql,flag,"shuzu1") |
| | | sql1="{call machine_bigScreen24('"+canshu.line+"')}"; |
| | | this.loadAjxss('24小时产量查询',sql1,flag1,"shuzu1"); |
| | | },5000) |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | }) |
| | | // 初始化数据 |
| | | const initialData = { |
| | | labels: ['2025-03-30', '2025-03-31', '2025-04-01'], |
| | | datasets: [{ |
| | | label: '订单计划', |
| | | data: [7098, 8000, 8500], |
| | | backgroundColor: 'rgba(54, 162, 235, 0.2)', |
| | | borderColor: 'rgba(54, 162, 235, 1)', |
| | | borderWidth: 1 |
| | | }, { |
| | | label: '订单完成', |
| | | data: [7897, 8200, 8700], |
| | | backgroundColor: 'rgba(75, 192, 192, 0.2)', |
| | | borderColor: 'rgba(75, 192, 192, 1)', |
| | | borderWidth: 1 |
| | | }] |
| | | }; |
| | | // 初始化 ECharts 图表 |
| | | const trendChart1 = echarts.init(document.getElementById('trendChart1')); |
| | | const trendChart2 = echarts.init(document.getElementById('trendChart2')); |
| | | const trendChart3 = echarts.init(document.getElementById('trendChart3')); |
| | | const trendChart4 = echarts.init(document.getElementById('trendChart4')); |
| | | // 获取当前日期 |
| | | const currentDate = new Date(); |
| | | |
| | | const ctx1 = document.getElementById('trendChart1').getContext('2d'); |
| | | const trendChart1 = new Chart(ctx1, { |
| | | type: 'bar', |
| | | data: initialData |
| | | }); |
| | | // 设置结束日期为明天 |
| | | // currentDate.setDate(currentDate.getDate() + 1); |
| | | // const endDate = currentDate.toISOString().split('T')[0]; |
| | | // document.getElementById('end-date').value = endDate; |
| | | // |
| | | // // 设置开始日期为三天前 |
| | | // currentDate.setDate(currentDate.getDate() - 3); // 恢复到三天前 |
| | | // const startDate = currentDate.toISOString().split('T')[0]; |
| | | // document.getElementById('start-date').value = startDate; |
| | | |
| | | const ctx2 = document.getElementById('trendChart2').getContext('2d'); |
| | | const trendChart2 = new Chart(ctx2, { |
| | | type: 'bar', |
| | | data: { |
| | | labels: ['2025-03-30', '2025-03-31', '2025-04-01'], |
| | | datasets: [{ |
| | | label: '工程不良台数', |
| | | data: [5, 3, 2], |
| | | backgroundColor: 'rgba(75, 192, 192, 0.2)', |
| | | borderColor: 'rgba(75, 192, 192, 1)', |
| | | borderWidth: 1 |
| | | }, { |
| | | label: '工程不良率', |
| | | |
| | | |
| | | // 配置第二个图表 (柱状图 - 工程不良台数和工程不良率) |
| | | const option2 = { |
| | | tooltip: { |
| | | trigger: 'axis' |
| | | }, |
| | | legend: { |
| | | data: ['工程不良台数', '工程不良率'] |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: ['2025-03-30', '2025-03-31', '2025-04-01'] |
| | | }, |
| | | yAxis: { |
| | | type: 'value' |
| | | }, |
| | | series: [{ |
| | | name: '工程不良台数', |
| | | type: 'bar', |
| | | data: [5, 3, 2], |
| | | itemStyle: { |
| | | color: 'rgba(75, 192, 192, 1)' |
| | | } |
| | | }, |
| | | { |
| | | name: '工程不良率', |
| | | type: 'bar', |
| | | data: [0.01, 0.02, 0.03], |
| | | backgroundColor: 'rgba(255, 99, 132, 0.2)', |
| | | borderColor: 'rgba(255, 99, 132, 1)', |
| | | borderWidth: 1 |
| | | }] |
| | | } |
| | | }); |
| | | itemStyle: { |
| | | color: 'rgba(255, 99, 132, 1)' |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | trendChart2.setOption(option2); |
| | | |
| | | const ctx3 = document.getElementById('trendChart3').getContext('2d'); |
| | | const trendChart3 = new Chart(ctx3, { |
| | | type: 'bar', |
| | | data: { |
| | | labels: ['2025-03-30', '2025-03-31', '2025-04-01'], |
| | | datasets: [{ |
| | | label: '停机时长', |
| | | data: [1, 2, 3], |
| | | backgroundColor: 'rgba(255, 159, 64, 0.2)', |
| | | borderColor: 'rgba(255, 159, 64, 1)', |
| | | borderWidth: 1 |
| | | }, { |
| | | label: '停机时率', |
| | | data: [0.02, 0.03, 0.04], |
| | | backgroundColor: 'rgba(153, 102, 255, 0.2)', |
| | | borderColor: 'rgba(153, 102, 255, 1)', |
| | | borderWidth: 1 |
| | | }] |
| | | } |
| | | }); |
| | | |
| | | //根据日期范围过滤数据 |
| | | function filterData() { |
| | | const startDate = document.getElementById('start-date').value; |
| | | const endDate = document.getElementById('end-date').value; |
| | | // 构建请求的参数 |
| | | const params = { |
| | | startDate: startDate, |
| | | endDate: endDate, |
| | | }; |
| | | |
| | | // 示例:假设您已经通过查询筛选了数据,下面模拟更新图表数据 |
| | | // 更新第一个趋势图 |
| | | trendChart1.data = { |
| | | labels: ['2025-03-30', '2025-03-31'], |
| | | datasets: [{ |
| | | label: '订单计划', |
| | | data: [7098, 8000], |
| | | backgroundColor: 'rgba(54, 162, 235, 0.2)', |
| | | borderColor: 'rgba(54, 162, 235, 1)', |
| | | borderWidth: 1 |
| | | }, { |
| | | label: '订单完成', |
| | | data: [7897, 8200], |
| | | backgroundColor: 'rgba(75, 192, 192, 0.2)', |
| | | borderColor: 'rgba(75, 192, 192, 1)', |
| | | borderWidth: 1 |
| | | }] |
| | | }; |
| | | trendChart2.data = { |
| | | labels: ['2025-03-30', '2025-03-31'], |
| | | datasets: [{ |
| | | label: '工程不良台数', |
| | | data: [5, 3,], |
| | | backgroundColor: 'rgba(75, 192, 192, 0.2)', |
| | | borderColor: 'rgba(75, 192, 192, 1)', |
| | | borderWidth: 1 |
| | | }, { |
| | | label: '工程不良率', |
| | | data: [0.01, 0.02], |
| | | backgroundColor: 'rgba(255, 99, 132, 0.2)', |
| | | borderColor: 'rgba(255, 99, 132, 1)', |
| | | borderWidth: 1 |
| | | }] |
| | | }; |
| | | trendChart3.data = { |
| | | labels: ['2025-03-30', '2025-03-31'], |
| | | datasets: [{ |
| | | label: '停机时长', |
| | | data: [1, 2], |
| | | backgroundColor: 'rgba(255, 159, 64, 0.2)', |
| | | borderColor: 'rgba(255, 159, 64, 1)', |
| | | borderWidth: 1 |
| | | }, { |
| | | label: '停机时率', |
| | | data: [0.02, 0.03], |
| | | backgroundColor: 'rgba(153, 102, 255, 0.2)', |
| | | borderColor: 'rgba(153, 102, 255, 1)', |
| | | borderWidth: 1 |
| | | }] |
| | | }; |
| | | trendChart1.update(); |
| | | trendChart2.update(); |
| | | trendChart3.update(); |
| | | } |
| | | |
| | | // 重置搜索栏 |
| | | function resetFilters() { |
| | | document.getElementById('start-date').value = ''; |
| | | document.getElementById('end-date').value = ''; |
| | | } |
| | | |
| | | |
| | | |
| | | </script> |
| | | |