[前台] 分頁樣式復原 | 異常原點點擊狀態處理 | 告警系統其他類文字修正 | 能源管理 文字修正
This commit is contained in:
		
							parent
							
								
									b062b73e9d
								
							
						
					
					
						commit
						3b7504762c
					
				@ -9,12 +9,12 @@
 | 
				
			|||||||
                           role="tab"><i class="fal fa-user mr-1"></i> 帳號管理</a>
 | 
					                           role="tab"><i class="fal fa-user mr-1"></i> 帳號管理</a>
 | 
				
			||||||
                    </li>
 | 
					                    </li>
 | 
				
			||||||
                    <li class="nav-item">
 | 
					                    <li class="nav-item">
 | 
				
			||||||
                      <a class="nav-link" data-toggle="tab" href="#tab_borders_icons-2"
 | 
					                        <a class="nav-link" data-toggle="tab" href="#tab_borders_icons-2"
 | 
				
			||||||
                         role="tab"><i class="fal fa-users mr-1"></i> 角色管理</a>
 | 
					                           role="tab"><i class="fal fa-users mr-1"></i> 角色管理</a>
 | 
				
			||||||
                    </li>
 | 
					                    </li>
 | 
				
			||||||
                    <li class="nav-item">
 | 
					                    <li class="nav-item">
 | 
				
			||||||
                        <a class="nav-link" data-toggle="tab" href="#tab_borders_icons-3"
 | 
					                      <a class="nav-link" data-toggle="tab" href="#tab_borders_icons-3"
 | 
				
			||||||
                           role="tab"><i class="fal fa-cog mr-1"></i> 角色權限</a>
 | 
					                         role="tab"><i class="fal fa-cog mr-1"></i> 角色權限</a>
 | 
				
			||||||
                    </li>
 | 
					                    </li>
 | 
				
			||||||
                </ul>
 | 
					                </ul>
 | 
				
			||||||
                <div class="tab-content border border-top-0 p-3 w-100">
 | 
					                <div class="tab-content border border-top-0 p-3 w-100">
 | 
				
			||||||
