@*
    For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
    Layout = null;
}
@using Applications.UniversalApi_WebConsole_App.Models.OnlineMonitor
@model Applications.UniversalApi_WebConsole_App.Models.OnlineMonitor.OnlineMonitorInfo
@{
    int screenWidth = 1280;
    int mainviewHeight = 570;
    int tableMargin = 10;
    int tableWidth = screenWidth - tableMargin - 63;
    int tableHeight = mainviewHeight - tableMargin;
    int scatterOrTableImgWidth = 66;
    int scatterOrTableImgHeight = 72;
    int queryViewWidth = 207;
    int colCount = 7;
    int maximumAL = 2;//should get from configuration
    int minimumAL = 1;//shold get from configuration
    string warningPointColor = "rgba(255, 255, 0,1)";//as prs said it should be yellow
    string maximumALLineColor = "rgba(255, 0, 0, 1)";//red
    string minimumALLineColor = "rgba(0, 0, 255, 1)";//blue
    string normalPointColor = "rgba(0, 0, 255, 1)";//blue

    int headRightHeight = 44;
    int queryImgWidth = 61;
    int queryImgTop = 0;
    //int queryImgTop = headRightHeight + 10;
}
<script>
    function DisplayQueryView() {
        var queryView = document.getElementById("Query_view");
        var queryButton = document.getElementById("Query_button_chartTable");
        if (queryButton != null && queryButton.style.visibility === "visible") {
            queryButton.style.visibility = "hidden";
            queryButton.style.display = "none";
        }
        if (queryView != null && queryView.style.visibility === "hidden") {
            queryView.style.visibility = "visible";
            queryView.style.display = "";
        }
    }
    function HideQueryView() {
        var queryView = document.getElementById("Query_view");
        var queryButton = document.getElementById("Query_button_chartTable");
        if (queryButton != null && queryButton.style.visibility === "hidden") {
            queryButton.style.visibility = "visible";
            queryButton.style.display = "";
        }
        if (queryView != null && queryView.style.visibility === "visible") {
            queryView.style.visibility = "hidden";
            queryView.style.display = "none";
        }
    }
    function Pad(num, n) {
        var len = num.toString().length;
        while (len < n) {
            num = "0" + num;
            len++;
        }
        return num;
    }
    function ClearAndReSetUpTableData(datas) {
        if (datas == null) {
            console.log("response data is null for chart table");
            return;
        }
        var chartTable = document.getElementById("Chart_table");
        if (chartTable == null) {
            console.log("chart table is not created");
            return;
        }

        var originalTableRows = chartTable.rows.length;
        datas.forEach(function (d) {
            var r = chartTable.insertRow(chartTable.rows.length);
            //var c1 = r.insertCell(r.cells.length);
            //c1.innerHTML = d.DataCollectorNozzleNumber;
            var c1 = r.insertCell(r.cells.length);
            c1.innerHTML = d.SiteLevelNozzleId;
            var c2 = r.insertCell(r.cells.length);
            c2.innerHTML = d.SensorId;
            var c3 = r.insertCell(r.cells.length);
            c3.innerHTML = new Date(d.FuellingStartTime).getFullYear() + "-" + Pad(new Date(d.FuellingStartTime).getMonth() + 1, 2) + "-" + Pad(new Date(d.FuellingStartTime).getDate(), 2);
            var c4 = r.insertCell(r.cells.length);
            c4.innerHTML = (new Date(d.FuellingEndTime) - new Date(d.FuellingStartTime)) / 1000;
            var c5 = r.insertCell(r.cells.length);
            c5.innerHTML = d.VaporLiquidRatio;
            var c6 = r.insertCell(r.cells.length);
            c6.innerHTML = d.VaporVolume;
            var c7 = r.insertCell(r.cells.length);
            c7.innerHTML = d.LiquidVolume;
        });
        //insert an empty row, otherwise the style of the table will be changed
        if (datas.length === 0) {
            var r = chartTable.insertRow(chartTable.rows.length);
            var c1 = r.insertCell(r.cells.length);
            c1.innerHTML = "";
            var c2 = r.insertCell(r.cells.length);
            c2.innerHTML = "";
            var c3 = r.insertCell(r.cells.length);
            c3.innerHTML = "";
            var c4 = r.insertCell(r.cells.length);
            c4.innerHTML = "";
            var c5 = r.insertCell(r.cells.length);
            c5.innerHTML = "";
            var c6 = r.insertCell(r.cells.length);
            c6.innerHTML = "";
            var c7 = r.insertCell(r.cells.length);
            c7.innerHTML = "";
        }
        for (var count = 1; count < originalTableRows; count++) {
            chartTable.deleteRow(1);
        };
    }
    //更新报警列表:筛选条件改变、用户初始进入该页面
    function UpdateWarningHistoryTable(datas) {
        if (datas == null) {
            console.log("Warning History response data is null");
            return;
        }
        var warningHistoryTable = document.getElementById("Chart_warning_history_table");
        if (warningHistoryTable == null) {
            console.log("Warning history table is null");
            return;
        }
        var originalTableRows = warningHistoryTable.rows.length;

        datas.forEach(function (d) {
            var r = warningHistoryTable.insertRow(warningHistoryTable.rows.length);
            var c1 = r.insertCell(r.cells.length);
            c1.style.width = '20%';
            c1.innerHTML = d.AlarmTime;
            var c2 = r.insertCell(r.cells.length);
            c2.style.width = '20%';
            c2.innerHTML = d.AlarmDescription;
            var c3 = r.insertCell(r.cells.length);
            c3.style.width = '60%';
            c3.style.textAlign = 'left';
            c3.innerHTML = d.AlarmDetails;
        });
        //insert a empty row to keep the table body style when there's no data in response message
        if (datas.length === 0) {
            var r = warningHistoryTable.insertRow(warningHistoryTable.rows.length);
            var c1 = r.insertCell(r.cells.length);
            c1.style.width = '20%';
            c1.innerHTML = "";
            var c2 = r.insertCell(r.cells.length);
            c2.style.width = '20%';
            c2.innerHTML = "";
            var c3 = r.insertCell(r.cells.length);
            c3.style.width = '60%';
            c3.style.textAlign = 'left';
            c3.innerHTML = "";
        }
        for (var count = 1; count < originalTableRows; count++) {
            warningHistoryTable.deleteRow(1);
        }
    }

    //放大镜图标及主窗口显示曲线图、表格还是报警历史的切换
    function reloadQueryImag(queryImgId) {
        document.getElementById(queryImgId).style.visibility = "hidden";
        var scatterChartDiv = document.getElementById("Chart_scatter_div");
        var tableChartDiv = document.getElementById("Chart_table_div");
        var waningTableDiv = document.getElementById("Chart_warning_div");
        if (queryImgId === "Chart_query_scatter2") {
            document.getElementById("Chart_query_warning").style.visibility = "visible";
            if (scatterChartDiv != null && scatterChartDiv.style.visibility === "hidden") {
                scatterChartDiv.style.visibility = "visible";
            }
            if (tableChartDiv != null && tableChartDiv.style.visibility === "visible") {
                tableChartDiv.style.visibility = "hidden";
            }
            if (waningTableDiv != null && waningTableDiv.style.visibility === "visible") {
                waningTableDiv.style.visibility = "hidden";
            }

        } else if (queryImgId === "Chart_query_scatter1") {
            document.getElementById("Chart_query_table").style.visibility = "visible";
            if (tableChartDiv != null && tableChartDiv.style.visibility === "visible") {
                tableChartDiv.style.visibility = "hidden";
            }
            if (waningTableDiv != null && waningTableDiv.style.visibility === "visible") {
                waningTableDiv.style.visibility = "hidden";
            }
            if (scatterChartDiv != null && scatterChartDiv.style.visibility === "hidden") {
                scatterChartDiv.style.visibility = "visible";
            }
            document.getElementById("Chart_query_table").style.visibility = "visible";
        } else if (queryImgId === "Chart_query_table") {
            document.getElementById("Chart_query_scatter2").style.visibility = "hidden";
            document.getElementById("Chart_query_scatter1").style.visibility = "visible";
            document.getElementById("Chart_query_warning").style.visibility = "visible";
            if (scatterChartDiv != null && scatterChartDiv.style.visibility === "visible") {
                scatterChartDiv.style.visibility = "hidden";
            }
            if (tableChartDiv != null && tableChartDiv.style.visibility === "hidden") {
                tableChartDiv.style.visibility = "visible";
            }
            if (waningTableDiv != null && waningTableDiv.style.visibility === "visible") {
                waningTableDiv.style.visibility = "hidden";
            }
        } else if (queryImgId === "Chart_query_warning") {
            document.getElementById("Chart_query_scatter1").style.visibility = "hidden";
            document.getElementById("Chart_query_scatter2").style.visibility = "visible";
            document.getElementById("Chart_query_table").style.visibility = "visible";
            if (scatterChartDiv != null && scatterChartDiv.style.visibility === "visible") {
                scatterChartDiv.style.visibility = "hidden";
            }
            if (tableChartDiv != null && tableChartDiv.style.visibility === "visible") {
                tableChartDiv.style.visibility = "hidden";
            }
            if (waningTableDiv != null && waningTableDiv.style.visibility === "hidden") {
                waningTableDiv.style.visibility = "visible";
            }
        }
    }
