[Frontend] 修改系統監控為下拉選單 | 系統監控側邊選單改固定且為小類|校園總覽及電表塗改為滿版

This commit is contained in:
Celeste 2023-08-21 17:37:26 +08:00
parent 6e3bf25510
commit 8eed17987b
8 changed files with 3960 additions and 4060 deletions

File diff suppressed because it is too large Load Diff

View File

@ -15,53 +15,41 @@
<div class="col-sm-12 col-xl-4">
<div class="row">
<div class="col-sm-6 col-xl-6">
<div
class="p-3 bg-primary-300 rounded overflow-hidden position-relative text-white mb-g"
>
<div class="p-3 bg-primary-300 rounded overflow-hidden position-relative text-white mb-g">
<div class="">
<h3 class="display-4 d-block l-h-n m-0 fw-500">
<span id="todayUseElec">--</span>
<small class="m-0 l-h-n">今日用電量 kWH</small>
</h3>
</div>
<i
class="fal fa-user position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n1"
style="font-size: 6rem"
></i>
<i class="fal fa-user position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n1"
style="font-size: 6rem"></i>
</div>
</div>
<div class="col-sm-6 col-xl-6">
<div
class="p-3 bg-warning-400 rounded overflow-hidden position-relative text-white mb-g"
>
<div class="p-3 bg-warning-400 rounded overflow-hidden position-relative text-white mb-g">
<div class="">
<h3 class="display-4 d-block l-h-n m-0 fw-500">
<span id="yesUseElec">--</span>
<small class="m-0 l-h-n">昨日用電量 kWH</small>
</h3>
</div>
<i
class="fal fa-gem position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n4"
style="font-size: 6rem"
></i>
<i class="fal fa-gem position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n4"
style="font-size: 6rem"></i>
</div>
</div>
<div class="col-lg-12">
<div
id="panel-2"
class="panel"
data-panel-sortable
data-panel-collapsed
data-panel-close
>
<div id="panel-2"
class="panel"
data-panel-sortable
data-panel-collapsed
data-panel-close>
<div class="panel-hdr">
<h2>昨日/今日用電比較 (kWh)</h2>
</div>
<div class="panel-container show">
<div class="panel-content poisition-relative">
<div
class="p-1 position-absolute pos-right pos-top mt-3 mr-3 z-index-cloud d-flex align-items-center justify-content-center"
>
<div class="p-1 position-absolute pos-right pos-top mt-3 mr-3 z-index-cloud d-flex align-items-center justify-content-center">
<!--<div class="border-faded border-top-0 border-left-0 border-bottom-0 py-2 pr-4 mr-3 hidden-sm-down">
<div class="text-right fw-500 l-h-n d-flex flex-column">
<div class="h3 m-0 d-flex align-items-center justify-content-end">
@ -93,45 +81,35 @@
<div class="col-sm-12 col-xl-4">
<div class="row">
<div class="col-sm-6 col-xl-6">
<div
class="p-3 bg-success-200 rounded overflow-hidden position-relative text-white mb-g"
>
<div class="p-3 bg-success-200 rounded overflow-hidden position-relative text-white mb-g">
<div class="">
<h3 class="display-4 d-block l-h-n m-0 fw-500">
<span id="insPower">--</span>
<small class="m-0 l-h-n">即時功率 kW</small>
</h3>
</div>
<i
class="fal fa-lightbulb position-absolute pos-right pos-bottom opacity-15 mb-n5 mr-n6"
style="font-size: 8rem"
></i>
<i class="fal fa-lightbulb position-absolute pos-right pos-bottom opacity-15 mb-n5 mr-n6"
style="font-size: 8rem"></i>
</div>
</div>
<div class="col-sm-6 col-xl-6">
<div
class="p-3 bg-info-200 rounded overflow-hidden position-relative text-white mb-g"
>
<div class="p-3 bg-info-200 rounded overflow-hidden position-relative text-white mb-g">
<div class="">
<h3 class="display-4 d-block l-h-n m-0 fw-500">
<span id="insPowerPer">--</span>
<small class="m-0 l-h-n">即時契約容量占比 %</small>
</h3>
</div>
<i
class="fal fa-globe position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n4"
style="font-size: 6rem"
></i>
<i class="fal fa-globe position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n4"
style="font-size: 6rem"></i>
</div>
</div>
<div class="col-lg-12">
<div
id="panel-3"
class="panel"
data-panel-sortable
data-panel-collapsed
data-panel-close
>
<div id="panel-3"
class="panel"
data-panel-sortable
data-panel-collapsed
data-panel-close>
<div class="panel-hdr">
<h2>本週/上週用電比較 (kWh)</h2>
</div>
@ -204,16 +182,12 @@
</div>
<div class="panel-container h-100 show">
<div class="panel-content poisition-relative p-0 row p-0 h-100">
<div
class="col-12 mb-2 position-relative row m-0 justify-content-center"
style="max-height: 150px"
>
<div class="col-12 mb-2 position-relative row m-0 justify-content-center"
style="max-height: 150px">
<canvas class="chart" id="errRecChart"></canvas>
</div>
<div
class="col-12 mb-2 position-relative row m-0 justify-content-center"
style="max-height: 150px"
>
<div class="col-12 mb-2 position-relative row m-0 justify-content-center"
style="max-height: 150px">
<canvas class="chart" id="errChkChart"></canvas>
</div>
</div>
@ -227,16 +201,12 @@
</div>
<div class="panel-container h-100 show">
<div class="panel-content poisition-relative row p-0 h-100 p-0">
<div
class="col-12 mb-2 position-relative row m-0 justify-content-center"
style="max-height: 150px"
>
<div class="col-12 mb-2 position-relative row m-0 justify-content-center"
style="max-height: 150px">
<canvas class="chart" id="worOrdErrChart"></canvas>
</div>
<div
class="col-12 mb-2 position-relative row m-0 justify-content-center"
style="max-height: 150px"
>
<div class="col-12 mb-2 position-relative row m-0 justify-content-center"
style="max-height: 150px">
<canvas class="chart" id="worOrdFinChart"></canvas>
</div>
</div>
@ -267,8 +237,6 @@
};
var contractCapacity = 0;
$(document).ready(function () {
$(loadEle).Loading("start");
$(loadEle).Loading("close");
@ -292,10 +260,10 @@
(x) => x.mainSys == obj.mainSys && x.subSys == obj.subSys
)[0];
strHtml = `<div class="btn-group btn-group-lg col-lg-6 mb-4 dev-group">
<button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4 d-flex jusity-content-center">
<button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4 d-flex jusity-content-center disabled" disabled>
<img src="${iconObj.iconClass}" class="w-100"></img>
</button>
<button id="sysSubCardBtn${obj.subSys}" type="button" class="btn btn-secondary" data-id="${obj.subSys}" style="font-size: 20px">${obj.text}</button>
<button id="sysSubCardBtn${obj.subSys}" type="button" class="btn btn-secondary disabled" disabled data-id="${obj.subSys}" style="font-size: 20px">${obj.text}</button>
</div>`;
$("#sysSubBtnList").append(strHtml);
}
@ -331,10 +299,10 @@
x.subSys == subSysObj.sub_system_tag
)[0]?.iconClass;
strHtml += `<div class="btn-group btn-group-lg col-lg-6 mb-4 dev-group" data-id="/${pageAct.AreaTag}/${pageAct.buiTag}/${mainSysObj.main_system_tag}/${subSysObj.sub_system_tag}">
<button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4">
<button name="topFunBtn" data-page="alert" type="button" class="btn btn-secondary col-4" >
<img src="${iconClass}" class="w-100 "></img>
</button>
<button id="sysSubCardBtn${subSysObj.sub_system_tag}" type="button" class="btn btn-secondary" data-id="${subSysObj.sub_system_tag}" style="font-size: 20px">${subSysObj.full_name}</button>
<button id="sysSubCardBtn${subSysObj.sub_system_tag}" type="button" class="btn btn-secondary" data-id="${subSysObj.sub_system_tag}" style="font-size: 20px">${subSysObj.full_name}</button>
</div>`;
});
});
@ -349,7 +317,7 @@
// 取得 自動須量
function getAutDemVal() {
let url = baseApiUrl + "/api/Dashboard/GetContractValue";
let sendData = pageAct.buiTag
let sendData = pageAct.buiTag;
objSendData.Data = sendData;
ytAjax = new YourTeam.Ajax(
url,
@ -358,7 +326,7 @@
if (!res || res.code != "0000" || !res.data) {
} else {
contractCapacity = (res.data || [])[0]?.contract_value ?? 0;
getFirstEletric()
getFirstEletric();
}
},
null,
@ -432,18 +400,12 @@
"T00:00:00";
// 今日用電量
getElectricMeterDayDataByBaja(
devNum,
n4Sup,
today,
tomorrow,
(data) => {
let result = data?.data[0]?.sum;
result = result ? parseFloat(result).toFixed(2) : 0;
$("#todayUseElec").text(result);
chkBajaLoaded();
}
);
getElectricMeterDayDataByBaja(devNum, n4Sup, today, tomorrow, (data) => {
let result = data?.data[0]?.sum;
result = result ? parseFloat(result).toFixed(2) : 0;
$("#todayUseElec").text(result);
chkBajaLoaded();
});
// 今日用電量 (每小時)
getElectricMeterHourDataByBaja(
@ -470,18 +432,12 @@
);
// 昨日用電量
getElectricMeterDayDataByBaja(
devNum,
n4Sup,
yesterday,
today,
(data) => {
let result = data?.data[0]?.sum;
result = result ? parseFloat(result).toFixed(2) : 0;
$("#yesUseElec").text(result);
chkBajaLoaded();
}
);
getElectricMeterDayDataByBaja(devNum, n4Sup, yesterday, today, (data) => {
let result = data?.data[0]?.sum;
result = result ? parseFloat(result).toFixed(2) : 0;
$("#yesUseElec").text(result);
chkBajaLoaded();
});
// 本週與上週用電量 (每天)
getElectricMeterDayDataByBaja(
@ -499,9 +455,9 @@
let prevWeekData = data.data.filter(
(x) =>
strToDate(displayDate(new Date(), "date"), null, 1 - 14) <=
strToDate(x.timestamp.$cEncStr) &&
strToDate(x.timestamp.$cEncStr) &&
strToDate(new Date(), null, 1 - 7) >=
strToDate(x.timestamp.$cEncStr)
strToDate(x.timestamp.$cEncStr)
);
chartEveWeeksElec(curWeekData, prevWeekData);
@ -511,7 +467,7 @@
// 異常數量與復歸數量
getAlarmCountByBaja((aData) => {
console.log("aData",aData)
console.log("aData", aData);
chartDataCnt.alarmCnt = aData;
chkBajaLoaded();
});
@ -988,7 +944,7 @@
}
function show3DModel() {
if(typeof launchViewerNoTools != "undefined"){
if (typeof launchViewerNoTools != "undefined") {
launchViewerNoTools(
pageAct.urn,
(viewer) => {
@ -1024,6 +980,10 @@
onEvent("click", "button[id^=sysSubCardBtn]", function () {
let subSysTag = $(this).data("id");
$(`#subSysBtn${subSysTag}[data-building-tag='${buildingTagOnJquery(pageAct.buiTag)}']`).click();
$(
`#subSysBtn${subSysTag}[data-building-tag='${buildingTagOnJquery(
pageAct.buiTag
)}']`
).click();
});
</script>

View File

@ -1,9 +1,9 @@

<div class="container-fluid">
<div class="row bg-dark align-items-center">
<label id="sysSubText" class=" mx-5 mb-0 fs-1-05"></label>
<div style="height:85vh" class="col-12 p-0">
<iframe src="/ord?file:^px/AllMeter.px|view:?fullScreen=true" width="100%" height="100%" style="zoom:0.1"></iframe>
</div>
<div class="row bg-dark align-items-center">
<label id="sysSubText" class=" mx-5 mb-0 fs-1-05"></label>
<div style="height:91vh" class="col-12 p-0">
<iframe id="homeIframe" src="/ord?file:^px/AllMeter.px|view:?fullScreen=true" width="100%" height="100%" style="zoom:0.1"></iframe>
</div>
</div>
</div>
</div>

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,11 @@

<style></style>
<div class="container-fluid">
<div class="row bg-dark align-items-center">
<label id="sysSubText" class=" mx-5 mb-0 fs-1-05"></label>
<div style="height:85vh" class="col-12">
<iframe src="/ord?file:^px/Home.px|view:?fullScreen=true" width="100%" height="100%"></iframe>
</div>
<div class="row bg-dark align-items-center">
<label id="sysSubText" class="mx-5 mb-0 fs-1-05"></label>
<div style="height: 90vh" class="col-12">
<iframe src="/ord?file:^px/Home.px|view:?fullScreen=true"
width="100%"
height="100%"></iframe>
</div>
</div>
</div>
</div>

View File

@ -1,65 +1,79 @@

<div class="container-fluid">
<div class="row bg-dark align-items-center">
<label id="sysSubText" class=" mx-5 mb-0 fs-1-05"></label>
<div class="btn-group my-1" id="floList">
<div class="container-fluid px-0">
<div class="row no-gutters" style="min-height: 90vh;">
<div class="col-1">
<aside id="sysMonNavbar" class="w-100 yt-navbar yt-left-navbar h-100 mt-0">
<div class="yt-navbar-content">
<ul id="sysMonBtnList"></ul>
</div>
</aside>
</div>
<div class="col-11">
<div class="container-fluid">
<div class="row bg-dark align-items-center">
<label id="sysSubText" class="mx-5 mb-0 fs-1-05"></label>
<div class="btn-group my-1" id="floList"></div>
</div>
</div>
<main id="js-page-content" role="main" class="page-content"></main>
</div>
</div>
</div>
<main id="js-page-content" role="main" class="page-content">
</main>
<script>
var floList = [];
$(function () {
$("#sysSubText").text(pageAct.buiName +"/"+pageAct.sysSubName);
getFloList();
})
var floList = [];
onEvent("yt:tab:change", "[name=floBtn]", function () {
$.each(tolSubList, (idx, sub) => {
sub.unsubscribeAll();
sub.detach();
})
tolSubList=[];
pageAct.floTag = $(this).data("id");
pageAct.floGuid = $(this).data("guid");
if ($(this).data("id") == "all") {
pageAct.floTag = null;
pageAct.floGuid = null;
$("#js-page-content").load("_sysMonAll.html", loadCallback);
} else {
$("#js-page-content").load("_sysMonFloor.html", loadCallback);
}
})
$(function () {
$("#sysSubText").text(pageAct.buiName + "/" + pageAct.sysSubName);
getSysMonBtnList();
getFloList();
});
onEvent("change", "#buiList", function (e, actEle) {
getFloList();
})
function getFloList() {
let url = baseApiUrl + "/api/Device/GetFloor";
let sendData = { building_tag: pageAct.buiTag, sub_system_tag: pageAct.sysSubTag };
objSendData.Data = sendData;
ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
if (!res || res.code != "0000" || !res.data) {
} else {
let strHtml = `<button name="floBtn" data-id="all" type="button" class="btn btn-secondary waves-effect waves-themed btn-sm-2" data-tabname="floor" data-target="all">總覽</button>`;
$.each(res.data, (index, floObj) => {
strHtml += `<button name="floBtn" data-id="${floObj.floor_tag}" data-guid="${floObj.floor_guid}" class="btn btn-secondary waves-effect waves-themed btn-sm-2" data-tabname="floor" data-target="${floObj.floor_tag}">${floObj.floor_tag}</button>`;
})
$("#floList").html(strHtml);
floList = res.data;
var ytTab = new YT.Tab({ tabName: "floor" })
}
}, null, "POST").send();
onEvent("yt:tab:change", "[name=floBtn]", function () {
$.each(tolSubList, (idx, sub) => {
sub.unsubscribeAll();
sub.detach();
});
tolSubList = [];
pageAct.floTag = $(this).data("id");
pageAct.floGuid = $(this).data("guid");
if ($(this).data("id") == "all") {
pageAct.floTag = null;
pageAct.floGuid = null;
$("#js-page-content").load("_sysMonAll.html", loadCallback);
} else {
$("#js-page-content").load("_sysMonFloor.html", loadCallback);
}
</script>
});
onEvent("change", "#buiList", function (e, actEle) {
getFloList();
});
function getFloList() {
let url = baseApiUrl + "/api/Device/GetFloor";
let sendData = {
building_tag: pageAct.buiTag,
sub_system_tag: pageAct.sysSubTag,
};
objSendData.Data = sendData;
ytAjax = new YourTeam.Ajax(
url,
objSendData,
function (res) {
if (!res || res.code != "0000" || !res.data) {
} else {
let strHtml = `<button name="floBtn" data-id="all" type="button" class="btn btn-secondary waves-effect waves-themed btn-sm-2" data-tabname="floor" data-target="all">總覽</button>`;
$.each(res.data, (index, floObj) => {
strHtml += `<button name="floBtn" data-id="${floObj.floor_tag}" data-guid="${floObj.floor_guid}" class="btn btn-secondary waves-effect waves-themed btn-sm-2" data-tabname="floor" data-target="${floObj.floor_tag}">${floObj.floor_tag}</button>`;
});
$("#floList").html(strHtml);
floList = res.data;
var ytTab = new YT.Tab({ tabName: "floor" });
}
},
null,
"POST"
).send();
}
</script>

File diff suppressed because it is too large Load Diff

View File

@ -95,7 +95,10 @@ function setDropdownItem(menuEle) {
let actText = $(menuEle).find(".dropdown-item.active").first().text();
let actEleId = $(menuEle).prop("id");
$(`.dropdown-toggle[data-target=${actEleId}]`).text(actText);
if (actEleId) {
$(`.dropdown-toggle[data-target=${actEleId}]`).text(actText);
}
/*actChaCallback($(menuEle).find(".dropdown-item.active"))*/
$(menuEle).trigger("active:change", $(menuEle).find(".dropdown-item.active"));
@ -1248,42 +1251,62 @@ class Forge3DSensor {
}
}
function setTopBuildingText(){
$(".top-building-text-container").load("_topBuildingText.html",function(){
function setTopBuildingText() {
$(".top-building-text-container").load("_topBuildingText.html", function () {
})
}
function buildingTagOnJquery(building_tag){
let frontSyntax = building_tag.slice(0,2);
if(frontSyntax == "$3"){
return building_tag.slice(2,building_tag.length);
function buildingTagOnJquery(building_tag) {
let frontSyntax = building_tag.slice(0, 2);
if (frontSyntax == "$3") {
return building_tag.slice(2, building_tag.length);
}
return building_tag;
}
function buildingTagOnProcess(building_tag){
if(!isNaN(parseInt(building_tag.slice(0,1)))){
function buildingTagOnProcess(building_tag) {
if (!isNaN(parseInt(building_tag.slice(0, 1)))) {
building_tag = "$3" + building_tag;
}
return building_tag;
}
function deviceNumber(devNum){
if(devNum.includes("$3")){
devNum = devNum.replaceAll("$3","");
function deviceNumber(devNum) {
if (devNum.includes("$3")) {
devNum = devNum.replaceAll("$3", "");
}
return devNum;
}
function deviceNumberOnProcess(devNum){
if(devNum.includes("/")){
function deviceNumberOnProcess(devNum) {
if (devNum.includes("/")) {
tags = devNum.split("/");
buildingTag = tags[1];
buildingTag = buildingTagOnProcess(buildingTag);
devNum = tags[0] + "/" + buildingTag + "/" + tags.slice(2,tags.length).join("/")
devNum = tags[0] + "/" + buildingTag + "/" + tags.slice(2, tags.length).join("/")
}
return devNum;
}
function convertToBase64(imagePath, callback) {
// 創建一個新的 FileReader 物件
const reader = new FileReader();
// 當 FileReader 讀取完成時的處理函數
reader.onloadend = () => {
if (typeof callback === 'function') {
// 從 result 中獲取 base64 編碼的圖像數據
const base64String = reader.result.split(',')[1];
callback(base64String);
}
};
// 讀取圖像文件
fetch(imagePath)
.then((response) => response.blob())
.then((blob) => reader.readAsDataURL(blob))
.catch((error) => console.error('Error:', error));
}