[Frontend][儀錶板] 昨日用電量、今日用電量、即時功率 baja 串接 | [系統監控] 電梯 3D 移動 第二次之後不動問題解決
This commit is contained in:
		
							parent
							
								
									38e81cd8c2
								
							
						
					
					
						commit
						22e68815a6
					
				@ -9,7 +9,7 @@
 | 
				
			|||||||
                    <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="">
 | 
					                        <div class="">
 | 
				
			||||||
                            <h3 class="display-4 d-block l-h-n m-0 fw-500">
 | 
					                            <h3 class="display-4 d-block l-h-n m-0 fw-500">
 | 
				
			||||||
                                560
 | 
					                                <span id="todayUseElec"></span>
 | 
				
			||||||
                                <small class="m-0 l-h-n">今日用電量 kWH</small>
 | 
					                                <small class="m-0 l-h-n">今日用電量 kWH</small>
 | 
				
			||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
@ -20,7 +20,7 @@
 | 
				
			|||||||
                    <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="">
 | 
					                        <div class="">
 | 
				
			||||||
                            <h3 class="display-4 d-block l-h-n m-0 fw-500">
 | 
					                            <h3 class="display-4 d-block l-h-n m-0 fw-500">
 | 
				
			||||||
                                6560
 | 
					                                <span id="yesUseElec"></span>
 | 
				
			||||||
                                <small class="m-0 l-h-n">昨日用電量</small>
 | 
					                                <small class="m-0 l-h-n">昨日用電量</small>
 | 
				
			||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
@ -69,7 +69,7 @@
 | 
				
			|||||||
                    <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="">
 | 
					                        <div class="">
 | 
				
			||||||
                            <h3 class="display-4 d-block l-h-n m-0 fw-500">
 | 
					                            <h3 class="display-4 d-block l-h-n m-0 fw-500">
 | 
				
			||||||
                                9,218
 | 
					                                <span id="insPower"></span>
 | 
				
			||||||
                                <small class="m-0 l-h-n">即時功率</small>
 | 
					                                <small class="m-0 l-h-n">即時功率</small>
 | 
				
			||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
@ -162,7 +162,7 @@
 | 
				
			|||||||
                            </h2>
 | 
					                            </h2>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="panel-container show">
 | 
					                        <div class="panel-container show">
 | 
				
			||||||
                            <div class="panel-content poisition-relative">
 | 
					                            <div class="panel-content poisition-relative p-0">
 | 
				
			||||||
                                <!--<div class="pb-5 pt-3">
 | 
					                                <!--<div class="pb-5 pt-3">
 | 
				
			||||||
                                    <div class="d-flex mr-4">
 | 
					                                    <div class="d-flex mr-4">
 | 
				
			||||||
                                        <div class="mr-2">
 | 
					                                        <div class="mr-2">
 | 
				
			||||||
@ -174,15 +174,15 @@
 | 
				
			|||||||
                                        </div>
 | 
					                                        </div>
 | 
				
			||||||
                                    </div>
 | 
					                                    </div>
 | 
				
			||||||
                                </div>-->
 | 
					                                </div>-->
 | 
				
			||||||
                                <div class="col-12 mb-2 position-relative">
 | 
					                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center">
 | 
				
			||||||
                                    <span class="text-center position-absolute t-white" style="top:83px;left:45px;">異常數量<br>18</span>
 | 
					                                    <span class="text-center position-absolute t-white" style="top:25%;left:27%;">異常數量<br>18</span>
 | 
				
			||||||
                                    <img src="img/u110.png" class="w-100">
 | 
					                                    <img src="img/u110.png" class="w-50">
 | 
				
			||||||
                                    <span class="text-center position-absolute t-white" style="top:116px;left:142px;">賦歸數量<br>28</span>
 | 
					                                    <span class="text-center position-absolute t-white" style="top:42%;left:51%;">賦歸數量<br>28</span>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-12 mb-2 position-relative">
 | 
					                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center">
 | 
				
			||||||
                                    <span class="text-center position-absolute t-white" style="top:120px;left:37px;">已確認異常<br>8</span>
 | 
					                                    <span class="text-center position-absolute t-white" style="top:43%;left:24%;">已確認異常<br>8</span>
 | 
				
			||||||
                                    <img src="img/u106.png" class="w-100">
 | 
					                                    <img src="img/u106.png" class="w-50">
 | 
				
			||||||
                                    <span class="text-center position-absolute t-white" style="top:100px;left:140px;">未確認異常<br>6</span>
 | 
					                                    <span class="text-center position-absolute t-white" style="top:35%;left:52%;">未確認異常<br>6</span>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
@ -196,7 +196,7 @@
 | 
				
			|||||||
                            </h2>
 | 
					                            </h2>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="panel-container show">
 | 
					                        <div class="panel-container show">
 | 
				
			||||||
                            <div class="panel-content poisition-relative">
 | 
					                            <div class="panel-content poisition-relative p-0">
 | 
				
			||||||
                                <!--<div class="pb-5 pt-3">
 | 
					                                <!--<div class="pb-5 pt-3">
 | 
				
			||||||
        <div class="d-flex mr-0">
 | 
					        <div class="d-flex mr-0">
 | 
				
			||||||
            <div class="mr-2">
 | 
					            <div class="mr-2">
 | 
				
			||||||
@ -208,15 +208,15 @@
 | 
				
			|||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    </div>-->
 | 
					    </div>-->
 | 
				
			||||||
                                <div class="col-12 mb-2 position-relative">
 | 
					                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center">
 | 
				
			||||||
                                    <span class="text-center position-absolute t-white" style="top:27px;left:55px;">已完成<br>6</span>
 | 
					                                    <span class="text-center position-absolute t-white" style="top:25%;left:27%;">已完成<br>6</span>
 | 
				
			||||||
                                    <img src="img/u40.png" class="" style="width:312px;margin-left:-45px;left:-22px;">
 | 
					                                    <img src="img/u40.png" class="" style="width:75%;margin-left:0px;left:-22px;">
 | 
				
			||||||
                                    <span class="text-center position-absolute t-white" style="top:114px;left:162px;">未完成<br>8</span>
 | 
					                                    <span class="text-center position-absolute t-white" style="top:51%;left:58%;">未完成<br>8</span>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-12 mb-2 position-relative">
 | 
					                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center">
 | 
				
			||||||
                                    <span class="text-center position-absolute t-white" style="top:89px;left:27px;">未派工<br>5</span>
 | 
					                                    <span class="text-center position-absolute t-white" style="top:43%;left:26%;">未派工<br>5</span>
 | 
				
			||||||
                                    <img src="img/u43.png" class="w-100">
 | 
					                                    <img src="img/u43.png" class="mt-2 mb-1" style="width:51%;">
 | 
				
			||||||
                                    <span class="text-center position-absolute t-white" style="top:122px;left:177px;">派工中<br>9</span>
 | 
					                                    <span class="text-center position-absolute t-white" style="top:42%;left:58%;">派工中<br>9</span>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
@ -699,8 +699,8 @@
 | 
				
			|||||||
                let strHtml = ``;
 | 
					                let strHtml = ``;
 | 
				
			||||||
                $.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) => {
 | 
				
			||||||
                        strHtml += `<div class="btn-group btn-group-lg col-lg-4 mb-4 dev-group" data-id="/${pageAct.AreaTag}/${pageAct.buiTag}/${mainSysObj.main_system_tag}/${subSysObj.sub_system_tag}">
 | 
					                        strHtml += `<div class="btn-group btn-group-lg col-lg-3 mb-4 dev-group" data-id="/${pageAct.AreaTag}/${pageAct.buiTag}/${mainSysObj.main_system_tag}/${subSysObj.sub_system_tag}">
 | 
				
			||||||
                            <button type="button" class="btn btn-secondary col-4"><i class="fal fa-lightbulb-on fa-2x"></i></button>
 | 
					                            <button type="button" class="btn btn-secondary col-4"><i class="fal fa-lightbulb-on fa-2x py-2"></i></button>
 | 
				
			||||||
                            <button type="button" class="btn btn-secondary">${subSysObj.full_name}</button>
 | 
					                            <button type="button" class="btn btn-secondary">${subSysObj.full_name}</button>
 | 
				
			||||||
                        </div>`;
 | 
					                        </div>`;
 | 
				
			||||||
                    })
 | 
					                    })
 | 
				
			||||||
