123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=Edge">
- <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
- <title>流水线管理页</title>
- <!-- Favicon-->
- <link rel="icon" href="favicon.ico" type="image/x-icon">
- <!-- Google Fonts -->
- <link href="css/cyllic.css" rel="stylesheet" type="text/css">
- <link href="css/mateial.css" rel="stylesheet" type="text/css">
- <!-- Bootstrap Core Css -->
- <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css"
- integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
- <!-- Waves Effect Css -->
- <link href="plugins/node-waves/waves.css" rel="stylesheet"/>
- <!-- Animation Css -->
- <link href="plugins/animate-css/animate.css" rel="stylesheet"/>
- <!-- Morris Chart Css-->
- <link href="plugins/morrisjs/morris.css" rel="stylesheet"/>
- <!-- Custom Css -->
- <link href="css/style.css" rel="stylesheet">
- <!-- AdminBSB Themes. You can choose a theme from css/themes instead of get all themes -->
- <link href="css/themes/all-themes.css" rel="stylesheet"/>
- <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
- <script src="https://cdn.bootcss.com/popper.js/1.12.9/umd/popper.min.js"
- integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
- crossorigin="anonymous"></script>
- <script src="https://cdn.bootcss.com/bootstrap/4.0.0/js/bootstrap.min.js"
- integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
- crossorigin="anonymous"></script>
- <link rel="icon" href="https://static.jianshukeji.com/highcharts/images/favicon.ico">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style>
- /* css 代码 */
- </style>
- <script src="https://img.hcharts.cn/highcharts/highcharts.js"></script>
- <script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script>
- <script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script>
- <script src="https://img.hcharts.cn/highcharts/themes/dark-unica.js"></script>
- <script language="JavaScript">
- function startTime()
- {
- var today=new Date();//定义日期对象
- var yyyy = today.getFullYear();//通过日期对象的getFullYear()方法返回年
- var MM = today.getMonth()+1;//通过日期对象的getMonth()方法返回年
- var dd = today.getDate();//通过日期对象的getDate()方法返回年
- var hh=today.getHours();//通过日期对象的getHours方法返回小时
- var mm=today.getMinutes();//通过日期对象的getMinutes方法返回分钟
- var ss=today.getSeconds();//通过日期对象的getSeconds方法返回秒
- // 如果分钟或小时的值小于10,则在其值前加0,比如如果时间是下午3点20分9秒的话,则显示15:20:09
- MM=checkTime(MM);
- dd=checkTime(dd);
- mm=checkTime(mm);
- ss=checkTime(ss);
- var day; //用于保存星期(getDay()方法得到星期编号)
- if(today.getDay()==0) day = "星期日 "
- if(today.getDay()==1) day = "星期一 "
- if(today.getDay()==2) day = "星期二 "
- if(today.getDay()==3) day = "星期三 "
- if(today.getDay()==4) day = "星期四 "
- if(today.getDay()==5) day = "星期五 "
- if(today.getDay()==6) day = "星期六 "
- document.getElementById('nowDateTimeSpan').innerHTML=yyyy+"-"+MM +"-"+ dd +" " + hh+":"+mm+":"+ss+" " + day;
- setTimeout('startTime()',1000);//每一秒中重新加载startTime()方法
- }
- function checkTime(i)
- {
- if (i<10){
- i="0" + i;
- }
- return i;
- }
- </script>
- </head>
- <body class="theme-black" style="background-color: #17253f !important;" onload="startTime()">
- <nav class="navbar" style="background-color: red">
- <div class="container-fluid">
- <div class="navbar-header">
- <a class="navbar-brand" href="index.html">工厂产能监控系统</a>
- </div>
- <div style="color: #ffffff"><img src="images/logo.jpg" style="width: 10%"> 深圳市度彼电子有限公司——</div>
- <font color="#ffffff"><span id="nowDateTimeSpan"></span></font>
- </div>
- </nav>
- <section style="margin-top: 100px;color: #ffffff" style-height="20">
- <div style="width: 38%;float: left">
- <div class="text-center">本拉产能统计</div>
- <table class="table table-bordered text-center" style="color: #ffffff">
- <thead>
- <tr>
- <th scope="col">时间</th>
- <th scope="col">良品数</th>
- <th scope="col">不良品数</th>
- <th scope="col">堆积数</th>
- <th scope="col">不良率</th>
- </tr>
- </thead>
- <tbody id="rank-one">
- </tbody>
- </table>
- </div>
- <div style="width: 60%;float: right">
- <div class="text-center">本厂今日生产能手榜</div>
- <table class="table table-bordered text-center" style="color: #ffffff;width: 50%;float: left" >
- <thead>
- <tr >
- <th scope="col" colspan="4">红榜</th>
- </tr>
- <tr >
- <th >人员</th>
- <th >良品数</th>
- <th >人员</th>
- <th >不良率</th>
- </tr>
- </thead>
- <tbody id="rank-two">
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Larry</td>
- <td>the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- </table>
- <table class="table table-bordered text-center" style="color: #ffffff;width: 50%;float: right" >
- <thead>
- <tr >
- <th scope="col" colspan="4">黑榜</th>
- </tr>
- <tr >
- <th >人员</th>
- <th >良品数</th>
- <th >人员</th>
- <th >不良率</th>
- </tr>
- </thead>
- <tbody id="rank-three">
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Larry</td>
- <td>the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- </table>
- </div>
- </section>
- <div class="row" style-height="50-8">
- <div id="graph-1"></div>
- <div class="row " style="height: 10em"></div>
- <div class="row" style-height="">
- <div id="graph-2"></div>
- </div>
- </div>
- <!-- Jquery Core Js -->
- <script src="plugins/jquery/jquery.min.js"></script>
- <!-- Bootstrap Core Js -->
- <script src="plugins/bootstrap/js/bootstrap.js"></script>
- <!-- Select Plugin Js -->
- <script src="plugins/bootstrap-select/js/bootstrap-select.js"></script>
- <!-- Slimscroll Plugin Js -->
- <script src="plugins/jquery-slimscroll/jquery.slimscroll.js"></script>
- <!-- Waves Effect Plugin Js -->
- <script src="plugins/node-waves/waves.js"></script>
- <!-- Jquery CountTo Plugin Js -->
- <script src="plugins/jquery-countto/jquery.countTo.js"></script>
- <!-- Morris Plugin Js -->
- <script src="plugins/raphael/raphael.min.js"></script>
- <script src="plugins/morrisjs/morris.js"></script>
- <!-- ChartJs -->
- <script src="plugins/chartjs/Chart.bundle.js"></script>
- <!-- Flot Charts Plugin Js -->
- <script src="plugins/flot-charts/jquery.flot.js"></script>
- <script src="plugins/flot-charts/jquery.flot.resize.js"></script>
- <script src="plugins/flot-charts/jquery.flot.pie.js"></script>
- <script src="plugins/flot-charts/jquery.flot.categories.js"></script>
- <script src="plugins/flot-charts/jquery.flot.time.js"></script>
- <!-- Sparkline Chart Plugin Js -->
- <script src="plugins/jquery-sparkline/jquery.sparkline.js"></script>
- <!-- Custom Js -->
- <script src="js/admin.js"></script>
- <!--<script src="js/pages/index.js"></script>-->
- <!-- Demo Js -->
- <script src="js/demo.js"></script>
- <script src="js/basic.js"></script>
- <script src="js/getparam.js"></script>
- <script>
- var timeday=["今日" ,"昨日" ,"本周" ,"本月"];
- function getSpotHtml(htmlbody, i) {
- htmlbody += "<tr>";
- htmlbody += `<tr>
- <td>${timeday[i]}</td>
- <td>${hispass[i]}</td>
- <td>${hisfail[i]}</td>
- <td>${hisstack[i]}</td>
- <td>${hisrate[i]+'%'}</td>
- </tr>`;
- htmlbody += "</tr>";
- return htmlbody;
- }
- function getSpotHtml1(htmlbody, i) {
- htmlbody += "<tr>";
- htmlbody += `<tr>
- <td>${goodid[i]}</td>
- <td>${goodpass[i]}</td>
- <td>${goodid[i]}</td>
- <td>${goodfailrate[i]+'%'}</td>
- </tr>`;
- htmlbody += "</tr>";
- return htmlbody;
- }
- function getSpotHtml2(htmlbody, i) {
- htmlbody += "<tr>";
- htmlbody += `<tr>
- <td>${badid[i]}</td>
- <td>${badpass[i]}</td>
- <td>${badid[i]}</td>
- <td>${badfailrate[i]+'%'}</td>
- </tr>`;
- htmlbody += "</tr>";
- return htmlbody;
- }
- function showEachSpot() {
- var htmlbody = "", one_person = "";
- var i = 0;
- var triGap = 4;
- htmlbody = "";
- for (i = 0; i < triGap; i++) {
- htmlbody = getSpotHtml(htmlbody, i);
- }
- $("#rank-one").html(htmlbody);
- //console.log(htmlbody);
- }
- function showEachSpot1() {
- var htmlbody = "", one_person = "";
- var i = 0;
- var triGap = 3;
- htmlbody = "";
- for (i = 0; i < triGap; i++) {
- htmlbody = getSpotHtml1(htmlbody, i);
- }
- $("#rank-two").html(htmlbody);
- //console.log(htmlbody);
- }
- function showEachSpot2() {
- var htmlbody = "", one_person = "";
- var i = 0;
- var triGap = 3;
- htmlbody = "";
- for (i = 0; i < triGap; i++) {
- htmlbody = getSpotHtml2(htmlbody, i);
- }
- $("#rank-three").html(htmlbody);
- //console.log(htmlbody);
- }
- function showChart() {
- var data = [];
- var ratedata = [];
- var stackmax = 0;
- var failmax = 0;
- var passdata=[];
- var faildata=[];
- var passmax=0;
- for (i = 0; i < passNumber.length; i++) {
- if (stackmax < stackeverynum[i]) {
- stackmax = stackeverynum[i];
- }
- if (failmax < failrate[i]) {
- failmax = failrate[i];
- }
- if(passmax<passNumber[i]){
- passmax=passNumber[i];
- }
- data.push(stackeverynum[i]);
- ratedata.push(Math.floor(failrate[i]));
- passdata.push(passNumber[i]);
- faildata.push(failNumber[i])
- }
- showEachSpot();
- showEachSpot1();
- showEachSpot2();
- stackmax = Math.max(stackmax, 5);
- failmax = Math.max(failmax, 5);
- stackAndFailChart = Highcharts.chart('graph-1', {
- chart: {
- zoomType: 'xy',
- height: (4 / 16 * 100) + '%' // 16:9 ratio
- },
- title: {
- text: '各工位今日产能'
- },
- credits: {
- enabled: false // 禁用版权信息
- },
- exporting: {
- enabled: false
- },
- xAxis: [{
- categories: namedata,
- crosshair: true,
- title: {
- text: '员工',
- style: {
- fontSize: '1.5em'
- }
- },
- labels: {
- style: {
- fontSize: '1.5em'
- }
- }
- }],
- yAxis: [{ // Primary yAxis
- labels: {
- format: '{value}',
- style: {
- color: Highcharts.getOptions().colors[0],
- fontSize: '1.5em'
- }
- },
- min: 0,
- max: passmax*1.5,
- title: {
- style: {
- color: Highcharts.getOptions().colors[0],
- fontSize: '1em'
- }
- }
- },
- ],
- tooltip: {
- shared: true
- },
- legend: {
- layout: 'vertical',
- align: 'right',
- x: -100,
- verticalAlign: 'top',
- y: 0,
- floating: true,
- backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'
- },
- series: [{
- name: '良品数',
- type: 'column',
- data: passdata,
- }, {
- name: '不良品数',
- type: 'column',
- data: faildata,
- },
- {
- name: '堆积数',
- type: 'column',
- data: data,
- },]
- });
- FailChart = Highcharts.chart('graph-2', {
- chart: {
- height: (4 / 16 * 100) + '%' // 16:9 ratio
- },
- title: {
- text: '各工位今日不良率'
- },
- credits: {
- enabled: false // 禁用版权信息
- },
- exporting: {
- enabled: false
- },
- xAxis: [{
- categories: namedata,
- crosshair: true,
- title: {
- text: '员工',
- style: {
- fontSize: '1.5em'
- }
- },
- labels: {
- style: {
- fontSize: '1.5em'
- }
- }
- }],
- yAxis: [ { // Secondary yAxis
- title: {
- text: '不良率',
- style: {
- color: 'red',
- fontSize: '1em'
- }
- },
- min: 0,
- max: 1.5 * failmax,
- labels: {
- formatter: function () {
- return Math.floor(this.value) + "%";
- },
- style: {
- color: 'red',
- fontSize: '20px'
- }
- },
- }],
- tooltip: {
- shared: true
- },
- legend: {
- layout: 'vertical',
- align: 'right',
- x: -120,
- verticalAlign: 'top',
- y: 0,
- floating: true,
- backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'
- },
- series: [{
- name: '不良率',
- type: 'spline',
- data: ratedata,
- color: 'red',
- tooltip: {
- valueSuffix: '%'
- }
- }]
- });
- }
- function updateChart() {
- var data = [];
- var ratedata = [];
- var stackmax = 0;
- var failmax = 0;
- var passdata=[];
- var faildata=[];
- var passmax=0;
- for (i = 0; i < passNumber.length; i++) {
- if (stackmax < stackeverynum[i]) {
- stackmax = stackeverynum[i];
- }
- if (failmax < failrate[i]) {
- failmax = failrate[i];
- }
- if(passmax<passNumber[i]){
- passmax=passNumber[i];
- }
- data.push(stackeverynum[i]);
- ratedata.push(Math.floor(failrate[i]));
- passdata.push(passNumber[i]);
- faildata.push(failNumber[i])
- }
- stackmax = Math.max(stackmax, 5);
- failmax = Math.max(failmax, 5);
- // https://api.hcharts.cn/highcharts#Series.addPoint;
- stackAndFailChart.series[0].setData(passdata);
- stackAndFailChart.series[1].setData(faildata);
- stackAndFailChart.series[2].setData(data);
- FailChart.series[0].setData(ratedata);
- if(failmax > FailChart.yAxis[0].getExtremes().max * 1.3 || failmax < FailChart.yAxis[0].getExtremes().max * 0.5) {
- FailChart.yAxis[0].setExtremes(0, failmax*1.5);
- }
- if(passmax>stackAndFailChart.yAxis[0].getExtremes().max*1.3 || passmax<stackAndFailChart.yAxis[0].getExtremes().max*0.5) {
- stackAndFailChart.yAxis[0].setExtremes(0, passmax*1.5);
- }
- showEachSpot();
- showEachSpot1();
- showEachSpot2();
- }
- var stackAndFailChart = null;
- var FailChart = null;
- $(document).ready(on_document_load);
- window.onresize = resizeAll;
- function resizeAll() {
- $('[style-height="10"]').height(window.innerHeight / 10);
- $('[style-height="20"]').each(function(one,items){$(items).height(window.innerHeight / 5)});
- $('[style-height="30"]').each(function(one,items){$(items).height(window.innerHeight * 0.4)});
- $('[style-height="40"]').height(window.innerHeight *0.4);
- $('[style-height="30-8"]').height(window.innerHeight * 0.4 - 220);
- $('[style-height="30-1"]').each(function(one,items){$(items).height(window.innerHeight * 0.3)});
- $('[style-height="30-2"]').each(function(one,items){$(items).height(window.innerHeight * 0.2)});
- $('[style-height="50-8"]').each(function(one,items){$(items).height(window.innerHeight * 0.5)});
- var graph = $("#graph-1");
- graph.width(window.innerWidth - 35);
- graph.height(window.innerHeight *0.2);
- if (graph.highcharts !== undefined) {
- graph.highcharts().reflow();
- }
- var graph = $("#graph-2");
- graph.width(window.innerWidth - 35);
- graph.height(window.innerHeight *0.2);
- if (graph.highcharts !== undefined) {
- graph.highcharts().reflow();
- }
- }
- setInterval(function () {
- resizeAll();
- }, 5000);
- resizeAll();
- //startClock();
- </script>
- </body>
- </html>
- <!---
- ### SVR_BASE 类似 "http://127.0.0.1:8803" 实际上线之后是确定值,写死在HTML里的JS里面
- ### 各个拉实时产量数据接口地址
- SVR_BASE + "/server/fcWorkRaw/allFlows"
- ### 单个拉内,所有工位实时产量数据接口地址 e.g. 拉线ID = 2
- SVR_BASE + "/server/fcWorkRaw/allSpots" + "?" + "flowId=2"
- ### 员工上班记录API e.g. 拉线ID = 2 工位顺序 = 1 员工ID = 33404
- SVR_BASE + "/server/fcWorkStartend/goOnline" + "?" + "flowId=2&sequence=1&workerId=33404"
- ### 查询已上班员工 e.g. 拉线ID = 2
- SVR_BASE + "/server/fcWorkRaw/getAll" + "?" + "flowId=2"
- -->
|