var unityName = "R03Monitor"; var errorTable; var sites = {}; var display_info = {}; $.ajaxSettings.async = false; var jqxhr = $.getJSON("/BIM-Monitor/assets/errorTable.json", function (json) { errorTable = json; }); var C3Json = $.getJSON("/BIM-Monitor/assets/json/c3-monitorList.json", function (json) { sites["c3"] = json; }); var R03Json = $.getJSON("/BIM-Monitor/assets/json/r03-monitorList.json", function (json) { sites["r03"] = json; }); $.ajaxSettings.async = true; var lastNode; var errorArray = []; var switchNumber = 0; passString('SIS'); var wellTBA = []; var wellNameLists = []; var isAll = true; //var isCompare = false; //var saveCheckCompare = ""; var dataTable; var sparklinePieData = []; $(document).ready(function () { GetCheckAllAJAXValue(); LoadPage(); $("#menu > ul > li.nav-parent.nav-active.nav-expanded > ul > li.nav-parent.nav-active.nav-expanded > ul > li:nth-child(1) > a").css("color", "#0088cc"); $(".monitor").on('click', function () { $('.monitor').css('color', '#abb4be') let site = $(this).parent().parent().parent().attr("monitor"); $(this).css("color", "#0088cc"); if (site != 'r03') { location.href = `../${site}/Index.php`; } else { let option = $(this).attr("monitor"); isAll = true; //isCompare = false; passString(option); document.getElementById("monitorName").innerHTML = option + "監測儀器"; LoadPage(); } }); }) //Pass monitor equipment's name to index.php select form function passString(option) { window.localStorage.setItem("option", option); } //unity選擇到一個監測儀器後,在selectWell.cs會給一個監測儀器名稱(例:OW-1)給網頁 function GetWellName(wellName) { showWell(wellName, true); } //網頁用SendMessage()傳Initialization()給unity時,unity會回傳一個所有監測儀器名稱(例:OW-1,OW-2 ...)給網頁 function GetWellNameList(wellNameList) { window.localStorage.setItem("wellNameList", wellNameList); } //display well name and send its name to showWell function function getEquipmentName(equipment) { $.ajaxSettings.async = false; $.ajax({ url: '/BIM-Monitor/script/php/getEquipmentName.php', type: "GET", data: { equipment: equipment, } }).success(function (data) { GetWellNameList(data); }).error(function (error) { console.log("錯誤"); }); $.ajaxSettings.async = true; } //unity載入後會先跑LoadPage(); function LoadPage() { var option = window.localStorage.getItem("option"); getEquipmentName(option); $('#' + window.localStorage.getItem("option")).removeClass('hidden').removeAttr('disabled'); document.getElementById("monitorSelect2").innerHTML = "選擇觀測儀器"; var wellTBALocal = getCheckValue(); var dataValue = option; for (i = 0; i < wellTBALocal.length; i++) { dataValue = dataValue.concat(',', wellTBALocal[i]); } if (isLoad) { //dataValue = 監測儀器代號,超出警戒值的儀器名稱 //AddDataTable會存option:監測儀器代號(string) // abnormal:超出警戒值的儀器名稱(array) // gameObjects:所有監測儀器名稱(array) // optionGameObjects:包含監測儀器代號的所有監測儀器名稱(array) // 到unity的DataTable.cs裡面 myGameInstance.SendMessage("Monitor", "AddDataTable", dataValue); //原本的模型牆被挖空,SID、RS、VG都有建各自的牆,若選擇一種監測儀器則另外兩種隱藏掉 //addData(DataTable.option); //依照DataTable的option將所有optionGameObjects改成normal的顏色 //Search(DataTable.option, DataTable.abnormal); //將所有abnormal的儀器改成abnormal的顏色 myGameInstance.SendMessage("Monitor", "Initialization"); } var wellNameList = window.localStorage.getItem("wellNameList"); var wellNameListsLocal = wellNameList.split(","); var order = new Array(wellNameListsLocal.length); for (i = 0; i < wellNameListsLocal.length; i++) { order[i] = wellNameListsLocal[i].match(/\d+/g); } for (i = 0; i < order.length; i++) { for (j = 0; j < order.length; j++) { if (order[j] > order[j + 1]) { let temp = order[j]; order[j] = order[j + 1]; order[j + 1] = temp; let temp2 = wellNameListsLocal[j]; wellNameListsLocal[j] = wellNameListsLocal[j + 1]; wellNameListsLocal[j + 1] = temp2; } } } wellNameLists = wellNameListsLocal; wellTBA = wellTBALocal; SetList(); ResetCamera(); showWell(wellNameLists[0], false); } //get well info from sql server function showWell(str, changeCamera) { var strLocal = ""; //isCompare = false; //$("#compareCheck").checked = false; strLocal = str; $("#monitorSelect2").innerHTML = strLocal; getTable(str); getChart(str, "myChart"); if (isLoad) { //把現在選擇的儀器名稱(例:OW-1)傳到unity,unity找模型名稱相同的改變模型顏色以及鏡頭置中模型 myGameInstance.SendMessage("MainCamera", "GetDataFromWebGL", str); } if (!changeCamera) { ResetCamera(); } } function getTable(monitor) { $.ajax({ url: '/BIM-Monitor/script/php/get_monitor_table.php', type: "GET", dataType: "JSON", data: { monitor: monitor } }).success(function (result) { let table = result.table; let unit = result.unit; let haveDepth = result.haveDepth; let haveDirection = result.haveDirection; var header = ""; if (haveDepth) { for (i = 0; i < table[0].length - 1; i++) { head = i * 0.5; if (head == 0) head = "TOP"; header += `${head}`; } } else if (haveDirection) { header = `${monitor}(1~3向)${monitor}(2~4向)`; } else { header = `測量值 單位:`; } $("#tabData").empty(); $("#tabData").append(` ${header}
測量日期
`); dataTable = $('#dataTable').DataTable({ bProcessing: true, responsive: true, "searching": true, "pageLength": 10, "language": { "processing": "處理中...", "loadingRecords": "載入中...", "lengthMenu": "顯示 _MENU_ 項結果", "zeroRecords": "沒有符合的結果或是沒有資料", "info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項", "infoEmpty": "顯示第 0 至 0 項結果,共 0 項", "infoFiltered": "(從 _MAX_ 項結果中過濾)", "infoPostFix": "", "search": "", "paginate": { "first": '', "previous": '', "next": '', "last": '' }, "aria": { "sortAscending": ": 升冪排列", "sortDescending": ": 降冪排列" } }, }); if (dataTable != null) { dataTable.clear(); dataTable.draw(); } if (monitor == '') { monitor = '查無監測儀器或'; } $("#tableName").text(monitor + "資料表"); $("#unit").text(`測量值(${unit})`); table.forEach(function (data) { dataTable.row.add(data) dataTable.draw(); }); }).error(function (error) { console.log(error); }).complete(function (e) { }); } //建立pie chart function getCheckValue() { /* var dataArray = []; var option = window.localStorage.getItem("option"); for (i = 0; i < errorTable.length; i++) { if (errorTable[i].table_name == option) { var method = errorTable[i].method; var table_name = errorTable[i].table_name + "data"; var warning1 = errorTable[i].warning1; var warning2 = errorTable[i].warning2; var warning_Count = errorTable[i].warning_Count; } } $.ajax({ url: "/BIM-Monitor/script/php/checkValue2.php", data: { method: method, table_name: table_name, warning1: warning1, warning2: warning2, warning_Count: warning_Count }, async: false, contentType: "application/json", dataType: "json" }) .success(function (response) { console.log(response) dataArray = response['wellTBA']; for (var i = 0; i < dataArray.length; i++) { dataArray[i] = dataArray[i].replace('_', '-'); } var normal_count = response['normal_count']; var abnormal_count = response['abnormal_count']; sparklinePieData = [normal_count, abnormal_count]; var all = normal_count + abnormal_count; var percent = abnormal_count / all; var url = "/BIM-Monitor/assets/javascripts/ui-elements/pie.charts.js"; var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script.setAttribute('src', url); document.getElementsByTagName('head')[0].appendChild(script); document.getElementById("percent").innerHTML = Math.round(percent * 100) + "%"; }) .error(function () { //alert("錯誤統計未正常獲取"); }) .complete(function () {}); return dataArray; */ var dataArray = []; return dataArray; } //建立左側監測儀器(異常數量/總數量) function GetCheckAllAJAXValue() { /* errorArray = []; for (i = 0; i < errorTable.length; i++) { var method = errorTable[i].method; var option = errorTable[i].table_name; var table_name = errorTable[i].table_name + "data"; var warning1 = errorTable[i].warning1; var warning2 = errorTable[i].warning2; var warning_Count = errorTable[i].warning_Count; $.ajax({ url: "/BIM-Monitor/script/php/checkValue2.php", data: { method: method, table_name: table_name, warning1: warning1, warning2: warning2, warning_Count: warning_Count }, async: false, contentType: "application/json", dataType: "json" }) .success(function (response) { var normal_count = response['normal_count']; var abnormal_count = response['abnormal_count']; var all_count = 0 + normal_count + abnormal_count; document.getElementById(option).innerHTML = "(" + abnormal_count + "/" + all_count + ")"; errorArray.push(abnormal_count); }) .error(function () { //alert("錯誤統計未正常獲取"); }) .complete(function () {}); } */ } function CheckError() { var checkBox = document.getElementById("errorCheck"); if (checkBox.checked == true) { isAll = false; } else { isAll = true; } SetList(); } function get_json_file(file_path) { output = {}; $.ajax({ dataType: "json", url: file_path, }).done(function (data) { output = data; }).error(function (error) { console.log(error); }); return output; } //Display chart function getChart(monitor) { type = monitor.split("-")[0]; $.ajax({ url: "/BIM-Monitor/script/php/get_monitor_chart.php", type: "GET", async: false, contentType: "application/json", dataType: "json", data: { monitor: monitor } }).done(function (response) { charts = response.chart; label = response.label; unit = response.unit; console.log(charts); displayChart(monitor, label, unit, charts); }).error(function (error) { console.log(error); }); } function displayChart(monitor, label, unit, charts) { var ctx = document.getElementById("myChart").getContext("2d"); var date = []; var data = []; var warning1 = []; var action1 = []; var warning2 = []; var action2 = []; var type = monitor.split("-")[0]; var SIS_data = {}; if (window.chart != undefined) { window.chart.destroy(); } // console.log(charts); if (type == "SIS" || type == "SID") { SIS_data["depth"] = []; SIS_data["warning1"] = []; SIS_data["warning2"] = []; SIS_data["action1"] = []; SIS_data["action2"] = []; SIS_data["data"] = {}; charts.forEach(element => { var sis_date = element["Date"]; var sis_warning = element["WarningValue"].split("±")[1]; var sis_action = element["ActionValue"].split("±")[1]; delete element["Date"]; delete element["WarningValue"]; delete element["ActionValue"]; var sis_data_length = Object.keys(element).length; SIS_data["data"][sis_date] = []; for (i = 1; i <= sis_data_length; i++) { SIS_data["data"][sis_date].push(element["" + i * 0.5]); if (SIS_data["depth"].length < sis_data_length) { SIS_data["depth"].push(i * 0.5); SIS_data["warning1"].push(+sis_warning); SIS_data["warning2"].push(-sis_warning); SIS_data["action1"].push(+sis_action); SIS_data["action2"].push(-sis_action); } } }); console.log(SIS_data); var datasets = [{ label: "警戒值+", data: SIS_data["warning1"], borderColor: "#FF0000", borderDash: [5,5], pointRadius: 0 }, { label: "警戒值-", data: SIS_data["warning2"], borderColor: "#FF0000", borderDash: [5,5], pointRadius: 0 }, { label: "行動值+", data: SIS_data["action1"], borderColor: "#FF0000", pointRadius: 0 }, { label: "行動值-", data: SIS_data["action2"], borderColor: "#FF0000", pointRadius: 0 }]; Object.keys(SIS_data["data"]).forEach(element => { datasets.push({ label: element, data: SIS_data["data"][element], borderColor: randomColorBlue(), pointRadius: 0 }); }); console.log(datasets); window.chart = new Chart(ctx, { //Line chart type: 'line', data: { labels: SIS_data["depth"], datasets: datasets }, options: { spanGaps: true, maintainAspectRatio: false, responsive: true, indexAxis: 'y', scales: { y: { title: { display: true, text: "觀測深度(m)" } }, x: { title: { display: true, text: label + '(' + unit + ')' } } } } }); } else { charts.forEach(function (chart) { Object.keys(chart).forEach(function (key) { if (key == "Date") { date.push(chart[key]); } else if (key == "WarningValue") { let value = 0; if (chart[key].includes("±")) { value = chart[key].split("±")[1]; } warning1.push(+value); warning2.push(-value); } else if (key == "ActionValue") { let value = 0; if (chart[key].includes("±")) { value = chart[key].split("±")[1]; } action1.push(+value); action2.push(-value); } else { data.push(chart[key]); } }); }) var datasets = [{ label: "警戒值+", data: warning1, borderColor: "#FF0000", borderDash: [5,5], pointRadius: 0 }, { label: "警戒值-", data: warning2, borderColor: "#FF0000", borderDash: [5,5], pointRadius: 0 }, { label: "行動值+", data: action1, borderColor: "#FF0000", pointRadius: 0 }, { label: "行動值-", data: action2, borderColor: "#FF0000", pointRadius: 0 }]; if (type == "TI") { var data1 = []; var data2 = []; for (i = 0; i < data.length; i += 2) { data1.push(data[i]); data2.push(data[i + 1]); } datasets.push({ label: monitor + "(1-3)", data: data1, borderColor: "#3e95cd" }); datasets.push({ label: monitor + "(2-4)", data: data2, borderColor: "#000000" }); } else { datasets.push({ label: monitor, data: data, borderColor: "#3e95cd" }); } window.chart = new Chart(ctx, { //Line chart type: 'line', data: { //X-axis displays the date labels: date, datasets: datasets }, options: { spanGaps: true, maintainAspectRatio: false, responsive: true, scales: { x: { title: { display: true, text: "日期" } }, y: { title: { display: true, text: label + '(' + unit + ')' } } } } }); } } function ResetCamera() { if (isLoad) { myGameInstance.SendMessage("MainCamera", "ResetCamera"); } } function SetList() { var wellNameListsLocal = ""; var isError = false; var monitorSelect = document.getElementById("monitorSelect"); var monitorButton = document.getElementById("monitorButton"); while (monitorSelect.hasChildNodes()) { monitorSelect.removeChild(monitorSelect.firstChild); } while (monitorButton.hasChildNodes()) { monitorButton.removeChild(monitorButton.firstChild); } monitorButton.innerHTML = "綠色為正常|紅色為異常
"; GetCheckAllAJAXValue(); for (i = 0; i < wellNameLists.length; i++) { wellNameListsLocal = wellNameLists[i]; var option = document.createElement("li"); var createA = document.createElement("a"); var createAText = document.createTextNode(wellNameListsLocal); var createButton = document.createElement("button"); var createButtonText = document.createTextNode(wellNameListsLocal); createButton.setAttribute('class', "mb-xs mt-xs mr-xs modal-with-zoom-anim btn btn-success modal-dismiss"); for (j = 0; j < wellTBA.length; j++) { if (wellNameLists[i] == (wellTBA[j])) { createA.style = "color:red;"; createButton.setAttribute('class', "mb-xs mt-xs mr-xs btn btn-danger modal-dismiss"); isError = true; } } createA.setAttribute('onclick', "showWell('" + wellNameLists[i] + "',true)"); createButton.setAttribute('onclick', "showWell('" + wellNameLists[i] + "',true)"); createButton.setAttribute('type', "button"); if (isAll || (!isAll && isError)) { createA.appendChild(createAText); createButton.appendChild(createButtonText); option.appendChild(createA); monitorSelect.appendChild(option); monitorButton.appendChild(createButton); } isError = false; } } function UpdateGPS(GPS) { if (isLoad) { myGameInstance.SendMessage("PlayerArmature", "UpdateGPS", GPS); } } //Start making the chart function init(c_wellName, c_m_date, c_m_value, elementID) { var ctx = document.getElementById(elementID).getContext("2d"); var ELPwarning = [0, -4.6, -10, -15.3, -23.2, 0]; var ELP_1warning = [0, -7.9, -13.3, 0, 0, 0]; //Warning value let warning = []; var OWFirstData = { "OW-1": -1.81, "OW-2": -1.59, "OW-3": -6.3, "OW-4": -3.67, "OW-5": -3.16, "OW-6": -1.78, "OW-7": -3.31 }; var OWwarning1 = 0; var OWwarning2 = 0; var yLabel = ""; var xLabel = ""; if (c_wellName.includes("ELP")) { yLabel = "水位高程GL(m)"; xLabel = "日期"; } else if (c_wellName.includes("OW")) { for (const [key, value] of Object.entries(OWFirstData)) { if (c_wellName == key) { OWwarning1 = value + 2; OWwarning2 = value - 2; } } for (i = 0; i < c_m_date.length; i++) { warning.push(OWwarning1); } yLabel = "水位高程GL(m)"; xLabel = "日期"; } else if (c_wellName.includes("SM")) { for (i = 0; i < c_m_date.length; i++) { warning.push(45); } yLabel = "沉陷量(mm)"; xLabel = "日期"; } else if (c_wellName.includes("SBM")) { for (i = 0; i < c_m_date.length; i++) { warning.push(9.5); } yLabel = "沉陷量(mm)"; xLabel = "日期"; } else if (c_wellName.includes("SB")) { for (i = 0; i < c_m_date.length; i++) { warning.push(0.0008); } yLabel = "沉陷量(mm)"; xLabel = "日期"; } else if (c_wellName.includes("VG")) { for (i = 0; i < c_m_date.length; i++) { warning.push(110); } yLabel = "應力值(t)"; xLabel = "日期"; } else if (c_wellName.includes("HM")) { for (i = 0; i < c_m_date.length; i++) { warning.push(25); } yLabel = "沉陷量(mm)"; xLabel = "日期"; } for (j = 0; j < c_m_value.length; j++) { if (c_m_value[j] == "") { c_m_value[j] = null; } } //Destroy chart if it already exists. If not, there'll be multiple charts stack together if (window.chart != undefined) { window.chart.destroy(); } window.chart = new Chart(ctx, { //Line chart type: 'line', data: { //X-axis displays the date labels: c_m_date, datasets: [{ //Label above the chart to illustrate which color has which purpose label: c_wellName, //Data value data: c_m_value, //Detemine line's color borderColor: '#3e95cd' }, { label: "警戒值", data: warning, borderColor: "#FF0000", pointRadius: 0 } ] }, options: { spanGaps: true, maintainAspectRatio: false, responsive: true, scales: { y: { title: { display: true, text: yLabel } }, x: { title: { display: true, text: xLabel } } } } }); if (c_wellName.includes("SBM")) { let warning2 = []; for (i = 0; i < c_m_date.length; i++) { warning2.push(-9.5); } window.chart.data.datasets.push({ label: "警戒值2", data: warning2, borderColor: "#FF0000", pointRadius: 0 }); window.chart.update(); } else if (c_wellName.includes("SB")) { let warning2 = []; for (i = 0; i < c_m_date.length; i++) { warning2.push(-0.0008); } window.chart.data.datasets.push({ label: "警戒值2", data: warning2, borderColor: "#FF0000", pointRadius: 0 }); window.chart.update(); } else if (c_wellName.includes("OW")) { let warning2 = []; for (i = 0; i < c_m_date.length; i++) { warning2.push(OWwarning2); } window.chart.data.datasets.push({ label: "警戒值2", data: warning2, borderColor: "#FF0000", pointRadius: 0 }); window.chart.update(); } } function init2(c_wellName, c_m_date, c_m_value, c2_wellName, c2_m_date, c2_m_value, elementID) { var ctx = document.getElementById(elementID).getContext("2d"); var yLabel = ""; var xLabel = ""; let warning = []; if (c_wellName.includes("TI")) { for (i = 0; i < c2_m_date.length; i++) { warning.push(0.00106); } yLabel = "徑度量(δ/ L)"; xLabel = "日期"; } for (j = 0; j < c_m_value.length; j++) { if (c_m_value[j] == "") { c_m_value[j] = null; } } if (window.chart != undefined) { window.chart.destroy(); } c_m_value.forEach(function (item, index, array) { }); window.chart = new Chart(ctx, { type: 'line', data: { labels: c_m_date, datasets: [{ label: c_wellName, data: c_m_value, borderColor: '#3e95cd' }, { label: c2_wellName, data: c2_m_value, borderColor: '#63fff5' } ] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { title: { display: true, text: yLabel } }, x: { title: { display: true, text: xLabel } } } } }); //ELP does not have second warning line, so you need to update it seperately if (c_wellName.includes("TI")) { let warning2 = []; for (i = 0; i < c2_m_date.length; i++) { warning2.push(-0.00106); } window.chart.data.datasets.push({ label: "警戒值2", data: warning2, borderColor: "#FF0000", pointRadius: 0 }); window.chart.update(); } } //SIS SID's lines are vertical function initSISSID(c_m_date, c_m_depth, c_m_value, elementID, str) { var ctx = document.getElementById(elementID).getContext("2d"); var datasetValue = []; let warning = []; var SID_data = []; var SIS_data = []; var SIS_array = ['SIS-1', 'SIS-2-1', 'SIS-2-2', 'SIS-3', 'SIS-4', 'SIS-6', 'SIS-7']; var SID_array = ['SID-1', 'SID-2-1', 'SID-2-2', 'SID-3-1', 'SID-3-2', 'SID-4', 'SID-5-1', 'SID-5-2', 'SID-6', 'SID-7']; var index = 0; var num = 0; SID_data = [1.85, 1.128, 1.128, 1.128, 1.698, 1.698, 1.698, 1.186, 1.186, 1.032]; SIS_data = [1.85, 1.128, 1.128, 1.128, 1.698, 1.186, 1.032]; if (str.includes("SIS")) { index = SIS_array.indexOf(str); num = SIS_data[index]; } else if (str.includes("SID")) { index = SID_array.indexOf(str); num = SID_data[index]; } for (i = 0; i < c_m_value[0].length; i++) { warning.push(num); } yLabel = "觀測深度GL(m)"; xLabel = "變位量(cm)"; for (j = 0; j < c_m_value.length; j++) { if (c_m_value[j] == "") { c_m_value[j] = null; } } if (window.chart != undefined) { window.chart.destroy(); } for (j = 0; j <= c_m_date.length; j++) { if (j == c_m_date.length) { datasetValue[j] = { axis: 'y', fill: false, label: "警戒值", data: warning, borderColor: "#FF0000", pointRadius: 0 } } else { datasetValue[j] = { axis: 'y', label: c_m_date[j], data: c_m_value[j], borderColor: randomColor() } } } window.chart = new Chart(ctx, { type: 'line', data: { labels: c_m_depth, datasets: datasetValue }, options: { //Turns line to vertical maintainAspectRatio: false, responsive: true, indexAxis: 'y', scales: { y: { title: { display: true, text: yLabel } }, x: { beginAtZero: true, title: { display: true, text: xLabel } } } } }); } function init6(c_wellName, c_m_date, c_m_value, c2_wellName, c2_m_value, c3_wellName, c3_m_value, c4_wellName, c4_m_value, c5_wellName, c5_m_value, c6_wellName, c6_m_value, elementID) { var ctx = document.getElementById(elementID).getContext("2d"); let warning = []; if (c_wellName.includes("RS")) { for (i = 0; i < c_m_date.length; i++) { warning.push(2000); } yLabel = "應力值(kg/cm²)"; xLabel = "日期"; } if (window.chart != undefined) { window.chart.destroy(); } window.chart = new Chart(ctx, { type: 'line', data: { labels: c_m_date, datasets: [{ label: c_wellName, data: c_m_value, borderColor: randomColor() }, { label: c2_wellName, data: c2_m_value, borderColor: randomColor() }, { label: c3_wellName, data: c3_m_value, borderColor: randomColor() }, { label: c4_wellName, data: c4_m_value, borderColor: randomColor() }, { label: c5_wellName, data: c5_m_value, borderColor: randomColor() }, { label: c6_wellName, data: c6_m_value, borderColor: randomColor() }, { label: "警戒值", data: warning, borderColor: "#FF0000", pointRadius: 0 } ] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { title: { display: true, text: yLabel } }, x: { title: { display: true, text: xLabel } } } } }); //ELP does not have second warning line, so you need to update it seperately if (c_wellName.includes("RS")) { let warning2 = []; for (i = 0; i < c_m_date.length; i++) { warning2.push(-2000); } window.chart.data.datasets.push({ label: "警戒值2", data: warning2, borderColor: "#FF0000", pointRadius: 0 }); window.chart.update(); } } /* function initCompare(m_date, chart_data, index, label) { var ctx = document.getElementById("myChart").getContext("2d"); var value = -7.9; let warning = []; var phase = document.getElementById("phase").value; yLabel = "水位高程GL(m)"; xLabel = "日期"; for (i = 0; i < m_date.length; i++) { warning.push(value); } if (window.chart != undefined) { window.chart.destroy(); } window.chart = new Chart(ctx, { type: 'line', data: { labels: m_date }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { title: { display: true, text: yLabel } }, x: { title: { display: true, text: xLabel } } } } }); for (i = 1; i < index + 1; i++) { window.chart.data.datasets.push({ label: label[i].replaceAll("_", "-"), data: chart_data[i], borderColor: randomColorBlue() }); } /* if(label[1].includes("ELP") && phase != 2 && phase != 7){ window.chart.data.datasets.push({ label: "警戒值", data: warning, borderColor: "#FF0000", pointRadius: 0 }); } */ //window.chart.update(); //} //Chart has multiple lines that need different color function randomColor() { return "#" + ((1 << 24) * Math.random() | 0).toString(16); } function randomColorBlue() { var mid = Math.floor(Math.random() * 255); return "#30" + mid.toString(16) + "ff"; } //Need to display multiple epuiment's data table and can't find the function to reset it. So I kill all the nodes. function reset() { const myNode = document.getElementById("tabData"); while (myNode.firstChild) { myNode.removeChild(myNode.lastChild); } var table = document.createElement("table"); table.id = "dataTable"; table.className = "display"; myNode.appendChild(table); }