@ -328,7 +328,7 @@
 | 
				
			|||||||
            },
 | 
					            },
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      let accManTable = new YourTeam.JqDataTables.getTableByAjax(ajaxObj, tag, null, columns, column_defs);
 | 
					        let accManTable = new YourTeam.JqDataTables.getTableByAjax(ajaxObj, tag, null, columns, column_defs);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function loadRolManTable() {
 | 
					    function loadRolManTable() {
 | 
				
			||||||
 | 
				
			|||||||
@ -6,25 +6,17 @@
 | 
				
			|||||||
				<div class="col-auto">
 | 
									<div class="col-auto">
 | 
				
			||||||
					<div class="btn-group">
 | 
										<div class="btn-group">
 | 
				
			||||||
						<button id="returnFalse" onclick="setReturn(false)" type="button"
 | 
											<button id="returnFalse" onclick="setReturn(false)" type="button"
 | 
				
			||||||
								class="btn btn-secondary waves-effect waves-themed">
 | 
												class="btn btn-secondary waves-effect waves-themed">未復歸</button>
 | 
				
			||||||
							未復歸
 | 
					 | 
				
			||||||
						</button>
 | 
					 | 
				
			||||||
						<button id="returnTrue" onclick="setReturn(true)" type="button"
 | 
											<button id="returnTrue" onclick="setReturn(true)" type="button"
 | 
				
			||||||
								class="btn btn-secondary waves-effect waves-themed">
 | 
												class="btn btn-secondary waves-effect waves-themed">已復歸</button>
 | 
				
			||||||
							已復歸
 | 
					 | 
				
			||||||
						</button>
 | 
					 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div class="col-auto">
 | 
									<div class="col-auto">
 | 
				
			||||||
					<div class="btn-group">
 | 
										<div class="btn-group">
 | 
				
			||||||
						<button id="unconfirmed" onclick="setConfirm(false)" type="button"
 | 
											<button id="unconfirmed" onclick="setConfirm(false)" type="button"
 | 
				
			||||||
								class="btn btn-secondary waves-effect waves-themed">
 | 
												class="btn btn-secondary waves-effect waves-themed">未確認</button>
 | 
				
			||||||
							未確認
 | 
					 | 
				
			||||||
						</button>
 | 
					 | 
				
			||||||
						<button id="confirmed" onclick="setConfirm(true)" type="button"
 | 
											<button id="confirmed" onclick="setConfirm(true)" type="button"
 | 
				
			||||||
								class="btn btn-secondary waves-effect waves-themed">
 | 
												class="btn btn-secondary waves-effect waves-themed">已確認</button>
 | 
				
			||||||
							已確認
 | 
					 | 
				
			||||||
						</button>
 | 
					 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div class="col-auto">
 | 
									<div class="col-auto">
 | 
				
			||||||
@ -33,13 +25,13 @@
 | 
				
			|||||||
				<div class="col-auto">
 | 
									<div class="col-auto">
 | 
				
			||||||
					<div class="form-group">
 | 
										<div class="form-group">
 | 
				
			||||||
						<input class="form-control" id="alr_startdate" data-val="" type="date" name="alr_startdate" value=""
 | 
											<input class="form-control" id="alr_startdate" data-val="" type="date" name="alr_startdate" value=""
 | 
				
			||||||
							   style="cursor: pointer">
 | 
												style="cursor: pointer">
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<div class="col-auto">
 | 
									<div class="col-auto">
 | 
				
			||||||
					<div class="form-group">
 | 
										<div class="form-group">
 | 
				
			||||||
						<input class="form-control" id="alr_enddate" data-val="" type="date" name="alr_enddate" value=""
 | 
											<input class="form-control" id="alr_enddate" data-val="" type="date" name="alr_enddate" value=""
 | 
				
			||||||
							   style="cursor: pointer">
 | 
												style="cursor: pointer">
 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
				<hr>
 | 
									<hr>
 | 
				
			||||||
@ -78,7 +70,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<!-- Modal center 保養/維修 -->
 | 
					<!-- Modal center 保養/維修 -->
 | 
				
			||||||
<div class="modal fade" id="alr_opeRecModal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static"
 | 
					<div class="modal fade" id="alr_opeRecModal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static"
 | 
				
			||||||
	 data-keyboard="false">
 | 
						data-keyboard="false">
 | 
				
			||||||
	<div class="modal-dialog modal-dialog-centered" role="document">
 | 
						<div class="modal-dialog modal-dialog-centered" role="document">
 | 
				
			||||||
		<div class="modal-content">
 | 
							<div class="modal-content">
 | 
				
			||||||
			<div class="modal-header">
 | 
								<div class="modal-header">
 | 
				
			||||||
@ -172,7 +164,7 @@
 | 
				
			|||||||
							<div class="form-group">
 | 
												<div class="form-group">
 | 
				
			||||||
								<label class="form-label" for="inpDescription">結果描述</label>
 | 
													<label class="form-label" for="inpDescription">結果描述</label>
 | 
				
			||||||
								<textarea class="form-control" type="text" id="inpDescription" name="inpDescription"
 | 
													<textarea class="form-control" type="text" id="inpDescription" name="inpDescription"
 | 
				
			||||||
										  rows="7"></textarea>
 | 
														rows="7"></textarea>
 | 
				
			||||||
							</div>
 | 
												</div>
 | 
				
			||||||
						</div>
 | 
											</div>
 | 
				
			||||||
						<div class="col-md-12">
 | 
											<div class="col-md-12">
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,7 @@
 | 
				
			|||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <i class="fal fa-user position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n1"
 | 
					                        <i class="fal fa-user position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n1"
 | 
				
			||||||
                           style="font-size:6rem"></i>
 | 
					                            style="font-size:6rem"></i>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="col-sm-6 col-xl-6">
 | 
					                <div class="col-sm-6 col-xl-6">
 | 
				
			||||||
@ -31,7 +31,7 @@
 | 
				
			|||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <i class="fal fa-gem position-absolute pos-right pos-bottom opacity-15  mb-n1 mr-n4"
 | 
					                        <i class="fal fa-gem position-absolute pos-right pos-bottom opacity-15  mb-n1 mr-n4"
 | 
				
			||||||
                           style="font-size: 6rem;"></i>
 | 
					                            style="font-size: 6rem;"></i>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="col-lg-12">
 | 
					                <div class="col-lg-12">
 | 
				
			||||||
@ -43,7 +43,8 @@
 | 
				
			|||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="panel-container show">
 | 
					                        <div class="panel-container show">
 | 
				
			||||||
                            <div class="panel-content poisition-relative">
 | 
					                            <div class="panel-content poisition-relative">
 | 
				
			||||||
                                <div class="p-1 position-absolute pos-right pos-top mt-3 mr-3 z-index-cloud d-flex align-items-center justify-content-center">
 | 
					                                <div
 | 
				
			||||||
 | 
					                                    class="p-1 position-absolute pos-right pos-top mt-3 mr-3 z-index-cloud d-flex align-items-center justify-content-center">
 | 
				
			||||||
                                    <!--<div class="border-faded border-top-0 border-left-0 border-bottom-0 py-2 pr-4 mr-3 hidden-sm-down">
 | 
					                                    <!--<div class="border-faded border-top-0 border-left-0 border-bottom-0 py-2 pr-4 mr-3 hidden-sm-down">
 | 
				
			||||||
                                        <div class="text-right fw-500 l-h-n d-flex flex-column">
 | 
					                                        <div class="text-right fw-500 l-h-n d-flex flex-column">
 | 
				
			||||||
                                            <div class="h3 m-0 d-flex align-items-center justify-content-end">
 | 
					                                            <div class="h3 m-0 d-flex align-items-center justify-content-end">
 | 
				
			||||||
@ -83,7 +84,7 @@
 | 
				
			|||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <i class="fal fa-lightbulb position-absolute pos-right pos-bottom opacity-15 mb-n5 mr-n6"
 | 
					                        <i class="fal fa-lightbulb position-absolute pos-right pos-bottom opacity-15 mb-n5 mr-n6"
 | 
				
			||||||
                           style="font-size: 8rem;"></i>
 | 
					                            style="font-size: 8rem;"></i>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="col-sm-6 col-xl-6">
 | 
					                <div class="col-sm-6 col-xl-6">
 | 
				
			||||||
@ -95,7 +96,7 @@
 | 
				
			|||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <i class="fal fa-globe position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n4"
 | 
					                        <i class="fal fa-globe position-absolute pos-right pos-bottom opacity-15 mb-n1 mr-n4"
 | 
				
			||||||
                           style="font-size: 6rem;"></i>
 | 
					                            style="font-size: 6rem;"></i>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="col-lg-12">
 | 
					                <div class="col-lg-12">
 | 
				
			||||||
@ -178,11 +179,11 @@
 | 
				
			|||||||
                        <div class="panel-container h-100 show">
 | 
					                        <div class="panel-container h-100 show">
 | 
				
			||||||
                            <div class="panel-content poisition-relative p-0 row p-0 h-100">
 | 
					                            <div class="panel-content poisition-relative p-0 row p-0 h-100">
 | 
				
			||||||
                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center"
 | 
					                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center"
 | 
				
			||||||
                                     style="max-height: 150px;">
 | 
					                                    style="max-height: 150px;">
 | 
				
			||||||
                                    <canvas class="chart" id="errRecChart"></canvas>
 | 
					                                    <canvas class="chart" id="errRecChart"></canvas>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center"
 | 
					                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center"
 | 
				
			||||||
                                     style="max-height: 150px;">
 | 
					                                    style="max-height: 150px;">
 | 
				
			||||||
                                    <canvas class="chart" id="errChkChart"></canvas>
 | 
					                                    <canvas class="chart" id="errChkChart"></canvas>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
@ -200,11 +201,11 @@
 | 
				
			|||||||
                            <div class="panel-content poisition-relative row p-0 h-100 p-0">
 | 
					                            <div class="panel-content poisition-relative row p-0 h-100 p-0">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center"
 | 
					                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center"
 | 
				
			||||||
                                     style="max-height:150px;">
 | 
					                                    style="max-height:150px;">
 | 
				
			||||||
                                    <canvas class="chart" id="worOrdErrChart"></canvas>
 | 
					                                    <canvas class="chart" id="worOrdErrChart"></canvas>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center"
 | 
					                                <div class="col-12 mb-2 position-relative row m-0 justify-content-center"
 | 
				
			||||||
                                     style="max-height:150px;">
 | 
					                                    style="max-height:150px;">
 | 
				
			||||||
                                    <canvas class="chart" id="worOrdFinChart"></canvas>
 | 
					                                    <canvas class="chart" id="worOrdFinChart"></canvas>
 | 
				
			||||||
                                </div>
 | 
					                                </div>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
@ -863,11 +864,12 @@
 | 
				
			|||||||
        $.each(data.data, (idx, alaObj) => {
 | 
					        $.each(data.data, (idx, alaObj) => {
 | 
				
			||||||
            if (alaObj.alarmClass.indexOf("_") != -1) {
 | 
					            if (alaObj.alarmClass.indexOf("_") != -1) {
 | 
				
			||||||
                let mainSubSys = alaObj.alarmClass.split("_").slice(0, 2).join("/");
 | 
					                let mainSubSys = alaObj.alarmClass.split("_").slice(0, 2).join("/");
 | 
				
			||||||
                const img = $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0]?.src.split('.')
 | 
					                const img = $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0]?.src.split('.');
 | 
				
			||||||
                const { length } = img
 | 
					                if (img?.length) {
 | 
				
			||||||
                img[length - 1] = 'gif'
 | 
					                    img[length - 1] = 'gif';
 | 
				
			||||||
                $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src = img.join('.')
 | 
					                    $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`)[0].src = img.join('.')
 | 
				
			||||||
                $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`).addClass("blink");
 | 
					                    $(`.btn-group.dev-group[data-id*='${mainSubSys}'] img`).addClass("blink");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        $(`.dev-group img.blink`).each((idx, ele) => {
 | 
					        $(`.dev-group img.blink`).each((idx, ele) => {
 | 
				
			||||||
@ -875,11 +877,12 @@
 | 
				
			|||||||
            let sysPath = devPath.split("/").slice(3, 5).join("/");
 | 
					            let sysPath = devPath.split("/").slice(3, 5).join("/");
 | 
				
			||||||
            let alaDevPath = data.data.map(x => x.alarmClass?.split("_").slice(0, 2).join("/"));
 | 
					            let alaDevPath = data.data.map(x => x.alarmClass?.split("_").slice(0, 2).join("/"));
 | 
				
			||||||
            if (alaDevPath.indexOf(sysPath) == -1) {
 | 
					            if (alaDevPath.indexOf(sysPath) == -1) {
 | 
				
			||||||
                const img = $(`.btn-group.dev-group[data-id*='${sysPath}'] img`)[0]?.src.split('.')
 | 
					                const img = $(`.btn-group.dev-group[data-id*='${sysPath}'] img`)[0]?.src.split('.');
 | 
				
			||||||
                const { length } = img
 | 
					                if (img?.length) {
 | 
				
			||||||
                img[length - 1] = 'png'
 | 
					                    img[length - 1] = 'png';
 | 
				
			||||||
                $(`.btn-group.dev-group[data-id*='${sysPath}'] img`)[0].src = img.join('.')
 | 
					                    $(`.btn-group.dev-group[data-id*='${sysPath}'] img`)[0].src = img.join('.')
 | 
				
			||||||
                $(ele).removeClass("blink");
 | 
					                    $(ele).removeClass("blink");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -33,7 +33,7 @@
 | 
				
			|||||||
                <div class="col-auto">
 | 
					                <div class="col-auto">
 | 
				
			||||||
                    <div class="form-group">
 | 
					                    <div class="form-group">
 | 
				
			||||||
                        <input class="form-control" id="his_startdate" data-val="" type="date" name="date" value="">
 | 
					                        <input class="form-control" id="his_startdate" data-val="" type="date" name="date" value="">
 | 
				
			||||||
                        <input class="form-control" id="getmonth" type="month" style="display: none" />
 | 
					                        <input class="form-control" id="getmonth" type="month" style="display: none"/>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="col-auto" id="his_enddate" style="display: none">
 | 
					                <div class="col-auto" id="his_enddate" style="display: none">
 | 
				
			||||||
@ -90,21 +90,21 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        onEvent('change', '#his_startdate', function () {
 | 
					        onEvent('change', '#his_startdate', function () {
 | 
				
			||||||
            let today = displayDate(new Date(Date.now()), 'date').replaceAll('/', '-');
 | 
					            let today = displayDate(new Date(Date.now()), 'date').replaceAll('/', '-');
 | 
				
			||||||
            let ytd = displayDate(new Date(new Date().setDate(new Date(Date.now()).getDate() - 1)), 'date').replaceAll('/', '-');
 | 
								let ytd = displayDate(new Date(new Date().setDate(new Date(Date.now()).getDate() - 1)), 'date').replaceAll('/', '-');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (pageAct.dateType == 'range') {
 | 
					            if (pageAct.dateType == 'range') {
 | 
				
			||||||
                if ($('#his_startdate').val() > $('#his_enddate input').val() && ($('#his_startdate').val() != "" && $('#his_enddate input').val() != "")) {
 | 
					                if ($('#his_startdate').val() > $('#his_enddate input').val() && ($('#his_startdate').val() != "" && $('#his_enddate input').val() != "")) {
 | 
				
			||||||
                    $('#his_startdate').val($('#his_startdate').data('val'));
 | 
										$('#his_startdate').val($('#his_startdate').data('val'));
 | 
				
			||||||
                    toast_error('不可選擇大於結束時間');
 | 
										toast_error('不可選擇大於結束時間');
 | 
				
			||||||
                }
 | 
									}
 | 
				
			||||||
                else {
 | 
									else {
 | 
				
			||||||
                    $('#his_startdate').data('val', $('#his_startdate').val());
 | 
										$('#his_startdate').data('val', $('#his_startdate').val());
 | 
				
			||||||
                    $('#his_enddate input').data('val', $('#his_enddate input').val());
 | 
					                    $('#his_enddate input').data('val', $('#his_enddate input').val());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    $(`[onclick="setDateType('today', this)"]`).addClass('btn-secondary');
 | 
										$(`[onclick="setDateType('today', this)"]`).addClass('btn-secondary');
 | 
				
			||||||
                    $(`[onclick="setDateType('today', this)"]`).removeClass('btn-info');
 | 
										$(`[onclick="setDateType('today', this)"]`).removeClass('btn-info');
 | 
				
			||||||
                    $(`[onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
										$(`[onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
				
			||||||
                    $(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
										$(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if ($('#his_startdate').val() == $('#his_enddate input').val()) {
 | 
					                    if ($('#his_startdate').val() == $('#his_enddate input').val()) {
 | 
				
			||||||
                        if ($('#his_startdate').val() == today) {
 | 
					                        if ($('#his_startdate').val() == today) {
 | 
				
			||||||
@ -112,55 +112,55 @@
 | 
				
			|||||||
                            $(`[onclick="setDateType('today', this)"]`).addClass('btn-info');
 | 
					                            $(`[onclick="setDateType('today', this)"]`).addClass('btn-info');
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else if ($('#his_startdate').val() == ytd) {
 | 
					                        else if ($('#his_startdate').val() == ytd) {
 | 
				
			||||||
                            $(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-secondary');
 | 
												$(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-secondary');
 | 
				
			||||||
                            $(`[onclick="setDateType('ytd', this)"]`).addClass('btn-info');
 | 
												$(`[onclick="setDateType('ytd', this)"]`).addClass('btn-info');
 | 
				
			||||||
                        }
 | 
											}
 | 
				
			||||||
                    }
 | 
										}
 | 
				
			||||||
                }
 | 
									}
 | 
				
			||||||
            }
 | 
								}
 | 
				
			||||||
            else if ($(this).val() == today) {
 | 
					            else if ($(this).val() == today) {
 | 
				
			||||||
                $(`[onclick="setDateType('today', this)"]`).removeClass('btn-secondary');
 | 
					                $(`[onclick="setDateType('today', this)"]`).removeClass('btn-secondary');
 | 
				
			||||||
                $(`[onclick="setDateType('today', this)"]`).addClass('btn-info');
 | 
					                $(`[onclick="setDateType('today', this)"]`).addClass('btn-info');
 | 
				
			||||||
                $(`[onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
									$(`[onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
				
			||||||
                $(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
									$(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else if ($(this).val() == ytd) {
 | 
					            else if ($(this).val() == ytd) {
 | 
				
			||||||
                $(`[onclick="setDateType('today', this)"]`).addClass('btn-secondary');
 | 
									$(`[onclick="setDateType('today', this)"]`).addClass('btn-secondary');
 | 
				
			||||||
                $(`[onclick="setDateType('today', this)"]`).removeClass('btn-info');
 | 
									$(`[onclick="setDateType('today', this)"]`).removeClass('btn-info');
 | 
				
			||||||
                $(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-secondary');
 | 
					                $(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-secondary');
 | 
				
			||||||
                $(`[onclick="setDateType('ytd', this)"]`).addClass('btn-info');
 | 
					                $(`[onclick="setDateType('ytd', this)"]`).addClass('btn-info');
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        onEvent('change', '#his_enddate input', function () {
 | 
							onEvent('change', '#his_enddate input', function () {
 | 
				
			||||||
            let today = displayDate(new Date(Date.now()), 'date').replaceAll('/', '-');
 | 
								let today = displayDate(new Date(Date.now()), 'date').replaceAll('/', '-');
 | 
				
			||||||
            let ytd = displayDate(new Date(new Date().setDate(new Date(Date.now()).getDate() - 1)), 'date').replaceAll('/', '-');
 | 
								let ytd = displayDate(new Date(new Date().setDate(new Date(Date.now()).getDate() - 1)), 'date').replaceAll('/', '-');
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
            if ($('#his_startdate').val() > $('#his_enddate input').val() && ($('#his_startdate').val() != "" && $('#his_enddate input').val() != "")) {
 | 
					            if ($('#his_startdate').val() > $('#his_enddate input').val() && ($('#his_startdate').val() != "" && $('#his_enddate input').val() != "")) {
 | 
				
			||||||
                $('#his_enddate input').val($('#his_enddate input').data('val'));
 | 
									$('#his_enddate input').val($('#his_enddate input').data('val'));
 | 
				
			||||||
                toast_error('不可選擇大於結束時間');
 | 
									toast_error('不可選擇大於結束時間');
 | 
				
			||||||
            }
 | 
								}
 | 
				
			||||||
            else {
 | 
								else {
 | 
				
			||||||
                $('#his_startdate').data('val', $('#his_startdate').val());
 | 
									$('#his_startdate').data('val', $('#his_startdate').val());
 | 
				
			||||||
                $('#his_enddate input').data('val', $('#his_enddate input').val());
 | 
									$('#his_enddate input').data('val', $('#his_enddate input').val());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                $(`[onclick="setDateType('today', this)"]`).addClass('btn-secondary');
 | 
									$(`[onclick="setDateType('today', this)"]`).addClass('btn-secondary');
 | 
				
			||||||
                $(`[onclick="setDateType('today', this)"]`).removeClass('btn-info');
 | 
									$(`[onclick="setDateType('today', this)"]`).removeClass('btn-info');
 | 
				
			||||||
                $(`[onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
									$(`[onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
				
			||||||
                $(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
									$(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if ($('#his_startdate').val() == $('#his_enddate input').val()) {
 | 
									if ($('#his_startdate').val() == $('#his_enddate input').val()) {
 | 
				
			||||||
                    if ($('#his_startdate').val() == today) {
 | 
										if ($('#his_startdate').val() == today) {
 | 
				
			||||||
                        $(`[onclick="setDateType('today', this)"]`).removeClass('btn-secondary');
 | 
											$(`[onclick="setDateType('today', this)"]`).removeClass('btn-secondary');
 | 
				
			||||||
                        $(`[onclick="setDateType('today', this)"]`).addClass('btn-info');
 | 
											$(`[onclick="setDateType('today', this)"]`).addClass('btn-info');
 | 
				
			||||||
                    }
 | 
										}
 | 
				
			||||||
                    else if ($('#his_startdate').val() == ytd) {
 | 
										else if ($('#his_startdate').val() == ytd) {
 | 
				
			||||||
                        $(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-secondary');
 | 
											$(`[onclick="setDateType('ytd', this)"]`).removeClass('btn-secondary');
 | 
				
			||||||
                        $(`[onclick="setDateType('ytd', this)"]`).addClass('btn-info');
 | 
											$(`[onclick="setDateType('ytd', this)"]`).addClass('btn-info');
 | 
				
			||||||
                    }
 | 
										}
 | 
				
			||||||
                }
 | 
									}
 | 
				
			||||||
            }
 | 
								}
 | 
				
			||||||
        });
 | 
							});
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function initList() {
 | 
					    function initList() {
 | 
				
			||||||
@ -176,19 +176,19 @@
 | 
				
			|||||||
            $.each(res.data.history_Main_Systems, function (index, val) {
 | 
					            $.each(res.data.history_Main_Systems, function (index, val) {
 | 
				
			||||||
                if (pageAct.mainStatus) {
 | 
					                if (pageAct.mainStatus) {
 | 
				
			||||||
                    strHtml += `<li>
 | 
					                    strHtml += `<li>
 | 
				
			||||||
                                    <a href="#" data-filter-tags="${val.full_name.toLowerCase()}" data-maintag="${val.main_system_tag}">
 | 
					                                    <a href="#" data-filter-tags="${val.full_name.toLowerCase() }" data-maintag="${val.main_system_tag}">
 | 
				
			||||||
                                        <span class="nav-link-text">${val.full_name}</span>
 | 
					                                        <span class="nav-link-text">${val.full_name}</span>
 | 
				
			||||||
                                    </a>
 | 
					                                    </a>
 | 
				
			||||||
                                    <ul style="${index == 0 ? `display:block;` : ``}">`;
 | 
					                                    <ul style="${index == 0 ? `display:block;` : ``}">`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    i1 = (val.history_Sub_systems != null && i1 == null) ? index : null;
 | 
					                    i1 = (val.history_Sub_systems != null && i1 == null) ? index : null;
 | 
				
			||||||
                }
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                $.each(val.history_Sub_systems, function (index2, val2) {
 | 
					                $.each(val.history_Sub_systems, function (index2, val2) {
 | 
				
			||||||
                    i2 = (val2.device != null && i2 == null) ? index2 : null;
 | 
					                    i2 = (val2.device != null && i2 == null) ? index2 : null;
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
                    strHtml += `<li>
 | 
					                    strHtml += `<li>
 | 
				
			||||||
                                    <a href="#" data-filter-tags="${val2.full_name.toLowerCase()}"  data-subtag="${val2.sub_system_tag}">
 | 
					                                    <a href="#" data-filter-tags="${val2.full_name.toLowerCase() }"  data-subtag="${val2.sub_system_tag}">
 | 
				
			||||||
                                        <span class="nav-link-text">
 | 
					                                        <span class="nav-link-text">
 | 
				
			||||||
                                            ${val2.full_name}
 | 
					                                            ${val2.full_name}
 | 
				
			||||||
                                        </span>
 | 
					                                        </span>
 | 
				
			||||||
@ -197,7 +197,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                    $.each(val2.device, function (index3, val3) {
 | 
					                    $.each(val2.device, function (index3, val3) {
 | 
				
			||||||
                        strHtml += `<li data-tabname="hisListItem">
 | 
					                        strHtml += `<li data-tabname="hisListItem">
 | 
				
			||||||
                                        <a href="#" onClick="setValue('${val3.device_number}', '${val3.full_name}', null)" data-filter-tags="${val3.full_name.toLowerCase()} ${val3.device_serial_tag.toLowerCase()}" data-devnum="${val3.device_number}">
 | 
					                                        <a href="#" onClick="setValue('${val3.device_number}', '${val3.full_name}', null)" data-filter-tags="${val3.full_name.toLowerCase() } ${val3.device_serial_tag.toLowerCase()}" data-devnum="${val3.device_number}">
 | 
				
			||||||
                                            <span class="nav-link-text">
 | 
					                                            <span class="nav-link-text">
 | 
				
			||||||
                                                ${val3.full_name}
 | 
					                                                ${val3.full_name}
 | 
				
			||||||
                                            </span>
 | 
					                                            </span>
 | 
				
			||||||
@ -213,20 +213,20 @@
 | 
				
			|||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else {
 | 
					                        else {
 | 
				
			||||||
                            if (index2 == i2 && first) {
 | 
												if (index2 == i2 && first) {
 | 
				
			||||||
                                first = false;
 | 
													first = false;
 | 
				
			||||||
                                pageAct.deviceNumber = val3.device_number;
 | 
													pageAct.deviceNumber = val3.device_number;
 | 
				
			||||||
                                pageAct.deviceName = val3.full_name;
 | 
													pageAct.deviceName = val3.full_name;
 | 
				
			||||||
                                devPointsList();
 | 
													devPointsList();
 | 
				
			||||||
                            }
 | 
												}
 | 
				
			||||||
                        }
 | 
											}
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
                    strHtml += `</ul> </li>`;
 | 
					                    strHtml += `</ul> </li>`;
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (pageAct.mainStatus) {
 | 
					                if (pageAct.mainStatus) {
 | 
				
			||||||
                    strHtml += `</ul> </li>`;
 | 
									    strHtml += `</ul> </li>`;
 | 
				
			||||||
                }
 | 
									}
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $('#js_nested_list').html(strHtml);
 | 
					            $('#js_nested_list').html(strHtml);
 | 
				
			||||||
@ -237,46 +237,46 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    function devPointsList() {
 | 
					    function devPointsList() {
 | 
				
			||||||
        let sendData = {
 | 
					        let sendData = {
 | 
				
			||||||
            device_number: pageAct.deviceNumber
 | 
								device_number: pageAct.deviceNumber
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
        objSendData.Data = sendData;
 | 
							objSendData.Data = sendData;
 | 
				
			||||||
        let url = baseApiUrl + "/api/History/GetDevPoi";
 | 
							let url = baseApiUrl + "/api/History/GetDevPoi";
 | 
				
			||||||
        function success(res) {
 | 
					        function success(res) {
 | 
				
			||||||
            let strHtml = ``;
 | 
					            let strHtml = ``;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            $.each(res.data, function (index, val) {
 | 
					            $.each(res.data, function (index, val) {
 | 
				
			||||||
                if (index == 0) {
 | 
					                if (index == 0) {
 | 
				
			||||||
                    strHtml += `<button onClick="setValue(null, null, '${val.points}', this)" type="button" class="btn btn-info waves-effect waves-themed">${val.full_name || val.points}</button>`;
 | 
										strHtml += `<button onClick="setValue(null, null, '${val.points}', this)" type="button" class="btn btn-info waves-effect waves-themed">${val.full_name || val.points}</button>`;
 | 
				
			||||||
                    pageAct.deviceItem = val.points;
 | 
					                    pageAct.deviceItem = val.points;
 | 
				
			||||||
                    pageAct.devicePoiName = val.full_name + ' ' + val.points;
 | 
					                    pageAct.devicePoiName = val.full_name + ' ' + val.points;
 | 
				
			||||||
                    pageAct.deviceComName = val.parent_path;
 | 
					                    pageAct.deviceComName = val.parent_path;
 | 
				
			||||||
                    getData();
 | 
					                    getData();
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    strHtml += `<button onClick="setValue(null, null, '${val.points}', this)" type="button" class="btn btn-secondary waves-effect waves-themed">${val.full_name || val.points}</button>`;
 | 
										strHtml += `<button onClick="setValue(null, null, '${val.points}', this)" type="button" class="btn btn-secondary waves-effect waves-themed">${val.full_name || val.points}</button>`;
 | 
				
			||||||
                }
 | 
									}
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $('#devPointsList').html(strHtml);
 | 
					            $('#devPointsList').html(strHtml);
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
        ytAjax = new YourTeam.Ajax(url, objSendData, success, null, "POST").send();
 | 
							ytAjax = new YourTeam.Ajax(url, objSendData, success, null, "POST").send();
 | 
				
			||||||
    }
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function getData(start = null, end = null) {
 | 
					    function getData(start = null, end = null) {
 | 
				
			||||||
        var sdt = new Date();
 | 
					        var sdt = new Date();
 | 
				
			||||||
        var edt = new Date(new Date().setDate(sdt.getDate() + 1));
 | 
							var edt = new Date(new Date().setDate(sdt.getDate() + 1));
 | 
				
			||||||
        start = start ?? sdt.toLocaleDateString();
 | 
					        start = start ?? sdt.toLocaleDateString();
 | 
				
			||||||
        end = end ?? edt.toLocaleDateString();
 | 
					        end = end ?? edt.toLocaleDateString();
 | 
				
			||||||
        $(loadEle).Loading("start");
 | 
					        $(loadEle).Loading("start");
 | 
				
			||||||
        callBackFromHistory()
 | 
					        callBackFromHistory()
 | 
				
			||||||
        getHistoryDataByBaja(pageAct.deviceNumber + "_" + pageAct.deviceItem,
 | 
					        getHistoryDataByBaja(pageAct.deviceNumber + "_" + pageAct.deviceItem,
 | 
				
			||||||
            new Date(start).getTime(),
 | 
								new Date(start).getTime(),
 | 
				
			||||||
            new Date(end).getTime(),
 | 
								new Date(end).getTime(),
 | 
				
			||||||
            pageAct.deviceName,
 | 
								pageAct.deviceName,
 | 
				
			||||||
            pageAct.deviceComName,
 | 
								pageAct.deviceComName,
 | 
				
			||||||
            callBackFromHistory);
 | 
							    callBackFromHistory);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function callBackFromHistory(res = '{"count":0,"data":[]}') {
 | 
					    function callBackFromHistory(res='{"count":0,"data":[]}') {        
 | 
				
			||||||
        // console.log("@H1",res)
 | 
					        // console.log("@H1",res)
 | 
				
			||||||
        res = JSON.parse(res);
 | 
					        res = JSON.parse(res);
 | 
				
			||||||
        // console.log("@history",res.data)
 | 
					        // console.log("@history",res.data)
 | 
				
			||||||
@ -284,7 +284,7 @@
 | 
				
			|||||||
        if (historyTable != null) {
 | 
					        if (historyTable != null) {
 | 
				
			||||||
            let t = $('#historyTable').dataTable();
 | 
					            let t = $('#historyTable').dataTable();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            t.fnClearTable();
 | 
								t.fnClearTable();
 | 
				
			||||||
            if (res.data.length > 0)
 | 
					            if (res.data.length > 0)
 | 
				
			||||||
                t.fnAddData(res.data);
 | 
					                t.fnAddData(res.data);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -303,7 +303,7 @@
 | 
				
			|||||||
            pageAct.devicePoiName = $(elem).text();
 | 
					            pageAct.devicePoiName = $(elem).text();
 | 
				
			||||||
            pageAct.deviceItem = deviceItem;
 | 
					            pageAct.deviceItem = deviceItem;
 | 
				
			||||||
            getData();
 | 
					            getData();
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function setDateType(type, elem) {
 | 
					    function setDateType(type, elem) {
 | 
				
			||||||
@ -326,25 +326,25 @@
 | 
				
			|||||||
            else if (type == "ytd")
 | 
					            else if (type == "ytd")
 | 
				
			||||||
                getData(formatDate(ytd, "date", true), formatDate(now, "date", true));
 | 
					                getData(formatDate(ytd, "date", true), formatDate(now, "date", true));
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                $(`[onclick="setDateType('today', this)"]`).removeClass('btn-secondary');
 | 
									$(`[onclick="setDateType('today', this)"]`).removeClass('btn-secondary');
 | 
				
			||||||
                $(`[onclick="setDateType('today', this)"]`).addClass('btn-info');
 | 
									$(`[onclick="setDateType('today', this)"]`).addClass('btn-info');
 | 
				
			||||||
            }
 | 
								}
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (type == "range") {
 | 
					        else if (type == "range") {
 | 
				
			||||||
            $(`[onclick="setDateType('today', this)"], [onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
								$(`[onclick="setDateType('today', this)"], [onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
				
			||||||
            $(`[onclick="setDateType('today', this)"], [onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
								$(`[onclick="setDateType('today', this)"], [onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $('#his_startdate').css('display', 'block');
 | 
					            $('#his_startdate').css('display', 'block');
 | 
				
			||||||
            $('#his_enddate').css('display', 'block');
 | 
					            $('#his_enddate').css('display', 'block');
 | 
				
			||||||
            $('#getmonth').css('display', 'none');
 | 
					            $('#getmonth').css('display', 'none');
 | 
				
			||||||
            $('#his_startdate').val(now);
 | 
					            $('#his_startdate').val(now);
 | 
				
			||||||
            $('#his_startdate').data('val', now);
 | 
								$('#his_startdate').data('val', now);
 | 
				
			||||||
            $('#his_enddate input').val(tmr);
 | 
					            $('#his_enddate input').val(tmr);
 | 
				
			||||||
            $('#his_enddate input').data('val', tmr);
 | 
					            $('#his_enddate input').data('val', tmr);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (type == "month") {
 | 
					        else if (type == "month") {
 | 
				
			||||||
            $(`[onclick="setDateType('today', this)"], [onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
								$(`[onclick="setDateType('today', this)"], [onclick="setDateType('ytd', this)"]`).removeClass('btn-info');
 | 
				
			||||||
            $(`[onclick="setDateType('today', this)"], [onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
								$(`[onclick="setDateType('today', this)"], [onclick="setDateType('ytd', this)"]`).addClass('btn-secondary');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            $('#his_startdate').css('display', 'none');
 | 
					            $('#his_startdate').css('display', 'none');
 | 
				
			||||||
            $('#his_enddate').css('display', 'none');
 | 
					            $('#his_enddate').css('display', 'none');
 | 
				
			||||||
@ -352,8 +352,8 @@
 | 
				
			|||||||
            $('#getmonth').val(now.substr(0, 7));
 | 
					            $('#getmonth').val(now.substr(0, 7));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if (type == "ytd") {
 | 
					        else if (type == "ytd") {
 | 
				
			||||||
            $('#his_startdate').css('display', 'block');
 | 
								$('#his_startdate').css('display', 'block');
 | 
				
			||||||
            $('#his_enddate').css('display', 'none');
 | 
								$('#his_enddate').css('display', 'none');
 | 
				
			||||||
            $('#getmonth').css('display', 'none');
 | 
					            $('#getmonth').css('display', 'none');
 | 
				
			||||||
            $('#his_startdate').val(ytd);
 | 
					            $('#his_startdate').val(ytd);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -361,11 +361,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    function searchDate() {
 | 
					    function searchDate() {
 | 
				
			||||||
        let start = new Date($('#his_startdate').val());
 | 
					        let start = new Date($('#his_startdate').val());
 | 
				
			||||||
        let end = new Date(new Date().setDate(new Date($('#his_enddate input').val()).getDate() + 1));
 | 
							let end = new Date(new Date().setDate(new Date($('#his_enddate input').val()).getDate() + 1));
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
        if (pageAct.dateType == "day")
 | 
					        if (pageAct.dateType == "day")
 | 
				
			||||||
            end = new Date(new Date().setDate(start.getDate() + 1));
 | 
					            end = new Date(new Date().setDate(start.getDate() + 1));
 | 
				
			||||||
        else if (pageAct.dateType == "month") {
 | 
							else if (pageAct.dateType == "month") {
 | 
				
			||||||
            start = new Date($('#getmonth').val());
 | 
					            start = new Date($('#getmonth').val());
 | 
				
			||||||
            end = new Date(new Date().setDate(start.getDate() + 30));
 | 
					            end = new Date(new Date().setDate(start.getDate() + 30));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -382,57 +382,57 @@
 | 
				
			|||||||
            date = displayDate(date, type);
 | 
					            date = displayDate(date, type);
 | 
				
			||||||
            let month = date.split('/')[1];
 | 
					            let month = date.split('/')[1];
 | 
				
			||||||
            let year = date.split('/')[0];
 | 
					            let year = date.split('/')[0];
 | 
				
			||||||
            let day = date.split('/')[2];
 | 
								         let day= date.split('/')[2];
 | 
				
			||||||
            return month + "/" + day + "/" + year;
 | 
					            return month + "/" + day + "/" + year;
 | 
				
			||||||
        }
 | 
							}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function loadTable(data) {
 | 
					    function loadTable(data) {
 | 
				
			||||||
        if (data) {
 | 
					        if (data) {
 | 
				
			||||||
            $.each(data, function (i, v) {
 | 
					            $.each(data, function (i, v) {
 | 
				
			||||||
                // console.log("loadTable",pageAct.devicePoiName.split(" ")[0])
 | 
					                // console.log("loadTable",pageAct.devicePoiName.split(" ")[0])
 | 
				
			||||||
                v.type = pageAct.devicePoiName.split(" ")[0];
 | 
									v.type = pageAct.devicePoiName.split(" ")[0];
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let tag = "#historyTable";
 | 
							let tag = "#historyTable";
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        let column_defs = [
 | 
							let column_defs = [
 | 
				
			||||||
            { "targets": [0], "width": "20%", "sortable": true },
 | 
								{ "targets": [0], "width": "20%", "sortable": true },
 | 
				
			||||||
            { "targets": [1], "width": "20%", "sortable": true },
 | 
								{ "targets": [1], "width": "20%", "sortable": true },
 | 
				
			||||||
            { "targets": [2], "width": "20%", "sortable": true }
 | 
					            { "targets": [2], "width": "20%", "sortable": true }
 | 
				
			||||||
        ];
 | 
							];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let columns = [
 | 
					        let columns = [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                "title": "類別",
 | 
					                "title": "類別",
 | 
				
			||||||
                "data": "type"
 | 
					                "data": "type"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            {
 | 
								{
 | 
				
			||||||
                "title": "設備名稱",
 | 
									"title": "設備名稱",
 | 
				
			||||||
                "data": "deviceName",
 | 
									"data": "deviceName",
 | 
				
			||||||
            },
 | 
								},
 | 
				
			||||||
            {
 | 
								{
 | 
				
			||||||
                "title": "數值",
 | 
									"title": "數值",
 | 
				
			||||||
                "data": "value",
 | 
					                "data": "value",
 | 
				
			||||||
                "render": function (data) {
 | 
					                "render": function (data) {
 | 
				
			||||||
                    if (isNaN(data)) {
 | 
					                    if(isNaN(data)){
 | 
				
			||||||
                        return data
 | 
					                        return data
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    return data.roundDecimal(2);
 | 
					                    return data.roundDecimal(2);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
								},
 | 
				
			||||||
            {
 | 
								{
 | 
				
			||||||
                "title": "紀錄時間",
 | 
									"title": "紀錄時間",
 | 
				
			||||||
                "data": "timestamp",
 | 
					                "data": "timestamp",
 | 
				
			||||||
                "render": function (data) {
 | 
					                "render": function (data) {
 | 
				
			||||||
                    // console.log(data)
 | 
					                    // console.log(data)
 | 
				
			||||||
                    return displayDate(data, "datetime");
 | 
										return displayDate(data, "datetime");
 | 
				
			||||||
                }
 | 
									}
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        historyTable = new YourTeam.JqDataTables.getTableByStatic(tag, data, columns, column_defs, null, null, null, null, "tpi");
 | 
							historyTable = new YourTeam.JqDataTables.getTableByStatic(tag, data, columns, column_defs, null, null, null, null, "tpi");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function exportExcel() {
 | 
					    function exportExcel() {
 | 
				
			||||||
@ -440,14 +440,14 @@
 | 
				
			|||||||
        objSendData.Data = $('#historyTable').dataTable().fnGetData();
 | 
					        objSendData.Data = $('#historyTable').dataTable().fnGetData();
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        $.each(objSendData.Data, function (i, v) {
 | 
					        $.each(objSendData.Data, function (i, v) {
 | 
				
			||||||
            v.starttime = (pageAct.dateType == "month" ? new Date($('#getmonth').val()) : new Date($('#his_startdate').val()));
 | 
								v.starttime = (pageAct.dateType == "month" ? new Date($('#getmonth').val()) : new Date($('#his_startdate').val()));
 | 
				
			||||||
            v.endtime = $('#his_enddate input').val() === "" ? null : new Date($('#his_enddate input').val());
 | 
					            v.endtime = $('#his_enddate input').val() === "" ? null : new Date($('#his_enddate input').val());
 | 
				
			||||||
            v.dateType = pageAct.dateType;
 | 
					            v.dateType = pageAct.dateType;
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ytAjax = new YourTeam.Ajax(url, objSendData, function (rel) {
 | 
					        ytAjax = new YourTeam.Ajax(url, objSendData, function (rel) {
 | 
				
			||||||
            if (rel.code == "0000")
 | 
					            if (rel.code == "0000")
 | 
				
			||||||
                location.href = baseApiUrl + "/api/df?path=" + rel.data.split('/')[0] + "&fileName=" + rel.data.split('/')[1] + "&token=" + cookies.get("JWT-Authorization");
 | 
									location.href = baseApiUrl + "/api/df?path=" + rel.data.split('/')[0] + "&fileName=" + rel.data.split('/')[1] + "&token=" + cookies.get("JWT-Authorization");
 | 
				
			||||||
        }, null, "POST").send();
 | 
					        }, null, "POST").send();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
@ -633,7 +633,7 @@
 | 
				
			|||||||
				{
 | 
									{
 | 
				
			||||||
					"title": "異常代號",
 | 
										"title": "異常代號",
 | 
				
			||||||
					"data": "error_code",
 | 
										"data": "error_code",
 | 
				
			||||||
					render: (data) => {
 | 
										render:(data)=>{
 | 
				
			||||||
						return data?.split('-')[0] || '';
 | 
											return data?.split('-')[0] || '';
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
@ -751,7 +751,7 @@
 | 
				
			|||||||
				{
 | 
									{
 | 
				
			||||||
					"title": "異常代號",
 | 
										"title": "異常代號",
 | 
				
			||||||
					"data": "error_code",
 | 
										"data": "error_code",
 | 
				
			||||||
					render: (data) => {
 | 
										render:(data)=>{
 | 
				
			||||||
						return data?.split('-')[0] || '';
 | 
											return data?.split('-')[0] || '';
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
 | 
				
			|||||||
@ -1,61 +1,25 @@
 | 
				
			|||||||
<style>
 | 
					<style>
 | 
				
			||||||
    .elevator {
 | 
					    .elevator { background-color: #fff; min-height: 520px; }
 | 
				
			||||||
        background-color: #fff;
 | 
					 | 
				
			||||||
        min-height: 520px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .elevator-table-wrapper {
 | 
					    .elevator-table-wrapper { padding: 0.8rem; }
 | 
				
			||||||
        padding: 0.8rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    table.elevator-build { /*border: 1px double #000;*/
 | 
					    table.elevator-build { /*border: 1px double #000;*/ }
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        table.elevator-build td {
 | 
					    table.elevator-build td { padding: 0.2rem 0.5rem; height: 50px; width: 45px; border: 1px solid #000; }
 | 
				
			||||||
            padding: 0.2rem 0.5rem;
 | 
					 | 
				
			||||||
            height: 50px;
 | 
					 | 
				
			||||||
            width: 45px;
 | 
					 | 
				
			||||||
            border: 1px solid #000;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    elevator .elevator-body, elevator .elevator-header {
 | 
					    elevator .elevator-body, elevator .elevator-header { padding: 0.7rem; }
 | 
				
			||||||
        padding: 0.7rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .elevator-item {
 | 
					    .elevator-item { position: absolute; width: 43px; height: 47px; border: 4px solid orange; }
 | 
				
			||||||
        position: absolute;
 | 
					 | 
				
			||||||
        width: 43px;
 | 
					 | 
				
			||||||
        height: 47px;
 | 
					 | 
				
			||||||
        border: 4px solid orange;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .elevator-item-toup {
 | 
					    .elevator-item-toup { border: 4px solid rgba(255,255,255,0); position: absolute; border-bottom: 0; z-index: 2; }
 | 
				
			||||||
        border: 4px solid rgba(255,255,255,0);
 | 
					 | 
				
			||||||
        position: absolute;
 | 
					 | 
				
			||||||
        border-bottom: 0;
 | 
					 | 
				
			||||||
        z-index: 2;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .elevator-item-todown {
 | 
					    .elevator-item-todown { border: 4px solid rgba(255,255,255,0); position: absolute; border-top: 0; z-index: 2; }
 | 
				
			||||||
        border: 4px solid rgba(255,255,255,0);
 | 
					 | 
				
			||||||
        position: absolute;
 | 
					 | 
				
			||||||
        border-top: 0;
 | 
					 | 
				
			||||||
        z-index: 2;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .table-compact td {
 | 
					    .table-compact td { padding: 0.2rem 0.3rem; }
 | 
				
			||||||
        padding: 0.2rem 0.3rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #emerTurn tr td:nth-child(2) {
 | 
					    #emerTurn tr td:nth-child(2) { width: 50%; text-align: center; justify-content: center; }
 | 
				
			||||||
        width: 50%;
 | 
					 | 
				
			||||||
        text-align: center;
 | 
					 | 
				
			||||||
        justify-content: center;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #emerTurn tr td:nth-child(1) {
 | 
					    #emerTurn tr td:nth-child(1) { width: 35%; }
 | 
				
			||||||
        width: 35%;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<div class="d-flex">
 | 
					<div class="d-flex">
 | 
				
			||||||
@ -1014,7 +978,7 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        //現在樓層
 | 
					        //現在樓層
 | 
				
			||||||
        if (data.point_name == "CP") {            
 | 
					        if (data.point_name == "CP") {            
 | 
				
			||||||
            //console.log("電梯樓層", matchDevice.device_number, data.value)
 | 
					            console.log("電梯樓層", matchDevice.device_number, data.value)
 | 
				
			||||||
            $(`#${matchDevice.device_number}_card [name=curFloor]`).text(data.value);
 | 
					            $(`#${matchDevice.device_number}_card [name=curFloor]`).text(data.value);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,100 +1,320 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
:root { --yt-main-gray: #c2c7d0; --yt-main-black: #212529; --yt-main-gray-hover: #c2c7d0; --yt-gray: #505050; --yt-gray-hover: #3c3c3c; --yt-gray-2: #8f8c8c; --yt-gray-2-hover: #646060; --yt-gray-3: #ededed; --yt-gray-4: #dddddd; --yt-pink: #ff95d0; --yt-pink-hover: #ef84c0; --yt-red-2: #d34949; --yt-yellow-1: #ffc902; }
 | 
					:root {
 | 
				
			||||||
 | 
					  --yt-main-gray: #c2c7d0;
 | 
				
			||||||
 | 
					  --yt-main-black: #212529;
 | 
				
			||||||
 | 
					  --yt-main-gray-hover: #c2c7d0;
 | 
				
			||||||
 | 
					  --yt-gray: #505050;
 | 
				
			||||||
 | 
					  --yt-gray-hover: #3c3c3c;
 | 
				
			||||||
 | 
					  --yt-gray-2: #8f8c8c;
 | 
				
			||||||
 | 
					  --yt-gray-2-hover: #646060;
 | 
				
			||||||
 | 
					  --yt-gray-3: #ededed;
 | 
				
			||||||
 | 
					  --yt-gray-4: #dddddd;
 | 
				
			||||||
 | 
					  --yt-pink: #ff95d0;
 | 
				
			||||||
 | 
					  --yt-pink-hover: #ef84c0;
 | 
				
			||||||
 | 
					  --yt-red-2: #d34949;
 | 
				
			||||||
 | 
					  --yt-yellow-1: #ffc902;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.mod-skin-dark:not(.mod-skin-light) .panel-hdr, .mod-skin-dark:not(.mod-skin-light) .card-header { background: rgba(0, 0, 0, 0.03); }
 | 
					.mod-skin-dark:not(.mod-skin-light) .panel-hdr, .mod-skin-dark:not(.mod-skin-light) .card-header {
 | 
				
			||||||
 | 
					  background: rgba(0, 0, 0, 0.03);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-sm-2 { padding: 2px 19px; }
 | 
					.btn-sm-2 {
 | 
				
			||||||
 | 
					  padding: 2px 19px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.table td { word-break: break-all; }
 | 
					.table td {
 | 
				
			||||||
 | 
					  word-break: break-all;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
label[id$='-error'].error { color: var(--yt-red-2); }
 | 
					label[id$='-error'].error {
 | 
				
			||||||
 | 
					  color: var(--yt-red-2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*[id^=yt_tooltip] { min-width: 650px !important; }*/
 | 
					/*[id^=yt_tooltip] { min-width: 650px !important; }*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.circle-light { display: inline-block; width: 25px; height: 25px; border-radius: 50px; }
 | 
					.circle-light {
 | 
				
			||||||
 | 
					  display: inline-block;
 | 
				
			||||||
 | 
					  width: 25px;
 | 
				
			||||||
 | 
					  height: 25px;
 | 
				
			||||||
 | 
					  border-radius: 50px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.light-flash { --flash-color-1: #ffa100; --flash-color-2: #26272b; animation: flashing-bg 0.5s linear infinite; }
 | 
					.light-flash {
 | 
				
			||||||
 | 
					  --flash-color-1: #ffa100;
 | 
				
			||||||
 | 
					  --flash-color-2: #26272b;
 | 
				
			||||||
 | 
					  animation: flashing-bg 0.5s linear infinite;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.light-flash-c { --flash-color-1: #ffa100; --flash-color-2: #26272b; animation: flashing-c 0.5s linear infinite; }
 | 
					.light-flash-c {
 | 
				
			||||||
 | 
					  --flash-color-1: #ffa100;
 | 
				
			||||||
 | 
					  --flash-color-2: #26272b;
 | 
				
			||||||
 | 
					  animation: flashing-c 0.5s linear infinite;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.light-flash-c-bd { --flash-color-1: #ffa100; --flash-color-2: #26272b; animation: flashing-c-bd 0.5s linear infinite; }
 | 
					.light-flash-c-bd {
 | 
				
			||||||
 | 
					  --flash-color-1: #ffa100;
 | 
				
			||||||
 | 
					  --flash-color-2: #26272b;
 | 
				
			||||||
 | 
					  animation: flashing-c-bd 0.5s linear infinite;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* checkbox switch */
 | 
					/* checkbox switch */
 | 
				
			||||||
input.toggle:checked::before { content: ''; position: absolute; top: 2px; left: 24px; display: block; border-radius: 25px; width: 20px; height: 20px; background: #3f8635; }
 | 
					input.toggle:checked::before {
 | 
				
			||||||
 | 
					  content: '';
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  top: 2px;
 | 
				
			||||||
 | 
					  left: 24px;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  border-radius: 25px;
 | 
				
			||||||
 | 
					  width: 20px;
 | 
				
			||||||
 | 
					  height: 20px;
 | 
				
			||||||
 | 
					  background: #3f8635;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
input.toggle::before { content: ''; position: absolute; top: 2px; left: 3px; display: block; border-radius: 25px; width: 20px; height: 20px; background: #656565; transition: 0.2s; }
 | 
					input.toggle::before {
 | 
				
			||||||
 | 
					  content: '';
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  top: 2px;
 | 
				
			||||||
 | 
					  left: 3px;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  border-radius: 25px;
 | 
				
			||||||
 | 
					  width: 20px;
 | 
				
			||||||
 | 
					  height: 20px;
 | 
				
			||||||
 | 
					  background: #656565;
 | 
				
			||||||
 | 
					  transition: 0.2s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
input.toggle { cursor: pointer; appearance: none; position: relative; width: 48px; height: 24px; background: #464646; border-radius: 50px; align-content: center; }
 | 
					input.toggle {
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  appearance: none;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  width: 48px;
 | 
				
			||||||
 | 
					  height: 24px;
 | 
				
			||||||
 | 
					  background: #464646;
 | 
				
			||||||
 | 
					  border-radius: 50px;
 | 
				
			||||||
 | 
					  align-content: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
input.toggle:checked { background: #97c193; }
 | 
					  input.toggle:checked {
 | 
				
			||||||
 | 
					    background: #97c193;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.loading-bg { background: #0000009c; background-repeat: no-repeat; opacity: 0; width: 100%; height: 100vh; position: fixed; z-index: 3000; }
 | 
					.loading-bg {
 | 
				
			||||||
 | 
					  background: #0000009c;
 | 
				
			||||||
 | 
					  background-repeat: no-repeat;
 | 
				
			||||||
 | 
					  opacity: 0;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  height: 100vh;
 | 
				
			||||||
 | 
					  position: fixed;
 | 
				
			||||||
 | 
					  z-index: 3000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dropdown-menu { z-index: 3000; }
 | 
					.dropdown-menu {
 | 
				
			||||||
 | 
					  z-index: 3000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.adsk-viewing-viewer { top: 0px; }
 | 
					.adsk-viewing-viewer {
 | 
				
			||||||
 | 
					  top: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.lds-ring { display: inline-block; position: relative; width: 25px; height: 25px; margin-right: 0.8rem; }
 | 
					.lds-ring {
 | 
				
			||||||
 | 
					  display: inline-block;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  width: 25px;
 | 
				
			||||||
 | 
					  height: 25px;
 | 
				
			||||||
 | 
					  margin-right: 0.8rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.lds-ring div { top: -4px; box-sizing: border-box; display: block; position: absolute; width: 25px; height: 25px; margin: 6px; border: 6px solid #fff; border-radius: 50%; animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; border-color: #fff transparent transparent transparent; }
 | 
					  .lds-ring div {
 | 
				
			||||||
 | 
					    top: -4px;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    width: 25px;
 | 
				
			||||||
 | 
					    height: 25px;
 | 
				
			||||||
 | 
					    margin: 6px;
 | 
				
			||||||
 | 
					    border: 6px solid #fff;
 | 
				
			||||||
 | 
					    border-radius: 50%;
 | 
				
			||||||
 | 
					    animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
 | 
				
			||||||
 | 
					    border-color: #fff transparent transparent transparent;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.lds-ring div:nth-child(1) { animation-delay: -0.45s; }
 | 
					    .lds-ring div:nth-child(1) {
 | 
				
			||||||
 | 
					      animation-delay: -0.45s;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.lds-ring div:nth-child(2) { animation-delay: -0.3s; }
 | 
					    .lds-ring div:nth-child(2) {
 | 
				
			||||||
 | 
					      animation-delay: -0.3s;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.lds-ring div:nth-child(3) { animation-delay: -0.15s; }
 | 
					    .lds-ring div:nth-child(3) {
 | 
				
			||||||
 | 
					      animation-delay: -0.15s;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* js-tree */
 | 
					/* js-tree */
 | 
				
			||||||
.jstree-node { padding-bottom: 3px; }
 | 
					.jstree-node {
 | 
				
			||||||
.jstree-default-dark { background-color: transparent; }
 | 
					  padding-bottom: 3px;
 | 
				
			||||||
.jstree a.jstree-anchor { color: #d6d6d6 !important; }
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dropzone .dz-preview.dz-file-preview .dz-image { background: linear-gradient(to bottom, #675d72, #4d4a56) !important; }
 | 
					.jstree-default-dark {
 | 
				
			||||||
 | 
					  background-color: transparent;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dz-remove { position: absolute; top: -8px; right: -8px; z-index: 100; }
 | 
					.jstree a.jstree-anchor {
 | 
				
			||||||
 | 
					  color: #d6d6d6 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dz-remove span { width: 30px; height: 30px; font-size: 24px; border-radius: 10px; color: white; cursor: pointer !important; padding-top: 3px; transition: 0.2s; }
 | 
					.dropzone .dz-preview.dz-file-preview .dz-image {
 | 
				
			||||||
 | 
					  background: linear-gradient(to bottom, #675d72, #4d4a56) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dz-remove span.mi-delete { background: var(--danger); }
 | 
					.dz-remove {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  top: -8px;
 | 
				
			||||||
 | 
					  right: -8px;
 | 
				
			||||||
 | 
					  z-index: 100;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dz-remove span.mi-cancel { font-size: 30px; color: var(--color_grey); }
 | 
					  .dz-remove span {
 | 
				
			||||||
 | 
					    width: 30px;
 | 
				
			||||||
 | 
					    height: 30px;
 | 
				
			||||||
 | 
					    font-size: 24px;
 | 
				
			||||||
 | 
					    border-radius: 10px;
 | 
				
			||||||
 | 
					    color: white;
 | 
				
			||||||
 | 
					    cursor: pointer !important;
 | 
				
			||||||
 | 
					    padding-top: 3px;
 | 
				
			||||||
 | 
					    transition: 0.2s;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dz-remove:hover span { transform: scale(1.1); transition: 0.2s; }
 | 
					    .dz-remove span.mi-delete {
 | 
				
			||||||
.dropzone .dz-preview.dz-image-preview { background-color: transparent !important; }
 | 
					      background: var(--danger);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
input:-webkit-autofill { background-color: rgba(0, 0, 0, 0.15) !important; }
 | 
					    .dz-remove span.mi-cancel {
 | 
				
			||||||
 | 
					      font-size: 30px;
 | 
				
			||||||
 | 
					      color: var(--color_grey);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.d-grid { display: grid; }
 | 
					  .dz-remove:hover span {
 | 
				
			||||||
 | 
					    transform: scale(1.1);
 | 
				
			||||||
 | 
					    transition: 0.2s;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.grid-gap-1 { grid-gap: 1px; }
 | 
					.dropzone .dz-preview.dz-image-preview {
 | 
				
			||||||
.grid-gap-2 { grid-gap: 2px; }
 | 
					  background-color: transparent !important;
 | 
				
			||||||
.grid-gap-3 { grid-gap: 3px; }
 | 
					}
 | 
				
			||||||
.grid-gap-4 { grid-gap: 4px; }
 | 
					 | 
				
			||||||
.grid-gap-5 { grid-gap: 5px; }
 | 
					 | 
				
			||||||
.grid-gap-c { grid-gap: var(--c-grid-gap); }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
.grid-temp-col-c { grid-template-columns: var(--c-grid-temp-col); }
 | 
					input:-webkit-autofill {
 | 
				
			||||||
 | 
					  background-color: rgba(0, 0, 0, 0.15) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.vakata-context, .vakata-context ul { background-color: #3f3f3f; box-shadow: 2px 2px 2px #111111; }
 | 
					.d-grid {
 | 
				
			||||||
.vakata-context li > a { color: white; text-shadow: 1px 1px 0 #4b4b4b; }
 | 
					  display: grid;
 | 
				
			||||||
.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: rgb(25 25 25 / 95%); width: auto; max-width: 300px; margin-top: 4.125rem; }
 | 
					.grid-gap-1 {
 | 
				
			||||||
.yt-navbar-content ul { padding: 1rem 0rem; list-style-type: none; }
 | 
					  grid-gap: 1px;
 | 
				
			||||||
.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-light); }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
.card-header.p-3.ui-draggable-handle:hover { cursor: move; }
 | 
					.grid-gap-2 {
 | 
				
			||||||
 | 
					  grid-gap: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.device-wrap .card-body #info, .device-wrap .card-body #errRec, .device-wrap .card-body #opeRec { min-width: 500px; }
 | 
					.grid-gap-3 {
 | 
				
			||||||
.scrolledTable { overflow-y: auto; clear: both; max-height:100%;}
 | 
					  grid-gap: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.grid-gap-4 {
 | 
				
			||||||
 | 
					  grid-gap: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.grid-gap-5 {
 | 
				
			||||||
 | 
					  grid-gap: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.grid-gap-c {
 | 
				
			||||||
 | 
					  grid-gap: var(--c-grid-gap);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.grid-temp-col-c {
 | 
				
			||||||
 | 
					  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: rgb(25 25 25 / 95%);
 | 
				
			||||||
 | 
					  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-light);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.card-header.p-3.ui-draggable-handle:hover {
 | 
				
			||||||
 | 
					  cursor: move;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.device-wrap .card-body #info, .device-wrap .card-body #errRec, .device-wrap .card-body #opeRec {
 | 
				
			||||||
 | 
					  min-width: 500px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.scrolledTable {
 | 
				
			||||||
 | 
					  overflow-y: auto;
 | 
				
			||||||
 | 
					  clear: both;
 | 
				
			||||||
 | 
					  max-height: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#toast-container > div {
 | 
					#toast-container > div {
 | 
				
			||||||
    width:330px !important;
 | 
					  width: 330px !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*a[data-tabname="topFunBtn"] { color: #fff }
 | 
					/*a[data-tabname="topFunBtn"] { color: #fff }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -106,216 +326,417 @@ a[data-tabname="topFunBtn"]:hover { color: var(--theme-primary-50); }
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
.userblock:hover { color: var(--theme-primary-50); }
 | 
					.userblock:hover { color: var(--theme-primary-50); }
 | 
				
			||||||
.dropdown.show .userblock { color: var(--theme-primary-50) !important; }*/
 | 
					.dropdown.show .userblock { color: var(--theme-primary-50) !important; }*/
 | 
				
			||||||
.page-header a, #sysMonBtnList a { color: #fff !important; }
 | 
					.page-header a, #sysMonBtnList a {
 | 
				
			||||||
.page-header a:hover, #sysMonBtnList a:hover { color: var(--theme-primary-50) !important; }
 | 
					  color: #fff !important;
 | 
				
			||||||
.page-header a.active, #sysMonBtnList a.active { color: var(--theme-primary-500) !important; }
 | 
					}
 | 
				
			||||||
.dropdown.show a { color: var(--theme-primary-50) !important; }
 | 
					
 | 
				
			||||||
@media screen and (max-width: 576px) { .yt-left-navbar { width: 100%; max-width: 100%; margin-top: 0; }
 | 
					  .page-header a:hover, #sysMonBtnList a:hover {
 | 
				
			||||||
 | 
					    color: var(--theme-primary-50) !important;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .page-header a.active, #sysMonBtnList a.active {
 | 
				
			||||||
 | 
					    color: var(--theme-primary-500) !important;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.dropdown.show a {
 | 
				
			||||||
 | 
					  color: var(--theme-primary-50) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media screen and (max-width: 576px) {
 | 
				
			||||||
 | 
					  .yt-left-navbar {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    max-width: 100%;
 | 
				
			||||||
 | 
					    margin-top: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@keyframes lds-ring {
 | 
					@keyframes lds-ring {
 | 
				
			||||||
    0% { transform: rotate(0deg); }
 | 
					  0% {
 | 
				
			||||||
 | 
					    transform: rotate(0deg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    100% { transform: rotate(360deg); }
 | 
					  100% {
 | 
				
			||||||
 | 
					    transform: rotate(360deg);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@keyframes flashing-c {
 | 
					@keyframes flashing-c {
 | 
				
			||||||
    0% { color: var(--flash-color-1); }
 | 
					  0% {
 | 
				
			||||||
 | 
					    color: var(--flash-color-1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    49% { color: var(--flash-color-1); }
 | 
					  49% {
 | 
				
			||||||
 | 
					    color: var(--flash-color-1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    50% { color: var(--flash-color-2); }
 | 
					  50% {
 | 
				
			||||||
 | 
					    color: var(--flash-color-2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    99% { color: var(--flash-color-2); }
 | 
					  99% {
 | 
				
			||||||
 | 
					    color: var(--flash-color-2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@keyframes flashing-bg {
 | 
					@keyframes flashing-bg {
 | 
				
			||||||
    0% { background: var(--flash-color-1); }
 | 
					  0% {
 | 
				
			||||||
 | 
					    background: var(--flash-color-1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    49% { background: var(--flash-color-1); }
 | 
					  49% {
 | 
				
			||||||
 | 
					    background: var(--flash-color-1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    50% { background: var(--flash-color-2); }
 | 
					  50% {
 | 
				
			||||||
 | 
					    background: var(--flash-color-2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    99% { background: var(--flash-color-2); }
 | 
					  99% {
 | 
				
			||||||
 | 
					    background: var(--flash-color-2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@keyframes flashing-c-bd {
 | 
					@keyframes flashing-c-bd {
 | 
				
			||||||
    0% { border-color: var(--flash-color-1); }
 | 
					  0% {
 | 
				
			||||||
 | 
					    border-color: var(--flash-color-1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    49% { border-color: var(--flash-color-1); }
 | 
					  49% {
 | 
				
			||||||
 | 
					    border-color: var(--flash-color-1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    50% { border-color: var(--flash-color-2); }
 | 
					  50% {
 | 
				
			||||||
 | 
					    border-color: var(--flash-color-2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    99% { border-color: var(--flash-color-2); }
 | 
					  99% {
 | 
				
			||||||
 | 
					    border-color: var(--flash-color-2);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/* ================================================================ */
 | 
					/* ================================================================ */
 | 
				
			||||||
/*                             單一方法                             */
 | 
					/*                             單一方法                             */
 | 
				
			||||||
/* ================================================================ */
 | 
					/* ================================================================ */
 | 
				
			||||||
/* cursor */
 | 
					/* cursor */
 | 
				
			||||||
.cur-def { cursor: default !important; }
 | 
					.cur-def {
 | 
				
			||||||
 | 
					  cursor: default !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.cur-poi { cursor: pointer !important; }
 | 
					.cur-poi {
 | 
				
			||||||
 | 
					  cursor: pointer !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*left 距離*/
 | 
					/*left 距離*/
 | 
				
			||||||
.left-05 { left: 0.5rem !important; }
 | 
					.left-05 {
 | 
				
			||||||
 | 
					  left: 0.5rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.left-04 { left: 0.4rem !important; }
 | 
					.left-04 {
 | 
				
			||||||
 | 
					  left: 0.4rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.left-03 { left: 0.3rem !important; }
 | 
					.left-03 {
 | 
				
			||||||
 | 
					  left: 0.3rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.left-02 { left: 0.2rem !important; }
 | 
					.left-02 {
 | 
				
			||||||
 | 
					  left: 0.2rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.left-01 { left: 0.1rem !important; }
 | 
					.left-01 {
 | 
				
			||||||
 | 
					  left: 0.1rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*right 距離*/
 | 
					/*right 距離*/
 | 
				
			||||||
.right-05 { right: 0.5rem !important; }
 | 
					.right-05 {
 | 
				
			||||||
 | 
					  right: 0.5rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.right-04 { right: 0.4rem !important; }
 | 
					.right-04 {
 | 
				
			||||||
 | 
					  right: 0.4rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.right-03 { right: 0.3rem !important; }
 | 
					.right-03 {
 | 
				
			||||||
 | 
					  right: 0.3rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.right-02 { right: 0.2rem !important; }
 | 
					.right-02 {
 | 
				
			||||||
 | 
					  right: 0.2rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.right-01 { right: 0.1rem !important; }
 | 
					.right-01 {
 | 
				
			||||||
 | 
					  right: 0.1rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*bottom 0.5rem*/
 | 
					/*bottom 0.5rem*/
 | 
				
			||||||
.bm-05 { bottom: 0.5rem !important; }
 | 
					.bm-05 {
 | 
				
			||||||
 | 
					  bottom: 0.5rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bm-04 { bottom: 0.4rem !important; }
 | 
					.bm-04 {
 | 
				
			||||||
 | 
					  bottom: 0.4rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bm-03 { bottom: 0.3rem !important; }
 | 
					.bm-03 {
 | 
				
			||||||
 | 
					  bottom: 0.3rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bm-02 { bottom: 0.2rem !important; }
 | 
					.bm-02 {
 | 
				
			||||||
 | 
					  bottom: 0.2rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bm-01 { bottom: 0.1rem !important; }
 | 
					.bm-01 {
 | 
				
			||||||
 | 
					  bottom: 0.1rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*top 0.5rem*/
 | 
					/*top 0.5rem*/
 | 
				
			||||||
.tp-05 { top: 0.5rem !important; }
 | 
					.tp-05 {
 | 
				
			||||||
 | 
					  top: 0.5rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tp-04 { top: 0.4rem !important; }
 | 
					.tp-04 {
 | 
				
			||||||
 | 
					  top: 0.4rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tp-03 { top: 0.3rem !important; }
 | 
					.tp-03 {
 | 
				
			||||||
 | 
					  top: 0.3rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tp-02 { top: 0.2rem !important; }
 | 
					.tp-02 {
 | 
				
			||||||
 | 
					  top: 0.2rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tp-01 { top: 0.1rem !important; }
 | 
					.tp-01 {
 | 
				
			||||||
 | 
					  top: 0.1rem !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* font-weight */
 | 
					/* font-weight */
 | 
				
			||||||
.fw-1 { font-weight: 100; }
 | 
					.fw-1 {
 | 
				
			||||||
 | 
					  font-weight: 100;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fw-2 { font-weight: 200; }
 | 
					.fw-2 {
 | 
				
			||||||
 | 
					  font-weight: 200;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fw-3 { font-weight: 300; }
 | 
					.fw-3 {
 | 
				
			||||||
 | 
					  font-weight: 300;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fw-4 { font-weight: 400; }
 | 
					.fw-4 {
 | 
				
			||||||
 | 
					  font-weight: 400;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fw-5 { font-weight: 500; }
 | 
					.fw-5 {
 | 
				
			||||||
 | 
					  font-weight: 500;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fw-6 { font-weight: 600; }
 | 
					.fw-6 {
 | 
				
			||||||
 | 
					  font-weight: 600;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fw-7 { font-weight: 700; }
 | 
					.fw-7 {
 | 
				
			||||||
 | 
					  font-weight: 700;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fw-8 { font-weight: 800; }
 | 
					.fw-8 {
 | 
				
			||||||
 | 
					  font-weight: 800;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fw-9 { font-weight: 900; }
 | 
					.fw-9 {
 | 
				
			||||||
 | 
					  font-weight: 900;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* font-size */
 | 
					/* font-size */
 | 
				
			||||||
.fs-05 { font-size: 0.5rem; }
 | 
					.fs-05 {
 | 
				
			||||||
 | 
					  font-size: 0.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-075 { font-size: 0.75rem; }
 | 
					.fs-075 {
 | 
				
			||||||
 | 
					  font-size: 0.75rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-09 { font-size: 0.9rem; }
 | 
					.fs-09 {
 | 
				
			||||||
 | 
					  font-size: 0.9rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-1 { font-size: 1rem; }
 | 
					.fs-1 {
 | 
				
			||||||
 | 
					  font-size: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-1-05 { font-size: 1.05rem; }
 | 
					.fs-1-05 {
 | 
				
			||||||
 | 
					  font-size: 1.05rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-1-1 { font-size: 1.1rem; }
 | 
					.fs-1-1 {
 | 
				
			||||||
 | 
					  font-size: 1.1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-1-2 { font-size: 1.2rem; }
 | 
					.fs-1-2 {
 | 
				
			||||||
 | 
					  font-size: 1.2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-1-3 { font-size: 1.3rem; }
 | 
					.fs-1-3 {
 | 
				
			||||||
 | 
					  font-size: 1.3rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-1-5 { font-size: 1.5rem; }
 | 
					.fs-1-5 {
 | 
				
			||||||
 | 
					  font-size: 1.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-2 { font-size: 2rem; }
 | 
					.fs-2 {
 | 
				
			||||||
 | 
					  font-size: 2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.fs-2-5 { font-size: 2.5rem; }
 | 
					.fs-2-5 {
 | 
				
			||||||
 | 
					  font-size: 2.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* border width */
 | 
					/* border width */
 | 
				
			||||||
.bd-0 { border-width: 0px; }
 | 
					.bd-0 {
 | 
				
			||||||
 | 
					  border-width: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bd-1 { border-width: 1px; }
 | 
					.bd-1 {
 | 
				
			||||||
 | 
					  border-width: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bd-2 { border-width: 2px; }
 | 
					.bd-2 {
 | 
				
			||||||
 | 
					  border-width: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* border direction */
 | 
					/* border direction */
 | 
				
			||||||
.bd-l { border-left-style: solid; }
 | 
					.bd-l {
 | 
				
			||||||
 | 
					  border-left-style: solid;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bd-r { border-right-style: solid; }
 | 
					.bd-r {
 | 
				
			||||||
 | 
					  border-right-style: solid;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bd-t { border-top-style: solid; }
 | 
					.bd-t {
 | 
				
			||||||
 | 
					  border-top-style: solid;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bd-b { border-bottom-style: solid; }
 | 
					.bd-b {
 | 
				
			||||||
 | 
					  border-bottom-style: solid;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* border radius */
 | 
					/* border radius */
 | 
				
			||||||
.br-1 { border-radius: 1px; }
 | 
					.br-1 {
 | 
				
			||||||
 | 
					  border-radius: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.br-2 { border-radius: 2px; }
 | 
					.br-2 {
 | 
				
			||||||
 | 
					  border-radius: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.br-3 { border-radius: 3px; }
 | 
					.br-3 {
 | 
				
			||||||
 | 
					  border-radius: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.br-4 { border-radius: 4px; }
 | 
					.br-4 {
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.br-5 { border-radius: 5px; }
 | 
					.br-5 {
 | 
				
			||||||
 | 
					  border-radius: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* flex-gap */
 | 
					/* flex-gap */
 | 
				
			||||||
.gap-1 { gap: 1px; }
 | 
					.gap-1 {
 | 
				
			||||||
 | 
					  gap: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-2 { gap: 2px; }
 | 
					.gap-2 {
 | 
				
			||||||
 | 
					  gap: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-3 { gap: 3px; }
 | 
					.gap-3 {
 | 
				
			||||||
 | 
					  gap: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-4 { gap: 4px; }
 | 
					.gap-4 {
 | 
				
			||||||
 | 
					  gap: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-5 { gap: 5px; }
 | 
					.gap-5 {
 | 
				
			||||||
 | 
					  gap: 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-6 { gap: 6px; }
 | 
					.gap-6 {
 | 
				
			||||||
 | 
					  gap: 6px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-7 { gap: 7px; }
 | 
					.gap-7 {
 | 
				
			||||||
 | 
					  gap: 7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-8 { gap: 8px; }
 | 
					.gap-8 {
 | 
				
			||||||
 | 
					  gap: 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* vertical-align */
 | 
					/* vertical-align */
 | 
				
			||||||
.va-t { vertical-align: top; }
 | 
					.va-t {
 | 
				
			||||||
 | 
					  vertical-align: top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.va-m { vertical-align: middle; }
 | 
					.va-m {
 | 
				
			||||||
 | 
					  vertical-align: middle;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.va-b { vertical-align: bottom; }
 | 
					.va-b {
 | 
				
			||||||
 | 
					  vertical-align: bottom;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bg-orange { background-color: #ffa100; }
 | 
					.bg-orange {
 | 
				
			||||||
 | 
					  background-color: #ffa100;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* text color */
 | 
					/* text color */
 | 
				
			||||||
.t-main-purple { color: #623c80 !important; }
 | 
					.t-main-purple {
 | 
				
			||||||
 | 
					  color: #623c80 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-black { color: #000 !important; }
 | 
					.t-black {
 | 
				
			||||||
 | 
					  color: #000 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-white { color: #fff !important; }
 | 
					.t-white {
 | 
				
			||||||
 | 
					  color: #fff !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-fb-blue { color: #466ac2 !important; }
 | 
					.t-fb-blue {
 | 
				
			||||||
 | 
					  color: #466ac2 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-line-green { color: #54C814 !important; }
 | 
					.t-line-green {
 | 
				
			||||||
 | 
					  color: #54C814 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-red { color: #db0000 !important; }
 | 
					.t-red {
 | 
				
			||||||
 | 
					  color: #db0000 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-red-2 { color: var(--yt-red-2) !important; }
 | 
					.t-red-2 {
 | 
				
			||||||
 | 
					  color: var(--yt-red-2) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-gray { color: var(--yt-gray); }
 | 
					.t-gray {
 | 
				
			||||||
 | 
					  color: var(--yt-gray);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-main-gray { color: var(--yt-main-gray); }
 | 
					.t-main-gray {
 | 
				
			||||||
 | 
					  color: var(--yt-main-gray);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-gray-2 { color: var(--yt-gray-2) !important; }
 | 
					.t-gray-2 {
 | 
				
			||||||
 | 
					  color: var(--yt-gray-2) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-gray-3 { color: var(--yt-gray-3); }
 | 
					.t-gray-3 {
 | 
				
			||||||
 | 
					  color: var(--yt-gray-3);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.t-yellow { color: var(--yt-yellow-1); }
 | 
					.t-yellow {
 | 
				
			||||||
 | 
					  color: var(--yt-yellow-1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,17 @@
 | 
				
			|||||||
<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" version="1.1">
 | 
					<svg width="164" height="164" viewBox="0 0 164 164" fill="none" xmlns="http://www.w3.org/2000/svg">
 | 
				
			||||||
 | 
						<g filter="url(#filter0_d)">
 | 
				
			||||||
 <g>
 | 
							<circle cx="81.7363" cy="81.8212" r="70.3389" fill="white"/>
 | 
				
			||||||
  <title>Layer 1</title>
 | 
							<!-- <circle cx="81.7363" cy="81.8212" r="62.3112" stroke="white" stroke-width="16.0554"/> -->
 | 
				
			||||||
  <circle fill="none" id="svg_1" r="8" cy="8" cx="8"/>
 | 
						</g>
 | 
				
			||||||
 </g>
 | 
						<defs>
 | 
				
			||||||
 | 
							<filter id="filter0_d" x="0.174763" y="0.259602" width="163.123" height="163.123" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
 | 
				
			||||||
 | 
								<feFlood flood-opacity="0" result="BackgroundImageFix"/>
 | 
				
			||||||
 | 
								<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/>
 | 
				
			||||||
 | 
								<feOffset/>
 | 
				
			||||||
 | 
								<feGaussianBlur stdDeviation="5.61135"/>
 | 
				
			||||||
 | 
								<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
 | 
				
			||||||
 | 
								<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow"/>
 | 
				
			||||||
 | 
								<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow" result="shape"/>
 | 
				
			||||||
 | 
							</filter>
 | 
				
			||||||
 | 
						</defs>
 | 
				
			||||||
</svg>
 | 
					</svg>
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 197 B After Width: | Height: | Size: 955 B  | 
							
								
								
									
										3443
									
								
								Frontend/index.html
									
									
									
									
									
								
							
							
						
						
									
										3443
									
								
								Frontend/index.html
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -798,7 +798,6 @@ async function addHotPoint(data) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    const viewableData = new DataVizCore.ViewableData();
 | 
					    const viewableData = new DataVizCore.ViewableData();
 | 
				
			||||||
    viewableData.spriteSize = 24; // Sprites as points of size 24 x 24 pixels
 | 
					    viewableData.spriteSize = 24; // Sprites as points of size 24 x 24 pixels
 | 
				
			||||||
    console.log()
 | 
					 | 
				
			||||||
    myDataList.forEach((myData, index) => {
 | 
					    myDataList.forEach((myData, index) => {
 | 
				
			||||||
        const dbId = 10 + index;
 | 
					        const dbId = 10 + index;
 | 
				
			||||||
        const myPosition = myData.position;
 | 
					        const myPosition = myData.position;
 | 
				
			||||||
@ -820,7 +819,7 @@ async function addHotPoint(data) {
 | 
				
			|||||||
                // console.log(`Sprite clicked: ${event.dbId}`);
 | 
					                // console.log(`Sprite clicked: ${event.dbId}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                for (let i = dbIdStart; i <= myDataList.length + 10; i++) {
 | 
					                for (let i = dbIdStart; i <= myDataList.length + 10; i++) {
 | 
				
			||||||
                    changeColorForHotspot(i);
 | 
					                    !alarmDbIdList.some(dbId => dbId == i) && changeColorForHotspot(i);
 | 
				
			||||||
                    changeScaleForHotspot(i, true);
 | 
					                    changeScaleForHotspot(i, true);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                let myData = myDataList.filter(x => x._dbId == event.dbId)[0];
 | 
					                let myData = myDataList.filter(x => x._dbId == event.dbId)[0];
 | 
				
			||||||
@ -831,7 +830,7 @@ async function addHotPoint(data) {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                $(selector).trigger("autodesk:click:sprite", { event, myData });
 | 
					                $(selector).trigger("autodesk:click:sprite", { event, myData });
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                changeColorForHotspot(event.dbId, null);
 | 
					                !alarmDbIdList.some(dbId => dbId == i) && changeColorForHotspot(event.dbId, null);
 | 
				
			||||||
                changeScaleForHotspot(event.dbId, false);
 | 
					                changeScaleForHotspot(event.dbId, false);
 | 
				
			||||||
                $(selector).trigger("autodesk:clickOut:sprite", { event });
 | 
					                $(selector).trigger("autodesk:clickOut:sprite", { event });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -881,7 +880,6 @@ async function addHotPoint(data) {
 | 
				
			|||||||
// 熱點 更換顏色
 | 
					// 熱點 更換顏色
 | 
				
			||||||
async function changeColorForHotspot(dbId, type = null) {
 | 
					async function changeColorForHotspot(dbId, type = null) {
 | 
				
			||||||
    const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
 | 
					    const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization");
 | 
				
			||||||
    // console.log(dbId, dataVizExtn.viewableData.getViewableColor(dbId, false))
 | 
					 | 
				
			||||||
    let spriteColorFocus = new THREE.Color(0xffffff);
 | 
					    let spriteColorFocus = new THREE.Color(0xffffff);
 | 
				
			||||||
    if (type == "focus" && pageAct.sysSubTag !== "M12") {
 | 
					    if (type == "focus" && pageAct.sysSubTag !== "M12") {
 | 
				
			||||||
        spriteColorFocus = new THREE.Color(0x00ffe1);
 | 
					        spriteColorFocus = new THREE.Color(0x00ffe1);
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -35,6 +35,7 @@ class subscriptionDevices {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setSubscribeDevicesCallBack = function (callBackFunc) {
 | 
					    setSubscribeDevicesCallBack = function (callBackFunc) {
 | 
				
			||||||
 | 
					        // console.log(callBackFunc)
 | 
				
			||||||
        if (callBackFunc != undefined && callBackFunc != null) {
 | 
					        if (callBackFunc != undefined && callBackFunc != null) {
 | 
				
			||||||
            this.changeCallback = callBackFunc;
 | 
					            this.changeCallback = callBackFunc;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -55,6 +56,8 @@ class subscriptionDevices {
 | 
				
			|||||||
            var sub = new baja.Subscriber();
 | 
					            var sub = new baja.Subscriber();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sub.attach('changed', function (prop) {
 | 
					            sub.attach('changed', function (prop) {
 | 
				
			||||||
 | 
					                // console.log(prop)
 | 
				
			||||||
 | 
					                // console.log(prop.getName())
 | 
				
			||||||
                if (prop.getName() === 'out') {
 | 
					                if (prop.getName() === 'out') {
 | 
				
			||||||
                    var out_value = this.getOutDisplay();
 | 
					                    var out_value = this.getOutDisplay();
 | 
				
			||||||
                    var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_');
 | 
					                    var target_device_number = this.$parent.getDisplayName().split('_').slice(0, 5).join('_');
 | 
				
			||||||
@ -83,7 +86,6 @@ class subscriptionDevices {
 | 
				
			|||||||
                        "point_name": point_name ? point_name : null,
 | 
					                        "point_name": point_name ? point_name : null,
 | 
				
			||||||
                        "value": key
 | 
					                        "value": key
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (_this.changeCallback != undefined && _this.changeCallback != null) {
 | 
					                    if (_this.changeCallback != undefined && _this.changeCallback != null) {
 | 
				
			||||||
                        _this.changeCallback(modify_target_device, true); //第2參數用在平面圖,刷新畫面
 | 
					                        _this.changeCallback(modify_target_device, true); //第2參數用在平面圖,刷新畫面
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@ -161,13 +163,12 @@ class subscriptionDevices {
 | 
				
			|||||||
                                if (_this.changeCallback != undefined && _this.changeCallback != null) {
 | 
					                                if (_this.changeCallback != undefined && _this.changeCallback != null) {
 | 
				
			||||||
                                    _this.changeCallback(modify_target_device);
 | 
					                                    _this.changeCallback(modify_target_device);
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath"))
 | 
					                                baja.Ord.make("local:|foxs:|station:|" + this.getDisplay("slotPath"))
 | 
				
			||||||
                                    .get()
 | 
					                                    .get()
 | 
				
			||||||
                                    .then(function (component) {
 | 
					                                    .then(function (component) {
 | 
				
			||||||
                                        component_index++;
 | 
					                                        component_index++;
 | 
				
			||||||
                                        var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
 | 
					                                        var target_device_number = component.$parent.getDisplayName().split('_').slice(0, 5).join('_');
 | 
				
			||||||
 | 
					                                        // console.log(component, component.getDisplayName())
 | 
				
			||||||
                                        var point_name = component.getDisplayName();
 | 
					                                        var point_name = component.getDisplayName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                        // //依據Facets判斷回傳的內容值為何
 | 
					                                        // //依據Facets判斷回傳的內容值為何
 | 
				
			||||||
@ -517,7 +518,7 @@ function BajaSubscribeAlarmsByBql(ordPathForAlarm) {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //使用bql語法
 | 
					        //使用bql語法
 | 
				
			||||||
        console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`);
 | 
					        // console.log(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`);
 | 
				
			||||||
        baja.Ord.make(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`)
 | 
					        baja.Ord.make(`local:|foxs:|alarm:|bql:select top 1 timestamp, sourceState, alarmData, alarmData.sourceName, normalTime where alarmData.sourceName like '%${ordPathForAlarm.area_tag}_${ordPathForAlarm.building_tag}_${ordPathForAlarm.system_tag}_${ordPathForAlarm.name_tag}_%' order by timestamp desc`)
 | 
				
			||||||
            .get(
 | 
					            .get(
 | 
				
			||||||
                function (table) {
 | 
					                function (table) {
 | 
				
			||||||
@ -636,7 +637,7 @@ function BajaSubscribeElectricmeterByBql(ordPathForElectricmeter) {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //使用bql語法
 | 
					        //使用bql語法
 | 
				
			||||||
        console.log(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`);
 | 
					        // console.log(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`);
 | 
				
			||||||
        baja.Ord.make(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`)
 | 
					        baja.Ord.make(`local:|foxs:|station:|slot:/${ordPathForElectricmeter.devicePath}|bql:select name, out, out.value, slotPath, facets from control:ControlPoint`)
 | 
				
			||||||
            .get(
 | 
					            .get(
 | 
				
			||||||
                function (table) {
 | 
					                function (table) {
 | 
				
			||||||
 | 
				
			|||||||
@ -35,83 +35,82 @@
 | 
				
			|||||||
// }
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function getHistoryDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, deviceName, company, callback) {
 | 
					function getHistoryDataByBaja(devicePath, startDate_millisecond, endDate_millisecond, deviceName, company, callback) {
 | 
				
			||||||
  var _result = {};
 | 
					    var _result = {};
 | 
				
			||||||
  var _ss = [];
 | 
					    var _ss = [];
 | 
				
			||||||
  var _index = 0;
 | 
					    var _index = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  require(['baja!'], function (baja) {
 | 
					    require(['baja!'], function (baja) {
 | 
				
			||||||
    console.log('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond);
 | 
					        console.log('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond);
 | 
				
			||||||
    baja.Ord.make('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond).get()
 | 
					        baja.Ord.make('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond).get()
 | 
				
			||||||
      .then(function (table) {
 | 
					            .then(function (table) {
 | 
				
			||||||
        return table.cursor({
 | 
					                return table.cursor({
 | 
				
			||||||
          each: function (record) {
 | 
					                    each: function (record) {
 | 
				
			||||||
            console.log(record.get('timestamp'))
 | 
					                        console.log(record.get('timestamp'))
 | 
				
			||||||
            // if (_index == 0)
 | 
					                        // if (_index == 0)
 | 
				
			||||||
            //     _ss += '{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr
 | 
					                        //     _ss += '{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr
 | 
				
			||||||
            //     + '"}';
 | 
					                        //     + '"}';
 | 
				
			||||||
            // else
 | 
					                        // else
 | 
				
			||||||
            //     _ss += ',{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr
 | 
					                        //     _ss += ',{"deviceName":"' + deviceName + '", "value":' + record.get('value') + ', "timestamp":"' + record.get('timestamp').$cEncStr
 | 
				
			||||||
            //     + '"}';
 | 
					                        //     + '"}';
 | 
				
			||||||
            _ss.push({
 | 
					                        _ss.push({deviceName:deviceName, value:record.get('value'), timestamp:record.get('timestamp').$cEncStr
 | 
				
			||||||
              deviceName: deviceName, value: record.get('value'), timestamp: record.get('timestamp').$cEncStr
 | 
					                    });
 | 
				
			||||||
 });
 | 
					                        _index++;
 | 
				
			||||||
            _index++;
 | 
					                    },
 | 
				
			||||||
          },
 | 
					                    after: function () {
 | 
				
			||||||
          after: function () {
 | 
					                        _result={count: _index, data: _ss}
 | 
				
			||||||
            _result = { count: _index, data: _ss }
 | 
					                        // _result += '{' + '"count": ' + _index + ', "data":[';
 | 
				
			||||||
            // _result += '{' + '"count": ' + _index + ', "data":[';
 | 
					                        // _result += _ss;
 | 
				
			||||||
            // _result += _ss;
 | 
					                        // _result += ']}';
 | 
				
			||||||
            // _result += ']}';
 | 
					                        if (typeof callback === 'function') {
 | 
				
			||||||
            if (typeof callback === 'function') {
 | 
					                            // console.log(_result)
 | 
				
			||||||
              // console.log(_result)
 | 
					                             _result = JSON.stringify(_result)
 | 
				
			||||||
              _result = JSON.stringify(_result)
 | 
					                            callback(_result);
 | 
				
			||||||
              callback(_result);
 | 
					                        }
 | 
				
			||||||
            }
 | 
					                    },
 | 
				
			||||||
          },
 | 
					                    limit: -1,
 | 
				
			||||||
          limit: -1,
 | 
					                    offset: 0
 | 
				
			||||||
          offset: 0
 | 
					                });
 | 
				
			||||||
        });
 | 
					            })
 | 
				
			||||||
      })
 | 
					            .catch(()=>{
 | 
				
			||||||
      .catch(() => {
 | 
					                console.log("error");
 | 
				
			||||||
        console.log("error");
 | 
					                // const res = JSON.stringify({count:0, data:[]})
 | 
				
			||||||
        // const res = JSON.stringify({count:0, data:[]})
 | 
					                callback()
 | 
				
			||||||
        callback()
 | 
					            });
 | 
				
			||||||
      });
 | 
					    });
 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function test3000p(devicePath, startDate_millisecond, endDate_millisecond, deviceName, company, callback) {
 | 
					function test3000p(devicePath, startDate_millisecond, endDate_millisecond, deviceName, company, callback) {
 | 
				
			||||||
  var _result = "";
 | 
					    var _result = "";
 | 
				
			||||||
  var _ss = "";
 | 
					    var _ss = "";
 | 
				
			||||||
  var _index = 0;
 | 
					    var _index = 0;
 | 
				
			||||||
  require(['baja!'], function (baja) {
 | 
					    require(['baja!'], function (baja) {
 | 
				
			||||||
    "use strict";
 | 
					        "use strict";
 | 
				
			||||||
    baja.Ord.make('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond)
 | 
					        baja.Ord.make('local:|foxs:|history:/' + company + '/' + devicePath + '|bql:select * from control:ControlPoint where timestamp.millis > ' + startDate_millisecond + ' and timestamp.millis < ' + endDate_millisecond)
 | 
				
			||||||
      .get(
 | 
					            .get(
 | 
				
			||||||
        function (table) {
 | 
					                function (table) {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
          table.cursor({
 | 
					                    table.cursor({
 | 
				
			||||||
            each: function (item) {
 | 
					                        each: function (item) {
 | 
				
			||||||
              console.log("item: " + item);
 | 
					                            console.log("item: " + item);
 | 
				
			||||||
              if (_index == 0)
 | 
					                            if (_index == 0)
 | 
				
			||||||
                _ss += '{"deviceName":"' + deviceName + '", "value":' + item.$map.$map.value.$display + ', "timestamp":"' + item.$map.$map.timestamp.$val.$cEncStr + '"}';
 | 
					                                _ss += '{"deviceName":"' + deviceName + '", "value":' + item.$map.$map.value.$display + ', "timestamp":"' + item.$map.$map.timestamp.$val.$cEncStr + '"}';
 | 
				
			||||||
              else
 | 
					                            else
 | 
				
			||||||
                _ss += ',{"deviceName":"' + deviceName + '", "value":' + item.$map.$map.value.$display + ', "timestamp":"' + item.$map.$map.timestamp.$val.$cEncStr + '"}';
 | 
					                                _ss += ',{"deviceName":"' + deviceName + '", "value":' + item.$map.$map.value.$display + ', "timestamp":"' + item.$map.$map.timestamp.$val.$cEncStr + '"}';
 | 
				
			||||||
              _index++;
 | 
					                            _index++;
 | 
				
			||||||
            },
 | 
					                        },
 | 
				
			||||||
            after: function () {
 | 
					                        after: function () {
 | 
				
			||||||
              _result += '{' + '"count": ' + _index + ', "data":[';
 | 
					                            _result += '{' + '"count": ' + _index + ', "data":[';
 | 
				
			||||||
              _result += _ss;
 | 
					                            _result += _ss;
 | 
				
			||||||
              _result += ']}';
 | 
					                            _result += ']}';
 | 
				
			||||||
              if (typeof callback === 'function') {
 | 
					                            if (typeof callback === 'function') {
 | 
				
			||||||
                callback(_result);
 | 
					                                callback(_result);
 | 
				
			||||||
              }
 | 
					                            }
 | 
				
			||||||
            },
 | 
					                        },
 | 
				
			||||||
            limit: -1,
 | 
					                        limit: -1,
 | 
				
			||||||
            offset: 0
 | 
					                        offset: 0
 | 
				
			||||||
          });
 | 
					                    });
 | 
				
			||||||
        })
 | 
					                })
 | 
				
			||||||
  });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -596,11 +596,11 @@ class Forge3DElevFull {
 | 
				
			|||||||
                        frags.forEach((fragProxy) => {
 | 
					                        frags.forEach((fragProxy) => {
 | 
				
			||||||
                            fragProxy.frag.position.z = this.elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
 | 
					                            fragProxy.frag.position.z = this.elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
 | 
				
			||||||
                            let start = 0;
 | 
					                            let start = 0;
 | 
				
			||||||
                            if (node === 13777 && start == 0) {
 | 
					                            // 改變感測器熱點位置
 | 
				
			||||||
                                // 改變感測器熱點位置
 | 
					                            this.sensorObjs && this.sensorObjs[0]?.changePos(node+2, fragProxy.frag.position.z);
 | 
				
			||||||
                                this.sensorObjs && this.sensorObjs[0]?.changePos(node + 2, fragProxy.frag.position.z);
 | 
					                            // if (node === 15200 && start == 0) {
 | 
				
			||||||
                                start = 1;
 | 
					                            //     start = 1;
 | 
				
			||||||
                            }
 | 
					                            // }
 | 
				
			||||||
                            fragProxy.frag.updateAnimTransform();
 | 
					                            fragProxy.frag.updateAnimTransform();
 | 
				
			||||||
                        })
 | 
					                        })
 | 
				
			||||||
                        elevObj.obj.viewer.impl.sceneUpdated(true);
 | 
					                        elevObj.obj.viewer.impl.sceneUpdated(true);
 | 
				
			||||||
@ -649,11 +649,11 @@ class Forge3DElevFull {
 | 
				
			|||||||
                    frags.forEach((fragProxy) => {
 | 
					                    frags.forEach((fragProxy) => {
 | 
				
			||||||
                        fragProxy.frag.position.z = this.elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
 | 
					                        fragProxy.frag.position.z = this.elev3DOption.floorHeight.filter(x => x.floor == subData["CP"])[0]?.height ?? 0;
 | 
				
			||||||
                        let start = 0;
 | 
					                        let start = 0;
 | 
				
			||||||
                        if (node === 13777 && start == 0) {
 | 
					                        this.sensorObjs && this.sensorObjs[0]?.changePos(node+2, fragProxy.frag.position.z);
 | 
				
			||||||
                            // 改變感測器熱點位置
 | 
					                        // if (node === 15200 && start == 0) {
 | 
				
			||||||
                            this.sensorObjs && this.sensorObjs[0]?.changePos(node + 2, fragProxy.frag.position.z);
 | 
					                        //     // 改變感測器熱點位置
 | 
				
			||||||
                            start = 1;
 | 
					                        //     start = 1;
 | 
				
			||||||
                        }
 | 
					                        // }
 | 
				
			||||||
                        fragProxy.frag.updateAnimTransform()
 | 
					                        fragProxy.frag.updateAnimTransform()
 | 
				
			||||||
                    })
 | 
					                    })
 | 
				
			||||||
                    elevObj.obj.viewer.impl.sceneUpdated(true);
 | 
					                    elevObj.obj.viewer.impl.sceneUpdated(true);
 | 
				
			||||||
@ -714,8 +714,8 @@ class Forge3DSensor {
 | 
				
			|||||||
        this.DataVizCore = null;
 | 
					        this.DataVizCore = null;
 | 
				
			||||||
        this.tempVal = 20;
 | 
					        this.tempVal = 20;
 | 
				
			||||||
        this.curDevice = option.curDevice ?? null;
 | 
					        this.curDevice = option.curDevice ?? null;
 | 
				
			||||||
        this.selector = option.selector ?? "#forgeViewer"
 | 
					        this.selector=option.selector?? "#forgeViewer"
 | 
				
			||||||
        this.elevCb = option.elevCb ?? null
 | 
					        this.elevCb = option.elevCb?? null
 | 
				
			||||||
        this.#init();
 | 
					        this.#init();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -725,7 +725,7 @@ class Forge3DSensor {
 | 
				
			|||||||
        this.ordPath.name_tag = this.sysSubTag;
 | 
					        this.ordPath.name_tag = this.sysSubTag;
 | 
				
			||||||
        this.dataVizExtn = await this.viewer.loadExtension("Autodesk.DataVisualization");
 | 
					        this.dataVizExtn = await this.viewer.loadExtension("Autodesk.DataVisualization");
 | 
				
			||||||
        this.DataVizCore = Autodesk.DataVisualization.Core;
 | 
					        this.DataVizCore = Autodesk.DataVisualization.Core;
 | 
				
			||||||
        await this.addHotPoint();
 | 
					        await this.registerHotPoint()
 | 
				
			||||||
        this.changeColorForSensorHotspot(this.curDevice.forge_dbid, 35)
 | 
					        this.changeColorForSensorHotspot(this.curDevice.forge_dbid, 35)
 | 
				
			||||||
        this.subSensorDevice();
 | 
					        this.subSensorDevice();
 | 
				
			||||||
        this.elevCb()
 | 
					        this.elevCb()
 | 
				
			||||||
@ -733,14 +733,14 @@ class Forge3DSensor {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 建立熱點
 | 
					    // // 建立熱點
 | 
				
			||||||
    async addHotPoint() {
 | 
					    // async addHotPoint() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // this.dataVizExtn.removeAllViewables()
 | 
					    //     // this.dataVizExtn.removeAllViewables()
 | 
				
			||||||
        await this.registerHotPoint()
 | 
					    //     await this.registerHotPoint()
 | 
				
			||||||
        this.subSensorDevice();
 | 
					    //     this.subSensorDevice();
 | 
				
			||||||
        // console.log("2",this.dataVizExtn)
 | 
					    //     // console.log("2",this.dataVizExtn)
 | 
				
			||||||
    }
 | 
					    // }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async registerHotPoint(color = "") {
 | 
					    async registerHotPoint(color = "") {
 | 
				
			||||||
        var viewer = this.viewer;
 | 
					        var viewer = this.viewer;
 | 
				
			||||||
 | 
				
			|||||||
@ -143,7 +143,7 @@ function fnInitJqDataTablesAjax(apiUrl, tag, sendData = null, columns, columns_d
 | 
				
			|||||||
    //let sData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null;  
 | 
					    //let sData = data ? (data.Data ? JSON.stringify(data.Data) : null) : null;  
 | 
				
			||||||
    if (sendData == null) { 
 | 
					    if (sendData == null) { 
 | 
				
			||||||
        sendData = function (json) {
 | 
					        sendData = function (json) {
 | 
				
			||||||
            console.log("讀取列表", json)
 | 
					            // console.log("讀取列表", json)
 | 
				
			||||||
            if (json.code && json.code == "0000") {
 | 
					            if (json.code && json.code == "0000") {
 | 
				
			||||||
                return json.data;
 | 
					                return json.data;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user