| 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 = 2SVR_BASE + "/server/fcWorkRaw/allSpots" + "?" + "flowId=2"###  员工上班记录API     e.g. 拉线ID = 2    工位顺序 = 1    员工ID = 33404SVR_BASE + "/server/fcWorkStartend/goOnline" + "?" + "flowId=2&sequence=1&workerId=33404"### 查询已上班员工    e.g. 拉线ID = 2SVR_BASE + "/server/fcWorkRaw/getAll" + "?" + "flowId=2"-->
 |