diff --git a/Frontend/_dashboard.html b/Frontend/_dashboard.html
index 7205100..473449a 100644
--- a/Frontend/_dashboard.html
+++ b/Frontend/_dashboard.html
@@ -240,13 +240,7 @@
var tarElePath = '';
var sysSubList = [];
- var floList = []; //每個樓層
- var subSeviceData = []; //每個設備訂閱點位值
- var allEleDevList = [];
var viewer3DNodeIds = [];
- var elev3DBind = {};
- var elev3DOption = {};
- var elev3DObj = [];
var timeOuters = [];
var eveDayElecChart = null;
var eveWeekElecChart = null;
@@ -288,25 +282,25 @@
$(document).ready(function () {
show3DModel();
getSubList();
- getElevData();
getFirstEletric();
- subDeviceSetStatus();
timeOutGetData();
});
function demoSubList() {
let isExiNames = $("#sysSubBtnList .dev-group button[id^=sysSubCardBtn]").toArray().map(x => $(x).text());
let strHtml = ``;
+
$.each(tempSysSubText, (idx, obj) => {
- if (isExiNames.indexOf(obj.text) == -1) {
+ if (isExiNames.indexOf(obj.text) == -1 && $("#sysSubBtnList .dev-group").length < 12) {
let iconObj = sysIconList.filter(x => x.mainSys == obj.mainSys && x.subSys == obj.subSys)[0];
- strHtml += `
+ strHtml = `
${obj.text}
`;
+ $("#sysSubBtnList").append(strHtml);
}
})
- $("#sysSubBtnList").append(strHtml);
+
}
//取得 左下方 各系統小類
@@ -386,10 +380,8 @@
let yesterday = displayDate(getTimeByType(null, -1), "date").replaceAll("/", "-") + "T00:00:00";
let tomorrow = displayDate(getTimeByType(null, 1), "date").replaceAll("/", "-") + "T00:00:00";
-
-
// 今日用電量
- getElectricMeterDayDataByBaja(devNum + "_kWh_tot", n4Sup, today, tomorrow, (data) => {
+ getElectricMeterDayDataByBaja(devNum + "_KWH", n4Sup, today, tomorrow, (data) => {
let result = data?.data[0]?.sum;
result = result ? parseFloat(result).toFixed(2) : 0;
$("#todayUseElec").text(result);
@@ -397,7 +389,7 @@
})
// 今日用電量 (每小時)
- getElectricMeterHourDataByBaja(devNum + "_kWh_tot", n4Sup, yesterday, tomorrow, (data) => {
+ getElectricMeterHourDataByBaja(devNum + "_KWH", n4Sup, yesterday, tomorrow, (data) => {
let todayData = data.data.filter(x => x.timestamp.$date.$year == getTimeByType("year") && x.timestamp.$date.$month == getTimeByType("month") && x.timestamp.$date.$day == getTimeByType("date"));
let yesData = data.data.filter(x => x.timestamp.$date.$year == getTimeByType("year", -1) && x.timestamp.$date.$month == getTimeByType("month", -1) && x.timestamp.$date.$day == getTimeByType("date", -1));
@@ -406,7 +398,7 @@
})
// 昨日用電量
- getElectricMeterDayDataByBaja(devNum + "_kWh_tot", n4Sup, yesterday, today, (data) => {
+ getElectricMeterDayDataByBaja(devNum + "_KWH", n4Sup, yesterday, today, (data) => {
let result = data?.data[0]?.sum;
result = result ? parseFloat(result).toFixed(2) : 0;
$("#yesUseElec").text(result);
@@ -414,7 +406,7 @@
})
// 本週與上週用電量 (每天)
- getElectricMeterDayDataByBaja(devNum + "_kWh_tot", n4Sup, prevTwoWeek, tomorrow, (data) => {
+ getElectricMeterDayDataByBaja(devNum + "_KWH", n4Sup, prevTwoWeek, tomorrow, (data) => {
let curDay = (new Date()).getDay() == 0 ? 7 : (new Date()).getDay();
let curWeekData = data.data.filter(x => strToDate(displayDate(new Date(), "date"), null, 0 - (curDay - 1)) <= strToDate(x.timestamp.$cEncStr));
let prevWeekData = data.data.filter(x => strToDate(displayDate(new Date(), "date"), null, 0 - 7 - (curDay - 1)) <= strToDate(x.timestamp.$cEncStr) && strToDate(new Date(), null, 0 - 7) >= strToDate(x.timestamp.$cEncStr));
@@ -746,32 +738,6 @@
})
}
- // 取得電梯資料
- function getElevData() {
- let url = baseApiUrl + "/api/Device/GetDeviceList";
- let sendData = {
- sub_system_tag: "EL",
- building_tag: pageAct.buiTag,
- };
- objSendData.Data = sendData;
- ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
- if (!res || res.code != "0000" || !res.data) {
-
- } else {
- $.each(res.data, (index, floObj) => {
- let masters = floObj.device_list.map(x => x.device_number?.split("_")[5]).Distinct();
- $.each(masters, (idx, master) => {
- floObj.device_list.filter(x => x.device_number?.split("_")[5] == master).forEach((devObj) => {
- allEleDevList.push(devObj);
- allEleDevList = allEleDevList.oSort("priority");
- })
- })
- })
-
- }
- }, null, "POST").send();
- }
-
//function timeOutGetData() {
// let timeOut3s = setInterval(() => {
// getAlarmSub();
@@ -784,155 +750,24 @@
function show3DModel() {
launchViewerNoTools(pageAct.urn, (viewer) => {
- let nodeIds = allEleDevList.filter(x => !isNaN(parseInt(x.forge_dbid))).map(x => { return { devNum: x.device_number, nodeId: parseInt(x.forge_dbid) } });
+ let elevOption = {
+ selector: "#forgeViewer",
+ viewer: viewer,
+ ordPath: {
+ "area_tag": pageAct.AreaTag,
+ "building_tag": pageAct.buiTag,
+ },
+ }
- $.each(nodeIds, (idx, item) => {
- elev3DBind[item.devNum] = item.nodeId;
- })
- nodeIds = nodeIds.map(x => x.nodeId);
- $.each(nodeIds, function (idx, node) {
- let options = {
- element: $("#forgeViewer"),
- viewer: viewer,
- nodeId: node,
- floorHeight: elev3DOption.floorHeight ?? [],
- inited: function () {
-
- }
- }
- let elevator3DObj = new elevator3D(options);
- let devNum = Object.keys(elev3DBind).filter(x => elev3DBind[x] == node)[0];
- let subData = subSeviceData.filter(x => x.device_number == devNum)[0];
-
- if (elev3DObj.filter(x => x.nodeId == node).length == 0) {
- elev3DObj.push({ id: devNum, nodeId: node, obj: elevator3DObj });
- }
-
- if (subData) {
- let elevObj = elev3DObj.filter(x => x.nodeId == node)[0];
- if (!elevObj.id) {
- elevObj.id = devNum;
- }
- elevObj.obj = Object.assign(elevObj, elevator3DObj ?? {})
- elevObj.obj.init(function () {
- let frags = elevObj.obj.fragProxys.filter(x => x.nodeId == node);
- frags.forEach((fragProxy) => {
- fragProxy.frag.position.z = elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
- fragProxy.frag.updateAnimTransform()
- })
- elevObj.obj.viewer.impl.sceneUpdated(true);
- })
-
-
- }
- })
+ // 電梯移動訂閱程序載入
+ let forge3DElev = new Forge3DElevFull(elevOption);
+ forge3DElev.bajaEndCallback = function () {
+ endPageLoading();
+ }
+ forge3DElev.init();
});
}
- function subDeviceSetStatus() {
- let subOrdPath = {
- "area_tag": pageAct.AreaTag,
- "building_tag": pageAct.buiTag,
- "system_tag": "ELEV",
- "name_tag": "EL",
- };
- myBaja = new subscriptionDevices();
- myBaja.setSubscribeDevicesByBql(subOrdPath);
- myBaja.setSubscribeDevicesCallBack(function (data) {
-
- if (allEleDevList.length == 0) {
- return false;
- }
- data.device_number = data.device_number_full;
- let matchDevice = allEleDevList.filter(x => x.device_number == data.device_number)[0];
- let master = matchDevice?.device_number.split("_")[5];
-
- if (!matchDevice) {
- return;
- }
-
- if (data.point_name == "CP") {
- if (elev3DObj.length != 0) {
- let elevObj = elev3DObj.filter(x => x.nodeId == elev3DBind[matchDevice.device_number])[0];
- if (elevObj && elevObj.id) {
- elevObj.obj.setElevatorFloor(data.value)
- elevObj.obj.movElevator();
- }
- }
- }
-
- //將訂閱值塞入 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;
- }
-
- });
- myBaja.setSubscribeDeviceEndCallBack(function (data) {
-
- let devNumArr = data.map(x => { return { devNum: x.device_number_full, priority: allEleDevList.filter(y => y.device_number == x.device_number_full)[0]?.priority } }).DistinctBy("devNum");
- devNumArr = devNumArr.oSort("priority");
- $.each(devNumArr, (idx, devObj) => {
- devNum = devObj.devNum;
- let subData = subSeviceData.filter(x => x.device_number == devNum)[0];
-
- if (subData) {
- //// 左側 3D 電梯 nodeID 與 device_number match
- //if (Object.keys(elev3DBind).indexOf(devNum) == -1 && viewer3DNodeIds.length != 0) {
- // elev3DBind[devNum] = viewer3DNodeIds[Object.keys(elev3DBind).length];
- //}
- // 左側 3D 電梯 Viewer Option 設置
- /*elev3DOption.nodes = Object.keys(elev3DBind).map(x => elev3DBind[x]);*/
-
- floList = Object.keys(subData).filter(x => x.startsWith("SP_FLS_")).map(x => x?.split("SP_FLS_")[1]);
-
- elev3DOption.nodeId = elev3DBind[devNum];
- elev3DOption.floorHeight = floList.map((x) => { return { floor: x } });
- elev3DOption.floorHeight.forEach((floObj, idx) => {
- if (floObj.floor.startsWith("B")) {
- let floor = parseInt(floObj.floor.split("B")[1].split("F")[0]);
- floObj.height = floor * -13;
- } else {
- let floor = parseInt(floObj.floor.split("F")[0]);
- if (floor == 1) {
- floObj.height = 0;
- } else if (floor == 2) {
- floObj.height = 14.75;
- } else {
- floObj.height = (14.75 + ((floor - 2) * 9.75));
- }
- }
- })
-
- if (elev3DObj.length != 0) {
- let elevObj = elev3DObj.filter(x => x.nodeId == elev3DBind[devNum])[0];
- if (!elevObj.id) {
- elevObj.id = devNum;
- }
- elevObj.obj = Object.assign(elevObj.obj, elev3DOption);
- elevObj.obj.init(function () {
- let frags = elevObj.obj.fragProxys.filter(x => x.nodeId == elev3DBind[devNum]);
- frags.forEach((fragProxy) => {
- fragProxy.frag.position.z = elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
- fragProxy.frag.updateAnimTransform();
- })
- elevObj.obj.viewer.impl.sceneUpdated(true);
- });
- }
- }
- })
-
- })
- }
-
-
$(window).on("timeout:5m", function () {
console.log("五分鐘更新")
getElectricBaja();
diff --git a/Frontend/css/site.css b/Frontend/css/site.css
index a7e4001..2fbd50b 100644
--- a/Frontend/css/site.css
+++ b/Frontend/css/site.css
@@ -223,6 +223,22 @@ input:-webkit-autofill {
grid-template-columns: var(--c-grid-temp-col);
}
+.vakata-context, .vakata-context ul { background-color: #3f3f3f; box-shadow: 2px 2px 2px #111111; }
+.vakata-context li > a { color: white; text-shadow: 1px 1px 0 #4b4b4b; }
+.vakata-context .vakata-context-hover > a { background-color: #666666; box-shadow: 0 0 2px #2f2f2f; }
+.vakata-context li > a:hover { background-color: #636363; box-shadow: 0 0 2px #2f2f2f; }
+
+.yt-left-navbar { position: fixed; left: 0; top: 0; height: 100%; z-index: 10; background-color: var(--theme-fusion-900); width: auto; max-width: 300px; margin-top: 4.125rem; }
+.yt-navbar-content ul { padding: 1rem 0rem; list-style-type: none; }
+.yt-navbar-content ul li { position: relative; display: flex; flex-wrap: wrap; }
+.yt-navbar-content ul li a { font-size: 0.9rem; padding: 0.75rem 2rem; position: relative; width: 100%; }
+.yt-navbar-content ul li a:hover { background-color: var(--theme-fusion-600); }
+.yt-navbar-content ul li a:active, .yt-navbar-content ul li a.active { background-color: var(--theme-fusion-500); }
+
+@media screen and (max-width: 576px){
+ .yt-left-navbar { width: 100%; max-width: 100%; margin-top: 0; }
+}
+
@keyframes lds-ring {
0% {
transform: rotate(0deg);
@@ -287,14 +303,10 @@ input:-webkit-autofill {
}
}
/* ================================================================ */
-/* 單一方法 */
-/* ================================================================ */
-
-
-/* cursor */
-.cur-def {
- cursor: default !important;
-}
+ /* 單一方法 */
+ /* ================================================================ */
+ /* cursor */
+ .cur-def { cursor: default !important; }
.cur-poi {
cursor: pointer !important;
diff --git a/Frontend/index.html b/Frontend/index.html
index c61e9df..e8a92ed 100644
--- a/Frontend/index.html
+++ b/Frontend/index.html
@@ -38,7 +38,7 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
-
+
@@ -133,1298 +133,22 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li