</script>
<div id="charts_table" style="position: relative; width: (@screenWidth)px; height: (@mainviewHeight)px">
    <style type="text/css">
        .table{
            border-collapse:collapse;
        }
        .table tr td{
            /*border-bottom: 1px solid#00bfff;
            border-left: 1px solid #00bfff;*/
            color: #000000;
            font-size: 22px;
            /*padding:5px 8px;*/
            text-align: center;
        }
        .table>tbody>tr,.table>thead{
            display: table;
            width: 100%;
            height:@(tableHeight/11)px;
            table-layout:fixed;
        }
        .table>tbody{
            height:@(tableHeight-tableHeight/11)px;
            overflow: hidden;
            display: block;
            overflow: hidden;
            overflow-y:auto;
        }

    </style>
    <div id="Chart_table_div" onclick="HideQueryView()" style="position: relative; margin-left: @(tableMargin)px; top: @(tableMargin)px;width:@(tableWidth)px; height:@(tableHeight)px;visibility:visible;">
        <table id="Chart_table" class="table" style="width: 100%;">
            @{
                int colwidth = (100 / 7) * (tableWidth);
            }
            <thead>
                <tr style="font-weight: bold">
                    <td style="width:(@colwidth)px;">油站枪号</td>
                    <td style="width:(@colwidth)px;">传感器号</td>
                    <td style="width:(@colwidth)px;">时间</td>
                    <td style="width:(@colwidth)px;">加油时间(s)</td>
                    <td style="width:(@colwidth)px;">A/L(%)</td>
                    <td style="width:(@colwidth)px;">油气流量(L)</td>
                    <td style="width:(@colwidth)px;">燃油流量(L)</td>
                </tr>
            </thead>
            <tbody>
                @*@foreach (var t in Model.Transactions)
                    {*@
                <tr>
                    <td style="width: (@colwidth)px;"></td>
                    <td style="width: (@colwidth)px;"></td>
                    <td style="width: (@colwidth)px;"></td>
                    <td style="width: (@colwidth)px;"></td>
                    <td style="width: (@colwidth)px;"></td>
                    <td style="width: (@colwidth)px;"></td>
                    <td style="width: (@colwidth)px;"></td>
                </tr>
                @*}*@
            </tbody>
        </table>
        <script>
            // ClearAndReSetUpTableData(chartTableSamleData.data);
        </script>
    </div>
    <div id="Chart_scatter_div" onclick="HideQueryView()" style="position: absolute; left: @(tableMargin)px; top: @(tableMargin)px; width: @(tableWidth)px; height: @(tableHeight)px;visibility: hidden;">
        <canvas id="Chart_scatter_canvas" style="width: 100%; height: 100%;">
            Your browser does not support the canvas element.
        </canvas>
    </div>
    <div id="Chart_warning_div" onclick="HideQueryView()" style="position: absolute; left: @(tableMargin)px; top: @(tableMargin)px; width: @(tableWidth)px; height: @(tableHeight)px; visibility: hidden;">
        <table id="Chart_warning_history_table" class="table" style="width: 100%;">
            <thead>
                <tr style="font-weight: bold">
                    <td style="width: 20%;">警报时间</td>
                    <td style="width: 20%;">警报类型</td>
                    <td style="width: 60%;">警报说明</td>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td style="width: 20%;"></td>
                    <td style="width: 20%;"></td>
                    <td style="width: 60%; text-align: left;"></td>
                </tr>
            </tbody>

        </table>
    </div>
    <div id="Query_view" style="position: absolute; left: @(screenWidth - queryViewWidth)px; top: 0px; width:@(queryViewWidth)px; font-weight: bold; background-image: url(/images/onlineMonitor/chartView/background_query.png); height: @(mainviewHeight)px; visibility: hidden;">
        @{
            int lableFontSize = 16;
            int queryFontSize = 20;
            string defaultDate = DateTime.Now.ToString("yyyy-MM-dd");
        }
        <span style="position: relative; display: inline-block; width: 100%; padding-bottom: 5px; font-size: 24px; text-align: center;">筛选查询</span>

        <span style="position: relative; display: inline-block; text-align: left; font-size: @(lableFontSize)px;">起始日期:</span>
        <input type="date" id="StartDate" value="@defaultDate" style="margin-left: 20px; width: @(queryViewWidth - 20)px; margin-right: 0px; border: 0px; background-image: inherit; font-size: @(queryFontSize)px;" />

        <span style="position: relative; display: inline-block; text-align: left; font-size: @(lableFontSize)px;">结束日期:</span>
        <input type="date" id="EndDate" value="@defaultDate" style="margin-left: 20px; width: @(queryViewWidth - 20)px; margin-right: 0px; border: 0px; background-image: inherit; font-size: @(queryFontSize)px;" />


        <span style="position: relative; display: inline-block; margin-top: 10px; text-align: left; font-size: @(lableFontSize)px;">油枪选择:</span>
        <br />
        <select id="Chart_table_Nozzles" style="margin-left: 20px; width: @(queryViewWidth - 20)px; margin-right: 0px; border: 0px; background-image: inherit; font-size: @(queryFontSize)px;"></select>

        <br>
        <span style="position: relative; display: inline-block; margin-top: 10px; text-align: left; font-size: @(lableFontSize)px;">查询条件:</span>
        <ul id="Chart_table_Criteria">
            @foreach (var f in Model.QueryInformation.OptionalCriteria)
            {
                var backgroundImag = (f == Criteria.气液比.ToString()) ? "url(/images/onlineMonitor/chartView/select.png)" : "none";
                <li id="Chart_table_Criteria_@f" onclick="CriterialSelect(this.id)" style="font-size: @(queryFontSize)px; padding: 2px; width: 137px; height: 32px; list-style-type: none; background-position-x: 0px; background-image: @backgroundImag; background-repeat: no-repeat; text-align: center;">@f</li>
            }
        </ul>
        <img id="Chart_query_scatter1" src="/images/onlineMonitor/chartView/scatter.png" onclick="DisplayChart(this.id)" style="position: absolute; left:20px; top: @(mainviewHeight - scatterOrTableImgHeight)px;">
        <img id="Chart_query_table" src="/images/onlineMonitor/chartView/table.png" onclick="DisplayChart(this.id)" style="position: absolute; left:20px; top: @(mainviewHeight - scatterOrTableImgHeight)px; visibility: hidden;">
        <img id="Chart_query_scatter2" src="/images/onlineMonitor/chartView/scatter.png" onclick="DisplayChart(this.id)" style="position: absolute; left:@(queryViewWidth-scatterOrTableImgWidth-20*2)px; top: @(mainviewHeight - scatterOrTableImgHeight)px; visibility: hidden;">
        <img id="Chart_query_warning" src="/images/onlineMonitor/chartView/alarm.png" onclick="DisplayChart(this.id)" style="position: absolute; left:@(queryViewWidth-scatterOrTableImgWidth-20*2)px; top: @(mainviewHeight - scatterOrTableImgHeight)px;">
    </div>