@ -736,13 +736,28 @@
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function getElectricBaja() {
 | 
					    function getElectricBaja() {
 | 
				
			||||||
        let devPath = tarElePath.split("_").slice(0, 8).join("_");
 | 
					        let devNum = tarElePath.split("_").slice(0, 8).join("_");
 | 
				
			||||||
        
 | 
					        let devPath = tarElePath.split("_").slice(0, 8).join("/");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let today = displayDate(new Date, "date").replaceAll("/", "-") + "T00:00:00";
 | 
					        let today = displayDate(new Date, "date").replaceAll("/", "-") + "T00:00:00";
 | 
				
			||||||
 | 
					        let yesterday = displayDate(new Date(new Date(today).getTime() - (24 * 60 * 60 * 1000)), "date").replaceAll("/", "-") + "T00:00:00";
 | 
				
			||||||
        let tomorrow = displayDate(new Date(new Date(today).getTime() + (24 * 60 * 60 * 1000)), "date").replaceAll("/", "-") + "T00:00:00";
 | 
					        let tomorrow = displayDate(new Date(new Date(today).getTime() + (24 * 60 * 60 * 1000)), "date").replaceAll("/", "-") + "T00:00:00";
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        getElectricMeterDayDataByBaja(devPath + "_KWH", "Mitsubishi_Sup", today, tomorrow, (data) => {
 | 
					        //今日用電量
 | 
				
			||||||
 | 
					        getElectricMeterDayDataByBaja(devNum + "_KWH", "Mitsubishi_Sup", today, tomorrow, (data) => {
 | 
				
			||||||
 | 
					            data = JSON.parse(data);
 | 
				
			||||||
 | 
					            $("#todayUseElec").text(data?.data[0]?.sum || "");
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        //昨日用電量
 | 
				
			||||||
 | 
					        getElectricMeterDayDataByBaja(devNum + "_KWH", "Mitsubishi_Sup", yesterday, today, (data) => {
 | 
				
			||||||
 | 
					            data = JSON.parse(data);
 | 
				
			||||||
 | 
					            $("#yesUseElec").text(data?.data[0]?.sum || "");
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        getElectricMeterNoweDataByBaja(devPath, (data) => {
 | 
				
			||||||
            console.log(data)
 | 
					            console.log(data)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            data = data.data;
 | 
				
			||||||
 | 
					            $("#insPower").text(data.filter(x => x.name == "P")[0]?.value);
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -861,7 +861,7 @@
 | 
				
			|||||||
    var subSeviceData = [];    //每個設備訂閱點位值
 | 
					    var subSeviceData = [];    //每個設備訂閱點位值
 | 
				
			||||||
    var floList = [];          //每個樓層
 | 
					    var floList = [];          //每個樓層
 | 
				
			||||||
    var elevObj = null;        //左側 2D 電梯物件
 | 
					    var elevObj = null;        //左側 2D 電梯物件
 | 
				
			||||||
    var viewer3DNodeIds = [758, 753, 748];
 | 
					    var viewer3DNodeIds = [760, 754, 748];
 | 
				
			||||||
    var elev3DBind = {};
 | 
					    var elev3DBind = {};
 | 
				
			||||||
    var elev3DOption = {};
 | 
					    var elev3DOption = {};
 | 
				
			||||||
    var elev3DObj = [];
 | 
					    var elev3DObj = [];
 | 
				
			||||||
@ -897,7 +897,6 @@
 | 
				
			|||||||
        myBaja = new subscriptionDevices();
 | 
					        myBaja = new subscriptionDevices();
 | 
				
			||||||
        myBaja.setSubscribeDevicesByBql(subOrdPath);
 | 
					        myBaja.setSubscribeDevicesByBql(subOrdPath);
 | 
				
			||||||
        myBaja.setSubscribeDevicesCallBack(function (data) {
 | 
					        myBaja.setSubscribeDevicesCallBack(function (data) {
 | 
				
			||||||
            console.log(data)
 | 
					 | 
				
			||||||
            function getValueByName(pointName) {
 | 
					            function getValueByName(pointName) {
 | 
				
			||||||
                return data.point_name == pointName ? data.value : null;
 | 
					                return data.point_name == pointName ? data.value : null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -1021,9 +1020,10 @@
 | 
				
			|||||||
                        elevObj.obj = Object.assign(elevObj.obj, elev3DOption);
 | 
					                        elevObj.obj = Object.assign(elevObj.obj, elev3DOption);
 | 
				
			||||||
                        elevObj.obj.init(function () {
 | 
					                        elevObj.obj.init(function () {
 | 
				
			||||||
                            let frags = elevObj.obj.fragProxys.filter(x => x.nodeId == elev3DBind[devNum]);
 | 
					                            let frags = elevObj.obj.fragProxys.filter(x => x.nodeId == elev3DBind[devNum]);
 | 
				
			||||||
 | 
					                            debugger
 | 
				
			||||||
                            frags.forEach((fragProxy) => {
 | 
					                            frags.forEach((fragProxy) => {
 | 
				
			||||||
                                fragProxy.frag.position.z = elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
 | 
					                                fragProxy.frag.position.z = elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
 | 
				
			||||||
                                fragProxy.frag.updateAnimTransform()
 | 
					                                fragProxy.frag.updateAnimTransform();
 | 
				
			||||||
                            })
 | 
					                            })
 | 
				
			||||||
                            elevObj.obj.viewer.impl.sceneUpdated(true);
 | 
					                            elevObj.obj.viewer.impl.sceneUpdated(true);
 | 
				
			||||||
                        });
 | 
					                        });
 | 
				
			||||||
@ -1078,7 +1078,7 @@
 | 
				
			|||||||
                })
 | 
					                })
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        console.log("result:", result)
 | 
					        /*console.log("result:", result)*/
 | 
				
			||||||
        return result;
 | 
					        return result;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1124,6 +1124,7 @@
 | 
				
			|||||||
        if (subData["CP"]) {
 | 
					        if (subData["CP"]) {
 | 
				
			||||||
            $(`#imdStaTable_${devNum} [name=curFloor]`).text(subData["CP"]);
 | 
					            $(`#imdStaTable_${devNum} [name=curFloor]`).text(subData["CP"]);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        console.log("目標樓層:" + subData["CP"], "RD點位值:" + subData["RD"])
 | 
				
			||||||
        //往上或往下
 | 
					        //往上或往下
 | 
				
			||||||
        if (subData["RD"] == "UP") {
 | 
					        if (subData["RD"] == "UP") {
 | 
				
			||||||
            $(`#imdStaTable_${devNum} [name=downFloArrow]`).removeClass("light-flash-c");
 | 
					            $(`#imdStaTable_${devNum} [name=downFloArrow]`).removeClass("light-flash-c");
 | 
				
			||||||
@ -1874,7 +1875,7 @@
 | 
				
			|||||||
            //myBaja.setSubscribeDevicesByBql(ordPath);
 | 
					            //myBaja.setSubscribeDevicesByBql(ordPath);
 | 
				
			||||||
            //myBaja.setSubscribeDevicesCallBack(subscribeCallBack);
 | 
					            //myBaja.setSubscribeDevicesCallBack(subscribeCallBack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            console.log(floChart)
 | 
					            /*console.log(floChart)*/
 | 
				
			||||||
            floChart.getZr().on('click', function (params) {
 | 
					            floChart.getZr().on('click', function (params) {
 | 
				
			||||||
                console.log("click", params);
 | 
					                console.log("click", params);
 | 
				
			||||||
                var pixelPoint = [params.offsetX, params.offsetY];
 | 
					                var pixelPoint = [params.offsetX, params.offsetY];
 | 
				
			||||||
@ -2422,6 +2423,7 @@
 | 
				
			|||||||
                    elevObj.obj = Object.assign(elevObj, elevator3DObj ?? {})
 | 
					                    elevObj.obj = Object.assign(elevObj, elevator3DObj ?? {})
 | 
				
			||||||
                    elevObj.obj.init(function () {
 | 
					                    elevObj.obj.init(function () {
 | 
				
			||||||
                        let frags = elevObj.obj.fragProxys.filter(x => x.nodeId == node);
 | 
					                        let frags = elevObj.obj.fragProxys.filter(x => x.nodeId == node);
 | 
				
			||||||
 | 
					                        debugger
 | 
				
			||||||
                        frags.forEach((fragProxy) => {
 | 
					                        frags.forEach((fragProxy) => {
 | 
				
			||||||
                            fragProxy.frag.position.z = elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
 | 
					                            fragProxy.frag.position.z = elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
 | 
				
			||||||
                            fragProxy.frag.updateAnimTransform()
 | 
					                            fragProxy.frag.updateAnimTransform()
 | 
				
			||||||
 | 
				
			|||||||
@ -2092,202 +2092,6 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // 執行初步 Loading
 | 
					        // 執行初步 Loading
 | 
				
			||||||
        var loadEle = pageLoading();
 | 
					        var loadEle = pageLoading();
 | 
				
			||||||
        $(function () {
 | 
					 | 
				
			||||||
            // 二次引用 jquery.js
 | 
					 | 
				
			||||||
            // - 在 require 內部程序需要引用 jquery,由於 require 的套件需要依賴 jquery ,就算 HTML 已經引用 jquery, require 也無法參考
 | 
					 | 
				
			||||||
            // - 上方 HTML 引用套件若有使用 jquery 內存數據程序 (ex: $(x).data() , $(x).trigger("custom event") , $.fn.custom ...)
 | 
					 | 
				
			||||||
            // - 會被清洗,有類似程序需放入 loadPack1 Function rquired 引用
 | 
					 | 
				
			||||||
            // (原 datatable.bundle.js require 會出問題,先以 cdn datatable.min.js引用)
 | 
					 | 
				
			||||||
            require(["jquery"], loadedBasePack);
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /**
 | 
					 | 
				
			||||||
         * jquery.js 二次引用後 Callback,載入第三方套件
 | 
					 | 
				
			||||||
         * */
 | 
					 | 
				
			||||||
        function loadedBasePack() {
 | 
					 | 
				
			||||||
            require(
 | 
					 | 
				
			||||||
                [
 | 
					 | 
				
			||||||
                    "lib/app.bundle",
 | 
					 | 
				
			||||||
                    "lib/app.menu",
 | 
					 | 
				
			||||||
                    "datatables.net.b4",
 | 
					 | 
				
			||||||
                    "n4js/alarmbaja",
 | 
					 | 
				
			||||||
                    "n4js/historybaja",
 | 
					 | 
				
			||||||
                    "lib/statistics/flot/flot.bundle",
 | 
					 | 
				
			||||||
                    "lib/statistics/peity/peity.bundle",
 | 
					 | 
				
			||||||
                ], loadedMasterPack);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        /**
 | 
					 | 
				
			||||||
         * 第三方套件引用後 Callback,載入額外套件
 | 
					 | 
				
			||||||
         * */
 | 
					 | 
				
			||||||
        function loadedMasterPack() {
 | 
					 | 
				
			||||||
            require(
 | 
					 | 
				
			||||||
                [
 | 
					 | 
				
			||||||
                    "yourteam/yourteam.ajax.class",
 | 
					 | 
				
			||||||
                    "yourteam/yourteam.utility.class",
 | 
					 | 
				
			||||||
                    "yourteam/yourteam.jquery.datatables",
 | 
					 | 
				
			||||||
                    "yourteam/plugins/yt-tooltip/yt-tooltip",
 | 
					 | 
				
			||||||
                    "yourteam/plugins/yt-tab/yt-tab",
 | 
					 | 
				
			||||||
                    "style",
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ], function () {
 | 
					 | 
				
			||||||
                    require(["init", "site"], loadedJsPack)
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /**
 | 
					 | 
				
			||||||
         * 全數套件讀取完成 Callback
 | 
					 | 
				
			||||||
         * */
 | 
					 | 
				
			||||||
        function loadedJsPack() {
 | 
					 | 
				
			||||||
            loadEvent();
 | 
					 | 
				
			||||||
            if (!jwt) {
 | 
					 | 
				
			||||||
                myBaja = new MyBaja();
 | 
					 | 
				
			||||||
                myBaja.setMyUserAccount(Login);
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                isValidLogin();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            $(loadEle).Loading("close");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /**
 | 
					 | 
				
			||||||
         * 登入驗證完成 Callback
 | 
					 | 
				
			||||||
         * */
 | 
					 | 
				
			||||||
        function isValidLogin() {
 | 
					 | 
				
			||||||
            $("#app").load("_dashboard.html", loadCallback);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            getBuiList();
 | 
					 | 
				
			||||||
            getSysMonBtnList();
 | 
					 | 
				
			||||||
            checkDevState();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            function getSysMonBtnList() {
 | 
					 | 
				
			||||||
                let url = baseApiUrl + "/api/Device/GetMainSub";
 | 
					 | 
				
			||||||
                let sendData = {
 | 
					 | 
				
			||||||
                    building_tag: pageAct.buiTag,
 | 
					 | 
				
			||||||
                };
 | 
					 | 
				
			||||||
                objSendData.Data = sendData;
 | 
					 | 
				
			||||||
                ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
					 | 
				
			||||||
                    if (!res || res.code != "0000" || !res.data) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        $("#sysMonBtnList").html()
 | 
					 | 
				
			||||||
                        $.each(res.data.history_Main_Systems, (index, mainSysObj) => {
 | 
					 | 
				
			||||||
                            $.each(mainSysObj.history_Sub_systems, (index2, subSysObj) => {
 | 
					 | 
				
			||||||
                                let page = "systemMonitor";
 | 
					 | 
				
			||||||
                                if (subSysObj.sub_system_tag == "EL") {
 | 
					 | 
				
			||||||
                                    page = "sysElevator";
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                                let btn = creBtn(subSysObj.full_name, `subSysBtn${subSysObj.sub_system_tag}`, "topFunBtn", ["dropdown-item"], { page: page });
 | 
					 | 
				
			||||||
                                subSysObj.main_system_tag = mainSysObj.main_system_tag;
 | 
					 | 
				
			||||||
                                btn.data("subSysObj", subSysObj);
 | 
					 | 
				
			||||||
                                $("#sysMonBtnList").append(btn);
 | 
					 | 
				
			||||||
                            })
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }, null, "POST").send();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            function getBuiList() {
 | 
					 | 
				
			||||||
                let url = baseApiUrl + "/api/Device/GetBuild";
 | 
					 | 
				
			||||||
                ytAjax = new YourTeam.Ajax(url, null, function (res) {
 | 
					 | 
				
			||||||
                    if (!res || res.code != "0000" || !res.data) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        let strHtml = ``;
 | 
					 | 
				
			||||||
                        $.each(res.data, (index, buiObj) => {
 | 
					 | 
				
			||||||
                            strHtml += `<a id="buiBtn${buiObj.building_tag}" class="dropdown-item" href="javascript:;">${buiObj.full_name}</a>`;
 | 
					 | 
				
			||||||
                        })
 | 
					 | 
				
			||||||
                        $("#buiList").append(strHtml).droSetItem();  //droSetItem 預設第一筆 active
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }, null, "POST").send();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            //lily test
 | 
					 | 
				
			||||||
            function checkDevState() {
 | 
					 | 
				
			||||||
                //TPE_B1_LT_L1
 | 
					 | 
				
			||||||
                //main_system_tag: pageAct.sysMainTag,
 | 
					 | 
				
			||||||
                //building_tag: pageAct.buiTag,
 | 
					 | 
				
			||||||
                //floor_tag: pageAct.floTag,
 | 
					 | 
				
			||||||
                let systemPath = "TPE_B1";
 | 
					 | 
				
			||||||
                // if (pageAct != undefined && pageAct != null && pageAct.sysMainTag != null && pageAct.buiTag != null) {
 | 
					 | 
				
			||||||
                //     systemPath = "TPE_" + pageAct.buiTag + "_" + pageAct.sysMainTag + "_" + "EL";
 | 
					 | 
				
			||||||
                // }
 | 
					 | 
				
			||||||
                getOneSystemAlarmStateByBaja(systemPath, callbackForCheckDevState);
 | 
					 | 
				
			||||||
                // console.log("systemP: " + systemPath);
 | 
					 | 
				
			||||||
                // console.log("devList: " + deviceList[0].device_guid + ", " + deviceList[3].device_guid + ", " + deviceList[8].device_guid);
 | 
					 | 
				
			||||||
                //callbackForCheckDevState("test");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            function callbackForCheckDevState(result) {
 | 
					 | 
				
			||||||
                console.log("------ " + result);
 | 
					 | 
				
			||||||
                // $.each(deviceList, (index, devObj) => {
 | 
					 | 
				
			||||||
                //     if ((`${devObj.device_guid}`) == '4ed28a93-5025-11ed-b23e-0242ac110002'
 | 
					 | 
				
			||||||
                //         || (`${devObj.device_guid}`) == '5d9fdff0-5343-43fe-86f4-bd73cdb15111') {
 | 
					 | 
				
			||||||
                //         var str = "";
 | 
					 | 
				
			||||||
                //         $(`#${devObj.device_guid}`).empty();
 | 
					 | 
				
			||||||
                //         str = `<span class="status status-danger d-inline-block"><img src="${baseImgUrl + varPathImg + devObj.device_master_icon}" class="profile-image rounded-circle" onerror="defDev(this)" alt="..."></span> ${devObj.full_name}`;
 | 
					 | 
				
			||||||
                //         $(`#${devObj.device_guid}`).append(str);
 | 
					 | 
				
			||||||
                //     }
 | 
					 | 
				
			||||||
                // })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                console.log(result);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // page loaded callback
 | 
					 | 
				
			||||||
        function loadCallback() {
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            initTabsByEle();
 | 
					 | 
				
			||||||
            resetYTTooltip();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // 事件先行讀取
 | 
					 | 
				
			||||||
        function loadEvent() {
 | 
					 | 
				
			||||||
            onEvent("click", "[name=topFunBtn]", function () {
 | 
					 | 
				
			||||||
                let needLoad = ["sysElevator","historyData"];
 | 
					 | 
				
			||||||
                _ytTabInited = [];
 | 
					 | 
				
			||||||
                let page = $(this).data("page");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (page != "systemMonitor") {
 | 
					 | 
				
			||||||
                    $("#sysMonBtnList .dropdown-item").removeClass("active");
 | 
					 | 
				
			||||||
                    pageAct.sysMainTag = null;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                $.each(tolSubList, (idx, sub) => {
 | 
					 | 
				
			||||||
                    console.log("sub", sub, idx)
 | 
					 | 
				
			||||||
                    sub.unsubscribeAll();
 | 
					 | 
				
			||||||
                    sub.detach();
 | 
					 | 
				
			||||||
                })
 | 
					 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                $("#app").load(`_${page}.html`, loadCallback);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                // 需要 Loading 的頁面
 | 
					 | 
				
			||||||
                if (needLoad.indexOf(page) != -1) {
 | 
					 | 
				
			||||||
                    $(loadEle).Loading("start", "資料讀取中...");
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            onEvent("click", "#logout", function () {
 | 
					 | 
				
			||||||
                localStorage.removeItem("JWT-Authorization");
 | 
					 | 
				
			||||||
                location.href = "/logout";
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            onEvent("active:change", "#sysMonBtnList", function (e, actEle) {
 | 
					 | 
				
			||||||
                if (actEle) {
 | 
					 | 
				
			||||||
                    pageAct.sysMainTag = $(actEle).data("subSysObj").main_system_tag;
 | 
					 | 
				
			||||||
                    pageAct.sysSubTag = $(actEle).data("subSysObj").sub_system_tag;
 | 
					 | 
				
			||||||
                    pageAct.sysSubName = $(actEle).data("subSysObj").full_name;
 | 
					 | 
				
			||||||
                    pageAct.sysSubObj = $(actEle).data("subSysObj");
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            onEvent("active:change", "#buiList", function (e, actEle) {
 | 
					 | 
				
			||||||
                if (actEle) {
 | 
					 | 
				
			||||||
                    pageAct.buiTag = $(actEle).prop("id").split("buiBtn")[1];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /**
 | 
					        /**
 | 
				
			||||||
        * 頁面 Loading 建立
 | 
					        * 頁面 Loading 建立
 | 
				
			||||||
@ -2302,103 +2106,300 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
 | 
				
			|||||||
            return background;
 | 
					            return background;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // 登入驗證
 | 
					        try {
 | 
				
			||||||
        function Login(account) {
 | 
					            $(function () {
 | 
				
			||||||
            console.log(account)
 | 
					                // 二次引用 jquery.js
 | 
				
			||||||
            /*if ($("#login-form").valid()) {*/
 | 
					                // - 在 require 內部程序需要引用 jquery,由於 require 的套件需要依賴 jquery ,就算 HTML 已經引用 jquery, require 也無法參考
 | 
				
			||||||
            var url = baseApiUrl + "/api/Login/";
 | 
					                // - 上方 HTML 引用套件若有使用 jquery 內存數據程序 (ex: $(x).data() , $(x).trigger("custom event") , $.fn.custom ...)
 | 
				
			||||||
            var send_data = {
 | 
					                // - 會被清洗,有類似程序需放入 loadPack1 Function rquired 引用
 | 
				
			||||||
                account: account,
 | 
					                // (原 datatable.bundle.js require 會出問題,先以 cdn datatable.min.js引用)
 | 
				
			||||||
                password: "rJ2T5Kkj"
 | 
					                require(["jquery"], loadedBasePack);
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (location.href.indexOf("localhost:5966") != -1) {
 | 
					 | 
				
			||||||
                location.href = "login.html";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            $.ajax({
 | 
					 | 
				
			||||||
                method: "post",
 | 
					 | 
				
			||||||
                url: url,
 | 
					 | 
				
			||||||
                data: JSON.stringify(send_data),
 | 
					 | 
				
			||||||
                async: false,
 | 
					 | 
				
			||||||
                contentType: "application/json; charset=UTF-8",
 | 
					 | 
				
			||||||
                dataType: 'json',
 | 
					 | 
				
			||||||
                success: function (rel) {
 | 
					 | 
				
			||||||
                    if (rel.code != "0000") {
 | 
					 | 
				
			||||||
                        toast_error(rel.msg || "系統內部發生錯誤,請聯絡系統管理員");
 | 
					 | 
				
			||||||
                        return;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else {
 | 
					 | 
				
			||||||
                        /*toast_ok(rel.msg);*/
 | 
					 | 
				
			||||||
                        localStorage.setItem('JWT-Authorization', rel.data.token);
 | 
					 | 
				
			||||||
                        isValidLogin();
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                error: function (xhr, textStatus, thrownError) {
 | 
					 | 
				
			||||||
                    alert(textStatus);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //==============================================================================
 | 
					 | 
				
			||||||
        //                       ↓  系統監控 - 共用 Function ↓
 | 
					 | 
				
			||||||
        //==============================================================================
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Card - 基本資料 Table
 | 
					 | 
				
			||||||
        function drawInfoTabBlo(devGuid) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let tabEle = $(`<table class="table table-bordered table-striped text-center m-0">`);
 | 
					 | 
				
			||||||
            let tbody = tabEle.append("<tbody>");
 | 
					 | 
				
			||||||
            let columnNames = ["設備編號", "設備名稱"];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            $.each(columnNames, (index, colName) => {
 | 
					 | 
				
			||||||
                let tr = $("<tr></tr>");
 | 
					 | 
				
			||||||
                let td = $("<td></td>");
 | 
					 | 
				
			||||||
                td.text(colName);
 | 
					 | 
				
			||||||
                tr.append(td);
 | 
					 | 
				
			||||||
                tbody.append(tr);
 | 
					 | 
				
			||||||
            })
 | 
					            })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let url = baseApiUrl + "/api/Device/GetBaseDevice";
 | 
					            /**
 | 
				
			||||||
            let sendData = {
 | 
					             * jquery.js 二次引用後 Callback,載入第三方套件
 | 
				
			||||||
                device_guid: devGuid,
 | 
					             * */
 | 
				
			||||||
            };
 | 
					            function loadedBasePack() {
 | 
				
			||||||
            objSendData.Data = sendData;
 | 
					                require(
 | 
				
			||||||
            ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
					                    [
 | 
				
			||||||
                if (!res || res.code != "0000" || !res.data) {
 | 
					                        "lib/app.bundle",
 | 
				
			||||||
 | 
					                        "lib/app.menu",
 | 
				
			||||||
 | 
					                        "datatables.net.b4",
 | 
				
			||||||
 | 
					                        "n4js/alarmbaja",
 | 
				
			||||||
 | 
					                        "n4js/historybaja",
 | 
				
			||||||
 | 
					                        "lib/statistics/flot/flot.bundle",
 | 
				
			||||||
 | 
					                        "lib/statistics/peity/peity.bundle",
 | 
				
			||||||
 | 
					                    ], loadedMasterPack);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * 第三方套件引用後 Callback,載入額外套件
 | 
				
			||||||
 | 
					             * */
 | 
				
			||||||
 | 
					            function loadedMasterPack() {
 | 
				
			||||||
 | 
					                require(
 | 
				
			||||||
 | 
					                    [
 | 
				
			||||||
 | 
					                        "yourteam/yourteam.ajax.class",
 | 
				
			||||||
 | 
					                        "yourteam/yourteam.utility.class",
 | 
				
			||||||
 | 
					                        "yourteam/yourteam.jquery.datatables",
 | 
				
			||||||
 | 
					                        "yourteam/plugins/yt-tooltip/yt-tooltip",
 | 
				
			||||||
 | 
					                        "yourteam/plugins/yt-tab/yt-tab",
 | 
				
			||||||
 | 
					                        "style",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    ], function () {
 | 
				
			||||||
 | 
					                        require(["init", "site"], loadedJsPack)
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /**
 | 
				
			||||||
 | 
					             * 全數套件讀取完成 Callback
 | 
				
			||||||
 | 
					             * */
 | 
				
			||||||
 | 
					            function loadedJsPack() {
 | 
				
			||||||
 | 
					                loadEvent();
 | 
				
			||||||
 | 
					                if (!jwt) {
 | 
				
			||||||
 | 
					                    myBaja = new MyBaja();
 | 
				
			||||||
 | 
					                    myBaja.setMyUserAccount(Login);
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    tbody.find("tr").eq(0).append(creEle("td", res.data.device_number));
 | 
					                    isValidLogin();
 | 
				
			||||||
                    tbody.find("tr").eq(1).append(creEle("td", res.data.full_name));
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }, null, "POST").send();
 | 
					                $(loadEle).Loading("close");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return tabEle.prop("outerHTML");
 | 
					            /**
 | 
				
			||||||
        }
 | 
					             * 登入驗證完成 Callback
 | 
				
			||||||
 | 
					             * */
 | 
				
			||||||
 | 
					            function isValidLogin() {
 | 
				
			||||||
 | 
					                $("#app").load("_dashboard.html", loadCallback);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Card - 異常紀錄 block
 | 
					                getBuiList();
 | 
				
			||||||
        function drawErrRecTabBlo() {
 | 
					                getSysMonBtnList();
 | 
				
			||||||
            let strHtml = `<table id="errRecTable" class="table table-bordered table-striped text-center m-0 w-100">
 | 
					                checkDevState();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                function getSysMonBtnList() {
 | 
				
			||||||
 | 
					                    let url = baseApiUrl + "/api/Device/GetMainSub";
 | 
				
			||||||
 | 
					                    let sendData = {
 | 
				
			||||||
 | 
					                        building_tag: pageAct.buiTag,
 | 
				
			||||||
 | 
					                    };
 | 
				
			||||||
 | 
					                    objSendData.Data = sendData;
 | 
				
			||||||
 | 
					                    ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
				
			||||||
 | 
					                        if (!res || res.code != "0000" || !res.data) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            $("#sysMonBtnList").html()
 | 
				
			||||||
 | 
					                            $.each(res.data.history_Main_Systems, (index, mainSysObj) => {
 | 
				
			||||||
 | 
					                                $.each(mainSysObj.history_Sub_systems, (index2, subSysObj) => {
 | 
				
			||||||
 | 
					                                    let page = "systemMonitor";
 | 
				
			||||||
 | 
					                                    if (subSysObj.sub_system_tag == "EL") {
 | 
				
			||||||
 | 
					                                        page = "sysElevator";
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                    let btn = creBtn(subSysObj.full_name, `subSysBtn${subSysObj.sub_system_tag}`, "topFunBtn", ["dropdown-item"], { page: page });
 | 
				
			||||||
 | 
					                                    subSysObj.main_system_tag = mainSysObj.main_system_tag;
 | 
				
			||||||
 | 
					                                    btn.data("subSysObj", subSysObj);
 | 
				
			||||||
 | 
					                                    $("#sysMonBtnList").append(btn);
 | 
				
			||||||
 | 
					                                })
 | 
				
			||||||
 | 
					                            })
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }, null, "POST").send();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                function getBuiList() {
 | 
				
			||||||
 | 
					                    let url = baseApiUrl + "/api/Device/GetBuild";
 | 
				
			||||||
 | 
					                    ytAjax = new YourTeam.Ajax(url, null, function (res) {
 | 
				
			||||||
 | 
					                        if (!res || res.code != "0000" || !res.data) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            let strHtml = ``;
 | 
				
			||||||
 | 
					                            $.each(res.data, (index, buiObj) => {
 | 
				
			||||||
 | 
					                                strHtml += `<a id="buiBtn${buiObj.building_tag}" class="dropdown-item" href="javascript:;">${buiObj.full_name}</a>`;
 | 
				
			||||||
 | 
					                            })
 | 
				
			||||||
 | 
					                            $("#buiList").append(strHtml).droSetItem();  //droSetItem 預設第一筆 active
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }, null, "POST").send();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //lily test
 | 
				
			||||||
 | 
					                function checkDevState() {
 | 
				
			||||||
 | 
					                    //TPE_B1_LT_L1
 | 
				
			||||||
 | 
					                    //main_system_tag: pageAct.sysMainTag,
 | 
				
			||||||
 | 
					                    //building_tag: pageAct.buiTag,
 | 
				
			||||||
 | 
					                    //floor_tag: pageAct.floTag,
 | 
				
			||||||
 | 
					                    let systemPath = "TPE_B1";
 | 
				
			||||||
 | 
					                    // if (pageAct != undefined && pageAct != null && pageAct.sysMainTag != null && pageAct.buiTag != null) {
 | 
				
			||||||
 | 
					                    //     systemPath = "TPE_" + pageAct.buiTag + "_" + pageAct.sysMainTag + "_" + "EL";
 | 
				
			||||||
 | 
					                    // }
 | 
				
			||||||
 | 
					                    getOneSystemAlarmStateByBaja(systemPath, callbackForCheckDevState);
 | 
				
			||||||
 | 
					                    // console.log("systemP: " + systemPath);
 | 
				
			||||||
 | 
					                    // console.log("devList: " + deviceList[0].device_guid + ", " + deviceList[3].device_guid + ", " + deviceList[8].device_guid);
 | 
				
			||||||
 | 
					                    //callbackForCheckDevState("test");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                function callbackForCheckDevState(result) {
 | 
				
			||||||
 | 
					                    console.log("------ " + result);
 | 
				
			||||||
 | 
					                    // $.each(deviceList, (index, devObj) => {
 | 
				
			||||||
 | 
					                    //     if ((`${devObj.device_guid}`) == '4ed28a93-5025-11ed-b23e-0242ac110002'
 | 
				
			||||||
 | 
					                    //         || (`${devObj.device_guid}`) == '5d9fdff0-5343-43fe-86f4-bd73cdb15111') {
 | 
				
			||||||
 | 
					                    //         var str = "";
 | 
				
			||||||
 | 
					                    //         $(`#${devObj.device_guid}`).empty();
 | 
				
			||||||
 | 
					                    //         str = `<span class="status status-danger d-inline-block"><img src="${baseImgUrl + varPathImg + devObj.device_master_icon}" class="profile-image rounded-circle" onerror="defDev(this)" alt="..."></span> ${devObj.full_name}`;
 | 
				
			||||||
 | 
					                    //         $(`#${devObj.device_guid}`).append(str);
 | 
				
			||||||
 | 
					                    //     }
 | 
				
			||||||
 | 
					                    // })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    console.log(result);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // page loaded callback
 | 
				
			||||||
 | 
					            function loadCallback() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                initTabsByEle();
 | 
				
			||||||
 | 
					                resetYTTooltip();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 事件先行讀取
 | 
				
			||||||
 | 
					            function loadEvent() {
 | 
				
			||||||
 | 
					                onEvent("click", "[name=topFunBtn]", function () {
 | 
				
			||||||
 | 
					                    let needLoad = ["sysElevator", "historyData"];
 | 
				
			||||||
 | 
					                    _ytTabInited = [];
 | 
				
			||||||
 | 
					                    let page = $(this).data("page");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (page != "systemMonitor") {
 | 
				
			||||||
 | 
					                        $("#sysMonBtnList .dropdown-item").removeClass("active");
 | 
				
			||||||
 | 
					                        pageAct.sysMainTag = null;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    $.each(tolSubList, (idx, sub) => {
 | 
				
			||||||
 | 
					                        sub.unsubscribeAll();
 | 
				
			||||||
 | 
					                        sub.detach();
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    $("#app").load(`_${page}.html`, loadCallback);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // 需要 Loading 的頁面
 | 
				
			||||||
 | 
					                    if (needLoad.indexOf(page) != -1) {
 | 
				
			||||||
 | 
					                        $(loadEle).Loading("start", "資料讀取中...");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                onEvent("click", "#logout", function () {
 | 
				
			||||||
 | 
					                    localStorage.removeItem("JWT-Authorization");
 | 
				
			||||||
 | 
					                    location.href = "/logout";
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                onEvent("active:change", "#sysMonBtnList", function (e, actEle) {
 | 
				
			||||||
 | 
					                    if (actEle) {
 | 
				
			||||||
 | 
					                        pageAct.sysMainTag = $(actEle).data("subSysObj").main_system_tag;
 | 
				
			||||||
 | 
					                        pageAct.sysSubTag = $(actEle).data("subSysObj").sub_system_tag;
 | 
				
			||||||
 | 
					                        pageAct.sysSubName = $(actEle).data("subSysObj").full_name;
 | 
				
			||||||
 | 
					                        pageAct.sysSubObj = $(actEle).data("subSysObj");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                onEvent("active:change", "#buiList", function (e, actEle) {
 | 
				
			||||||
 | 
					                    if (actEle) {
 | 
				
			||||||
 | 
					                        pageAct.buiTag = $(actEle).prop("id").split("buiBtn")[1];
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 登入驗證
 | 
				
			||||||
 | 
					            function Login(account) {
 | 
				
			||||||
 | 
					                console.log(account)
 | 
				
			||||||
 | 
					                /*if ($("#login-form").valid()) {*/
 | 
				
			||||||
 | 
					                var url = baseApiUrl + "/api/Login/";
 | 
				
			||||||
 | 
					                var send_data = {
 | 
				
			||||||
 | 
					                    account: account,
 | 
				
			||||||
 | 
					                    password: "rJ2T5Kkj"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (location.href.indexOf("localhost:5966") != -1) {
 | 
				
			||||||
 | 
					                    location.href = "login.html";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                $.ajax({
 | 
				
			||||||
 | 
					                    method: "post",
 | 
				
			||||||
 | 
					                    url: url,
 | 
				
			||||||
 | 
					                    data: JSON.stringify(send_data),
 | 
				
			||||||
 | 
					                    async: false,
 | 
				
			||||||
 | 
					                    contentType: "application/json; charset=UTF-8",
 | 
				
			||||||
 | 
					                    dataType: 'json',
 | 
				
			||||||
 | 
					                    success: function (rel) {
 | 
				
			||||||
 | 
					                        if (rel.code != "0000") {
 | 
				
			||||||
 | 
					                            toast_error(rel.msg || "系統內部發生錯誤,請聯絡系統管理員");
 | 
				
			||||||
 | 
					                            return;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else {
 | 
				
			||||||
 | 
					                            /*toast_ok(rel.msg);*/
 | 
				
			||||||
 | 
					                            localStorage.setItem('JWT-Authorization', rel.data.token);
 | 
				
			||||||
 | 
					                            isValidLogin();
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    error: function (xhr, textStatus, thrownError) {
 | 
				
			||||||
 | 
					                        alert(textStatus);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //==============================================================================
 | 
				
			||||||
 | 
					            //                       ↓  系統監控 - 共用 Function ↓
 | 
				
			||||||
 | 
					            //==============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Card - 基本資料 Table
 | 
				
			||||||
 | 
					            function drawInfoTabBlo(devGuid) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let tabEle = $(`<table class="table table-bordered table-striped text-center m-0">`);
 | 
				
			||||||
 | 
					                let tbody = tabEle.append("<tbody>");
 | 
				
			||||||
 | 
					                let columnNames = ["設備編號", "設備名稱"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $.each(columnNames, (index, colName) => {
 | 
				
			||||||
 | 
					                    let tr = $("<tr></tr>");
 | 
				
			||||||
 | 
					                    let td = $("<td></td>");
 | 
				
			||||||
 | 
					                    td.text(colName);
 | 
				
			||||||
 | 
					                    tr.append(td);
 | 
				
			||||||
 | 
					                    tbody.append(tr);
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let url = baseApiUrl + "/api/Device/GetBaseDevice";
 | 
				
			||||||
 | 
					                let sendData = {
 | 
				
			||||||
 | 
					                    device_guid: devGuid,
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					                objSendData.Data = sendData;
 | 
				
			||||||
 | 
					                ytAjax = new YourTeam.Ajax(url, objSendData, function (res) {
 | 
				
			||||||
 | 
					                    if (!res || res.code != "0000" || !res.data) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        tbody.find("tr").eq(0).append(creEle("td", res.data.device_number));
 | 
				
			||||||
 | 
					                        tbody.find("tr").eq(1).append(creEle("td", res.data.full_name));
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }, null, "POST").send();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return tabEle.prop("outerHTML");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Card - 異常紀錄 block
 | 
				
			||||||
 | 
					            function drawErrRecTabBlo() {
 | 
				
			||||||
 | 
					                let strHtml = `<table id="errRecTable" class="table table-bordered table-striped text-center m-0 w-100">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                </table>`
 | 
					                                </table>`
 | 
				
			||||||
            return strHtml;
 | 
					                return strHtml;
 | 
				
			||||||
        }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Card - 運維紀錄 block
 | 
					            // Card - 運維紀錄 block
 | 
				
			||||||
        function drawOpeRecTabBlo() {
 | 
					            function drawOpeRecTabBlo() {
 | 
				
			||||||
            let strHtml = `<table id="opeRecTable" class="table table-bordered table-striped text-center m-0 w-100">
 | 
					                let strHtml = `<table id="opeRecTable" class="table table-bordered table-striped text-center m-0 w-100">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                </table>`
 | 
					                                </table>`
 | 
				
			||||||
            return strHtml;
 | 
					                return strHtml;
 | 
				
			||||||
        }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Card 呈現初始化
 | 
					            // Card 呈現初始化
 | 
				
			||||||
        function initPopover() {
 | 
					            function initPopover() {
 | 
				
			||||||
            $("[name=devItem]").each((index, ele) => {
 | 
					                $("[name=devItem]").each((index, ele) => {
 | 
				
			||||||
                let devNum = $(ele).data("number"); //設備編號
 | 
					                    let devNum = $(ele).data("number"); //設備編號
 | 
				
			||||||
                let devGuid = $(ele).data("id"); //guid
 | 
					                    let devGuid = $(ele).data("id"); //guid
 | 
				
			||||||
                let devName = $(ele).data("name"); //full_name
 | 
					                    let devName = $(ele).data("name"); //full_name
 | 
				
			||||||
                $(ele).YTTooltip({
 | 
					                    $(ele).YTTooltip({
 | 
				
			||||||
                    html: `<div class="card m-1 border device-wrap">
 | 
					                        html: `<div class="card m-1 border device-wrap">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                    <div class="card-header p-3">
 | 
					                                    <div class="card-header p-3">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2431,143 +2432,149 @@ License: You must have a valid license purchased only from wrapbootstrap.com (li
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                                            </div>
 | 
					                                            </div>
 | 
				
			||||||
                                        </div>`,
 | 
					                                        </div>`,
 | 
				
			||||||
                    group: "device",
 | 
					                        group: "device",
 | 
				
			||||||
                    onShow: function (tooltipEle, oriEle) {
 | 
					                        onShow: function (tooltipEle, oriEle) {
 | 
				
			||||||
                        var tab = new YT.Tab({ tabName: "cardTab" })
 | 
					                            var tab = new YT.Tab({ tabName: "cardTab" })
 | 
				
			||||||
                        loadOpeRecTable(devGuid);
 | 
					                            loadOpeRecTable(devGuid);
 | 
				
			||||||
                        //loadErrRecTable2($(oriEle).data("number"));
 | 
					                            //loadErrRecTable2($(oriEle).data("number"));
 | 
				
			||||||
                        //loadErrRecTable();
 | 
					                            //loadErrRecTable();
 | 
				
			||||||
                        loadErr($(oriEle).data("number"));
 | 
					                            loadErr($(oriEle).data("number"));
 | 
				
			||||||
                        subDeviceSetTable ? subDeviceSetTable($(oriEle).data("number")) : ""
 | 
					                            subDeviceSetTable ? subDeviceSetTable($(oriEle).data("number")) : ""
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Card - 運維紀錄 Table
 | 
				
			||||||
 | 
					            function loadOpeRecTable(devGuid) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let url = baseApiUrl + "/api/Device/GetOpeDevice?device_guid=" + devGuid;
 | 
				
			||||||
 | 
					                let tag = "#opeRecTable";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let column_defs = [
 | 
				
			||||||
 | 
					                    { "targets": [0], "width": "8%", "sortable": true },
 | 
				
			||||||
 | 
					                    { "targets": [1], "width": "8%", "sortable": true },
 | 
				
			||||||
 | 
					                    { "targets": [2], "width": "7%", "sortable": true },
 | 
				
			||||||
 | 
					                    { "targets": [3], "width": "7%", "sortable": true },
 | 
				
			||||||
 | 
					                ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let columns = [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "title": "類型",
 | 
				
			||||||
 | 
					                        "data": "work_type_name",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "title": "項目",
 | 
				
			||||||
 | 
					                        "data": "fix_do",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "title": "處理人員",
 | 
				
			||||||
 | 
					                        "data": "work_person_name",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "title": "發生/完成時間",
 | 
				
			||||||
 | 
					                        "data": "finishTime",
 | 
				
			||||||
 | 
					                        "render": function (data, type, row) {
 | 
				
			||||||
 | 
					                            return row.createdAt + "<br>" + data;
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let opeRecTable = new YourTeam.JqDataTables.getTableByAjax(url, tag, null, columns, column_defs, null, null, null, null, null, null, "tpi");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Baja 取得異常紀錄
 | 
				
			||||||
 | 
					            function loadErr(allPath) {
 | 
				
			||||||
 | 
					                if (allPath != undefined && allPath != null) {
 | 
				
			||||||
 | 
					                    let _pathArr = allPath.split("_");//TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1
 | 
				
			||||||
 | 
					                    let _devicePath = _pathArr[0] + "_" + _pathArr[1] + "_" + _pathArr[2] + "_" + _pathArr[3] + "_" + _pathArr[4] + "_" + _pathArr[5];
 | 
				
			||||||
 | 
					                    getOneDeviceAlarmTop10ByBaja(_devicePath, callbackForErr);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else {
 | 
				
			||||||
 | 
					                    console.log("no device");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Card - 異常紀錄 Table
 | 
				
			||||||
 | 
					            function callbackForErr(result) {
 | 
				
			||||||
 | 
					                let tag = "#errRecTable";
 | 
				
			||||||
 | 
					                let datas;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let column_defs = [
 | 
				
			||||||
 | 
					                    { "targets": [0], "width": "15%", "sortable": true },
 | 
				
			||||||
 | 
					                    { "targets": [1], "width": "25%", "sortable": true },
 | 
				
			||||||
 | 
					                    { "targets": [2], "width": "25%", "sortable": true },
 | 
				
			||||||
 | 
					                    { "targets": [3], "width": "35%", "sortable": true },
 | 
				
			||||||
 | 
					                ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let columns = [
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "title": "異常ID",
 | 
				
			||||||
 | 
					                        "data": "uuid",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "title": "異常原因",
 | 
				
			||||||
 | 
					                        "data": "msgText",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "title": "ACK確認",
 | 
				
			||||||
 | 
					                        "data": "ackState",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "title": "發生/完成時間",
 | 
				
			||||||
 | 
					                        "data": "normalTime",
 | 
				
			||||||
 | 
					                        "render": function (data, type, row) {
 | 
				
			||||||
 | 
					                            return row.timestamp + "<br>" + data;
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                let json_object = JSON.parse(result);
 | 
				
			||||||
 | 
					                datas = json_object['data'];
 | 
				
			||||||
 | 
					                errRecTable = new YourTeam.JqDataTables.getTableByStatic(tag, datas, columns, column_defs, null, null, null, null, "tpi");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //根據 data-type 設置顏色 (判斷後台是否有設定,若無則帶預設)
 | 
				
			||||||
 | 
					            function setLightColor() {
 | 
				
			||||||
 | 
					                $(".dev-card").each((index, ele) => {
 | 
				
			||||||
 | 
					                    let type = $(ele).find("[data-light-type]").data("light-type");
 | 
				
			||||||
 | 
					                    let isFlashing = false;
 | 
				
			||||||
 | 
					                    let color = "#000";
 | 
				
			||||||
 | 
					                    switch (type) {
 | 
				
			||||||
 | 
					                        case "normal":
 | 
				
			||||||
 | 
					                            color = pageAct.sysSubObj.device_normal_color ?? "var(--theme-success)";
 | 
				
			||||||
 | 
					                            isFlashing = pageAct.sysSubObj.device_normal_flashing == "1";
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case "close":
 | 
				
			||||||
 | 
					                            color = pageAct.sysSubObj.device_close_color ?? "var(--theme-secondary)";
 | 
				
			||||||
 | 
					                            isFlashing = pageAct.sysSubObj.device_close_flashing == "1";
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        case "error":
 | 
				
			||||||
 | 
					                            color = pageAct.sysSubObj.device_error_color ?? "var(--theme-danger)";
 | 
				
			||||||
 | 
					                            isFlashing = pageAct.sysSubObj.device_error_flashing == "1";
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    $(ele).find("[data-light-type]").css("background-color", color);
 | 
				
			||||||
 | 
					                    //是否閃爍
 | 
				
			||||||
 | 
					                    if (isFlashing) {
 | 
				
			||||||
 | 
					                        $(ele).addClass("light-flash");
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Card - 運維紀錄 Table
 | 
					 | 
				
			||||||
        function loadOpeRecTable(devGuid) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let url = baseApiUrl + "/api/Device/GetOpeDevice?device_guid=" + devGuid;
 | 
					 | 
				
			||||||
            let tag = "#opeRecTable";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let column_defs = [
 | 
					 | 
				
			||||||
                { "targets": [0], "width": "8%", "sortable": true },
 | 
					 | 
				
			||||||
                { "targets": [1], "width": "8%", "sortable": true },
 | 
					 | 
				
			||||||
                { "targets": [2], "width": "7%", "sortable": true },
 | 
					 | 
				
			||||||
                { "targets": [3], "width": "7%", "sortable": true },
 | 
					 | 
				
			||||||
            ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let columns = [
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "title": "類型",
 | 
					 | 
				
			||||||
                    "data": "work_type_name",
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "title": "項目",
 | 
					 | 
				
			||||||
                    "data": "fix_do",
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "title": "處理人員",
 | 
					 | 
				
			||||||
                    "data": "work_person_name",
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "title": "發生/完成時間",
 | 
					 | 
				
			||||||
                    "data": "finishTime",
 | 
					 | 
				
			||||||
                    "render": function (data, type, row) {
 | 
					 | 
				
			||||||
                        return row.createdAt + "<br>" + data;
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let opeRecTable = new YourTeam.JqDataTables.getTableByAjax(url, tag, null, columns, column_defs, null, null, null, null, null, null, "tpi");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Baja 取得異常紀錄
 | 
					 | 
				
			||||||
        function loadErr(allPath) {
 | 
					 | 
				
			||||||
            if (allPath != undefined && allPath != null) {
 | 
					 | 
				
			||||||
                let _pathArr = allPath.split("_");//TPE_B1_ELEV_EL_R2F_NA_ELEV1_N1
 | 
					 | 
				
			||||||
                let _devicePath = _pathArr[0] + "_" + _pathArr[1] + "_" + _pathArr[2] + "_" + _pathArr[3] + "_" + _pathArr[4] + "_" + _pathArr[5];
 | 
					 | 
				
			||||||
                getOneDeviceAlarmTop10ByBaja(_devicePath, callbackForErr);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else {
 | 
					 | 
				
			||||||
                console.log("no device");
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //==============================================================================
 | 
				
			||||||
 | 
					            //                       ↑  系統監控 - 共用 Function ↑
 | 
				
			||||||
 | 
					            //==============================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch(e) {
 | 
				
			||||||
 | 
					            $(loadEle).Loading("close");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Card - 異常紀錄 Table
 | 
					        
 | 
				
			||||||
        function callbackForErr(result) {
 | 
					 | 
				
			||||||
            let tag = "#errRecTable";
 | 
					 | 
				
			||||||
            let datas;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let column_defs = [
 | 
					 | 
				
			||||||
                { "targets": [0], "width": "15%", "sortable": true },
 | 
					 | 
				
			||||||
                { "targets": [1], "width": "25%", "sortable": true },
 | 
					 | 
				
			||||||
                { "targets": [2], "width": "25%", "sortable": true },
 | 
					 | 
				
			||||||
                { "targets": [3], "width": "35%", "sortable": true },
 | 
					 | 
				
			||||||
            ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let columns = [
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "title": "異常ID",
 | 
					 | 
				
			||||||
                    "data": "uuid",
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "title": "異常原因",
 | 
					 | 
				
			||||||
                    "data": "msgText",
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "title": "ACK確認",
 | 
					 | 
				
			||||||
                    "data": "ackState",
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    "title": "發生/完成時間",
 | 
					 | 
				
			||||||
                    "data": "normalTime",
 | 
					 | 
				
			||||||
                    "render": function (data, type, row) {
 | 
					 | 
				
			||||||
                        return row.timestamp + "<br>" + data;
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            let json_object = JSON.parse(result);
 | 
					 | 
				
			||||||
            datas = json_object['data'];
 | 
					 | 
				
			||||||
            errRecTable = new YourTeam.JqDataTables.getTableByStatic(tag, datas, columns, column_defs, null, null, null, null, "tpi");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //根據 data-type 設置顏色 (判斷後台是否有設定,若無則帶預設)
 | 
					 | 
				
			||||||
        function setLightColor() {
 | 
					 | 
				
			||||||
            $(".dev-card").each((index, ele) => {
 | 
					 | 
				
			||||||
                let type = $(ele).find("[data-light-type]").data("light-type");
 | 
					 | 
				
			||||||
                let isFlashing = false;
 | 
					 | 
				
			||||||
                let color = "#000";
 | 
					 | 
				
			||||||
                switch (type) {
 | 
					 | 
				
			||||||
                    case "normal":
 | 
					 | 
				
			||||||
                        color = pageAct.sysSubObj.device_normal_color ?? "var(--theme-success)";
 | 
					 | 
				
			||||||
                        isFlashing = pageAct.sysSubObj.device_normal_flashing == "1";
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case "close":
 | 
					 | 
				
			||||||
                        color = pageAct.sysSubObj.device_close_color ?? "var(--theme-secondary)";
 | 
					 | 
				
			||||||
                        isFlashing = pageAct.sysSubObj.device_close_flashing == "1";
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case "error":
 | 
					 | 
				
			||||||
                        color = pageAct.sysSubObj.device_error_color ?? "var(--theme-danger)";
 | 
					 | 
				
			||||||
                        isFlashing = pageAct.sysSubObj.device_error_flashing == "1";
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                $(ele).find("[data-light-type]").css("background-color", color);
 | 
					 | 
				
			||||||
                //是否閃爍
 | 
					 | 
				
			||||||
                if (isFlashing) {
 | 
					 | 
				
			||||||
                    $(ele).addClass("light-flash");
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        //==============================================================================
 | 
					 | 
				
			||||||
        //                       ↑  系統監控 - 共用 Function ↑
 | 
					 | 
				
			||||||
        //==============================================================================
 | 
					 | 
				
			||||||
    </script>
 | 
					    </script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
 | 
				
			|||||||
@ -229,7 +229,7 @@ class elevator3D {
 | 
				
			|||||||
            else if (movStatus == 1) {
 | 
					            else if (movStatus == 1) {
 | 
				
			||||||
                fragProxy.position.z += this.speed;
 | 
					                fragProxy.position.z += this.speed;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            this.fragProxys.filter(x => x.nodeId == nodeId && x.fragId == frag)[0].frag.position.z = fragProxy.position.z;
 | 
				
			||||||
            fragProxyZ = fragProxy.position.z;
 | 
					            fragProxyZ = fragProxy.position.z;
 | 
				
			||||||
            fragProxy.updateAnimTransform()
 | 
					            fragProxy.updateAnimTransform()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -42,8 +42,7 @@ function getElectricMeterTotalByBaja(devicePath, timeType, callback) {
 | 
				
			|||||||
 * @param {any} callback
 | 
					 * @param {any} callback
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
function getElectricMeterNoweDataByBaja(devicePath, callback) {
 | 
					function getElectricMeterNoweDataByBaja(devicePath, callback) {
 | 
				
			||||||
    var _result = "";
 | 
					    var _result = {count:0,data:[]};
 | 
				
			||||||
    var _ss = "";
 | 
					 | 
				
			||||||
    var _index = 0;
 | 
					    var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    require(['baja!'], function (baja) {//TPE/B1/EE/E4/R2F/NA/WHT/N1
 | 
					    require(['baja!'], function (baja) {//TPE/B1/EE/E4/R2F/NA/WHT/N1
 | 
				
			||||||
@ -52,16 +51,15 @@ function getElectricMeterNoweDataByBaja(devicePath, callback) {
 | 
				
			|||||||
            .then(function (table) {
 | 
					            .then(function (table) {
 | 
				
			||||||
                return table.cursor({
 | 
					                return table.cursor({
 | 
				
			||||||
                    each: function (record) {
 | 
					                    each: function (record) {
 | 
				
			||||||
                        if (_index == 0)
 | 
					                        let main = {}
 | 
				
			||||||
                            _ss += '{"name":"' + record.get('name') + '", "value":' + record.get('out').get('value') + '"}';
 | 
					                        main.name = record.get('name');
 | 
				
			||||||
                        else
 | 
					                        main.value = record.get('out').get('value');
 | 
				
			||||||
                            _ss += ',{"name":"' + record.get('name') + '", "value":' + record.get('out').get('value') + '"}';
 | 
					                        _result.data.push(main);
 | 
				
			||||||
                        _index++;
 | 
					                        _index++;
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    after: function () {
 | 
					                    after: function () {
 | 
				
			||||||
                        _result += '{' + '"count": ' + _index + ', "data":[';
 | 
					                        _result.count = _index;
 | 
				
			||||||
                        _result += _ss;
 | 
					                        
 | 
				
			||||||
                        _result += ']}';
 | 
					 | 
				
			||||||
                        if (typeof callback === 'function') {
 | 
					                        if (typeof callback === 'function') {
 | 
				
			||||||
                            callback(_result);
 | 
					                            callback(_result);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
@ -289,9 +287,9 @@ function getElectricMeterDayDataByBaja(devicePath, company, startDateTime, endDa
 | 
				
			|||||||
                return table.cursor({
 | 
					                return table.cursor({
 | 
				
			||||||
                    each: function (record) {
 | 
					                    each: function (record) {
 | 
				
			||||||
                        if (_index == 0)
 | 
					                        if (_index == 0)
 | 
				
			||||||
                            _ss += '{"timestamp":' + record.get('timestamp') + ', "endTimestamp":"' + record.get('endTimestamp') + ', "min":"' + record.get('min') + ', "max":"' + record.get('max') + ', "avg":"' + record.get('avg') + ', "sum":"' + record.get('sum') + '"}';
 | 
					                            _ss += '{"timestamp":"' + record.get('timestamp') + '", "endTimestamp":"' + record.get('endTimestamp') + '", "min":"' + record.get('min') + '", "max":"' + record.get('max') + '", "avg":"' + record.get('avg') + '", "sum":"' + record.get('sum') + '"}';
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                            _ss += ',{"timestamp":' + record.get('timestamp') + ', "endTimestamp":"' + record.get('endTimestamp') + ', "min":"' + record.get('min') + ', "max":"' + record.get('max') + ', "avg":"' + record.get('avg') + ', "sum":"' + record.get('sum') + '"}';
 | 
					                            _ss += ',{"timestamp":"' + record.get('timestamp') + '", "endTimestamp":"' + record.get('endTimestamp') + '", "min":"' + record.get('min') + '", "max":"' + record.get('max') + '", "avg":"' + record.get('avg') + '", "sum":"' + record.get('sum') + '"}';
 | 
				
			||||||
                        _index++;
 | 
					                        _index++;
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    after: function () {
 | 
					                    after: function () {
 | 
				
			||||||
 | 
				
			|||||||
@ -347,4 +347,4 @@ class ElevatorHandler {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user