Merge branch 'master' of https://gitea.mjm-staging.developers-homelab.net/BIMS/BIMS
This commit is contained in:
commit
a039591924
@ -247,7 +247,12 @@
|
|||||||
var elev3DBind = {};
|
var elev3DBind = {};
|
||||||
var elev3DOption = {};
|
var elev3DOption = {};
|
||||||
var elev3DObj = [];
|
var elev3DObj = [];
|
||||||
var timeOutor = null; //刷新 baja 資料 定時器
|
var timeOuters = [];
|
||||||
|
var eveDayElecChart = null;
|
||||||
|
var eveWeekElecChart = null;
|
||||||
|
var errRecChart = null;
|
||||||
|
var errChkChart = null;
|
||||||
|
|
||||||
var sysIconList = [
|
var sysIconList = [
|
||||||
{ mainSys: "EE", subSys: "E1", iconClass: "fal fa-grip-vertical" },
|
{ mainSys: "EE", subSys: "E1", iconClass: "fal fa-grip-vertical" },
|
||||||
{ mainSys: "EE", subSys: "E2", iconClass: "fal fa-grip-horizontal" },
|
{ mainSys: "EE", subSys: "E2", iconClass: "fal fa-grip-horizontal" },
|
||||||
@ -268,39 +273,6 @@
|
|||||||
timeOutGetData();
|
timeOutGetData();
|
||||||
});
|
});
|
||||||
|
|
||||||
// 從數字週數轉為中文週數
|
|
||||||
function dayToChiDay(num) {
|
|
||||||
let chiDay = ["週日", "週一", "週二", "週三", "週四", "週五", "週六"];
|
|
||||||
return chiDay[num];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 取得現在或前後時間,輸出單位依據 type
|
|
||||||
function getTimeByType(type = null, cal = 0) {
|
|
||||||
let now = new Date();
|
|
||||||
return strToDate(now, type, cal);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 取得某當下時間或前後時間,輸出單位依據 type
|
|
||||||
function strToDate(text, type = null,cal = 0) {
|
|
||||||
let calDay = function (_d, _cal) {
|
|
||||||
return new Date(_d.getTime() + (cal * 24 * 60 * 60 * 1000));
|
|
||||||
}
|
|
||||||
let tarDate = new Date(text);
|
|
||||||
let result = 0;
|
|
||||||
if (type == "year") {
|
|
||||||
result = calDay(tarDate, cal).getFullYear();
|
|
||||||
} else if (type == "month") {
|
|
||||||
result = calDay(tarDate, cal).getMonth();
|
|
||||||
} else if (type == "date") {
|
|
||||||
result = calDay(tarDate, cal).getDate();
|
|
||||||
} else if (type == "day") {
|
|
||||||
result = calDay(tarDate, cal).getDay();
|
|
||||||
} else {
|
|
||||||
result = calDay(tarDate, cal);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//取得 左下方 各系統小類
|
//取得 左下方 各系統小類
|
||||||
function getSubList() {
|
function getSubList() {
|
||||||
let url = baseApiUrl + "/api/Device/GetMainSub";
|
let url = baseApiUrl + "/api/Device/GetMainSub";
|
||||||
@ -444,7 +416,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 圖表 - 今天與昨天用電量 (折線圖)
|
// 圖表 - 今天與昨天用電量 (長條圖)
|
||||||
function chartEveDaysElec(todayData, yesData) {
|
function chartEveDaysElec(todayData, yesData) {
|
||||||
|
|
||||||
let eveDayElecChartCanvas = $('#eveDayElecChart').get(0).getContext('2d');
|
let eveDayElecChartCanvas = $('#eveDayElecChart').get(0).getContext('2d');
|
||||||
@ -519,14 +491,25 @@
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will get the first returned node in the jQuery collection.
|
if (eveDayElecChart == null) {
|
||||||
eveDayElecChart = new Chart(eveDayElecChartCanvas, {
|
eveDayElecChart = new Chart(eveDayElecChartCanvas, {
|
||||||
data: eveDayElecChartData,
|
data: eveDayElecChartData,
|
||||||
options: eveDayElecChartOptions
|
options: eveDayElecChartOptions
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
eveDayElecChart.data.datasets.forEach((dataset) => {
|
||||||
|
if (dataset.order == 1) {
|
||||||
|
dataset.data = todayData?.data.map(x => x.sum);
|
||||||
|
} else {
|
||||||
|
dataset.data = yesData?.data.map(x => x.sum);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 圖表 - 這週與上週用電量 (折線圖)
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 圖表 - 這週與上週用電量 (長條圖)
|
||||||
function chartEveWeeksElec(curWeekData, prevWeekData) {
|
function chartEveWeeksElec(curWeekData, prevWeekData) {
|
||||||
|
|
||||||
let eveWeekElecChartCanvas = $('#eveWeekElecChart').get(0).getContext('2d');
|
let eveWeekElecChartCanvas = $('#eveWeekElecChart').get(0).getContext('2d');
|
||||||
@ -598,11 +581,20 @@
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will get the first returned node in the jQuery collection.
|
if (eveWeekElecChart == null) {
|
||||||
eveWeekElecChart = new Chart(eveWeekElecChartCanvas, {
|
eveWeekElecChart = new Chart(eveWeekElecChartCanvas, {
|
||||||
data: eveWeekElecChartData,
|
data: eveWeekElecChartData,
|
||||||
options: eveWeekElecChartOptions
|
options: eveWeekElecChartOptions
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
eveWeekElecChart.data.datasets.forEach((dataset) => {
|
||||||
|
if (dataset.order == 1) {
|
||||||
|
dataset.data = curWeekData.map(x => x.sum);
|
||||||
|
} else {
|
||||||
|
dataset.data = prevWeekData.map(x => x.sum);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 圖表 - 異常與賦歸圖表 (圓餅圖)
|
// 圖表 - 異常與賦歸圖表 (圓餅圖)
|
||||||
@ -638,11 +630,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This will get the first returned node in the jQuery collection.
|
// This will get the first returned node in the jQuery collection.
|
||||||
let errRecChart = new Chart(errRecChartCanvas, {
|
if (errRecChart == null) {
|
||||||
|
errRecChart = new Chart(errRecChartCanvas, {
|
||||||
type: "pie",
|
type: "pie",
|
||||||
data: errRecChartData,
|
data: errRecChartData,
|
||||||
options: errRecChartOptions
|
options: errRecChartOptions
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
errRecChart.data.datasets.forEach((dataset) => {
|
||||||
|
dataset.data = datas;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 圖表 - 異常確認與未確認圖表 (圓餅圖)
|
// 圖表 - 異常確認與未確認圖表 (圓餅圖)
|
||||||
@ -677,12 +675,18 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will get the first returned node in the jQuery collection.
|
if (errChkChart == null) {
|
||||||
let errChkChart = new Chart(errChkChartCanvas, {
|
errChkChart = new Chart(errChkChartCanvas, {
|
||||||
type: "pie",
|
type: "pie",
|
||||||
data: errChkChartData,
|
data: errChkChartData,
|
||||||
options: errChkChartOptions
|
options: errChkChartOptions
|
||||||
})
|
})
|
||||||
|
} else {
|
||||||
|
errChkChart.data.datasets.forEach((dataset) => {
|
||||||
|
dataset.data = datas;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 從 baja 訂閱 左下角各系統小類異常狀態
|
// 從 baja 訂閱 左下角各系統小類異常狀態
|
||||||
@ -694,7 +698,7 @@
|
|||||||
/*$(`.dev-group i.fa-lightbulb-on`)*/
|
/*$(`.dev-group i.fa-lightbulb-on`)*/
|
||||||
|
|
||||||
getSystemAlarmByBaja((data) => {
|
getSystemAlarmByBaja((data) => {
|
||||||
|
console.log(data)
|
||||||
$.each(data.data, (idx, alaObj) => {
|
$.each(data.data, (idx, alaObj) => {
|
||||||
if (alaObj.alarmClass.indexOf("_") != -1) {
|
if (alaObj.alarmClass.indexOf("_") != -1) {
|
||||||
let mainSubSys = alaObj.alarmClass.split("_").slice(0, 2).join("/");
|
let mainSubSys = alaObj.alarmClass.split("_").slice(0, 2).join("/");
|
||||||
@ -740,13 +744,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function timeOutGetData() {
|
function timeOutGetData() {
|
||||||
timeOutor = setInterval(() => {
|
let timeOut3s = setInterval(() => {
|
||||||
getAlarmSub();
|
getAlarmSub();
|
||||||
}, 3000)
|
}, 3000)
|
||||||
|
let timeOut5m = setInterval(() => {
|
||||||
|
getElectricBaja();
|
||||||
|
}, 5 * 60 * 1000)
|
||||||
|
timeOuters = timeOuters.concat([timeOut3s, timeOut5m]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function show3DModel() {
|
function show3DModel() {
|
||||||
launchViewer(pageAct.urn, (viewer, nodeIds) => {
|
launchViewerNoTools(pageAct.urn, (viewer, nodeIds) => {
|
||||||
nodeIds = Array.from(nodeIds);
|
nodeIds = Array.from(nodeIds);
|
||||||
$.each(nodeIds, (idx, item) => {
|
$.each(nodeIds, (idx, item) => {
|
||||||
elev3DBind[item[0]] = item[1];
|
elev3DBind[item[0]] = item[1];
|
||||||
@ -807,7 +815,11 @@
|
|||||||
}
|
}
|
||||||
data.device_number = data.device_number_full;
|
data.device_number = data.device_number_full;
|
||||||
let matchDevice = allEleDevList.filter(x => x.device_number == data.device_number)[0];
|
let matchDevice = allEleDevList.filter(x => x.device_number == data.device_number)[0];
|
||||||
let master = matchDevice.device_number.split("_")[5];
|
let master = matchDevice?.device_number.split("_")[5];
|
||||||
|
|
||||||
|
if (!matchDevice) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (data.point_name == "CP") {
|
if (data.point_name == "CP") {
|
||||||
if (elev3DObj.length != 0) {
|
if (elev3DObj.length != 0) {
|
||||||
|
@ -2,84 +2,44 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-xl-7">
|
<div class="col-sm-12 col-xl-7">
|
||||||
<div class="btn-group mb-3">
|
<div class="btn-group mb-3">
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed">用電管理</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed active" data-id="0" data-tabname="energyTab">用電管理</button>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed">天然氣管理</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed" data-id="1" data-tabname="energyTab">天然氣管理</button>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed">水資源管理</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed" data-id="2" data-tabname="energyTab">水資源管理</button>
|
||||||
<button type="button" class="btn btn-secondary waves-effect waves-themed">再生能源</button>
|
<button type="button" class="btn btn-secondary waves-effect waves-themed" data-id="3" data-tabname="energyTab">再生能源</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="row" >
|
<div class="row" >
|
||||||
<div id="eneSubSysList" class="row col-12"></div>
|
<div id="eneSubSysList" class="row col-12 m-0 p-0"></div>
|
||||||
|
|
||||||
<div class="col-sm-12 col-xl-12">
|
<div class="col-sm-12 col-xl-12">
|
||||||
<div id="panel-2" class="panel panel-locked" data-panel-sortable data-panel-collapsed data-panel-close>
|
<div id="panel-2" class="panel panel-locked" data-panel-sortable data-panel-collapsed data-panel-close>
|
||||||
<div class="panel-hdr">
|
<div class="panel-hdr">
|
||||||
<h2>
|
<h2>
|
||||||
空調系統 - 用電狀況
|
<span id="actSubSysText"></span> - 用電狀況
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel-container show">
|
<div class="panel-container show">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-lg-6">
|
<div class="col-sm-12 col-lg-6 d-flex flex-column">
|
||||||
<h4 class="p-3">今日耗電量 kWh</h4>
|
<h4 class="p-3">今日耗電量 kWh</h4>
|
||||||
<div class="panel-content poisition-relative" style="min-height: 346.84px;">
|
<div class="panel-content poisition-relative" style="min-height: 346.84px;">
|
||||||
<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 id="todayElecNoData" class="row justify-content-center align-items-center h-100" style="display:none;">
|
||||||
<div class="border-faded border-top-0 border-left-0 border-bottom-0 py-2 pr-4 mr-3 hidden-sm-down">
|
<h4>無資料</h4>
|
||||||
<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='icon-stack mr-2'>
|
|
||||||
<i class="base base-7 icon-stack-3x opacity-100 color-success-600"></i>
|
|
||||||
<i class="base base-7 icon-stack-2x opacity-100 color-success-500"></i>
|
|
||||||
<i class="fal fa-arrow-up icon-stack-1x opacity-100 color-white"></i>
|
|
||||||
</div>
|
</div>
|
||||||
$44.34 / GE
|
<div style="width:100%; min-height:300px;">
|
||||||
</div>
|
<canvas class="chart" id="todayElecChart"></canvas>
|
||||||
<span class="m-0 fs-xs text-muted">Increased Profit as per redux margins and estimates</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="js-easy-pie-chart color-info-400 position-relative d-inline-flex align-items-center justify-content-center" data-percent="35" data-piesize="95" data-linewidth="10" data-scalelength="5">
|
|
||||||
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="flot-area" style="width:100%; height:300px;"></div>
|
<div class="col-sm-12 col-lg-6 d-flex flex-column">
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-12 col-lg-6">
|
|
||||||
<h4 class="py-3">用電比較</h4>
|
<h4 class="py-3">用電比較</h4>
|
||||||
<div class="pb-5 pt-3">
|
<div id="elecCompNoData" class="row justify-content-center align-items-center h-100" style="display:none;">
|
||||||
<div class="row">
|
<h4>無資料</h4>
|
||||||
<div class="col-6 col-xl-3 d-sm-flex align-items-center">
|
|
||||||
<div class="p-2 mr-3 bg-info-200 rounded">
|
|
||||||
<span class="peity-bar" data-peity="{"fill": ["#fff"], "width": 27, "height": 27 }">3,4,5,8,2</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div style="width:100%; min-height:300px;">
|
||||||
<label class="fs-sm mb-0">Bounce Rate</label>
|
<canvas class="chart" id="elecCompChart"></canvas>
|
||||||
<h4 class="font-weight-bold mb-0">37.56%</h4>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 col-xl-3 d-sm-flex align-items-center">
|
|
||||||
<div class="p-2 mr-3 bg-info-300 rounded">
|
|
||||||
<span class="peity-bar" data-peity="{"fill": ["#fff"], "width": 27, "height": 27 }">5,3,1,7,9</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label class="fs-sm mb-0">Sessions</label>
|
|
||||||
<h4 class="font-weight-bold mb-0">759</h4>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-6 col-xl-3 d-sm-flex align-items-center">
|
|
||||||
<div class="p-2 mr-3 bg-success-300 rounded">
|
|
||||||
<span class="peity-bar" data-peity="{"fill": ["#fff"], "width": 27, "height": 27 }">3,4,3,5,5</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<label class="fs-sm mb-0">New Sessions</label>
|
|
||||||
<h4 class="font-weight-bold mb-0">12.17%</h4>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="flotVisit" style="width:100%; height:208px;"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -238,13 +198,18 @@
|
|||||||
<script>
|
<script>
|
||||||
var subSysList = [];
|
var subSysList = [];
|
||||||
var subSysElecList = [];
|
var subSysElecList = [];
|
||||||
|
var todayElecChart = null;
|
||||||
|
var elecCompChart = null;
|
||||||
|
var elecCardConText = [{ text1: "即時功耗 kW", text2:"佔比 %"},{ text1: "即時功耗 kW", text2:"佔比 %"},{ text1: "即時功耗 kW", text2:"佔比 %"},{ text1: "即時發電功率 kW", text2:"供電佔比 %"}]
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
getSubSysList();
|
getSubSysList();
|
||||||
getElecBySubSysTag();
|
getElecBySubSysTag();
|
||||||
})
|
})
|
||||||
|
|
||||||
// 左上方 系統小類卡片區塊
|
// 左上方 系統小類卡片區塊
|
||||||
function getSubSysList() {
|
function getSubSysList(type = 0) {
|
||||||
|
subSysList = [];
|
||||||
let url = baseApiUrl + "/api/Device/GetMainSub";
|
let url = baseApiUrl + "/api/Device/GetMainSub";
|
||||||
let sendData = {
|
let sendData = {
|
||||||
building_tag: pageAct.buiTag,
|
building_tag: pageAct.buiTag,
|
||||||
@ -258,28 +223,32 @@
|
|||||||
$.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) => {
|
||||||
subSysList.push(subSysObj);
|
subSysList.push(subSysObj);
|
||||||
|
if (type == 0 || (type == 3 && mainSysObj.main_system_tag == "ELEV")) {
|
||||||
strHtml += `<div class="col-sm-12 col-xl-4 mb-2">
|
strHtml += `<div class="col-sm-12 col-xl-4 mb-2">
|
||||||
<div class="card">
|
<div class="card elecCard cur-poi" data-id="${mainSysObj.main_system_tag}_${subSysObj.sub_system_tag}" data-name="${subSysObj.full_name}">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h4 class="card-title color-white">${subSysObj.full_name}用電</h4>
|
<h4 class="card-title color-white">${subSysObj.full_name}用電</h4>
|
||||||
<p class="card-text color-white pl-5 pr-3 d-flex justify-content-between">
|
<p class="card-text color-white pl-5 pr-3 d-flex justify-content-between">
|
||||||
<span>即時功耗 kW</span>
|
<span>${elecCardConText[type]?.text1}</span>
|
||||||
<span id="imdPow${subSysObj.sub_system_tag}"></span>
|
<span id="insPow${mainSysObj.main_system_tag}_${subSysObj.sub_system_tag}"></span>
|
||||||
</p>
|
</p>
|
||||||
<p class="card-text color-white pl-5 pr-3 d-flex justify-content-between">
|
<p class="card-text color-white pl-5 pr-3 d-flex justify-content-between">
|
||||||
<span>佔比 %</span>
|
<span>${elecCardConText[type]?.text2}</span>
|
||||||
<span id="imdPowPer${subSysObj.sub_system_tag}"></span>
|
<span id="insPowPer${mainSysObj.main_system_tag}_${subSysObj.sub_system_tag}"></span>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
$("#eneSubSysList").html(strHtml);
|
$("#eneSubSysList").html(strHtml);
|
||||||
}
|
}
|
||||||
}, null, "POST").send();
|
}, null, "POST").send();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 取得 對應系統小類的總電錶
|
||||||
function getElecBySubSysTag() {
|
function getElecBySubSysTag() {
|
||||||
let url = baseApiUrl + "/api/Energe/GetElecBySubSysTag";
|
let url = baseApiUrl + "/api/Energe/GetElecBySubSysTag";
|
||||||
|
|
||||||
@ -288,13 +257,259 @@
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
subSysElecList = res.data;
|
subSysElecList = res.data;
|
||||||
|
getBajaData();
|
||||||
}
|
}
|
||||||
}, null, "POST").send();
|
}, null, "POST").send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 取得 baja 即時資料
|
||||||
function getBajaData() {
|
function getBajaData() {
|
||||||
$.each(subSysElecList, (idx, subSysObj) => {
|
startPageLoading();
|
||||||
|
let yesterday = displayDate(getTimeByType(null, -1), "date").replaceAll("/", "-") + "T00:00:00";
|
||||||
|
let tomorrow = displayDate(getTimeByType(null, 1), "date").replaceAll("/", "-") + "T00:00:00";
|
||||||
|
let prevThirtyDay = displayDate(getTimeByType(null, -30), "date").replaceAll("/", "-") + "T00:00:00";
|
||||||
|
let lastTimeout = null;
|
||||||
|
let totalPow = 0;
|
||||||
|
let loadedCnt = 0;
|
||||||
|
|
||||||
|
// 取系統小類 總即時功率 (total)
|
||||||
|
let devPath = subSysElecList.filter(x => x.mainSubTag == "total")[0]?.system_device_tag?.split("_").slice(0, 8).join("/");
|
||||||
|
if (devPath) {
|
||||||
|
getElectricMeterNoweDataByBaja(devPath, (data) => {
|
||||||
|
data = data.data;
|
||||||
|
let result = data.filter(x => x.name == "P")[0]?.value;
|
||||||
|
result = result ? result.roundDecimal(2) : 0;
|
||||||
|
totalPow = result;
|
||||||
|
chkBajaLoaded();
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 每個系統小類 即時功率
|
||||||
|
$.each(subSysElecList, (idx, elecObj) => {
|
||||||
|
let devPath = elecObj.system_device_tag?.split("_").slice(0, 8).join("/");
|
||||||
|
getElectricMeterNoweDataByBaja(devPath, (data) => {
|
||||||
|
data = data.data;
|
||||||
|
let result = data.filter(x => x.name == "P")[0]?.value;
|
||||||
|
result = result ? result.roundDecimal(2) : 0;
|
||||||
|
$(`#insPow${elecObj.mainSubTag}`).text(result);
|
||||||
|
$(`#insPowPer${elecObj.mainSubTag}`).text((result / totalPow * 100).roundDecimal(2) + " %");
|
||||||
|
clearTimeout(lastTimeout);
|
||||||
|
lastTimeout = setTimeout(() => {
|
||||||
|
chkBajaLoaded();
|
||||||
|
}, 10)
|
||||||
|
})
|
||||||
|
|
||||||
|
// 無對應資料系統小類
|
||||||
|
if (idx == subSysElecList.length - 1) {
|
||||||
|
let mainSubTags = subSysElecList.filter(x => x.mainSubTag);
|
||||||
|
$(".elecCard [id^=insPow]").each((idx, ele) => {
|
||||||
|
let tarMainSubTag = $(ele).prop("id").split("insPow")[1];
|
||||||
|
if (mainSubTags.indexOf(tarMainSubTag) == -1) {
|
||||||
|
$(ele).text("---");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
onEvent("click", ".elecCard", function() {
|
||||||
|
let tarMainSubTag = $(this).data("id");
|
||||||
|
|
||||||
|
$("#actSubSysText").text($(this).data("name"));
|
||||||
|
$("#todayElecNoData,#elecCompNoData").hide();
|
||||||
|
$("#todayElecChart,#elecCompChart").parent().show();
|
||||||
|
|
||||||
|
// 空調系統 今日用電量 (每小時)
|
||||||
|
let tarDevNum = subSysElecList.filter(x => x.mainSubTag == tarMainSubTag)[0]?.system_device_tag;
|
||||||
|
if (!tarDevNum) {
|
||||||
|
$("#todayElecNoData,#elecCompNoData").show();
|
||||||
|
$("#todayElecChart,#elecCompChart").parent().hide();
|
||||||
|
elecCompChart?.destroy();
|
||||||
|
todayElecChart?.destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
getElectricMeterHourDataByBaja(tarDevNum + "_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"));
|
||||||
|
chartTodaysElec(todayData);
|
||||||
|
chkBajaLoaded();
|
||||||
|
})
|
||||||
|
|
||||||
|
// 空調系統 今日與30日內平均用電比較
|
||||||
|
getElectricMeterDayDataByBaja(tarDevNum + "_KWH", "Mitsubishi_Sup", prevThirtyDay, tomorrow, (data) => {
|
||||||
|
let curDay = (new Date()).getDay() == 0 ? 7 : (new Date()).getDay();
|
||||||
|
let eveWeek = [];
|
||||||
|
let curWeekData = data.data.filter(x => strToDate(displayDate(new Date(), "date"), null, 0 - (curDay - 1)) <= strToDate(x.timestamp.$cEncStr));
|
||||||
|
|
||||||
|
for (let i = 1; i <= curDay; i++) {
|
||||||
|
let tarDayData = data.data.filter(x => strToDate(x.timestamp.$cEncStr, "day") == i);
|
||||||
|
let tarDayElecs = tarDayData.map(x => x.sum);
|
||||||
|
eveWeek.push(tarDayElecs.sum() / tarDayElecs.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
chartEveWeeksElec(curWeekData, eveWeek)
|
||||||
|
chkBajaLoaded();
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
$(".elecCard").first().click();
|
||||||
|
|
||||||
|
function chkBajaLoaded() {
|
||||||
|
|
||||||
|
loadedCnt++;
|
||||||
|
if (loadedCnt == 2) {
|
||||||
|
endPageLoading();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 圖表 - 今天用電量 (折線圖)
|
||||||
|
function chartTodaysElec(todayData) {
|
||||||
|
let todayElecChartCanvas = $('#todayElecChart').get(0).getContext('2d');
|
||||||
|
let curHour = (new Date()).getHours();
|
||||||
|
todayData.data = todayData.filter(x => x.timestamp.$time.$hour < curHour);
|
||||||
|
let todayElecChartData = {
|
||||||
|
labels: todayData?.data.map(x => x.timestamp.$time.$hour),
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
type: 'line',
|
||||||
|
label: '今日用電量',
|
||||||
|
fill: false,
|
||||||
|
data: todayData?.data.map(x => x.sum),
|
||||||
|
borderColor: color.success._500,
|
||||||
|
backgroundColor: color.success._500,
|
||||||
|
pointBackgroundColor: color.success._500,
|
||||||
|
|
||||||
|
order: 1,
|
||||||
|
borderWidth: 3,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
let todayElecChartOptions = {
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
responsive: true,
|
||||||
|
legend: {
|
||||||
|
display: true,
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
offset: true,
|
||||||
|
gridLines: { color: color.fusion._500 },
|
||||||
|
ticks: {
|
||||||
|
callback: function (value, index, ticks) {
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
yAxes: [{
|
||||||
|
|
||||||
|
ticks: {
|
||||||
|
min: 0,
|
||||||
|
beginAtZero: true
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
tooltips: {
|
||||||
|
callbacks: {
|
||||||
|
label: function (tooltipItem) {
|
||||||
|
return "用電量 : " + 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.
|
||||||
|
todayElecChart = new Chart(todayElecChartCanvas, {
|
||||||
|
data: todayElecChartData,
|
||||||
|
options: todayElecChartOptions
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 圖表 - 今日與30日內平均用電量比較 (長條圖)
|
||||||
|
function chartEveWeeksElec(curWeekData, avgData) {
|
||||||
|
|
||||||
|
let elecCompChartCanvas = $('#elecCompChart').get(0).getContext('2d');
|
||||||
|
let elecCompChartData = {
|
||||||
|
labels: curWeekData.map(x => dayToChiDay(strToDate(x.timestamp.$cEncStr, "day"))),
|
||||||
|
datasets: [
|
||||||
|
{
|
||||||
|
id: "today",
|
||||||
|
type: "bar",
|
||||||
|
label: '今日用電量',
|
||||||
|
fill: false,
|
||||||
|
backgroundColor: color.success._500,
|
||||||
|
borderColor: color.success._500,
|
||||||
|
pointColor: color.success._500,
|
||||||
|
pointBackgroundColor: color.success._500,
|
||||||
|
data: curWeekData.map(x => x.sum),
|
||||||
|
order: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "avg",
|
||||||
|
type: "bar",
|
||||||
|
label: '30日內平均用電量',
|
||||||
|
fill: false,
|
||||||
|
backgroundColor: color.info._100,
|
||||||
|
borderColor: color.info._100,
|
||||||
|
pointColor: color.info._100,
|
||||||
|
pointBackgroundColor: color.info._100,
|
||||||
|
data: avgData,
|
||||||
|
order: 2,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
let elecCompChartOptions = {
|
||||||
|
maintainAspectRatio: false,
|
||||||
|
responsive: true,
|
||||||
|
legend: {
|
||||||
|
display: true,
|
||||||
|
},
|
||||||
|
scales: {
|
||||||
|
xAxes: [{
|
||||||
|
offset: true,
|
||||||
|
gridLines: { color: color.fusion._500 },
|
||||||
|
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.
|
||||||
|
elecCompChart = new Chart(elecCompChartCanvas, {
|
||||||
|
data: elecCompChartData,
|
||||||
|
options: elecCompChartOptions
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onEvent("yt:tab:change", "[data-tabname=energyTab]", function () {
|
||||||
|
let type = $(this).data("id");
|
||||||
|
getSubSysList(type);
|
||||||
|
getElecBySubSysTag();
|
||||||
|
})
|
||||||
</script>
|
</script>
|
@ -43,6 +43,21 @@
|
|||||||
border-top: 0;
|
border-top: 0;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.table-compact td{
|
||||||
|
padding:0.2rem 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#emerTurn tr td:nth-child(2) {
|
||||||
|
width: 50%;
|
||||||
|
text-align: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#emerTurn tr td:nth-child(1) {
|
||||||
|
width:35%;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
@ -86,7 +101,7 @@
|
|||||||
<div id="eleCards" class="row col-12 p-0">
|
<div id="eleCards" class="row col-12 p-0">
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 col-8 p-0">
|
<div class="mt-2 col-8 p-0 d-none">
|
||||||
<!--<div class="pl-3 row">
|
<!--<div class="pl-3 row">
|
||||||
<button id="resChartZoom" class="btn btn-info mb-2">圖檔重置</button>
|
<button id="resChartZoom" class="btn btn-info mb-2">圖檔重置</button>
|
||||||
</div>-->
|
</div>-->
|
||||||
@ -111,16 +126,49 @@
|
|||||||
<h4>緊急回轉</h4>
|
<h4>緊急回轉</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-around mt-2">
|
<div class="col-12 p-2">
|
||||||
|
<table id="emerTurn" class="table-compact w-100">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><label class="mb-0 fs-1-05 w-auto" for="flexRadioDefault1">緊急回歸</label></td>
|
||||||
|
<td><label id="emerReturnText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label></td>
|
||||||
|
<td><span id="emerReturn" class="circle-light bg-secondary"></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label class="mb-0 fs-1-05 w-auto" for="flexRadioDefault1">群控故障</label></td>
|
||||||
|
<td><label id="groConFailText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label></td>
|
||||||
|
<td><span id="groConFail" class="circle-light bg-secondary"></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label class="mb-0 fs-1-05 w-auto" for="flexRadioDefault1">緊急電源</label></td>
|
||||||
|
<td><label id="emerPowerText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label></td>
|
||||||
|
<td><span id="emerPower" class="circle-light bg-secondary"></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label class="mb-0 fs-1-05 w-auto" for="flexRadioDefault1">火災回歸</label></td>
|
||||||
|
<td><label id="fireReturnText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label></td>
|
||||||
|
<td><span id="fireReturn" class="circle-light bg-secondary"></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label class="mb-0 fs-1-05 w-auto" for="flexRadioDefault1">地震管制</label></td>
|
||||||
|
<td><label id="earQuaConText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label></td>
|
||||||
|
<td><span id="earQuaCon" class="circle-light bg-secondary"></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><label class="mb-0 fs-1-05 w-auto" for="flexRadioDefault1">遠端休止</label></td>
|
||||||
|
<td><label id="disResText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label></td>
|
||||||
|
<td><span id="disRes" class="circle-light bg-secondary"></span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--<div class="d-flex justify-content-around mt-2">
|
||||||
<div>
|
<div>
|
||||||
<label class="form-check-label h4" for="flexRadioDefault1">
|
<label class="mb-0 fs-1-05" for="flexRadioDefault1">緊急回歸</label>
|
||||||
緊急回歸
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label id="emerReturnText" class="form-check-label h4" for="flexRadioDefault1">
|
<label id="emerReturnText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label>
|
||||||
未動作
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span id="emerReturn" class="circle-light bg-secondary"></span>
|
<span id="emerReturn" class="circle-light bg-secondary"></span>
|
||||||
@ -128,14 +176,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-around mt-2">
|
<div class="d-flex justify-content-around mt-2">
|
||||||
<div>
|
<div>
|
||||||
<label class="form-check-label h4" for="flexRadioDefault1">
|
<label class="mb-0 fs-1-05" for="flexRadioDefault1">群控故障</label>
|
||||||
群控故障
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label id="groConFailText" class="form-check-label h4" for="flexRadioDefault1">
|
<label id="groConFailText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label>
|
||||||
未動作
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span id="groConFail" class="circle-light bg-secondary"></span>
|
<span id="groConFail" class="circle-light bg-secondary"></span>
|
||||||
@ -143,14 +187,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-around mt-2">
|
<div class="d-flex justify-content-around mt-2">
|
||||||
<div>
|
<div>
|
||||||
<label class="form-check-label h4" for="flexRadioDefault1">
|
<label class="mb-0 fs-1-05" for="flexRadioDefault1">緊急電源</label>
|
||||||
緊急電源
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label id="emerPowerText" class="form-check-label h4" for="flexRadioDefault1">
|
<label id="emerPowerText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label>
|
||||||
未動作
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span id="emerPower" class="circle-light bg-secondary"></span>
|
<span id="emerPower" class="circle-light bg-secondary"></span>
|
||||||
@ -158,14 +198,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-around mt-2">
|
<div class="d-flex justify-content-around mt-2">
|
||||||
<div>
|
<div>
|
||||||
<label class="form-check-label h4" for="flexRadioDefault1">
|
<label class="mb-0 fs-1-05" for="flexRadioDefault1">火災回歸</label>
|
||||||
火災回歸
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label id="fireReturnText" class="form-check-label h4" for="flexRadioDefault1">
|
<label id="fireReturnText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label>
|
||||||
未動作
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span id="fireReturn" class="circle-light bg-secondary"></span>
|
<span id="fireReturn" class="circle-light bg-secondary"></span>
|
||||||
@ -173,29 +209,21 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-around mt-2">
|
<div class="d-flex justify-content-around mt-2">
|
||||||
<div>
|
<div>
|
||||||
<label class="form-check-label h4" for="flexRadioDefault1">
|
<label class="mb-0 fs-1-05" for="flexRadioDefault1">地震管制</label>
|
||||||
地震管制
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label id="earQuaConText" class="form-check-label h4" for="flexRadioDefault1">
|
<label id="earQuaConText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label>
|
||||||
未動作
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span id="earQuaCon" class="circle-light bg-secondary"></span>
|
<span id="earQuaCon" class="circle-light bg-secondary"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-around mt-2">
|
<div class="d-flex justify-content-around mt-2">
|
||||||
<div>
|
<div class="">
|
||||||
<label class="form-check-label h4" for="flexRadioDefault1">
|
<label class="mb-0 fs-1-05" for="flexRadioDefault1">遠端休止</label>
|
||||||
遠端休止
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label id="disResText" class="form-check-label h4" for="flexRadioDefault1">
|
<label id="disResText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label>
|
||||||
未動作
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span id="disRes" class="circle-light bg-secondary"></span>
|
<span id="disRes" class="circle-light bg-secondary"></span>
|
||||||
@ -203,19 +231,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-around mt-2">
|
<div class="d-flex justify-content-around mt-2">
|
||||||
<div>
|
<div>
|
||||||
<label class="form-check-label h4" for="flexRadioDefault1">
|
<label class="mb-0 fs-1-05" for="flexRadioDefault1">RET運轉</label>
|
||||||
RET運轉
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label id="retOpeText" class="form-check-label h4" for="flexRadioDefault1">
|
<label id="retOpeText" class="mb-0 fs-1-05" for="flexRadioDefault1">未動作</label>
|
||||||
未動作
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<span id="retOpe" class="circle-light bg-secondary"></span>
|
<span id="retOpe" class="circle-light bg-secondary"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>-->
|
||||||
</div>
|
</div>
|
||||||
<!-- End-右邊功能區 -->
|
<!-- End-右邊功能區 -->
|
||||||
<!-- Modal-Card1 -->
|
<!-- Modal-Card1 -->
|
||||||
@ -928,6 +952,27 @@
|
|||||||
myBaja.setSubscribeDevicesByBql(subOrdPath);
|
myBaja.setSubscribeDevicesByBql(subOrdPath);
|
||||||
myBaja.setSubscribeDevicesCallBack(function (data) {
|
myBaja.setSubscribeDevicesCallBack(function (data) {
|
||||||
try {
|
try {
|
||||||
|
if (allDevList.length == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
data.device_number = data.device_number_full;
|
||||||
|
let matchDevice = allDevList.filter(x => x.device_number == data.device_number)[0];
|
||||||
|
let master = matchDevice.device_number.split("_")[5];
|
||||||
|
|
||||||
|
//將訂閱值塞入 subSeviceData
|
||||||
|
if (subSeviceData.findIndex(x => x.device_number == matchDevice.device_number) == -1) {
|
||||||
|
let obj = {};
|
||||||
|
obj.device_number = matchDevice.device_number;
|
||||||
|
subSeviceData.push(obj)
|
||||||
|
}
|
||||||
|
|
||||||
|
let subData = subSeviceData.filter(x => x.device_number == matchDevice.device_number)[0];
|
||||||
|
|
||||||
|
if (subData) {
|
||||||
|
subData[data.point_name] = data.value;
|
||||||
|
}
|
||||||
|
|
||||||
function getValueByName(pointName) {
|
function getValueByName(pointName) {
|
||||||
return data.point_name == pointName ? data.value : null;
|
return data.point_name == pointName ? data.value : null;
|
||||||
}
|
}
|
||||||
@ -943,26 +988,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function actLightByPoiEx(pointName1, selector, pointName2, exCond) {
|
function actLightByPoiEx(pointName1, selector, pointName2, exCond) {
|
||||||
$(selector).removeClass("bg-orange").removeClass("bg-red");
|
$(selector).removeClass("bg-orange").removeClass("bg-danger").removeClass("bg-secondary").removeClass("bg-success");
|
||||||
if (getValueByName(pointName2) == exCond) {
|
$(selector).parent("td").prev().find("label").text("未動作");
|
||||||
if (pointName1 == "falseText") {
|
if (subData[pointName2] == exCond) {
|
||||||
|
if (subData[pointName1] == "falseText") {
|
||||||
$(selector).addClass("bg-secondary");
|
$(selector).addClass("bg-secondary");
|
||||||
$(selector).parent("div").prev().find("label").text("取消控制");
|
$(selector).parent("td").prev().find("label").text("取消控制");
|
||||||
} else {
|
} else {
|
||||||
$(selector).addClass("bg-red");
|
$(selector).addClass("bg-danger");
|
||||||
$(selector).parent("div").prev().find("label").text("控制");
|
$(selector).parent("td").prev().find("label").text("控制");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
$(selector).parent("td").prev().find("label").text("休止");
|
||||||
$(selector).addClass("bg-success");
|
$(selector).addClass("bg-success");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allDevList.length == 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
data.device_number = data.device_number_full;
|
|
||||||
let matchDevice = allDevList.filter(x => x.device_number == data.device_number)[0];
|
|
||||||
let master = matchDevice.device_number.split("_")[5];
|
|
||||||
//狀態
|
//狀態
|
||||||
if (data.point_name == "ST") {
|
if (data.point_name == "ST") {
|
||||||
$(`#${matchDevice.device_number}_card [name=devStatus]`).text(data.value);
|
$(`#${matchDevice.device_number}_card [name=devStatus]`).text(data.value);
|
||||||
@ -1002,6 +1044,7 @@
|
|||||||
//地震管制
|
//地震管制
|
||||||
actLightByPoi("EER", "#earQuaCon");
|
actLightByPoi("EER", "#earQuaCon");
|
||||||
if (data.point_name == "DNO" || data.point_name == "SP_RCS") {
|
if (data.point_name == "DNO" || data.point_name == "SP_RCS") {
|
||||||
|
debugger
|
||||||
//遠端休止
|
//遠端休止
|
||||||
actLightByPoiEx("SP_RCS", "#disRes", "DNO", "trueText");
|
actLightByPoiEx("SP_RCS", "#disRes", "DNO", "trueText");
|
||||||
}
|
}
|
||||||
@ -1011,18 +1054,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//將訂閱值塞入 subSeviceData
|
|
||||||
if (subSeviceData.findIndex(x => x.device_number == matchDevice.device_number) == -1) {
|
|
||||||
let obj = {};
|
|
||||||
obj.device_number = matchDevice.device_number;
|
|
||||||
subSeviceData.push(obj)
|
|
||||||
}
|
|
||||||
|
|
||||||
let subData = subSeviceData.filter(x => x.device_number == matchDevice.device_number)[0];
|
|
||||||
|
|
||||||
if (subData) {
|
|
||||||
subData[data.point_name] = data.value;
|
|
||||||
}
|
|
||||||
// 設置燈色、卡片閃爍
|
// 設置燈色、卡片閃爍
|
||||||
setLightColor();
|
setLightColor();
|
||||||
// Card table 更新
|
// Card table 更新
|
||||||
@ -1038,7 +1070,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
myBaja.setSubscribeDeviceEndCallBack(function (data) {
|
myBaja.setSubscribeDeviceEndCallBack(function (data) {
|
||||||
|
|
||||||
let devNumArr = data.map(x => { return { devNum: x.device_number_full, priority: allDevList.filter(y => y.device_number == x.device_number_full)[0]?.priority } }).DistinctBy("devNum");
|
let devNumArr = data.map(x => { return { devNum: x.device_number_full, priority: allDevList.filter(y => y.device_number == x.device_number_full)[0]?.priority } }).DistinctBy("devNum");
|
||||||
devNumArr = devNumArr.oSort("priority");
|
devNumArr = devNumArr.oSort("priority");
|
||||||
$.each(devNumArr, (idx, devObj) => {
|
$.each(devNumArr, (idx, devObj) => {
|
||||||
@ -1142,9 +1173,7 @@
|
|||||||
|
|
||||||
// Card - 設置列表中訂閱內容
|
// Card - 設置列表中訂閱內容
|
||||||
function subDeviceSetTable(devNum) {
|
function subDeviceSetTable(devNum) {
|
||||||
if (allDevList.filter(x => !x.device_number).length > 0) {
|
|
||||||
|
|
||||||
}
|
|
||||||
let subData = subSeviceData.filter(x => x.device_number == devNum)[0]
|
let subData = subSeviceData.filter(x => x.device_number == devNum)[0]
|
||||||
let matchDevice = allDevList.filter(x => x.device_number == devNum)[0];
|
let matchDevice = allDevList.filter(x => x.device_number == devNum)[0];
|
||||||
if (!subData) {
|
if (!subData) {
|
||||||
@ -1171,8 +1200,6 @@
|
|||||||
elevObj.setElevFloor(matchDevice.device_number, subData["CP"]);
|
elevObj.setElevFloor(matchDevice.device_number, subData["CP"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (elev3DObj.length != 0) {
|
if (elev3DObj.length != 0) {
|
||||||
let elevObj = elev3DObj.filter(x => x.nodeId == elev3DBind[devNum])[0];
|
let elevObj = elev3DObj.filter(x => x.nodeId == elev3DBind[devNum])[0];
|
||||||
if (elevObj && elevObj.id) {
|
if (elevObj && elevObj.id) {
|
||||||
|
@ -7,8 +7,19 @@
|
|||||||
<div class="row m-0 mb-3">
|
<div class="row m-0 mb-3">
|
||||||
<button id="resChartZoom" class="btn btn-info">圖檔重置</button>
|
<button id="resChartZoom" class="btn btn-info">圖檔重置</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<!-- <div class="row">
|
||||||
<div id="floChart" style="height : 80vh!important;width:100%"></div>
|
<div id="floChart" style="height : 80vh!important;width:100%"></div>
|
||||||
|
</div> -->
|
||||||
|
<!-- <div class="row">
|
||||||
|
<div id="forgeViewer" class="position-absolute" style="width:96%;height:96%;"></div>
|
||||||
|
</div> -->
|
||||||
|
<div class="d-flex">
|
||||||
|
<div class="col-6 my-3">
|
||||||
|
<div id="floChart" style="height : 80vh!important;width:100%"></div>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 my-3">
|
||||||
|
<div id="forgeViewer"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@ -20,6 +31,7 @@
|
|||||||
var global_emergency_alarm_device_number = [];
|
var global_emergency_alarm_device_number = [];
|
||||||
var zoomToggle = 3;
|
var zoomToggle = 3;
|
||||||
$(function () {
|
$(function () {
|
||||||
|
show3DModel();
|
||||||
initChart();
|
initChart();
|
||||||
getFloData();
|
getFloData();
|
||||||
})
|
})
|
||||||
@ -813,4 +825,10 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function show3DModel() {
|
||||||
|
launchViewer("dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6dnNjb2RlX2ZvcmdlX3Rlc3QvJUUzJTgwJTkwQVJDJUUzJTgwJTkxQjFGXzIwMjJfMTJfMDQubndj", (viewer, nodeIds) => {
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
@ -2281,7 +2281,13 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
|
|||||||
})
|
})
|
||||||
|
|
||||||
endPageLoading();
|
endPageLoading();
|
||||||
typeof timeOutor != "undefined" ? clearInterval(timeOutor) : ""; // dashboard 定時更新 baja 資料定時器關閉
|
|
||||||
|
if (typeof timeOuters != "undefined") {
|
||||||
|
$.each(timeOuters, (idx, timeOut) => {
|
||||||
|
clearInterval(timeOut);
|
||||||
|
})
|
||||||
|
timeOuters = [];
|
||||||
|
}
|
||||||
$("#app").load(`_${page}.html`, loadCallback);
|
$("#app").load(`_${page}.html`, loadCallback);
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -95,6 +95,26 @@ function launchViewer(urn, callback) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function launchViewerNoTools(urn, callback) {
|
||||||
|
var options = {
|
||||||
|
env: 'AutodeskProduction',
|
||||||
|
getAccessToken: getForgeToken
|
||||||
|
};
|
||||||
|
|
||||||
|
Autodesk.Viewing.Initializer(options, () => {
|
||||||
|
//viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer'));
|
||||||
|
viewer = new Autodesk.Viewing.Viewer3D(document.getElementById('forgeViewer'));
|
||||||
|
viewer.start();
|
||||||
|
var documentId = 'urn:' + urn;
|
||||||
|
|
||||||
|
Autodesk.Viewing.Document.load(documentId, onDocumentLoadSuccess, onDocumentLoadFailure);
|
||||||
|
|
||||||
|
$("#forgeViewer").on("autodesk:loaded", function (e, nodeIds) {
|
||||||
|
callback ? callback(viewer, nodeIds) : "";
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function getAllLeafComponents(viewer, callback) {
|
function getAllLeafComponents(viewer, callback) {
|
||||||
var cbCount = 0;
|
var cbCount = 0;
|
||||||
var tree;
|
var tree;
|
||||||
|
@ -12,6 +12,78 @@ function addzero(num) {
|
|||||||
* @param {any} alarmClass
|
* @param {any} alarmClass
|
||||||
* @param {any} callback
|
* @param {any} callback
|
||||||
*/
|
*/
|
||||||
|
// function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
|
||||||
|
// let _sourceTmp;
|
||||||
|
// var _result = "";
|
||||||
|
// var _ss = "";
|
||||||
|
// var _bfName = "";
|
||||||
|
// var _sourceName = "";
|
||||||
|
// var _index = 0;
|
||||||
|
// var _recoverState = isRecover ? "!= null" : "= null";
|
||||||
|
// var _ackState = isAck ? "= 1" : "!= 1";
|
||||||
|
|
||||||
|
// 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 alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " order by timestamp asc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
// _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
|
||||||
|
// _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
|
||||||
|
// _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
|
||||||
|
// _ss += ', "' + _index + '": {"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index;
|
||||||
|
// _result += _ss;
|
||||||
|
// _result += '}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
|
||||||
|
// let _sourceTmp;
|
||||||
|
// var _result = "";
|
||||||
|
// var _ss = "";
|
||||||
|
// var _bfName = "";
|
||||||
|
// var _sourceName = "";
|
||||||
|
// var _index = 0;
|
||||||
|
// var _recoverState = isRecover ? "!= null" : "= null"
|
||||||
|
// var _ackState = isAck ? "= 1" : "!= 1";
|
||||||
|
|
||||||
|
// 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 alarmClass = '" + alarmClass + "' and timestamp.millis > " + startDate_millisecond + " and timestamp.millis < " + endDate_millisecond + " and normalTime " + _recoverState + " order by timestamp asc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
// _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
|
||||||
|
// _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
|
||||||
|
// _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
|
||||||
|
|
||||||
|
// if (_index == 0)
|
||||||
|
// _ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
// else
|
||||||
|
// _ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index + ', "data":[';
|
||||||
|
// _result += _ss;
|
||||||
|
// _result += ']}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// limit: -1,
|
||||||
|
// offset: 0
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
|
function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, alarmClass, callback) {
|
||||||
let _sourceTmp;
|
let _sourceTmp;
|
||||||
var _result = "";
|
var _result = "";
|
||||||
@ -52,59 +124,40 @@ function getAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, i
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 取得所有異常資料 by baja
|
|
||||||
* @param {any} startDate_millisecond
|
|
||||||
* @param {any} endDate_millisecond
|
|
||||||
* @param {any} isRecover
|
|
||||||
* @param {any} isAck
|
|
||||||
* @param {any} callback
|
|
||||||
*/
|
|
||||||
function getAllDeviceAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) {
|
|
||||||
let _sourceTmp;
|
|
||||||
var _result = "";
|
|
||||||
var _ss = "";
|
|
||||||
var _bfName = "";
|
|
||||||
var _sourceName = "";
|
|
||||||
var _index = 0;
|
|
||||||
var _recoverState = isRecover ? "!= null" : "= null";
|
|
||||||
var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
|
|
||||||
|
|
||||||
require(['baja!'], function (baja) {
|
|
||||||
console.log("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 timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
|
|
||||||
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 timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
|
|
||||||
.then(function (table) {
|
|
||||||
return table.cursor({
|
|
||||||
each: function (record) {
|
|
||||||
_sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
|
|
||||||
_bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
|
|
||||||
_sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
|
|
||||||
if (_index == 0)
|
|
||||||
_ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
|
||||||
else
|
|
||||||
_ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
|
||||||
_index++;
|
|
||||||
},
|
|
||||||
after: function () {
|
|
||||||
_result += '{' + '"count": ' + _index + ', "data":[';
|
|
||||||
_result += _ss + ']';
|
|
||||||
_result += '}';
|
|
||||||
if (typeof callback === 'function') {
|
|
||||||
callback(_result);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
limit: -1,
|
|
||||||
offset: 0
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 取得單一設備最新10筆異常資料 by baja
|
* 取得單一設備最新10筆異常資料 by baja
|
||||||
* @param {any} devicePath
|
* @param {any} devicePath
|
||||||
* @param {any} callback
|
* @param {any} callback
|
||||||
*/
|
*/
|
||||||
|
// function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
|
||||||
|
// var _result = "";
|
||||||
|
// var _ss = "";
|
||||||
|
// var _index = 0;
|
||||||
|
// //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]}
|
||||||
|
// require(['baja!'], function (baja) {
|
||||||
|
// baja.Ord.make("local:|foxs:|alarm:|bql:select top 10 timestamp, ackState, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
// if (_index == 0)
|
||||||
|
// _ss += '{"uuid":"' + record.get('uuid') + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "timestamp":"' + record.get('timestamp') + '"}';
|
||||||
|
// else
|
||||||
|
// _ss += ',{"uuid":"' + record.get('uuid') + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "timestamp":"' + record.get('timestamp') + '"}';
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index +', "data":[';
|
||||||
|
|
||||||
|
// _result += _ss+']';
|
||||||
|
// _result += '}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
|
function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
|
||||||
var _result = "";
|
var _result = "";
|
||||||
var _ss = "";
|
var _ss = "";
|
||||||
@ -152,103 +205,36 @@ function getOneDeviceAlarmTop10ByBaja(devicePath, callback) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 取得單一設備異常
|
|
||||||
* @param {any} devicePath
|
|
||||||
* @param {any} callback
|
|
||||||
*/
|
|
||||||
function getOneDeviceAlarmByBaja(devicePath, callback) {
|
|
||||||
let _sourceTmp;
|
|
||||||
var _result = "";
|
|
||||||
var _ss = "";
|
|
||||||
var _bfName = "";
|
|
||||||
var _sourceName = "";
|
|
||||||
var _index = 0;
|
|
||||||
|
|
||||||
require(['baja!'], function (baja) {
|
|
||||||
console.log("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 alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc");
|
|
||||||
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 alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
|
|
||||||
.then(function (table) {
|
|
||||||
return table.cursor({
|
|
||||||
each: function (record) {
|
|
||||||
_sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
|
|
||||||
_bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
|
|
||||||
_sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
|
|
||||||
if (_index == 0)
|
|
||||||
_ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
|
||||||
else
|
|
||||||
_ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
|
||||||
_index++;
|
|
||||||
},
|
|
||||||
after: function () {
|
|
||||||
_result += '{' + '"count": ' + _index + ', "data":[';
|
|
||||||
_result += _ss + ']';
|
|
||||||
_result += '}';
|
|
||||||
if (typeof callback === 'function') {
|
|
||||||
callback(_result);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
limit: -1,
|
|
||||||
offset: 0
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取得單一設備異常 有時間、確認、復歸條件
|
|
||||||
* @param {any} devicePath
|
|
||||||
* @param {any} startDate_millisecond
|
|
||||||
* @param {any} endDate_millisecond
|
|
||||||
* @param {any} isRecover
|
|
||||||
* @param {any} isAck
|
|
||||||
* @param {any} callback
|
|
||||||
*/
|
|
||||||
function getOneDeviceAlarmWithTimeByBaja(devicePath, startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) {
|
|
||||||
let _sourceTmp;
|
|
||||||
var _result = "";
|
|
||||||
var _ss = "";
|
|
||||||
var _bfName = "";
|
|
||||||
var _sourceName = "";
|
|
||||||
var _index = 0;
|
|
||||||
var _recoverState = isRecover ? "!= null" : "= null";
|
|
||||||
var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
|
|
||||||
|
|
||||||
require(['baja!'], function (baja) {
|
|
||||||
console.log("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 alarmData.sourceName like '%" + devicePath + "%' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
|
|
||||||
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 alarmData.sourceName like '%" + devicePath + "%' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
|
|
||||||
.then(function (table) {
|
|
||||||
return table.cursor({
|
|
||||||
each: function (record) {
|
|
||||||
_sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
|
|
||||||
_bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
|
|
||||||
_sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
|
|
||||||
if (_index == 0)
|
|
||||||
_ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
|
||||||
else
|
|
||||||
_ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
|
||||||
_index++;
|
|
||||||
},
|
|
||||||
after: function () {
|
|
||||||
_result += '{' + '"count": ' + _index + ', "data":[';
|
|
||||||
_result += _ss + ']';
|
|
||||||
_result += '}';
|
|
||||||
if (typeof callback === 'function') {
|
|
||||||
callback(_result);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
limit: -1,
|
|
||||||
offset: 0
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在單一系統下,取得各個設備的異常狀態
|
* 在單一系統下,取得各個設備的異常狀態
|
||||||
* @param {any} systemPath
|
* @param {any} systemPath
|
||||||
* @param {any} callback
|
* @param {any} callback
|
||||||
*/
|
*/
|
||||||
|
// function getOneSystemAlarmStateByBaja(systemPath, callback) {
|
||||||
|
// var _result = "";
|
||||||
|
// var _ss = "";
|
||||||
|
// var _index = 0;
|
||||||
|
|
||||||
|
// require(['baja!'], function (baja) {
|
||||||
|
// baja.Ord.make("local:|foxs:|alarm:|bql:select alarmData, alarmData.sourceName, sourceState, uuid where alarmData.sourceName like '%" + systemPath + "%' order by timestamp desc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
// _ss += ', "' + _index + '": {"uuid":"' + record.get('uuid') + '", "sourceName":"' + record.get('alarmData').get('sourceName') + '", "sourceState":"' + record.get('sourceState') + '"}';
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index;
|
||||||
|
// _result += _ss;
|
||||||
|
// _result += '}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
function getOneSystemAlarmStateByBaja(systemPath, callback) {
|
function getOneSystemAlarmStateByBaja(systemPath, callback) {
|
||||||
var _result = "";
|
var _result = "";
|
||||||
var _ss = "";
|
var _ss = "";
|
||||||
@ -295,6 +281,10 @@ function getOneSystemStateByBaja(systemPath, callback) {
|
|||||||
.then(function (table) {
|
.then(function (table) {
|
||||||
return table.cursor({
|
return table.cursor({
|
||||||
each: function (record) {
|
each: function (record) {
|
||||||
|
//if (_index == 0)
|
||||||
|
// _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
|
||||||
|
//else
|
||||||
|
// _ss += '{"sourceState":"' + record.get('sourceState') + '"}';
|
||||||
_ss += '{"sourceState":"' + record.get('sourceState') + '"}';
|
_ss += '{"sourceState":"' + record.get('sourceState') + '"}';
|
||||||
_index++;
|
_index++;
|
||||||
},
|
},
|
||||||
@ -457,3 +447,193 @@ function getSystemAlarmByBaja(callback) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 取得單一設備異常
|
||||||
|
// * @param {any} callback
|
||||||
|
// */
|
||||||
|
// //(devicePath, callback)
|
||||||
|
// function getOneDeviceAlarmByBaja(devicePath, startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) {
|
||||||
|
// // var _result = "";
|
||||||
|
// // var _ss = "";
|
||||||
|
// // var _occurrenceTime = "";
|
||||||
|
// // var _normalTime = "";
|
||||||
|
// // var _index = 0;
|
||||||
|
|
||||||
|
// let _sourceTmp;
|
||||||
|
// var _result = "";
|
||||||
|
// var _ss = "";
|
||||||
|
// var _bfName = "";
|
||||||
|
// var _sourceName = "";
|
||||||
|
// var _index = 0;
|
||||||
|
// var _recoverState = isRecover ? "!= null" : "= null";
|
||||||
|
// //local:|foxs:|alarm:|bql:select ackState from openAlarms where ackState ='acked'
|
||||||
|
// var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
|
||||||
|
|
||||||
|
// //{ "count":2,"data": [{ "time": "2022/11/14 15:00:00", "errId": "0001", "ackCheck": "未確認", "errReason": "燈泡故障" }, { "time": "2022/11/14 15:00:00", "errId": "0002", "ackCheck": "未確認", "errReason": "燈泡故障" }]}
|
||||||
|
// require(['baja!'], function (baja) {
|
||||||
|
// console.log("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 alarmData.sourceName like '%" + devicePath + "%' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
|
||||||
|
// 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 alarmData.sourceName like '%" + devicePath + "%' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
|
||||||
|
// // console.log("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 alarmData.sourceName like '%" + devicePath + "%' and alarmClass = '" + alarmClass + "' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
|
||||||
|
// // 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 alarmData.sourceName like '%" + devicePath + "%' and alarmClass = '" + alarmClass + "' and timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
|
||||||
|
// //baja.Ord.make("local:|foxs:|alarm:|bql:select timestamp, ackState, alarmClass, alarmData, alarmData.sourceName, sourceState, uuid, alarmData.msgText, normalTime where alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
|
||||||
|
// .then(function (table) {
|
||||||
|
// return table.cursor({
|
||||||
|
// each: function (record) {
|
||||||
|
|
||||||
|
// _sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
|
||||||
|
// _bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
|
||||||
|
// _sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
|
||||||
|
// // _occurrenceTime = "";
|
||||||
|
// // _normalTime = "";
|
||||||
|
// //var _resultUuid = record.get('uuid').toString().split("-");//43dc7846-bd96-4be2-ab35-f11aec729c60
|
||||||
|
|
||||||
|
// // var _timestampTemp = new Date(record.get('timestamp').toString());
|
||||||
|
// // _occurrenceTime += _timestampTemp.getFullYear().toString() + "-" + addzero(_timestampTemp.getMonth() + 1).toString() + "-" + addzero(_timestampTemp.getDate()).toString() + " " + addzero(_timestampTemp.getHours()).toString() + ":" + addzero(_timestampTemp.getMinutes()).toString() + ":" + addzero(_timestampTemp.getSeconds()).toString();
|
||||||
|
|
||||||
|
// // var _normaltime = new Date(record.get('normalTime').toString());
|
||||||
|
// // _normalTime += _normaltime.getFullYear().toString() + "-" + addzero(_normaltime.getMonth() + 1).toString() + "-" + addzero(_normaltime.getDate()).toString() + " " + addzero(_normaltime.getHours()).toString() + ":" + addzero(_normaltime.getMinutes()).toString() + ":" + addzero(_normaltime.getSeconds()).toString();
|
||||||
|
|
||||||
|
// // var _msgText = record.get('alarmData').get('msgText');// == 1 ? _occurrenceTime : "未確認";
|
||||||
|
// // var _ackText = record.get('ackState') == 1 ? _occurrenceTime : "未確認";
|
||||||
|
|
||||||
|
// //_ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
// if (_index == 0)
|
||||||
|
// _ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
// //_ss += '{"uuid":"' + record.get('uuid') + '", "msgText":"' + _msgText + '", "ackState":"' + _ackText + '", "timestamp":"' + _occurrenceTime + '", "normalTime":"' + _normalTime + '"}';
|
||||||
|
// else
|
||||||
|
// _ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
// _index++;
|
||||||
|
// },
|
||||||
|
// after: function () {
|
||||||
|
// _result += '{' + '"count": ' + _index + ', "data":[';
|
||||||
|
// _result += _ss + ']';
|
||||||
|
// _result += '}';
|
||||||
|
// if (typeof callback === 'function') {
|
||||||
|
// callback(_result);
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// limit: -1,
|
||||||
|
// offset: 0
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取得單一設備異常
|
||||||
|
* @param {any} devicePath
|
||||||
|
* @param {any} callback
|
||||||
|
*/
|
||||||
|
function getOneDeviceAlarmByBaja(devicePath, callback) {
|
||||||
|
let _sourceTmp;
|
||||||
|
var _result = "";
|
||||||
|
var _ss = "";
|
||||||
|
var _bfName = "";
|
||||||
|
var _sourceName = "";
|
||||||
|
var _index = 0;
|
||||||
|
|
||||||
|
require(['baja!'], function (baja) {
|
||||||
|
console.log("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 alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc");
|
||||||
|
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 alarmData.sourceName like '%" + devicePath + "%' order by timestamp desc").get()
|
||||||
|
.then(function (table) {
|
||||||
|
return table.cursor({
|
||||||
|
each: function (record) {
|
||||||
|
_sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
|
||||||
|
_bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
|
||||||
|
_sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
|
||||||
|
if (_index == 0)
|
||||||
|
_ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
else
|
||||||
|
_ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
_index++;
|
||||||
|
},
|
||||||
|
after: function () {
|
||||||
|
_result += '{' + '"count": ' + _index + ', "data":[';
|
||||||
|
_result += _ss + ']';
|
||||||
|
_result += '}';
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
callback(_result);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
limit: -1,
|
||||||
|
offset: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAllDeviceAlarmByBaja(startDate_millisecond, endDate_millisecond, isRecover, isAck, callback) {
|
||||||
|
let _sourceTmp;
|
||||||
|
var _result = "";
|
||||||
|
var _ss = "";
|
||||||
|
var _bfName = "";
|
||||||
|
var _sourceName = "";
|
||||||
|
var _index = 0;
|
||||||
|
var _recoverState = isRecover ? "!= null" : "= null";
|
||||||
|
var _ackState = isAck ? "= 'acked'" : "= 'unacked'";
|
||||||
|
|
||||||
|
require(['baja!'], function (baja) {
|
||||||
|
console.log("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 timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc");
|
||||||
|
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 timestamp.millis >= " + startDate_millisecond + " and timestamp.millis <= " + endDate_millisecond + " and normalTime " + _recoverState + " and ackState " + _ackState + " order by timestamp desc").get()
|
||||||
|
.then(function (table) {
|
||||||
|
return table.cursor({
|
||||||
|
each: function (record) {
|
||||||
|
_sourceTmp = (record.get('alarmData').get('sourceName')).toString().split('_');
|
||||||
|
_bfName = _sourceTmp[1] + "-" + _sourceTmp[4];
|
||||||
|
_sourceName = _sourceTmp[7] + "-" + _sourceTmp[8];
|
||||||
|
if (_index == 0)
|
||||||
|
_ss += '{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
else
|
||||||
|
_ss += ',{"buildingFloorName_zh":"' + _bfName + '", "uuid":"' + record.get('uuid') + '", "timestamp":"' + record.get('timestamp') + '", "alarmClass":"' + record.get('alarmClass') + '", "sourceName_zh":"' + _sourceName + '", "msgText":"' + record.get('alarmData').get('msgText') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
_index++;
|
||||||
|
},
|
||||||
|
after: function () {
|
||||||
|
_result += '{' + '"count": ' + _index + ', "data":[';
|
||||||
|
_result += _ss + ']';
|
||||||
|
_result += '}';
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
callback(_result);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
limit: -1,
|
||||||
|
offset: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [首頁] 圓餅圖資料 - 全部的異常
|
||||||
|
* @param {any} callback
|
||||||
|
*/
|
||||||
|
function getAlarmForChartDataByBaja(callback) {
|
||||||
|
var _result = "";
|
||||||
|
var _ss = "";
|
||||||
|
var _index = 0;
|
||||||
|
|
||||||
|
require(['baja!'], function (baja) {
|
||||||
|
baja.Ord.make("local:|foxs:|alarm:|bql:select alarmClass, ackState, normalTime where isAlarm").get()
|
||||||
|
.then(function (table) {
|
||||||
|
return table.cursor({
|
||||||
|
each: function (record) {
|
||||||
|
if (_index == 0)
|
||||||
|
_ss += '{"alarmClass":"' + record.get('alarmClass') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
else
|
||||||
|
_ss += ',{"alarmClass":"' + record.get('alarmClass') + '", "ackState":"' + record.get('ackState') + '", "normalTime":"' + record.get('normalTime') + '"}';
|
||||||
|
_index++;
|
||||||
|
},
|
||||||
|
after: function () {
|
||||||
|
_result += '{' + '"count": ' + _index + ', "data":[';
|
||||||
|
_result += _ss;
|
||||||
|
_result += ']}';
|
||||||
|
if (typeof callback === 'function') {
|
||||||
|
callback(_result);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
limit: -1,
|
||||||
|
offset: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
@ -6,6 +6,11 @@ var ordPath; //當前點選選單的tag,用來抓出設備路徑,例如:旅
|
|||||||
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路徑
|
||||||
|
|
||||||
|
let baja_subscribe_electricmeter_callback_func;
|
||||||
|
let baja_subscribe_end_electricmeter_callback_func;
|
||||||
|
var ordPathForElectricmeter;
|
||||||
|
|
||||||
var startPageLoading; // 開始 loading
|
var startPageLoading; // 開始 loading
|
||||||
var endPageLoading; // 開始 loading
|
var endPageLoading; // 開始 loading
|
||||||
//window.baja = null;
|
//window.baja = null;
|
||||||
@ -57,6 +62,25 @@ function subscriptionAlarms() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function subscriptionElectricmeter() {
|
||||||
|
// 用BQL的方式去訂閱
|
||||||
|
this.setSubscribeElectricmeterByBql = function (tempOrdPath) {
|
||||||
|
BajaSubscribeElectricmeterByBql(tempOrdPath);
|
||||||
|
};
|
||||||
|
// BQL去訂閱回傳的Function
|
||||||
|
this.setSubscribeElectricmeterCallBack = function (callBackFunc) {
|
||||||
|
if (callBackFunc != undefined && callBackFunc != null) {
|
||||||
|
baja_subscribe_electricmeter_callback_func = callBackFunc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// BQL訂閱結束回傳的Function
|
||||||
|
this.setSubscribeElectricmeterEndCallBack = function (callBackFunc) {
|
||||||
|
if (callBackFunc != undefined && callBackFunc != null) {
|
||||||
|
baja_subscribe_end_electricmeter_callback_func = callBackFunc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function MyBaja() {
|
function MyBaja() {
|
||||||
// 取得使用者帳號
|
// 取得使用者帳號
|
||||||
this.setMyUserAccount = function (callBackFunc = null) {
|
this.setMyUserAccount = function (callBackFunc = null) {
|
||||||
@ -351,6 +375,154 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用者透過BQL指定路徑去訂閱 electricmeter
|
||||||
|
*/
|
||||||
|
function BajaSubscribeElectricmeterByBql(ordPathForElectricmeter) {
|
||||||
|
|
||||||
|
|
||||||
|
require(['baja!'], function (baja) {
|
||||||
|
//console.log("進入Function 準備執行BQL訂閱");
|
||||||
|
startPageLoading ? startPageLoading() : ""
|
||||||
|
var init_start = new Date(Date.now());
|
||||||
|
var sub = new baja.Subscriber();
|
||||||
|
|
||||||
|
sub.attach('changed', function (prop) {
|
||||||
|
if (prop.getName() === 'out') {
|
||||||
|
var out_value = this.getOutDisplay();
|
||||||
|
var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
||||||
|
var point_name = this.getDisplayName();
|
||||||
|
|
||||||
|
//依據Facets判斷回傳的內容值為何
|
||||||
|
var facets_split = this.getFacets1().$cEncStr.split('|');
|
||||||
|
var facets_arr = [];
|
||||||
|
facets_split.forEach(function (item, index) {
|
||||||
|
facets_arr.push(item.split('=s:'));
|
||||||
|
});
|
||||||
|
|
||||||
|
var facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||||||
|
|
||||||
|
var point_out_split = this.getOutDisplay().split(' ');
|
||||||
|
|
||||||
|
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||||||
|
|
||||||
|
if (key == undefined) {
|
||||||
|
key = point_out_split[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
var modify_target_device = {
|
||||||
|
"device_number": target_device_number ? target_device_number : null,
|
||||||
|
//"device_number_full": this.$parent.getSlotPath().$names.join("_"),
|
||||||
|
"point_name": point_name ? point_name : null,
|
||||||
|
"value": key
|
||||||
|
}
|
||||||
|
|
||||||
|
if (baja_subscribe_electricmeter_callback_func != undefined && baja_subscribe_electricmeter_callback_func != null) {
|
||||||
|
baja_subscribe_electricmeter_callback_func(modify_target_device, true); //第2參數用在平面圖,刷新畫面
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, function (err) {
|
||||||
|
console.log(err)
|
||||||
|
});
|
||||||
|
|
||||||
|
//使用bql語法
|
||||||
|
console.log(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`);
|
||||||
|
baja.Ord.make(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`)
|
||||||
|
.get(
|
||||||
|
function (table) {
|
||||||
|
var tableStart, tableFinish;
|
||||||
|
var subStart, subFinish;
|
||||||
|
var component_index = 0;
|
||||||
|
var total_component_index = 0;
|
||||||
|
var totalTargetDevice = [];
|
||||||
|
var readBqlFinish = new Date(Date.now());
|
||||||
|
//console.log("讀取路徑完成-花費時間", (readBqlFinish.getTime() - init_start.getTime()) / 1000 + "sec");
|
||||||
|
table.cursor({
|
||||||
|
before: function () {
|
||||||
|
totalTargetDevice = [];
|
||||||
|
tableStart = new Date(Date.now());
|
||||||
|
$("#table-start-timestamp").html(tableStart.toISOString());
|
||||||
|
render_start = new Date(Date.now());
|
||||||
|
|
||||||
|
},
|
||||||
|
each: function (item, index) {
|
||||||
|
if (index < 1) {
|
||||||
|
subStart = new Date(Date.now());
|
||||||
|
$("#sub-start").html(subStart.toISOString());
|
||||||
|
}
|
||||||
|
$("#sub-number").html(index + 1);
|
||||||
|
total_component_index = index;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var target_device_number_split = this.getDisplay("slotPath").split('/');
|
||||||
|
var target_device_number = target_device_number_split[8];
|
||||||
|
//console.log(target_device_number);
|
||||||
|
var point_name = this.getDisplay("name");
|
||||||
|
var facets = this.getDisplay("facets");
|
||||||
|
|
||||||
|
//依據Facets判斷回傳的內容值為何
|
||||||
|
var facets_split = facets.split(',');
|
||||||
|
var facets_arr = [];
|
||||||
|
facets_split.forEach(function (item, index) {
|
||||||
|
facets_arr.push(item.split('='));
|
||||||
|
});
|
||||||
|
|
||||||
|
facets = facets_arr.reduce((obj, cur) => ({ ...obj, [cur[0]]: cur[1] }), {})
|
||||||
|
|
||||||
|
var point_out_split = this.getDisplay("out").split(' ');
|
||||||
|
|
||||||
|
let key = Object.keys(facets).find(k => facets[k] === point_out_split[0]);
|
||||||
|
|
||||||
|
if (key == undefined) {
|
||||||
|
key = point_out_split[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
var modify_target_device = {
|
||||||
|
"device_number": target_device_number ? target_device_number : null,
|
||||||
|
//"device_number_full": this.getDisplay("slotPath").split("slot:")[1].split('/').slice(1, -1).join("_"),
|
||||||
|
"point_name": point_name ? point_name : null,
|
||||||
|
"value": key
|
||||||
|
}
|
||||||
|
totalTargetDevice.push(modify_target_device);
|
||||||
|
//取得component當下就更新設備點位
|
||||||
|
if (baja_subscribe_electricmeter_callback_func != undefined && baja_subscribe_electricmeter_callback_func != null) {
|
||||||
|
baja_subscribe_electricmeter_callback_func(modify_target_device);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath"))
|
||||||
|
.get()
|
||||||
|
.then(function (component) {
|
||||||
|
component_index++;
|
||||||
|
//var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
|
||||||
|
//var point_name = component.getDisplayName();
|
||||||
|
|
||||||
|
sub.subscribe({
|
||||||
|
comps: component,
|
||||||
|
});
|
||||||
|
tolSubList.push(sub);
|
||||||
|
subFinish = new Date(Date.now());
|
||||||
|
$("#sub-end").html(subFinish.toISOString());
|
||||||
|
$("#sub-time").html((subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||||||
|
// console.log("訂閱完成時間", (subFinish.getTime() - subStart.getTime()) / 1000 + "sec");
|
||||||
|
});
|
||||||
|
},
|
||||||
|
after: function () {
|
||||||
|
tableFinish = new Date(Date.now());
|
||||||
|
if (baja_subscribe_end_electricmeter_callback_func != undefined && baja_subscribe_end_electricmeter_callback_func != null) {
|
||||||
|
baja_subscribe_end_electricmeter_callback_func(totalTargetDevice);
|
||||||
|
}
|
||||||
|
endPageLoading ? endPageLoading() : ""
|
||||||
|
//console.log("表格完成時間", (tableFinish.getTime() - tableStart.getTime()) / 1000 + "sec");
|
||||||
|
},
|
||||||
|
limit: -1,
|
||||||
|
offset: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// function getAlarmCountByBaja(callback) {
|
// function getAlarmCountByBaja(callback) {
|
||||||
// var _result = "";
|
// var _result = "";
|
||||||
// var _index = 0;
|
// var _index = 0;
|
||||||
|
@ -353,3 +353,36 @@ class ElevatorHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 從數字週數轉為中文週數
|
||||||
|
function dayToChiDay(num) {
|
||||||
|
let chiDay = ["週日", "週一", "週二", "週三", "週四", "週五", "週六"];
|
||||||
|
return chiDay[num];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取得現在或前後時間,輸出單位依據 type
|
||||||
|
function getTimeByType(type = null, cal = 0) {
|
||||||
|
let now = new Date();
|
||||||
|
return strToDate(now, type, cal);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取得某當下時間或前後時間,輸出單位依據 type
|
||||||
|
function strToDate(text, type = null, cal = 0) {
|
||||||
|
let calDay = function (_d, _cal) {
|
||||||
|
return new Date(_d.getTime() + (cal * 24 * 60 * 60 * 1000));
|
||||||
|
}
|
||||||
|
let tarDate = new Date(text);
|
||||||
|
let result = 0;
|
||||||
|
if (type == "year") {
|
||||||
|
result = calDay(tarDate, cal).getFullYear();
|
||||||
|
} else if (type == "month") {
|
||||||
|
result = calDay(tarDate, cal).getMonth();
|
||||||
|
} else if (type == "date") {
|
||||||
|
result = calDay(tarDate, cal).getDate();
|
||||||
|
} else if (type == "day") {
|
||||||
|
result = calDay(tarDate, cal).getDay();
|
||||||
|
} else {
|
||||||
|
result = calDay(tarDate, cal);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
@ -68,6 +68,12 @@ Array.prototype.oSort = function (key) {
|
|||||||
}
|
}
|
||||||
return this.sort(compareNumbers);
|
return this.sort(compareNumbers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array.prototype.sum = function () {
|
||||||
|
return this.reduce(function (a, b) {
|
||||||
|
return a + b;
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
BigInt.prototype.toJSON = function () { return this.toString() }
|
BigInt.prototype.toJSON = function () { return this.toString() }
|
||||||
|
|
||||||
$.fn.classList = function () { return this[0].className.split(/\s+/); };
|
$.fn.classList = function () { return this[0].className.split(/\s+/); };
|
||||||
|
@ -20,7 +20,7 @@ $(function () {
|
|||||||
* */
|
* */
|
||||||
function initTabsByEle() {
|
function initTabsByEle() {
|
||||||
/*_ytTabInited = [];*/
|
/*_ytTabInited = [];*/
|
||||||
$("[data-tabname][data-target]:not([data-tabrole=child])").each(function (index, value) {
|
$("[data-tabname]:not([data-tabrole=child])").each(function (index, value) {
|
||||||
let tabName = $(value).data("tabname");
|
let tabName = $(value).data("tabname");
|
||||||
if (_ytTabInited.indexOf(tabName) == -1) {
|
if (_ytTabInited.indexOf(tabName) == -1) {
|
||||||
var ytTab = new YT.Tab({ tabName: tabName })
|
var ytTab = new YT.Tab({ tabName: tabName })
|
||||||
@ -56,13 +56,14 @@ class YourTeamTab {
|
|||||||
let clsObj = this;
|
let clsObj = this;
|
||||||
|
|
||||||
// Tab Item 按鈕 click
|
// Tab Item 按鈕 click
|
||||||
$(`[data-tabname=${this.tabName}][data-target]`).off("click").on("click", function (e) {
|
$(`[data-tabname=${this.tabName}]`).off("click").on("click", function (e) {
|
||||||
let target = $(this).data("target");
|
let target = $(this).data("target");
|
||||||
let obj = this;
|
let obj = this;
|
||||||
$(`[data-tabname=${clsObj.tabName}][data-target]:not([data-tabrole=child])`).removeClass("active");
|
$(`[data-tabname=${clsObj.tabName}]:not([data-tabrole=child])`).removeClass("active");
|
||||||
$(obj).addClass("active");
|
$(obj).addClass("active");
|
||||||
// 觸發 yt:tab:change事件
|
// 觸發 yt:tab:change事件
|
||||||
$(obj).trigger("yt:tab:change");
|
$(obj).trigger("yt:tab:change");
|
||||||
|
if (target) {
|
||||||
let tabName = $(target).data("tabname");
|
let tabName = $(target).data("tabname");
|
||||||
if (tabName) {
|
if (tabName) {
|
||||||
// 找出該觸發對象 block
|
// 找出該觸發對象 block
|
||||||
@ -74,6 +75,7 @@ class YourTeamTab {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
267
Frontend/js/yourteam/yourteam.ajax.class_bak.js
Normal file
267
Frontend/js/yourteam/yourteam.ajax.class_bak.js
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
var YourTeam = YourTeam || {};
|
||||||
|
/**
|
||||||
|
* This is a description of the Ajax constructor function.
|
||||||
|
* @class Ajax
|
||||||
|
* @classdesc This is a description of the Ajax class.
|
||||||
|
* @author Darren Chen @2021/02/06
|
||||||
|
* @copyright Darren Chen @Your Team Co., Ltd. 2021
|
||||||
|
*/
|
||||||
|
class Ajax {
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
* @constructor
|
||||||
|
* @param {String} apiUrl API URL. def="".
|
||||||
|
* @param {String} sendData the data object which you will be send. def= null.
|
||||||
|
* @param {Fcnction} successFunction successFunction. def=null.(use def successFunction)
|
||||||
|
* @param {Fcnction} errorFunction errorFunction. def=null.(use def successFunction)
|
||||||
|
* @param {String} type HTTP METHOD. def="GET".
|
||||||
|
* @param {Object} conType content type
|
||||||
|
* @param {String} dataType data format. def="JSON".
|
||||||
|
* @param {String} isAsync the api synchronization. def=false.
|
||||||
|
* @return {Object} this
|
||||||
|
*/
|
||||||
|
constructor(apiUrl = "", sendData = null, successFunction = null, errorFunction = null, type = "GET", isAsync = false, conType = this.contentType.Json, dataType = "JSON") {
|
||||||
|
this.conType = conType;
|
||||||
|
this.apiUrl = apiUrl;
|
||||||
|
this.isAsync = isAsync;
|
||||||
|
this.type = type;
|
||||||
|
this.dataType = dataType;
|
||||||
|
this.sendData = sendData;
|
||||||
|
this.extSuccessFunction = successFunction;
|
||||||
|
/*if (successFunction) this.successFunction = successFunction;*/
|
||||||
|
if (errorFunction) this.errorFunction = errorFunction;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* dataToString
|
||||||
|
* @description convert the data object to string
|
||||||
|
* @param {Object} data API URL. def="".
|
||||||
|
* @return {String} strJsonData
|
||||||
|
*/
|
||||||
|
dataToString = function (data) {
|
||||||
|
let strJsonData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null;
|
||||||
|
return strJsonData;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* beforeSendFunction
|
||||||
|
* @description beforeSendFunction
|
||||||
|
*/
|
||||||
|
beforeSendFunction = function (xhr) {
|
||||||
|
let token = localStorage.getItem("JWT-Authorization");
|
||||||
|
xhr.setRequestHeader('Authorization', "Bearer " + token);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* successFunction
|
||||||
|
* @description successFunction
|
||||||
|
* @param {Object} data the data object from the api return
|
||||||
|
* @return {Object} data
|
||||||
|
*/
|
||||||
|
successFunction = function (data, callback) {
|
||||||
|
debugger
|
||||||
|
if (data && data.unauthorized == 401) {
|
||||||
|
let href = location.href;
|
||||||
|
localStorage.removeItem("JWT-Authorization");
|
||||||
|
if (href.indexOf("localhost:5966") == -1) {
|
||||||
|
location.href = "/login";
|
||||||
|
} else {
|
||||||
|
location.href = "login.html";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (callback) {
|
||||||
|
callback(data);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* errorFunction
|
||||||
|
* @description errorFunction
|
||||||
|
* @param {Object} xhr HTTP STATUS
|
||||||
|
* @param {Object} ajaxOptions the ajax option message
|
||||||
|
* @param {String} thrownError the error message
|
||||||
|
*/
|
||||||
|
errorFunction = function (xhr, ajaxOptions, thrownError) {
|
||||||
|
if (xhr.status != "201" && xhr.status != "204") {
|
||||||
|
console.log(xhr.status);
|
||||||
|
console.log(thrownError);
|
||||||
|
window.alert("執行失敗,請聯絡客服人員。");
|
||||||
|
} else if (xhr.status == "401") {
|
||||||
|
window.alert("登入時間超時,請重新登入!");
|
||||||
|
localStorage.removeItem("JWT-Authorization");
|
||||||
|
location.href = "~/Login/Login";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* completeFunction
|
||||||
|
* @description completeFunction
|
||||||
|
*/
|
||||||
|
completeFunction = function () {
|
||||||
|
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* content type
|
||||||
|
* @description content type
|
||||||
|
*/
|
||||||
|
contentType = {
|
||||||
|
Json: 1,
|
||||||
|
FormData : 2
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* enum
|
||||||
|
* @description enum
|
||||||
|
* @param {Object} eo object
|
||||||
|
* @return {Object} enum
|
||||||
|
*/
|
||||||
|
enums(eo) {
|
||||||
|
var enums = function () { };
|
||||||
|
for (var key in eo) {
|
||||||
|
var enumObject = new enums();
|
||||||
|
enums[key] = eo[key];
|
||||||
|
}
|
||||||
|
return enums;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* send
|
||||||
|
* @description send
|
||||||
|
* @param {Object} conType content type
|
||||||
|
* @param {Object} sendData send data
|
||||||
|
* @param {Function} successFunction the ajax success function
|
||||||
|
* @param {Function} errorFunction the ajax error function
|
||||||
|
* @return {Object} this
|
||||||
|
*/
|
||||||
|
send = function (conType = this.contentType.Json, sendData = null, successFunction = null, errorFunction = null) {
|
||||||
|
|
||||||
|
//if (!CheckMultiSend(this.apiUrl, this.type, this.dataToString(this.sendData))) { //連點防呆
|
||||||
|
// return false;
|
||||||
|
//}
|
||||||
|
if (sendData) {
|
||||||
|
this.sendData = sendData;
|
||||||
|
}
|
||||||
|
if (successFunction) {
|
||||||
|
this.successFunction = successFunction;
|
||||||
|
}
|
||||||
|
if (errorFunction) {
|
||||||
|
this.errorFunction = errorFunction;
|
||||||
|
}
|
||||||
|
if (conType === this.contentType.Json) {
|
||||||
|
$.ajax({
|
||||||
|
url: this.apiUrl,
|
||||||
|
async: this.isAsync,
|
||||||
|
type: this.type,
|
||||||
|
dataType: this.dataType,
|
||||||
|
traditional: true,
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
|
data: this.dataToString(this.sendData),
|
||||||
|
|
||||||
|
//cache: false,
|
||||||
|
//processData: false,
|
||||||
|
|
||||||
|
beforeSend: this.beforeSendFunction,
|
||||||
|
success: (data) => this.successFunction(data, this.extSuccessFunction),
|
||||||
|
error: this.errorFunction,
|
||||||
|
complete: this.completeFunction,
|
||||||
|
statusCode: {
|
||||||
|
201: (data) => this.successFunction(data, this.extSuccessFunction),
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (conType === this.contentType.FormData) {
|
||||||
|
$.ajax({
|
||||||
|
url: this.apiUrl,
|
||||||
|
async: this.isAsync,
|
||||||
|
type: this.type,
|
||||||
|
dataType: this.dataType,
|
||||||
|
|
||||||
|
traditional: true,
|
||||||
|
|
||||||
|
contentType: false,
|
||||||
|
enctype: 'multipart/form-data',
|
||||||
|
data: this.sendData,
|
||||||
|
cache: false,
|
||||||
|
processData: false,
|
||||||
|
beforeSend: this.beforeSendFunction,
|
||||||
|
success: this.successFunction,
|
||||||
|
error: this.errorFunction,
|
||||||
|
complete: this.completeFunction
|
||||||
|
});
|
||||||
|
alert(conType);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
console.error("the content type is null.");
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
YourTeam.Ajax = YourTeam.Ajax || Ajax;
|
||||||
|
|
||||||
|
var ckeckMultiSendArr = [];
|
||||||
|
function CheckMultiSend(url, type, data) {
|
||||||
|
//根據 url type data
|
||||||
|
let text = String(url) + String(type);
|
||||||
|
if (type != "GET") {
|
||||||
|
if (ckeckMultiSendArr.indexOf(text) == -1) {
|
||||||
|
ckeckMultiSendArr.unshift(text);
|
||||||
|
let timer = setInterval(function () {
|
||||||
|
ckeckMultiSendArr.splice(0);
|
||||||
|
clearInterval(timer);
|
||||||
|
}, 500)
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//var YourTeamAjax = {
|
||||||
|
// apiUrl: "",
|
||||||
|
// isAsync: false,
|
||||||
|
// type: "GET",
|
||||||
|
// dataType: "JSON",
|
||||||
|
// sendData: null,
|
||||||
|
// dataToString: function (data) {
|
||||||
|
// let strJsonData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null;
|
||||||
|
// return strJsonData;
|
||||||
|
// },
|
||||||
|
// beforeSendFunction: function () {
|
||||||
|
// $.blockUI({ message: '<h1><img src="/Content/img/loading.gif" style="width:200px;" /> Loding...</h1>' });
|
||||||
|
// },
|
||||||
|
// successFunction: function (data) {
|
||||||
|
// return data;
|
||||||
|
// },
|
||||||
|
// errorFunction: function (xhr, ajaxOptions, thrownError) {
|
||||||
|
// if (xhr.status != "201") {
|
||||||
|
// console.log(xhr.status);
|
||||||
|
// console.log(thrownError);
|
||||||
|
// window.alert("執行失敗,請聯絡YourTeam客服人員。");
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// completeFunction: function () {
|
||||||
|
// $.unblockUI();
|
||||||
|
// },
|
||||||
|
// send: function (sendData = null, successFunction = null, errorFunction = null) {
|
||||||
|
// if (sendData) {
|
||||||
|
// this.sendData = sendData;
|
||||||
|
// }
|
||||||
|
// if (successFunction) {
|
||||||
|
// this.successFunction = successFunction;
|
||||||
|
// }
|
||||||
|
// if (errorFunction) {
|
||||||
|
// this.errorFunction = errorFunction;
|
||||||
|
// }
|
||||||
|
// $.ajax({
|
||||||
|
// url: this.apiUrl,
|
||||||
|
// async: this.isAsync,
|
||||||
|
// type: this.type,
|
||||||
|
// dataType: this.dataType,
|
||||||
|
// traditional: true,
|
||||||
|
// contentType: "application/json; charset=utf-8",
|
||||||
|
// data: this.dataToString(this.sendData),
|
||||||
|
// beforeSend: this.beforeSendFunction,
|
||||||
|
// success: this.successFunction,
|
||||||
|
// error: this.errorFunction,
|
||||||
|
// complete: this.completeFunction,
|
||||||
|
// statusCode: {
|
||||||
|
// 201: this.successFunction
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//};
|
Loading…
Reference in New Issue
Block a user