</div>
<img id="Query_button_chartTable" onclick="DisplayQueryView()" style="position: absolute; margin: 0px; top:@(queryImgTop)px; left: @(screenWidth - queryImgWidth)px; visibility: visible;" src="/images/onlineMonitor/chartView/query.png" />

<script src="~/js/mqtt.min.js"></script>
<script type="text/javascript">
    var hostname = 'localhost', //'192.168.1.2',
        port = 8384,
        clientId = 'mqttjs_' + (Math.random() * 1000000).toString(),
        timeout = 5000,
        keepAlive = 100,
        cleanSession = false,
        mqttVersion = 3,
        ssl = false;
    var warningValueMin = 1;
    var warningValueMax = 2;
    //var client = new Paho.MQTT.Client(hostname, port, clientId);
    //client.onConnectionLost = onConnectionLost;//绑定连接断开事件
    //client.onMessageArrived = onMessageArrived;//

    var options = {
        //mqtt客户端的id,这里面应该还可以加上其他参数,具体看官方文档
        clientId: 'mqttjs_' + (Math.random() * 1000000).toString(),
        //invocationContext: {
        //    host: hostname,
        //    port: port,
        //    //path: client.path,
        //    mqttVersion:mqttVersion,
        //    clientId: clientId
        //},
        //mqttVersion:mqttVersion,
        timeout: timeout,
        //keepAliveInterval: keepAlive,
        //cleanSession: cleanSession,
        useSSL: false
        //onSuccess: onConnect,
        //onFailure: onError
    }
    //浏览器采用websocket协议,host主机地址为192.168.0.200,端口为9001,路径为/mqtt
    var client = mqtt.connect("@Model.mqttConnectionString", options); // you add a ws:// url here

    ////建立连接
    client.on('connect',
        function () {
            console.log("connected");
            client.subscribe('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetConfigAsync_reply',
                function (err) {
                    if (!err) {
                        client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetConfigAsync', 'Hello mqtt');
                    } else {
                        console.log("error exist during subscribe GetConfigAsync_reply");
                    }
                });

            client.subscribe('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData_reply',
                function (err) {
                    if (!err) {
                        client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData', "Hello mqtt");
                    };
                });
            //When the view was loaded, get the nozzleflow data as default information
            client.subscribe('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesFlowData_reply',
                function (err) {
                    if (!err) {
                        var currentDate = new Date(Date.now());
                        var startTime = currentDate.getFullYear().toString() + "/" + Pad(currentDate.getMonth() + 1, 2) + "/" + Pad(currentDate.getDate(), 2) + " 00:00:00";
                        var endTime = currentDate.getFullYear().toString() + "/" + Pad(currentDate.getMonth() + 1, 2) + "/" + Pad(currentDate.getDate(), 2) + " 23:59:59";

                        var temp = {
                            "Parameters": [
                                { "Name": "nozzleid", "Value": "1" },
                                { "Name": "starttime", "Value": startTime },
                                { "Name": "endtime", "Value": endTime }
                            ]
                        };
                        var message = JSON.stringify(temp);
                        client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesFlowData', message);
                    };
                });
            client.subscribe('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetAlarmList_reply',
                function (err) {
                    if (!err) {
                        console.log("subscribe GetAlarmList_reply successfully");
                    };
                });
        });

    //如果连接错误,打印错误
    client.on('error',
        function (err) {
            console.log("error happens, will close the client");
            client.end();
        });

    //如果client订阅主题成功,那么这里就是当接收到自己订阅主题的处理逻辑
    client.on('message',
        function (topic, message) {
            // message is Buffer,此处就是打印消息的具体内容
            console.log('-> ' + message.toString());
            var a = document.getElementById("testmqqt");
            if (a != null) a.innerHTML = topic;
            if (topic === "/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetConfigAsync_reply") {
                processConfigData(JSON.parse(message.toString()));
                return;
            }
            if (topic === "/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData_reply") {
                processNozzlesData(JSON.parse(message.toString()));
                return;
            }
            if (topic === '/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesFlowData_reply') {
                if (document.getElementById("Chart_table_div") != null && document.getElementById("Chart_table_div").style.visibility === "visible") {
                    ClearAndReSetUpTableData(JSON.parse(message.toString()));
                }
                else if (document.getElementById("Chart_scatter_div") != null && document.getElementById("Chart_scatter_div").style.visibility === "visible") {
                    UpdateALScatterChart(JSON.parse(message.toString()));
                }
                return;
            }
            if (topic === "/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetAlarmList_reply") {
                UpdateWarningHistoryTable(JSON.parse(message.toString()));
                return;
            }
        });
    //得到最大最小警戒值,用做点状图中使用
    function processConfigData(message) {
        if (message != null && message.onlineWatchConfig != null) {
            warningValueMin = message.onlineWatchConfig.WarningValueMin;
            warningValueMax = message.onlineWatchConfig.WarningValueMax;
        }
        console.log("最小警戒值:" + warningValueMin + "最大警戒值:" + warningValueMax);
    }

    function processNozzlesData(message) {
        if (message != null && message.data != null) {
            if (document.getElementById("Chart_table_Nozzles") != null) {
                var nozzleSelect = document.getElementById("Chart_table_Nozzles");
                nozzleSelect.options.length = 0;
                message.data.forEach(function (d) {
                    nozzleSelect.options.add(new Option(d.SiteLevelNozzleId + "号枪", d.SiteLevelNozzleId));
                });
            }
        }
    }

    //// 用户程序点击事件
    function Onmqtttest() {
        message = "message from browser with websocket"; // 消息内容
        //发布主题presence,消息内容为Hello mqtt,订阅与推送一样自发自收
        client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetConfigAsync', 'Hello mqtt ' + message);
        var a = document.getElementById("testmqqt");
        if (a != null) a.innerHTML = message;

    }
    function DisplayChart(tabId) {
        reloadQueryImag(tabId);

        var startTime = document.getElementById("StartDate").value + " 00:00:00";
        var endTime = document.getElementById("EndDate").value + " 23:59:59";
        var nozzleNumber = encodeURI(document.getElementById("Chart_table_Nozzles").value);//.slice(0, 1);

        var temp = {
            "Parameters": [
                { "Name": "nozzleid", "Value": nozzleNumber },
                { "Name": "starttime", "Value": startTime },
                { "Name": "endtime", "Value": endTime }
            ]
        };
        var message = JSON.stringify(temp);
        //曲线查询
        if (tabId === "Chart_query_scatter1" || tabId === "Chart_query_scatter2" || tabId === "Chart_query_table") {
            if (client != null) {

                client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesFlowData', message);
            }
        } else if (tabId === "Chart_query_warning") {
            if (client != null) {
                client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetAlarmList', message);
            }
        }

        HideQueryView();
    }
    function CriterialSelect(id) {
        var criterialList = document.getElementById("Chart_table_Criteria");
        //alert(id);
        if (criterialList != null && criterialList.getElementsByTagName("li") != null && criterialList.getElementsByTagName("li").length > 0) {

            var children = criterialList.getElementsByTagName("li");
            //alert(children.length);
            for (var i = 0; i < children.length; i++) {
                children[i].style.backgroundImage = "none";
            }
        }
        var selectItemStr = "";
        var selectItem = document.getElementById(id);
        if (selectItem != null) {
            selectItem.style.backgroundImage = "url(/images/onlineMonitor/chartView/select.png)";
            selectItemStr = selectItem.innerHTML;
        }
        var startTime = document.getElementById("StartDate").value + " 00:00:00";
        var endTime = document.getElementById("EndDate").value + " 23:59:59";
        var nozzleNumber = encodeURI(document.getElementById("Chart_table_Nozzles").value);//.slice(0, 1)
        var temp = {
            "Parameters": [
                { "Name": "nozzleid", "Value": nozzleNumber },
                { "Name": "starttime", "Value": startTime },
                { "Name": "endtime", "Value": endTime }
            ]
        };
        var message = JSON.stringify(temp);

        if ((document.getElementById("Chart_table_div") != null && document.getElementById("Chart_table_div").style.visibility === "visible") ||
            (document.getElementById("Chart_scatter_div") != null && document.getElementById("Chart_scatter_div").style.visibility === "visible")) {
            if (client != null) {
                client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesFlowData', message);
            }

        } else if (document.getElementById("Chart_warning_div") != null && document.getElementById("Chart_warning_div").style.visibility === "visible") {
            if (client != null) {
                client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetAlarmList', message);
            }

        }
        HideQueryView();
    }
