[Frontend][系統監控] 電梯模型更換 | [儀錶板] 即時告警點位訂閱程序建置 | 柱狀圖 baja 資料串接 | 左方 3d 圖 Size 調整 | 即時功率 baja 串接 | [baja] 取值 輸出程序調整
This commit is contained in:
parent
9aa7efcb6d
commit
a57e40bf44
@ -1,7 +1,10 @@
|
|||||||
<main id="js-page-content" role="main" class="page-content">
|
<main id="js-page-content" role="main" class="page-content">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-xl-4">
|
<div class="col-sm-12 col-xl-4 poisition-relative">
|
||||||
<div id="forgeViewer"></div>
|
<!-- <img src="img/clouds.png" class="img-fluid" style="min-height: 520px;"> -->
|
||||||
|
|
||||||
|
<div id="forgeViewer" class="position-absolute" style="width:96%;height:96%;"></div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 col-xl-4">
|
<div class="col-sm-12 col-xl-4">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -28,16 +31,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div id="panel-2" class="panel panel-locked" data-panel-sortable data-panel-collapsed data-panel-close>
|
<div id="panel-2" class="panel" data-panel-sortable data-panel-collapsed data-panel-close>
|
||||||
<div class="panel-hdr">
|
<div class="panel-hdr">
|
||||||
<h2>
|
<h2>
|
||||||
昨日/今日用電比較
|
昨日/今日用電比較
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-container show">
|
<div class="panel-container show">
|
||||||
<div class="panel-content poisition-relative" style="min-height: 346.84px;">
|
<div class="panel-content poisition-relative">
|
||||||
<div class="p-1 position-absolute pos-right pos-top mt-3 mr-3 z-index-cloud d-flex align-items-center justify-content-center">
|
<div class="p-1 position-absolute pos-right pos-top mt-3 mr-3 z-index-cloud d-flex align-items-center justify-content-center">
|
||||||
<div class="border-faded border-top-0 border-left-0 border-bottom-0 py-2 pr-4 mr-3 hidden-sm-down">
|
<!--<div class="border-faded border-top-0 border-left-0 border-bottom-0 py-2 pr-4 mr-3 hidden-sm-down">
|
||||||
<div class="text-right fw-500 l-h-n d-flex flex-column">
|
<div class="text-right fw-500 l-h-n d-flex flex-column">
|
||||||
<div class="h3 m-0 d-flex align-items-center justify-content-end">
|
<div class="h3 m-0 d-flex align-items-center justify-content-end">
|
||||||
<div class='icon-stack mr-2'>
|
<div class='icon-stack mr-2'>
|
||||||
@ -54,9 +57,11 @@
|
|||||||
<div class="js-easy-pie-chart color-success-400 position-relative position-absolute pos-left pos-right pos-top pos-bottom d-flex align-items-center justify-content-center" data-percent="65" data-piesize="60" data-linewidth="5" data-scalelength="1" data-scalecolor="#fff">
|
<div class="js-easy-pie-chart color-success-400 position-relative position-absolute pos-left pos-right pos-top pos-bottom d-flex align-items-center justify-content-center" data-percent="65" data-piesize="60" data-linewidth="5" data-scalelength="1" data-scalecolor="#fff">
|
||||||
<div class="position-absolute pos-top pos-left pos-right pos-bottom d-flex align-items-center justify-content-center fw-500 fs-xl text-dark">78%</div>
|
<div class="position-absolute pos-top pos-left pos-right pos-bottom d-flex align-items-center justify-content-center fw-500 fs-xl text-dark">78%</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>-->
|
||||||
</div>
|
</div>
|
||||||
|
<div style="width:100%; min-height:300px;">
|
||||||
|
<canvas class="chart" id="eveDayElecChart"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<div id="flot-area" style="width:100%; height:300px;"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -88,7 +93,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<div id="panel-3" class="panel panel-locked" data-panel-sortable data-panel-collapsed data-panel-close>
|
<div id="panel-3" class="panel" data-panel-sortable data-panel-collapsed data-panel-close>
|
||||||
<div class="panel-hdr">
|
<div class="panel-hdr">
|
||||||
<h2>
|
<h2>
|
||||||
本週/上週用電比較
|
本週/上週用電比較
|
||||||
@ -96,7 +101,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="panel-container show">
|
<div class="panel-container show">
|
||||||
<div class="panel-content poisition-relative">
|
<div class="panel-content poisition-relative">
|
||||||
<div class="pb-5 pt-3">
|
<!--<div class="pb-5 pt-3">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6 col-xl-3 d-sm-flex align-items-center">
|
<div class="col-6 col-xl-3 d-sm-flex align-items-center">
|
||||||
<div class="p-2 mr-3 bg-info-200 rounded">
|
<div class="p-2 mr-3 bg-info-200 rounded">
|
||||||
@ -135,8 +140,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>-->
|
||||||
|
<div style="width:100%; min-height:300px;">
|
||||||
|
<canvas class="chart" id="eveWeekElecChart"></canvas>
|
||||||
</div>
|
</div>
|
||||||
<div id="flotVisit" style="width:100%; height:208px;"></div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -155,7 +163,7 @@
|
|||||||
<div class="col-sm-12 col-lg-4">
|
<div class="col-sm-12 col-lg-4">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div id="panel-3" class="panel panel-locked" data-panel-sortable data-panel-collapsed data-panel-close>
|
<div id="panel-3" class="panel" data-panel-sortable data-panel-collapsed data-panel-close>
|
||||||
<div class="panel-hdr">
|
<div class="panel-hdr">
|
||||||
<h2>
|
<h2>
|
||||||
異常狀態
|
異常狀態
|
||||||
@ -189,7 +197,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div id="panel-3" class="panel panel-locked" data-panel-sortable data-panel-collapsed data-panel-close>
|
<div id="panel-3" class="panel" data-panel-sortable data-panel-collapsed data-panel-close>
|
||||||
<div class="panel-hdr">
|
<div class="panel-hdr">
|
||||||
<h2>
|
<h2>
|
||||||
工單進度
|
工單進度
|
||||||
@ -233,460 +241,51 @@
|
|||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
/* defined datas */
|
|
||||||
var dataTargetProfit = [
|
|
||||||
[1354586000000, 153],
|
|
||||||
[1364587000000, 658],
|
|
||||||
[1374588000000, 198],
|
|
||||||
[1384589000000, 663],
|
|
||||||
[1394590000000, 801],
|
|
||||||
[1404591000000, 1080],
|
|
||||||
[1414592000000, 353],
|
|
||||||
[1424593000000, 749],
|
|
||||||
[1434594000000, 523],
|
|
||||||
[1444595000000, 258],
|
|
||||||
[1454596000000, 688],
|
|
||||||
[1464597000000, 364]
|
|
||||||
]
|
|
||||||
var dataProfit = [
|
|
||||||
[1354586000000, 53],
|
|
||||||
[1364587000000, 65],
|
|
||||||
[1374588000000, 98],
|
|
||||||
[1384589000000, 83],
|
|
||||||
[1394590000000, 980],
|
|
||||||
[1404591000000, 808],
|
|
||||||
[1414592000000, 720],
|
|
||||||
[1424593000000, 674],
|
|
||||||
[1434594000000, 23],
|
|
||||||
[1444595000000, 79],
|
|
||||||
[1454596000000, 88],
|
|
||||||
[1464597000000, 36]
|
|
||||||
]
|
|
||||||
var dataSignups = [
|
|
||||||
[1354586000000, 647],
|
|
||||||
[1364587000000, 435],
|
|
||||||
[1374588000000, 784],
|
|
||||||
[1384589000000, 346],
|
|
||||||
[1394590000000, 487],
|
|
||||||
[1404591000000, 463],
|
|
||||||
[1414592000000, 479],
|
|
||||||
[1424593000000, 236],
|
|
||||||
[1434594000000, 843],
|
|
||||||
[1444595000000, 657],
|
|
||||||
[1454596000000, 241],
|
|
||||||
[1464597000000, 341]
|
|
||||||
]
|
|
||||||
var dataSet1 = [
|
|
||||||
[0, 10],
|
|
||||||
[100, 8],
|
|
||||||
[200, 7],
|
|
||||||
[300, 5],
|
|
||||||
[400, 4],
|
|
||||||
[500, 6],
|
|
||||||
[600, 3],
|
|
||||||
[700, 2]
|
|
||||||
];
|
|
||||||
var dataSet2 = [
|
|
||||||
[0, 9],
|
|
||||||
[100, 6],
|
|
||||||
[200, 5],
|
|
||||||
[300, 3],
|
|
||||||
[400, 3],
|
|
||||||
[500, 5],
|
|
||||||
[600, 2],
|
|
||||||
[700, 1]
|
|
||||||
];
|
|
||||||
|
|
||||||
var tarElePath = '';
|
var tarElePath = '';
|
||||||
|
var sysSubList = [];
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
show3DModel();
|
show3DModel();
|
||||||
getSubList();
|
getSubList();
|
||||||
getFirstEletric();
|
getFirstEletric();
|
||||||
/* init datatables */
|
|
||||||
$('#dt-basic-example').dataTable(
|
|
||||||
{
|
|
||||||
responsive: true,
|
|
||||||
dom: "<'row mb-3'<'col-sm-12 col-md-6 d-flex align-items-center justify-content-start'f><'col-sm-12 col-md-6 d-flex align-items-center justify-content-end'B>>" +
|
|
||||||
"<'row'<'col-sm-12'tr>>" +
|
|
||||||
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
|
|
||||||
buttons: [
|
|
||||||
{
|
|
||||||
extend: 'colvis',
|
|
||||||
text: 'Column Visibility',
|
|
||||||
titleAttr: 'Col visibility',
|
|
||||||
className: 'btn-outline-default'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
extend: 'csvHtml5',
|
|
||||||
text: 'CSV',
|
|
||||||
titleAttr: 'Generate CSV',
|
|
||||||
className: 'btn-outline-default'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
extend: 'copyHtml5',
|
|
||||||
text: 'Copy',
|
|
||||||
titleAttr: 'Copy to clipboard',
|
|
||||||
className: 'btn-outline-default'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
extend: 'print',
|
|
||||||
text: '<i class="fal fa-print"></i>',
|
|
||||||
titleAttr: 'Print Table',
|
|
||||||
className: 'btn-outline-default'
|
|
||||||
}
|
|
||||||
|
|
||||||
],
|
|
||||||
columnDefs: [
|
|
||||||
{
|
|
||||||
targets: -1,
|
|
||||||
title: '',
|
|
||||||
orderable: false,
|
|
||||||
render: function (data, type, full, meta) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
-- ES6
|
|
||||||
-- convert using https://babeljs.io online transpiler
|
|
||||||
return `
|
|
||||||
<a href='javascript:void(0);' class='btn btn-sm btn-icon btn-outline-danger rounded-circle mr-1' title='Delete Record'>
|
|
||||||
<i class="fal fa-times"></i>
|
|
||||||
</a>
|
|
||||||
<div class='dropdown d-inline-block dropleft '>
|
|
||||||
<a href='#'' class='btn btn-sm btn-icon btn-outline-primary rounded-circle shadow-0' data-toggle='dropdown' aria-expanded='true' title='More options'>
|
|
||||||
<i class="fal fa-ellipsis-v"></i>
|
|
||||||
</a>
|
|
||||||
<div class='dropdown-menu'>
|
|
||||||
<a class='dropdown-item' href='javascript:void(0);'>Change Status</a>
|
|
||||||
<a class='dropdown-item' href='javascript:void(0);'>Generate Report</a>
|
|
||||||
</div>
|
|
||||||
</div>`;
|
|
||||||
|
|
||||||
ES5 example below:
|
|
||||||
|
|
||||||
*/
|
|
||||||
return "\n\t\t\t\t\t\t<a href='javascript:void(0);' class='btn btn-sm btn-icon btn-outline-danger rounded-circle mr-1' title='Delete Record'>\n\t\t\t\t\t\t\t<i class=\"fal fa-times\"></i>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t\t<div class='dropdown d-inline-block dropleft'>\n\t\t\t\t\t\t\t<a href='#'' class='btn btn-sm btn-icon btn-outline-primary rounded-circle shadow-0' data-toggle='dropdown' aria-expanded='true' title='More options'>\n\t\t\t\t\t\t\t\t<i class=\"fal fa-ellipsis-v\"></i>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t<div class='dropdown-menu'>\n\t\t\t\t\t\t\t\t<a class='dropdown-item' href='javascript:void(0);'>Change Status</a>\n\t\t\t\t\t\t\t\t<a class='dropdown-item' href='javascript:void(0);'>Generate Report</a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>";
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
]
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/* flot toggle example */
|
// 從數字週數轉為中文週數
|
||||||
var flot_toggle = function () {
|
function dayToChiDay(num) {
|
||||||
|
let chiDay = ["週日", "週一", "週二", "週三", "週四", "週五", "週六"];
|
||||||
var data = [
|
return chiDay[num];
|
||||||
{
|
|
||||||
label: "Target Profit",
|
|
||||||
data: dataTargetProfit,
|
|
||||||
color: color.info._400,
|
|
||||||
bars:
|
|
||||||
{
|
|
||||||
show: true,
|
|
||||||
align: "center",
|
|
||||||
barWidth: 30 * 30 * 60 * 1000 * 80,
|
|
||||||
lineWidth: 0,
|
|
||||||
/*fillColor: {
|
|
||||||
colors: [color.primary._500, color.primary._900]
|
|
||||||
},*/
|
|
||||||
fillColor:
|
|
||||||
{
|
|
||||||
colors: [
|
|
||||||
{
|
|
||||||
opacity: 0.9
|
|
||||||
},
|
|
||||||
{
|
|
||||||
opacity: 0.1
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
highlightColor: 'rgba(255,255,255,0.3)',
|
|
||||||
shadowSize: 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "Actual Profit",
|
|
||||||
data: dataProfit,
|
|
||||||
color: color.warning._500,
|
|
||||||
lines:
|
|
||||||
{
|
|
||||||
show: true,
|
|
||||||
lineWidth: 2
|
|
||||||
},
|
|
||||||
shadowSize: 0,
|
|
||||||
points:
|
|
||||||
{
|
|
||||||
show: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: "User Signups",
|
|
||||||
data: dataSignups,
|
|
||||||
color: color.success._500,
|
|
||||||
lines:
|
|
||||||
{
|
|
||||||
show: true,
|
|
||||||
lineWidth: 2
|
|
||||||
},
|
|
||||||
shadowSize: 0,
|
|
||||||
points:
|
|
||||||
{
|
|
||||||
show: true
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
|
|
||||||
var options = {
|
|
||||||
grid:
|
|
||||||
{
|
|
||||||
hoverable: true,
|
|
||||||
clickable: true,
|
|
||||||
tickColor: 'rgba(0,0,0,0.05)',
|
|
||||||
borderWidth: 1,
|
|
||||||
borderColor: 'rgba(0,0,0,0.05)'
|
|
||||||
},
|
|
||||||
tooltip: true,
|
|
||||||
tooltipOpts:
|
|
||||||
{
|
|
||||||
cssClass: 'tooltip-inner',
|
|
||||||
defaultTheme: false
|
|
||||||
},
|
|
||||||
xaxis:
|
|
||||||
{
|
|
||||||
mode: "time",
|
|
||||||
tickColor: 'rgba(0,0,0,0.05)',
|
|
||||||
},
|
|
||||||
yaxes:
|
|
||||||
{
|
|
||||||
tickColor: 'rgba(0,0,0,0.05)',
|
|
||||||
tickFormatter: function (val, axis) {
|
|
||||||
return "$" + val;
|
|
||||||
},
|
|
||||||
max: 1200
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
// 取得現在或前後時間,輸出單位依據 type
|
||||||
|
function getTimeByType(type = null, cal = 0) {
|
||||||
var plot2 = null;
|
let now = new Date();
|
||||||
|
return strToDate(now, type, cal);
|
||||||
function plotNow() {
|
|
||||||
var d = [];
|
|
||||||
$("#js-checkbox-toggles").find(':checkbox').each(function () {
|
|
||||||
if ($(this).is(':checked')) {
|
|
||||||
d.push(data[$(this).attr("name").substr(4, 1)]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (d.length > 0) {
|
|
||||||
if (plot2) {
|
|
||||||
plot2.setData(d);
|
|
||||||
plot2.draw();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
plot2 = $.plot($("#flot-toggles"), d, options);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
// 取得某當下時間或前後時間,輸出單位依據 type
|
||||||
|
function strToDate(text, type = null,cal = 0) {
|
||||||
$("#js-checkbox-toggles").find(':checkbox').on('change', function () {
|
let calDay = function (_d, _cal) {
|
||||||
plotNow();
|
return new Date(_d.getTime() + (cal * 24 * 60 * 60 * 1000));
|
||||||
});
|
|
||||||
plotNow()
|
|
||||||
}
|
}
|
||||||
flot_toggle();
|
let tarDate = new Date(text);
|
||||||
/* flot toggle example -- end*/
|
let result = 0;
|
||||||
|
if (type == "year") {
|
||||||
/* flot area */
|
result = calDay(tarDate, cal).getFullYear();
|
||||||
var flotArea = $.plot($('#flot-area'), [
|
} else if (type == "month") {
|
||||||
{
|
result = calDay(tarDate, cal).getMonth();
|
||||||
data: dataSet1,
|
} else if (type == "date") {
|
||||||
label: 'New Customer',
|
result = calDay(tarDate, cal).getDate();
|
||||||
color: color.success._200
|
} else if (type == "day") {
|
||||||
},
|
result = calDay(tarDate, cal).getDay();
|
||||||
{
|
} else {
|
||||||
data: dataSet2,
|
result = calDay(tarDate, cal);
|
||||||
label: 'Returning Customer',
|
|
||||||
color: color.info._200
|
|
||||||
}],
|
|
||||||
{
|
|
||||||
series:
|
|
||||||
{
|
|
||||||
lines:
|
|
||||||
{
|
|
||||||
show: true,
|
|
||||||
lineWidth: 2,
|
|
||||||
fill: true,
|
|
||||||
fillColor:
|
|
||||||
{
|
|
||||||
colors: [
|
|
||||||
{
|
|
||||||
opacity: 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
opacity: 0.5
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
shadowSize: 0
|
|
||||||
},
|
|
||||||
points:
|
|
||||||
{
|
|
||||||
show: true,
|
|
||||||
},
|
|
||||||
legend:
|
|
||||||
{
|
|
||||||
noColumns: 1,
|
|
||||||
position: 'nw'
|
|
||||||
},
|
|
||||||
grid:
|
|
||||||
{
|
|
||||||
hoverable: true,
|
|
||||||
clickable: true,
|
|
||||||
borderColor: '#ddd',
|
|
||||||
tickColor: 'rgba(0,0,0,0.05)',
|
|
||||||
aboveData: true,
|
|
||||||
borderWidth: 0,
|
|
||||||
labelMargin: 5,
|
|
||||||
backgroundColor: 'transparent'
|
|
||||||
},
|
|
||||||
yaxis:
|
|
||||||
{
|
|
||||||
tickLength: 1,
|
|
||||||
min: 0,
|
|
||||||
max: 15,
|
|
||||||
color: '#eee',
|
|
||||||
tickColor: 'rgba(0,0,0,0.05)',
|
|
||||||
font:
|
|
||||||
{
|
|
||||||
size: 0,
|
|
||||||
color: '#999'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
xaxis:
|
|
||||||
{
|
|
||||||
tickLength: 1,
|
|
||||||
color: '#eee',
|
|
||||||
tickColor: 'rgba(0,0,0,0.05)',
|
|
||||||
font:
|
|
||||||
{
|
|
||||||
size: 10,
|
|
||||||
color: '#999'
|
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
//取得 左下方 各系統小類
|
||||||
/* flot area -- end */
|
|
||||||
|
|
||||||
var flotVisit = $.plot('#flotVisit', [
|
|
||||||
{
|
|
||||||
data: [
|
|
||||||
[3, 0],
|
|
||||||
[4, 1],
|
|
||||||
[5, 3],
|
|
||||||
[6, 3],
|
|
||||||
[7, 10],
|
|
||||||
[8, 11],
|
|
||||||
[9, 12],
|
|
||||||
[10, 9],
|
|
||||||
[11, 12],
|
|
||||||
[12, 8],
|
|
||||||
[13, 5]
|
|
||||||
],
|
|
||||||
color: color.success._200
|
|
||||||
},
|
|
||||||
{
|
|
||||||
data: [
|
|
||||||
[1, 0],
|
|
||||||
[2, 0],
|
|
||||||
[3, 1],
|
|
||||||
[4, 2],
|
|
||||||
[5, 2],
|
|
||||||
[6, 5],
|
|
||||||
[7, 8],
|
|
||||||
[8, 12],
|
|
||||||
[9, 9],
|
|
||||||
[10, 11],
|
|
||||||
[11, 5]
|
|
||||||
],
|
|
||||||
color: color.info._200
|
|
||||||
}],
|
|
||||||
{
|
|
||||||
series:
|
|
||||||
{
|
|
||||||
shadowSize: 0,
|
|
||||||
lines:
|
|
||||||
{
|
|
||||||
show: true,
|
|
||||||
lineWidth: 2,
|
|
||||||
fill: true,
|
|
||||||
fillColor:
|
|
||||||
{
|
|
||||||
colors: [
|
|
||||||
{
|
|
||||||
opacity: 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
opacity: 0.12
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
grid:
|
|
||||||
{
|
|
||||||
borderWidth: 0
|
|
||||||
},
|
|
||||||
yaxis:
|
|
||||||
{
|
|
||||||
min: 0,
|
|
||||||
max: 15,
|
|
||||||
tickColor: 'rgba(0,0,0,0.05)',
|
|
||||||
ticks: [
|
|
||||||
[0, ''],
|
|
||||||
[5, '100K'],
|
|
||||||
[10, '200K'],
|
|
||||||
[15, '300K']
|
|
||||||
],
|
|
||||||
font:
|
|
||||||
{
|
|
||||||
color: '#444',
|
|
||||||
size: 10
|
|
||||||
}
|
|
||||||
},
|
|
||||||
xaxis:
|
|
||||||
{
|
|
||||||
|
|
||||||
tickColor: 'rgba(0,0,0,0.05)',
|
|
||||||
ticks: [
|
|
||||||
[2, '2am'],
|
|
||||||
[3, '3am'],
|
|
||||||
[4, '4am'],
|
|
||||||
[5, '5am'],
|
|
||||||
[6, '6am'],
|
|
||||||
[7, '7am'],
|
|
||||||
[8, '8am'],
|
|
||||||
[9, '9am'],
|
|
||||||
[10, '1pm'],
|
|
||||||
[11, '2pm'],
|
|
||||||
[12, '3pm'],
|
|
||||||
[13, '4pm']
|
|
||||||
],
|
|
||||||
font:
|
|
||||||
{
|
|
||||||
color: '#999',
|
|
||||||
size: 9
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
function goElectricMeter() {
|
|
||||||
pageAct.sysMainTag = $('#subSysBtnE4').data("subSysObj").main_system_tag;
|
|
||||||
pageAct.sysSubTag = $('#subSysBtnE4').data("subSysObj").sub_system_tag;
|
|
||||||
pageAct.sysSubName = $('#subSysBtnE4').data("subSysObj").full_name;
|
|
||||||
pageAct.sysSubObj = $('#subSysBtnE4').data("subSysObj");
|
|
||||||
$("#js-page-content").load("_sysMonAll.html", loadCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getSubList() {
|
function getSubList() {
|
||||||
let url = baseApiUrl + "/api/Device/GetMainSub";
|
let url = baseApiUrl + "/api/Device/GetMainSub";
|
||||||
let sendData = {
|
let sendData = {
|
||||||
@ -698,8 +297,12 @@
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
let strHtml = ``;
|
let strHtml = ``;
|
||||||
|
let contest = ["E4", "EL", "L1", "M10", "M12"]
|
||||||
$.each(res.data.history_Main_Systems, (index, mainSysObj) => {
|
$.each(res.data.history_Main_Systems, (index, mainSysObj) => {
|
||||||
$.each(mainSysObj.history_Sub_systems, (index2, subSysObj) => {
|
$.each(mainSysObj.history_Sub_systems, (index2, subSysObj) => {
|
||||||
|
if (contest.indexOf(subSysObj.sub_system_tag) != -1) {
|
||||||
|
sysSubList.push({ sysMainTag: mainSysObj.main_system_tag, sysSubTag: subSysObj.sub_system_tag });
|
||||||
|
}
|
||||||
strHtml += `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group" data-id="/${pageAct.AreaTag}/${pageAct.buiTag}/${mainSysObj.main_system_tag}/${subSysObj.sub_system_tag}">
|
strHtml += `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group" data-id="/${pageAct.AreaTag}/${pageAct.buiTag}/${mainSysObj.main_system_tag}/${subSysObj.sub_system_tag}">
|
||||||
<button type="button" class="btn btn-secondary col-4"><i class="fal fa-lightbulb-on fa-2x py-2"></i></button>
|
<button type="button" class="btn btn-secondary col-4"><i class="fal fa-lightbulb-on fa-2x py-2"></i></button>
|
||||||
<button type="button" class="btn btn-secondary">${subSysObj.full_name}</button>
|
<button type="button" class="btn btn-secondary">${subSysObj.full_name}</button>
|
||||||
@ -713,6 +316,7 @@
|
|||||||
}, null, "POST").send();
|
}, null, "POST").send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//取得第一筆電錶
|
||||||
function getFirstEletric() {
|
function getFirstEletric() {
|
||||||
let url = baseApiUrl + "/api/Device/GetDeviceList";
|
let url = baseApiUrl + "/api/Device/GetDeviceList";
|
||||||
let sendData = {
|
let sendData = {
|
||||||
@ -736,33 +340,245 @@
|
|||||||
}, null, "POST").send();
|
}, null, "POST").send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//從 baja 取得電表用電量
|
||||||
function getElectricBaja() {
|
function getElectricBaja() {
|
||||||
let devNum = tarElePath.split("_").slice(0, 8).join("_");
|
let devNum = tarElePath.split("_").slice(0, 8).join("_");
|
||||||
let devPath = tarElePath.split("_").slice(0, 8).join("/");
|
let devPath = tarElePath.split("_").slice(0, 8).join("/");
|
||||||
|
|
||||||
let today = displayDate(new Date, "date").replaceAll("/", "-") + "T00:00:00";
|
let today = displayDate(new Date(), "date").replaceAll("/", "-") + "T00:00:00";
|
||||||
let yesterday = displayDate(new Date(new Date(today).getTime() - (24 * 60 * 60 * 1000)), "date").replaceAll("/", "-") + "T00:00:00";
|
let prevTwoWeek = displayDate(getTimeByType(null, -14), "date").replaceAll("/", "-") + "T00:00:00";
|
||||||
let tomorrow = displayDate(new Date(new Date(today).getTime() + (24 * 60 * 60 * 1000)), "date").replaceAll("/", "-") + "T00:00:00";
|
let yesterday = displayDate(getTimeByType(null,-1), "date").replaceAll("/", "-") + "T00:00:00";
|
||||||
|
let tomorrow = displayDate(getTimeByType(null, 1), "date").replaceAll("/", "-") + "T00:00:00";
|
||||||
|
|
||||||
//今日用電量
|
// 今日用電量
|
||||||
getElectricMeterDayDataByBaja(devNum + "_KWH", "Mitsubishi_Sup", today, tomorrow, (data) => {
|
getElectricMeterDayDataByBaja(devNum + "_KWH", "Mitsubishi_Sup", today, tomorrow, (data) => {
|
||||||
data = JSON.parse(data);
|
$("#todayUseElec").text(data?.data[0]?.sum || 0);
|
||||||
$("#todayUseElec").text(data?.data[0]?.sum || "");
|
|
||||||
})
|
})
|
||||||
//昨日用電量
|
|
||||||
|
// 今日用電量 (每小時)
|
||||||
|
getElectricMeterHourDataByBaja(devNum + "_KWH", "Mitsubishi_Sup", yesterday, tomorrow, (data) => {
|
||||||
|
|
||||||
|
let todayData = data.data.filter(x => x.timestamp.$date.$year == getTimeByType("year") && x.timestamp.$date.$month == getTimeByType("month") && x.timestamp.$date.$day == getTimeByType("date"));
|
||||||
|
let yesData = data.data.filter(x => x.timestamp.$date.$year == getTimeByType("year", -1) && x.timestamp.$date.$month == getTimeByType("month", -1) && x.timestamp.$date.$day == getTimeByType("date", -1));
|
||||||
|
chartEveDaysElec(todayData, yesData);
|
||||||
|
})
|
||||||
|
|
||||||
|
// 昨日用電量
|
||||||
getElectricMeterDayDataByBaja(devNum + "_KWH", "Mitsubishi_Sup", yesterday, today, (data) => {
|
getElectricMeterDayDataByBaja(devNum + "_KWH", "Mitsubishi_Sup", yesterday, today, (data) => {
|
||||||
data = JSON.parse(data);
|
$("#yesUseElec").text(data?.data[0]?.sum || 0);
|
||||||
$("#yesUseElec").text(data?.data[0]?.sum || "");
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 本週與上週用電量 (每天)
|
||||||
|
getElectricMeterDayDataByBaja(devNum + "_KWH", "Mitsubishi_Sup", prevTwoWeek, tomorrow, (data) => {
|
||||||
|
let curDay = (new Date()).getDay() == 0 ? 7 : (new Date()).getDay();
|
||||||
|
let curWeekData = data.data.filter(x => strToDate(displayDate(new Date(),"date"), null, 0 - (curDay - 1)) <= strToDate(x.timestamp.$cEncStr));
|
||||||
|
let prevWeekData = data.data.filter(x => strToDate(displayDate(new Date(), "date"), null, 0 - 7 - (curDay - 1)) <= strToDate(x.timestamp.$cEncStr) && strToDate(new Date(), null, 0 - 7) >= strToDate(x.timestamp.$cEncStr));
|
||||||
|
|
||||||
|
chartEveWeeksElec(curWeekData, prevWeekData)
|
||||||
|
console.log(data)
|
||||||
|
})
|
||||||
|
|
||||||
|
// 電表即時功率
|
||||||
getElectricMeterNoweDataByBaja(devPath, (data) => {
|
getElectricMeterNoweDataByBaja(devPath, (data) => {
|
||||||
console.log(data)
|
console.log(data)
|
||||||
|
|
||||||
data = data.data;
|
data = data.data;
|
||||||
$("#insPower").text(data.filter(x => x.name == "P")[0]?.value);
|
$("#insPower").text(data.filter(x => x.name == "P")[0]?.value);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 圖表 - 今天與昨天用電量
|
||||||
|
function chartEveDaysElec(todayData, yesData) {
|
||||||
|
|
||||||
|
let eveDayElecChartCanvas = $('#eveDayElecChart').get(0).getContext('2d');
|
||||||
|
let color = { main1: "#1dc9b7", main2:"#17a2b8"}
|
||||||
|
let curHour = (new Date()).getHours();
|
||||||
|
todayData.data = todayData.filter(x => x.timestamp.$time.$hour < curHour);
|
||||||
|
yesData.data = yesData.filter(x => x.timestamp.$time.$hour < curHour);
|
||||||
|
let eveDayElecChartData = {
|
||||||
|
labels: todayData?.data.map(x => x.timestamp.$time.$hour),
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
id:"today",
|
||||||
|
type: "bar",
|
||||||
|
label: '今日用電量',
|
||||||
|
fill: false,
|
||||||
|
backgroundColor: color.main1,
|
||||||
|
borderColor: color.main1,
|
||||||
|
pointColor: color.main1,
|
||||||
|
pointBackgroundColor: color.main1,
|
||||||
|
data: todayData?.data.map(x => x.sum),
|
||||||
|
order: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "yesterday",
|
||||||
|
type: "bar",
|
||||||
|
label: '昨日用電量',
|
||||||
|
fill: false,
|
||||||
|
backgroundColor: color.main2,
|
||||||
|
borderColor: color.main2,
|
||||||
|
pointColor: color.main2,
|
||||||
|
pointBackgroundColor: color.main2,
|
||||||
|
data: yesData?.data.map(x => x.sum),
|
||||||
|
order: 2,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
let eveDayElecChartOptions = {
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
responsive: true,
|
||||||
|
legend: {
|
||||||
|
display: true,
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
offset: true,
|
||||||
|
gridLines: { color: "#505050" },
|
||||||
|
ticks: {
|
||||||
|
callback: function (value, index, ticks) {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
yAxes: [{
|
||||||
|
|
||||||
|
ticks: {
|
||||||
|
min:0,
|
||||||
|
beginAtZero: true
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: function (tooltipItem) {
|
||||||
|
let isTodayOrYes = tooltipItem.datasetIndex == 1 ? "昨日" : "今日";
|
||||||
|
return isTodayOrYes + "用電量 : " + tooltipItem.value + " kWH";
|
||||||
|
},
|
||||||
|
title: function (tooltipItem) {
|
||||||
|
let result = tooltipItem[0].xLabel.toString().padStart(2, "0") + ":00";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// This will get the first returned node in the jQuery collection.
|
||||||
|
eveDayElecChart = new Chart(eveDayElecChartCanvas, {
|
||||||
|
data: eveDayElecChartData,
|
||||||
|
options: eveDayElecChartOptions
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 圖表 - 這週與上週用電量
|
||||||
|
function chartEveWeeksElec(curWeekData, prevWeekData) {
|
||||||
|
|
||||||
|
let eveWeekElecChartCanvas = $('#eveWeekElecChart').get(0).getContext('2d');
|
||||||
|
let color = { main1: "#1dc9b7", main2: "#17a2b8" }
|
||||||
|
let eveWeekElecChartData = {
|
||||||
|
labels: curWeekData.map(x => dayToChiDay(strToDate(x.timestamp.$cEncStr, "day"))),
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
id: "today",
|
||||||
|
type: "bar",
|
||||||
|
label: '本週用電量',
|
||||||
|
fill: false,
|
||||||
|
backgroundColor: color.main1,
|
||||||
|
borderColor: color.main1,
|
||||||
|
pointColor: color.main1,
|
||||||
|
pointBackgroundColor: color.main1,
|
||||||
|
data: curWeekData.map(x => x.sum),
|
||||||
|
order: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "yesterday",
|
||||||
|
type: "bar",
|
||||||
|
label: '上週用電量',
|
||||||
|
fill: false,
|
||||||
|
backgroundColor: color.main2,
|
||||||
|
borderColor: color.main2,
|
||||||
|
pointColor: color.main2,
|
||||||
|
pointBackgroundColor: color.main2,
|
||||||
|
data: prevWeekData.map(x => x.sum),
|
||||||
|
order: 2,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
let eveWeekElecChartOptions = {
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
responsive: true,
|
||||||
|
legend: {
|
||||||
|
display: true,
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
offset: true,
|
||||||
|
gridLines: { color: "#505050" },
|
||||||
|
ticks: {
|
||||||
|
callback: function (value, index, ticks) {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
yAxes: [{
|
||||||
|
|
||||||
|
ticks: {
|
||||||
|
min: 0,
|
||||||
|
beginAtZero: true
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: function (tooltipItem) {
|
||||||
|
let isTodayOrYes = tooltipItem.datasetIndex == 1 ? "上週" : "本週";
|
||||||
|
return isTodayOrYes + "用電量 : " + tooltipItem.value + " kWH";
|
||||||
|
},
|
||||||
|
title: function (tooltipItem) {
|
||||||
|
let result = tooltipItem[0].xLabel.toString();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// This will get the first returned node in the jQuery collection.
|
||||||
|
eveWeekElecChart = new Chart(eveWeekElecChartCanvas, {
|
||||||
|
data: eveWeekElecChartData,
|
||||||
|
options: eveWeekElecChartOptions
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//從 baja 訂閱 左下角各系統小類異常狀態
|
||||||
function getAlarmSub() {
|
function getAlarmSub() {
|
||||||
|
var tipEle = '';
|
||||||
|
if (sysSubList.length != 0) {
|
||||||
|
tipEle = YT.Alert.Tip("資料讀取中...","show");
|
||||||
|
}
|
||||||
|
$(`.data-group i.fa-lightbulb-on`).removeClass("blink");
|
||||||
|
//debugger
|
||||||
|
$.each(sysSubList, (idx, sysSubObj) => {
|
||||||
|
let myBaja = new subscriptionAlarms();
|
||||||
|
let ordPath = {
|
||||||
|
"building_tag": pageAct.buiTag,
|
||||||
|
"system_tag": sysSubObj.sysMainTag,
|
||||||
|
"name_tag": sysSubObj.sysSubTag,
|
||||||
|
};
|
||||||
|
console.log("ordPath",ordPath)
|
||||||
|
myBaja.setSubscribeAlarmsByBql(ordPath);
|
||||||
|
myBaja.setSubscribeAlarmsCallBack((data) => {
|
||||||
|
if (data.sourceState == "Offnormal") {
|
||||||
|
let devNum = data.system.replaceAll("_", "/");
|
||||||
|
|
||||||
|
$(`.dev-group[data-id*='${devNum}'] i.fa-lightbulb-on`).addClass("blink");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
myBaja.setSubscribeAlarmEndCallBack((data) => {
|
||||||
|
if (idx == sysSubList.length - 1) {
|
||||||
|
$(tipEle.ele).YTAlert().hide();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//$(".dev-group").each((idx, ele) => {
|
//$(".dev-group").each((idx, ele) => {
|
||||||
@ -779,6 +595,7 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function show3DModel() {
|
function show3DModel() {
|
||||||
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDMjAyMjEyMDEubndk');
|
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDMjAyMjEyMDEubndk');
|
||||||
}
|
}
|
||||||
|
@ -861,7 +861,7 @@
|
|||||||
var subSeviceData = []; //每個設備訂閱點位值
|
var subSeviceData = []; //每個設備訂閱點位值
|
||||||
var floList = []; //每個樓層
|
var floList = []; //每個樓層
|
||||||
var elevObj = null; //左側 2D 電梯物件
|
var elevObj = null; //左側 2D 電梯物件
|
||||||
var viewer3DNodeIds = [760, 754, 748];
|
var viewer3DNodeIds = [12115, 12109, 12103];
|
||||||
var elev3DBind = {};
|
var elev3DBind = {};
|
||||||
var elev3DOption = {};
|
var elev3DOption = {};
|
||||||
var elev3DObj = [];
|
var elev3DObj = [];
|
||||||
@ -2396,7 +2396,7 @@
|
|||||||
function load3DModel() {
|
function load3DModel() {
|
||||||
|
|
||||||
|
|
||||||
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dGEzaHFzZmZ6cWJub3V4a3BsZGt1a3NldzRzajIxdzUtYmltc19tb2RlbHMvJUUzJTgwJTkwJUU1JThGJUIwJUU1JThDJTk3JUU0JUI4JUFEJUU4JThGJUIxJUU1JUE0JUE3JUU2JUE4JTkzJUUzJTgwJTkxQVJDMjAyMjEyMDEubndk', (viewer) => {
|
launchViewer('dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6LW1vZGVsX3Rlc3QxMTIxLyVFMyU4MCU5MCVFNSU4RiVCMCVFNSU4QyU5NyVFNCVCOCVBRCVFOCU4RiVCMSVFNSVBNCVBNyVFNiVBOCU5MyVFMyU4MCU5MUFSQ18yMDIyMTIwNS5ud2Q', (viewer) => {
|
||||||
$.each(viewer3DNodeIds, function (idx, node) {
|
$.each(viewer3DNodeIds, function (idx, node) {
|
||||||
let options = {
|
let options = {
|
||||||
element: $("#forgeViewer"),
|
element: $("#forgeViewer"),
|
||||||
|
@ -33,6 +33,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
<link rel="mask-icon" href="img/favicon/safari-pinned-tab.svg" color="#5bbad5">
|
<link rel="mask-icon" href="img/favicon/safari-pinned-tab.svg" color="#5bbad5">
|
||||||
<!-- Font Awesome -->
|
<!-- Font Awesome -->
|
||||||
<link href="lib/fontawesome-free/css/all.min.css" rel="stylesheet" />
|
<link href="lib/fontawesome-free/css/all.min.css" rel="stylesheet" />
|
||||||
|
<link href="lib/chart.js/Chart.min.css" rel="stylesheet" />
|
||||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||||
<link rel="stylesheet" media="screen, print" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap.min.css">
|
<link rel="stylesheet" media="screen, print" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap.min.css">
|
||||||
<link rel="stylesheet" media="screen, print" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css">
|
<link rel="stylesheet" media="screen, print" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css">
|
||||||
@ -131,8 +132,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
<!-- BEGIN Left Aside -->
|
<!-- BEGIN Left Aside -->
|
||||||
<aside class="page-sidebar hidden-lg-up">
|
<aside class="page-sidebar hidden-lg-up">
|
||||||
<div class="page-logo">
|
<div class="page-logo">
|
||||||
<a href="#" class="page-logo-link press-scale-down d-flex align-items-center position-relative"
|
<a href="javascript:;" name="topFunBtn" data-page="dashboard" class="page-logo-link press-scale-down d-flex align-items-center position-relative">
|
||||||
data-toggle="modal" data-target="#modal-shortcut">
|
|
||||||
<img src="img/logo.png" alt="SmartAdmin WebApp" aria-roledescription="logo">
|
<img src="img/logo.png" alt="SmartAdmin WebApp" aria-roledescription="logo">
|
||||||
<span class="page-logo-text mr-1">System</span>
|
<span class="page-logo-text mr-1">System</span>
|
||||||
<span class="position-absolute text-white opacity-50 small pos-top pos-right mr-2 mt-n2"></span>
|
<span class="position-absolute text-white opacity-50 small pos-top pos-right mr-2 mt-n2"></span>
|
||||||
@ -1412,8 +1412,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
<header class="page-header" role="banner">
|
<header class="page-header" role="banner">
|
||||||
<!-- we need this logo when user switches to nav-function-top -->
|
<!-- we need this logo when user switches to nav-function-top -->
|
||||||
<div class="page-logo">
|
<div class="page-logo">
|
||||||
<a href="#" class="page-logo-link press-scale-down d-flex align-items-center position-relative"
|
<a href="javascript:;" name="topFunBtn" data-page="dashboard" class="page-logo-link press-scale-down d-flex align-items-center position-relative">
|
||||||
data-toggle="modal" data-target="#modal-shortcut">
|
|
||||||
<img src="img/logo.png" alt="SmartAdmin WebApp" aria-roledescription="logo">
|
<img src="img/logo.png" alt="SmartAdmin WebApp" aria-roledescription="logo">
|
||||||
|
|
||||||
<!--<span class="page-logo-text mr-1">SmartAdmin WebApp</span>
|
<!--<span class="page-logo-text mr-1">SmartAdmin WebApp</span>
|
||||||
@ -1569,7 +1568,52 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
</footer>-->
|
</footer>-->
|
||||||
<!-- END Page Footer -->
|
<!-- END Page Footer -->
|
||||||
<!-- BEGIN Shortcuts -->
|
<!-- BEGIN Shortcuts -->
|
||||||
|
<!--<div class="modal fade modal-backdrop-transparent" id="modal-shortcut" tabindex="-1" role="dialog"
|
||||||
|
aria-labelledby="modal-shortcut" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-top modal-transparent" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-body">
|
||||||
|
<ul class="app-list w-auto h-auto p-0 text-left">
|
||||||
|
<li>
|
||||||
|
<a href="intel_introduction.html" class="app-list-item text-white border-0 m-0">
|
||||||
|
<div class="icon-stack">
|
||||||
|
<i class="base base-7 icon-stack-3x opacity-100 color-primary-500 "></i>
|
||||||
|
<i class="base base-7 icon-stack-2x opacity-100 color-primary-300 "></i>
|
||||||
|
<i class="fal fa-home icon-stack-1x opacity-100 color-white"></i>
|
||||||
|
</div>
|
||||||
|
<span class="app-list-name">
|
||||||
|
Home
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="page_inbox_general.html" class="app-list-item text-white border-0 m-0">
|
||||||
|
<div class="icon-stack">
|
||||||
|
<i class="base base-7 icon-stack-3x opacity-100 color-success-500 "></i>
|
||||||
|
<i class="base base-7 icon-stack-2x opacity-100 color-success-300 "></i>
|
||||||
|
<i class="ni ni-envelope icon-stack-1x text-white"></i>
|
||||||
|
</div>
|
||||||
|
<span class="app-list-name">
|
||||||
|
Inbox
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="intel_introduction.html" class="app-list-item text-white border-0 m-0">
|
||||||
|
<div class="icon-stack">
|
||||||
|
<i class="base base-7 icon-stack-2x opacity-100 color-primary-300 "></i>
|
||||||
|
<i class="fal fa-plus icon-stack-1x opacity-100 color-white"></i>
|
||||||
|
</div>
|
||||||
|
<span class="app-list-name">
|
||||||
|
Add More
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>-->
|
||||||
<!-- END Shortcuts -->
|
<!-- END Shortcuts -->
|
||||||
<!-- BEGIN Color profile -->
|
<!-- BEGIN Color profile -->
|
||||||
<!-- this area is hidden and will not be seen on screens or screen readers -->
|
<!-- this area is hidden and will not be seen on screens or screen readers -->
|
||||||
@ -2087,6 +2131,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
"lib/jquery-validation/dist/jquery.validate",
|
"lib/jquery-validation/dist/jquery.validate",
|
||||||
"lib/jquery-validation/dist/additional-methods.min",
|
"lib/jquery-validation/dist/additional-methods.min",
|
||||||
"lib/jquery-validation/dist/localization/messages_zh_TW",
|
"lib/jquery-validation/dist/localization/messages_zh_TW",
|
||||||
|
"lib/chart.js/Chart.min",
|
||||||
], loadedMasterPack);
|
], loadedMasterPack);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -2,9 +2,11 @@
|
|||||||
let baja_subscribe_end_device_callback_func; //設定BQL訂閱結束之後要回傳的Function
|
let baja_subscribe_end_device_callback_func; //設定BQL訂閱結束之後要回傳的Function
|
||||||
let baja_my_user_account_func; //取得帳號資料要回傳的Function
|
let baja_my_user_account_func; //取得帳號資料要回傳的Function
|
||||||
var ordPath; //當前點選選單的tag,用來抓出設備路徑,例如:旅館棟->H,消防偵煙器->F3
|
var ordPath; //當前點選選單的tag,用來抓出設備路徑,例如:旅館棟->H,消防偵煙器->F3
|
||||||
|
|
||||||
let baja_subscribe_alarm_callback_func; //設定 alarm BQL訂閱之後要回傳的Function
|
let baja_subscribe_alarm_callback_func; //設定 alarm BQL訂閱之後要回傳的Function
|
||||||
let baja_subscribe_end_alarm_callback_func; //設定 alarm BQL訂閱結束之後要回傳的Function
|
let baja_subscribe_end_alarm_callback_func; //設定 alarm BQL訂閱結束之後要回傳的Function
|
||||||
var ordPathForAlarm; //當前點選選單的tag,用來抓出alarm路徑
|
var ordPathForAlarm; //當前點選選單的tag,用來抓出alarm路徑
|
||||||
|
|
||||||
window.tolSubList = [];
|
window.tolSubList = [];
|
||||||
|
|
||||||
var user_name = "";
|
var user_name = "";
|
||||||
@ -32,8 +34,7 @@ function subscriptionDevices() {
|
|||||||
function subscriptionAlarms() {
|
function subscriptionAlarms() {
|
||||||
// 用BQL的方式去訂閱
|
// 用BQL的方式去訂閱
|
||||||
this.setSubscribeAlarmsByBql = function (tempOrdPath) {
|
this.setSubscribeAlarmsByBql = function (tempOrdPath) {
|
||||||
ordPathForAlarm = tempOrdPath;
|
BajaSubscribeAlarmsByBql(tempOrdPath);
|
||||||
BajaSubscribeAlarmsByBql();
|
|
||||||
};
|
};
|
||||||
// BQL去訂閱回傳的Function
|
// BQL去訂閱回傳的Function
|
||||||
this.setSubscribeAlarmsCallBack = function (callBackFunc) {
|
this.setSubscribeAlarmsCallBack = function (callBackFunc) {
|
||||||
@ -66,6 +67,8 @@ function MyBaja() {
|
|||||||
* 使用者透過BQL指定路徑去訂閱設備點位
|
* 使用者透過BQL指定路徑去訂閱設備點位
|
||||||
*/
|
*/
|
||||||
function BajaSubscribeDevicesByBql() {
|
function BajaSubscribeDevicesByBql() {
|
||||||
|
|
||||||
|
|
||||||
require(['baja!'], function (baja) {
|
require(['baja!'], function (baja) {
|
||||||
console.log("進入Function 準備執行BQL訂閱");
|
console.log("進入Function 準備執行BQL訂閱");
|
||||||
var init_start = new Date(Date.now());
|
var init_start = new Date(Date.now());
|
||||||
@ -168,7 +171,7 @@ function BajaSubscribeDevicesByBql() {
|
|||||||
|
|
||||||
var modify_target_device = {
|
var modify_target_device = {
|
||||||
"device_number": target_device_number ? target_device_number : null,
|
"device_number": target_device_number ? target_device_number : null,
|
||||||
"device_number_full": this.getDisplay("slotPath").split("slot:")[1].split('/').slice(1,-1).join("_"),
|
"device_number_full": this.getDisplay("slotPath").split("slot:")[1].split('/').slice(1, -1).join("_"),
|
||||||
"point_name": point_name ? point_name : null,
|
"point_name": point_name ? point_name : null,
|
||||||
"value": key
|
"value": key
|
||||||
}
|
}
|
||||||
@ -249,7 +252,7 @@ function BajaSubscribeDevicesByBql() {
|
|||||||
/**
|
/**
|
||||||
* 使用者透過BQL指定路徑去訂閱Alarm
|
* 使用者透過BQL指定路徑去訂閱Alarm
|
||||||
*/
|
*/
|
||||||
function BajaSubscribeAlarmsByBql() {
|
function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
|
||||||
require(['baja!'], function (baja) {
|
require(['baja!'], function (baja) {
|
||||||
console.log("進入Function 準備執行BQL訂閱");
|
console.log("進入Function 準備執行BQL訂閱");
|
||||||
var init_start = new Date(Date.now());
|
var init_start = new Date(Date.now());
|
||||||
@ -258,6 +261,7 @@ function BajaSubscribeAlarmsByBql() {
|
|||||||
sub.attach('changed', function (prop) {
|
sub.attach('changed', function (prop) {
|
||||||
if (prop.getName() === 'out') {
|
if (prop.getName() === 'out') {
|
||||||
var sourceState = (this.$map.$map.in10.$val.$map.$map.value.$display) == 'true' ? "Offnormal" : "Normal";
|
var sourceState = (this.$map.$map.in10.$val.$map.$map.value.$display) == 'true' ? "Offnormal" : "Normal";
|
||||||
|
|
||||||
var modify_target_device = {
|
var modify_target_device = {
|
||||||
"system": "TPE_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
"system": "TPE_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
||||||
"sourceState": sourceState ? sourceState : null
|
"sourceState": sourceState ? sourceState : null
|
||||||
@ -270,12 +274,13 @@ function BajaSubscribeAlarmsByBql() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
//使用bql語法
|
//使用bql語法
|
||||||
console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%TPE_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`);
|
console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%TPE_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`);
|
||||||
baja.Ord.make(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%TPE_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`)
|
baja.Ord.make(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%TPE_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`)
|
||||||
.get(
|
.get(
|
||||||
function (table) {
|
function (table) {
|
||||||
var tableStart, tableFinish;
|
var tableStart, tableFinish;
|
||||||
var subStart, subFinish;
|
var subStart, subFinish;
|
||||||
|
var totalTargetDevice = [];
|
||||||
var component_index = 0;
|
var component_index = 0;
|
||||||
var total_component_index = 0;
|
var total_component_index = 0;
|
||||||
var readBqlFinish = new Date(Date.now());
|
var readBqlFinish = new Date(Date.now());
|
||||||
@ -283,6 +288,7 @@ function BajaSubscribeAlarmsByBql() {
|
|||||||
|
|
||||||
table.cursor({
|
table.cursor({
|
||||||
before: function () {
|
before: function () {
|
||||||
|
totalTargetDevice = [];
|
||||||
tableStart = new Date(Date.now());
|
tableStart = new Date(Date.now());
|
||||||
render_start = new Date(Date.now());
|
render_start = new Date(Date.now());
|
||||||
},
|
},
|
||||||
@ -293,6 +299,7 @@ function BajaSubscribeAlarmsByBql() {
|
|||||||
total_component_index = index;
|
total_component_index = index;
|
||||||
|
|
||||||
var sourceState = this.getDisplay("sourceState");
|
var sourceState = this.getDisplay("sourceState");
|
||||||
|
//var sourceName = (item.$map.$map.alarmData$2esourceName.$display).replace('_', '/');
|
||||||
var sourceNameArray = (item.$map.$map.alarmData$2esourceName.$display).split('_');
|
var sourceNameArray = (item.$map.$map.alarmData$2esourceName.$display).split('_');
|
||||||
var slotPath = sourceNameArray[0] + "/" + sourceNameArray[1] + "/" + sourceNameArray[2] + "/" + sourceNameArray[3] + "/" + sourceNameArray[4] + "/" + sourceNameArray[5] + "/" + sourceNameArray[6] + "/" + sourceNameArray[7] + "/" + sourceNameArray[8];
|
var slotPath = sourceNameArray[0] + "/" + sourceNameArray[1] + "/" + sourceNameArray[2] + "/" + sourceNameArray[3] + "/" + sourceNameArray[4] + "/" + sourceNameArray[5] + "/" + sourceNameArray[6] + "/" + sourceNameArray[7] + "/" + sourceNameArray[8];
|
||||||
var normalTime = this.getDisplay("normalTime");
|
var normalTime = this.getDisplay("normalTime");
|
||||||
@ -301,7 +308,7 @@ function BajaSubscribeAlarmsByBql() {
|
|||||||
"system": "TPE_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
"system": "TPE_" + ordPathForAlarm.building_tag + "_" + ordPathForAlarm.system_tag + "_" + ordPathForAlarm.name_tag,
|
||||||
"sourceState": sourceState ? sourceState : null
|
"sourceState": sourceState ? sourceState : null
|
||||||
}
|
}
|
||||||
|
totalTargetDevice.push(modify_target_device);
|
||||||
//取得component當下就更新設備點位
|
//取得component當下就更新設備點位
|
||||||
if (baja_subscribe_alarm_callback_func != undefined && baja_subscribe_alarm_callback_func != null) {
|
if (baja_subscribe_alarm_callback_func != undefined && baja_subscribe_alarm_callback_func != null) {
|
||||||
baja_subscribe_alarm_callback_func(modify_target_device);
|
baja_subscribe_alarm_callback_func(modify_target_device);
|
||||||
@ -322,6 +329,9 @@ function BajaSubscribeAlarmsByBql() {
|
|||||||
},
|
},
|
||||||
after: function () {
|
after: function () {
|
||||||
tableFinish = new Date(Date.now());
|
tableFinish = new Date(Date.now());
|
||||||
|
if (baja_subscribe_end_alarm_callback_func != undefined && baja_subscribe_end_alarm_callback_func != null) {
|
||||||
|
baja_subscribe_end_alarm_callback_func(totalTargetDevice);
|
||||||
|
}
|
||||||
console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||||||
},
|
},
|
||||||
limit: -1,
|
limit: -1,
|
||||||
@ -330,3 +340,107 @@ function BajaSubscribeAlarmsByBql() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// function getAlarmCountByBaja(callback) {
|
||||||
|
// var _result = "";
|
||||||
|
// var _index = 0;
|
||||||
|
|
||||||
|
// require(['baja!'], function (baja) {
|
||||||
|
// baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where sourceState = 'offnormal' order by timestamp desc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index;
|
||||||
|
// _result += '}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// limit: -1,
|
||||||
|
// offset: 0
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * [首頁] 查詢復歸數量
|
||||||
|
// * @param {any} callback
|
||||||
|
// */
|
||||||
|
// function getRecoverCountByBaja(callback) {
|
||||||
|
// var _result = "";
|
||||||
|
// var _index = 0;
|
||||||
|
|
||||||
|
// require(['baja!'], function (baja) {
|
||||||
|
// baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where normalTime != null order by timestamp desc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index;
|
||||||
|
// _result += '}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// limit: -1,
|
||||||
|
// offset: 0
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// function getCheckedAckedCountByBaja(callback) {
|
||||||
|
// var _result = "";
|
||||||
|
// var _index = 0;
|
||||||
|
|
||||||
|
// require(['baja!'], function (baja) {
|
||||||
|
// baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where ackState ='acked' order by timestamp asc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index;
|
||||||
|
// _result += '}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// limit: -1,
|
||||||
|
// offset: 0
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// function getUnCheckedAckedCountByBaja(callback) {
|
||||||
|
// var _result = "";
|
||||||
|
// var _index = 0;
|
||||||
|
|
||||||
|
// require(['baja!'], function (baja) {
|
||||||
|
// baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmClassDisplayName, alarmValue, alarmData, alarmData.sourceName, uuid, alarmData.msgText, alarmData.numericValue, alarmData.presentValue, alarmData.status, alarmData.toState, normalTime from openAlarms where ackState ='unacked' order by timestamp asc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index;
|
||||||
|
// _result += '}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// limit: -1,
|
||||||
|
// offset: 0
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
@ -156,8 +156,7 @@ function getElectricMeterOneDayKwhByBaja(devicePath, date_millisecond, callback)
|
|||||||
* @param {any} callback
|
* @param {any} callback
|
||||||
*/
|
*/
|
||||||
function getElectricMeterWeekDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, callback) {
|
function getElectricMeterWeekDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, callback) {
|
||||||
var _result = "";
|
var _result = { count: 0, data: [] };
|
||||||
var _ss = "";
|
|
||||||
var _index = 0;
|
var _index = 0;
|
||||||
|
|
||||||
require(['baja!'], function (baja) {//TPE/B1/EE/E4/R2F/NA/WHT/N1
|
require(['baja!'], function (baja) {//TPE/B1/EE/E4/R2F/NA/WHT/N1
|
||||||
@ -166,16 +165,14 @@ function getElectricMeterWeekDataByBaja(devicePath, startDate_millisecond, endDa
|
|||||||
.then(function (table) {
|
.then(function (table) {
|
||||||
return table.cursor({
|
return table.cursor({
|
||||||
each: function (record) {
|
each: function (record) {
|
||||||
if (_index == 0)
|
let main = {};
|
||||||
_ss += '{"timestamp":' + record.get('timestamp') + ', "value":"' + record.get('kwh1') + '"}';
|
main.timestamp = record.get('timestamp');
|
||||||
else
|
main.value = record.get('kwh1');
|
||||||
_ss += ',{"timestamp":' + record.get('timestamp') + ', "value":"' + record.get('kwh1') + '"}';
|
_result.data.push(main);
|
||||||
_index++;
|
_index++;
|
||||||
},
|
},
|
||||||
after: function () {
|
after: function () {
|
||||||
_result += '{' + '"count": ' + _index + ', "data":[';
|
_result.count = _index;
|
||||||
_result += _ss;
|
|
||||||
_result += ']}';
|
|
||||||
if (typeof callback === 'function') {
|
if (typeof callback === 'function') {
|
||||||
callback(_result);
|
callback(_result);
|
||||||
}
|
}
|
||||||
@ -236,8 +233,7 @@ function getElectricMeterKwhAvgDataByBaja(devicePath, company, startDate_millise
|
|||||||
* @param {any} callback
|
* @param {any} callback
|
||||||
*/
|
*/
|
||||||
function getElectricMeterHourDataByBaja(devicePath, company, startDateTime, endDateTime, callback) {
|
function getElectricMeterHourDataByBaja(devicePath, company, startDateTime, endDateTime, callback) {
|
||||||
var _result = "";
|
var _result = { count: 0, data: [] };
|
||||||
var _ss = "";
|
|
||||||
var _index = 0;
|
var _index = 0;
|
||||||
|
|
||||||
require(['baja!'], function (baja) {//TPE_B1_EE_E4_R2F_NA_WHT_N1_KWH
|
require(['baja!'], function (baja) {//TPE_B1_EE_E4_R2F_NA_WHT_N1_KWH
|
||||||
@ -246,16 +242,18 @@ function getElectricMeterHourDataByBaja(devicePath, company, startDateTime, endD
|
|||||||
.then(function (table) {
|
.then(function (table) {
|
||||||
return table.cursor({
|
return table.cursor({
|
||||||
each: function (record) {
|
each: function (record) {
|
||||||
if (_index == 0)
|
let main = {};
|
||||||
_ss += '{"timestamp":' + record.get('timestamp') + ', "endTimestamp":"' + record.get('endTimestamp') + ', "min":"' + record.get('min') + ', "max":"' + record.get('max') + ', "avg":"' + record.get('avg') + ', "sum":"' + record.get('sum') + '"}';
|
main.timestamp = record.get('timestamp');
|
||||||
else
|
main.endTimestamp = record.get('endTimestamp');
|
||||||
_ss += ',{"timestamp":' + record.get('timestamp') + ', "endTimestamp":"' + record.get('endTimestamp') + ', "min":"' + record.get('min') + ', "max":"' + record.get('max') + ', "avg":"' + record.get('avg') + ', "sum":"' + record.get('sum') + '"}';
|
main.min = record.get('min');
|
||||||
|
main.max = record.get('max');
|
||||||
|
main.avg = record.get('avg');
|
||||||
|
main.sum = record.get('sum');
|
||||||
|
_result.data.push(main);
|
||||||
_index++;
|
_index++;
|
||||||
},
|
},
|
||||||
after: function () {
|
after: function () {
|
||||||
_result += '{' + '"count": ' + _index + ', "data":[';
|
_result.count = _index;
|
||||||
_result += _ss;
|
|
||||||
_result += ']}';
|
|
||||||
if (typeof callback === 'function') {
|
if (typeof callback === 'function') {
|
||||||
callback(_result);
|
callback(_result);
|
||||||
}
|
}
|
||||||
@ -276,8 +274,7 @@ function getElectricMeterHourDataByBaja(devicePath, company, startDateTime, endD
|
|||||||
* @param {any} callback
|
* @param {any} callback
|
||||||
*/
|
*/
|
||||||
function getElectricMeterDayDataByBaja(devicePath, company, startDateTime, endDateTime, callback) {
|
function getElectricMeterDayDataByBaja(devicePath, company, startDateTime, endDateTime, callback) {
|
||||||
var _result = "";
|
var _result = { count: 0, data: [] };
|
||||||
var _ss = "";
|
|
||||||
var _index = 0;
|
var _index = 0;
|
||||||
|
|
||||||
require(['baja!'], function (baja) {//TPE_B1_EE_E4_R2F_NA_WHT_N1_KWH
|
require(['baja!'], function (baja) {//TPE_B1_EE_E4_R2F_NA_WHT_N1_KWH
|
||||||
@ -286,16 +283,19 @@ function getElectricMeterDayDataByBaja(devicePath, company, startDateTime, endDa
|
|||||||
.then(function (table) {
|
.then(function (table) {
|
||||||
return table.cursor({
|
return table.cursor({
|
||||||
each: function (record) {
|
each: function (record) {
|
||||||
if (_index == 0)
|
let main = {};
|
||||||
_ss += '{"timestamp":"' + record.get('timestamp') + '", "endTimestamp":"' + record.get('endTimestamp') + '", "min":"' + record.get('min') + '", "max":"' + record.get('max') + '", "avg":"' + record.get('avg') + '", "sum":"' + record.get('sum') + '"}';
|
main.timestamp = record.get('timestamp');
|
||||||
else
|
main.endTimestamp = record.get('endTimestamp');
|
||||||
_ss += ',{"timestamp":"' + record.get('timestamp') + '", "endTimestamp":"' + record.get('endTimestamp') + '", "min":"' + record.get('min') + '", "max":"' + record.get('max') + '", "avg":"' + record.get('avg') + '", "sum":"' + record.get('sum') + '"}';
|
main.min = record.get('min');
|
||||||
|
main.max = record.get('max');
|
||||||
|
main.avg = record.get('avg');
|
||||||
|
main.sum = record.get('sum');
|
||||||
|
_result.data.push(main);
|
||||||
|
|
||||||
_index++;
|
_index++;
|
||||||
},
|
},
|
||||||
after: function () {
|
after: function () {
|
||||||
_result += '{' + '"count": ' + _index + ', "data":[';
|
_result.count = _index;
|
||||||
_result += _ss;
|
|
||||||
_result += ']}';
|
|
||||||
if (typeof callback === 'function') {
|
if (typeof callback === 'function') {
|
||||||
callback(_result);
|
callback(_result);
|
||||||
}
|
}
|
||||||
|
1
Frontend/lib/chart.js/Chart.Core.js
Normal file
1
Frontend/lib/chart.js/Chart.Core.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
20755
Frontend/lib/chart.js/Chart.bundle.js
Normal file
20755
Frontend/lib/chart.js/Chart.bundle.js
Normal file
File diff suppressed because it is too large
Load Diff
7
Frontend/lib/chart.js/Chart.bundle.min.js
vendored
Normal file
7
Frontend/lib/chart.js/Chart.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
47
Frontend/lib/chart.js/Chart.css
Normal file
47
Frontend/lib/chart.js/Chart.css
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* DOM element rendering detection
|
||||||
|
* https://davidwalsh.name/detect-node-insertion
|
||||||
|
*/
|
||||||
|
@keyframes chartjs-render-animation {
|
||||||
|
from { opacity: 0.99; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.chartjs-render-monitor {
|
||||||
|
animation: chartjs-render-animation 0.001s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DOM element resizing detection
|
||||||
|
* https://github.com/marcj/css-element-queries
|
||||||
|
*/
|
||||||
|
.chartjs-size-monitor,
|
||||||
|
.chartjs-size-monitor-expand,
|
||||||
|
.chartjs-size-monitor-shrink {
|
||||||
|
position: absolute;
|
||||||
|
direction: ltr;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
pointer-events: none;
|
||||||
|
visibility: hidden;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chartjs-size-monitor-expand > div {
|
||||||
|
position: absolute;
|
||||||
|
width: 1000000px;
|
||||||
|
height: 1000000px;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chartjs-size-monitor-shrink > div {
|
||||||
|
position: absolute;
|
||||||
|
width: 200%;
|
||||||
|
height: 200%;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
16151
Frontend/lib/chart.js/Chart.js
vendored
Normal file
16151
Frontend/lib/chart.js/Chart.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
Frontend/lib/chart.js/Chart.min.css
vendored
Normal file
1
Frontend/lib/chart.js/Chart.min.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}
|
7
Frontend/lib/chart.js/Chart.min.js
vendored
Normal file
7
Frontend/lib/chart.js/Chart.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user