</script>
<script src="~/js/jquery-3.4.1.min.js"></script>
<script src="~/js/Chart.bundle.js"></script>
<script>
    var minimumScatterChartPoint = 10;
    var config_scatterChart = {
        type: 'scatter',
        data: {
            //lablels: [0, 0, 0],
            datasets: [
                {
                    type: 'line',
                    label: 'AL最大值',
                    borderColor: '@maximumALLineColor',
                    pointRadius: 0,
                    fill: false,
                    yAxisID: 'y-axis-1',
                    borderWidth: 1
                    //data: [0, 0, 0]
                }, {
                    type: 'line',
                    label: '汽液比最小值',
                    borderColor: '@minimumALLineColor',
                    pointRadius: 0,
                    fill: false,
                    yAxisID: 'y-axis-1',
                    borderWidth: 1
                    //data: [0, 0, 0]
                }, {
                    type: 'scatter',
                    label: '单笔交易汽液比',
                    borderColor: ['rgba(255, 127, 0, 1)'],
                    pointRadius: 2,
                    //pointStyle:'crossRot',
                    borderWidth: 1,
                    fill: true,
                    yAxisID: 'y-axis-1'
                    //data: [0, 0, 0]
                }
            ]
        },
        options: {
            responsive: true,
            hoverMode: 'index',
            stacked: true,
            animation: {
                duration: 0 // general animation time
            },
            hover: {
                animationDuration: 0 // duration of animations when hovering an item
            },
            responsiveAnimationDuration: 0, // animation duration after a resize
            //title: {
            //    display: true,
            //    text: '汽液比散点图',
            //    fontSize: 35,
            //    fontColor: "#000"
            //},
            scales: {
                xAxes: [{
                    type: 'time',
                    distribution:'linear',
                    time: {
                        //stepSize: 2,
                        displayFormats: {
                            quarter: 'YYYY MMM D h:mm:ss'
                        }
                    },
                    scaleLabel: {
                        display: true,
                        labelString: '时间'
                    },
                    ticks: {
                        autoSkip: true,
                        maxTicksLimit: 20
                    }
                }],
                yAxes: [{
                    type: 'linear', // only linear but allow scale type registration. This allows extensions to exist solely for log scale for instance
                    display: true,
                    position: 'left',
                    id: 'y-axis-1',
                    ticks: {
                        beginAtZero: true,
                        suggestedMax: 3,
                        stepSize: 0.5
                    },
                    scaleLabel: {
                        display: true,
                        labelString: '汽液比'
                    }
                }],
                elements: {
                    line: {
                        tension: 1 // disables bezier curves
                    }
                }
            },
            tooltips: {
                mode: 'index',
                intersect: true
            }
        }
    };
    var ctx = document.getElementById('Chart_scatter_canvas');
    var alScatterChart = new Chart(ctx, config_scatterChart);

    function UpdateALScatterChart(datas) {
        var alChart = window["alScatterChart"];
        if (alChart == null || datas == null) return;
        //remove the old data in the chart
        alChart.data.labels.splice(0,alChart.data.labels.length);
        alChart.data.datasets.forEach((dataset) => {
            dataset.data.splice(0,dataset.data.length);
        });
        alChart.update();

        datas.forEach((data) => {
            alChart.data.datasets[0].data.push(warningValueMax);
            alChart.data.datasets[1].data.push(warningValueMin);
            alChart.data.datasets[2].data.push(data.VaporLiquidRatio);
            alChart.data.labels.push(data.FuellingEndTime);
        });
        if (alChart.data.labels.length < minimumScatterChartPoint) {
            var startDate = document.getElementById("StartDate").value+" 00:00:00";
            var endDate = document.getElementById("EndDate").value+" 23:59:59";
            alChart.data.datasets[0].data.unshift(warningValueMax);
            alChart.data.datasets[1].data.unshift(warningValueMin);
            alChart.data.datasets[2].data.unshift(0);
            alChart.data.labels.unshift(startDate);
            alChart.data.datasets[0].data.push(warningValueMax);
            alChart.data.datasets[1].data.push(warningValueMin);
            alChart.data.datasets[2].data.push(0);
            alChart.data.labels.push(endDate);
        }
        var i = 0;
        alChart.data.datasets[2].data.forEach((data) => {
            if (data > warningValueMax || data<warningValueMin) {
                config_scatterChart.data.datasets[2].borderColor[i] = '@warningPointColor';
            } else if (data === 0) {
                config_scatterChart.data.datasets[2].borderColor[i] = 'rgba(192, 192, 192, 0)';
            } else {
                config_scatterChart.data.datasets[2].borderColor[i] = '@normalPointColor';
            }
            i++;
        });
        alChart.update();
    }
</script>