1223 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			1223 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<main id="js-page-content" role="main" class="page-content">
 | 
						||
    <div class="row">
 | 
						||
        <div class="col-sm-12 col-xl-12">
 | 
						||
            <h1 class="p-2 mb-0">報表管理</h1>
 | 
						||
 | 
						||
            <div class="row">
 | 
						||
                <div class="col-sm-12 col-xl-2">
 | 
						||
                    <div class="rounded border border-white">
 | 
						||
                        <!-- nav-menu-reset will reset the font colors -->
 | 
						||
                        <ul class="nav-menu nav-menu-reset nav-menu-compact mb-sm-4 mb-md-0 rounded border border-white"
 | 
						||
                            data-nav-accordion="true">
 | 
						||
                            <li class="active">
 | 
						||
                                <a name="reportTypeRadio" href="javascript:;" data-value="day">
 | 
						||
                                    <span class="nav-link-text"> 電錶 - 日報表 </span>
 | 
						||
                                </a>
 | 
						||
                            </li>
 | 
						||
                            <li>
 | 
						||
                                <a name="reportTypeRadio"
 | 
						||
                                   href="javascript:;"
 | 
						||
                                   data-value="month">
 | 
						||
                                    <span class="nav-link-text"> 電錶 - 月報表 </span>
 | 
						||
                                </a>
 | 
						||
                            </li>
 | 
						||
                            <li>
 | 
						||
                                <a name="reportTypeRadio" href="javascript:;" data-value="year">
 | 
						||
                                    <span class="nav-link-text"> 電錶 - 年報表 </span>
 | 
						||
                                </a>
 | 
						||
                            </li>
 | 
						||
                            <li>
 | 
						||
                                <a name="reportTypeRadio"
 | 
						||
                                   href="javascript:;"
 | 
						||
                                   data-value="compare">
 | 
						||
                                    <span class="nav-link-text"> 電錶 - 同期比較 </span>
 | 
						||
                                </a>
 | 
						||
                            </li>
 | 
						||
                            <li>
 | 
						||
                                <a name="reportTypeRadio"
 | 
						||
                                   href="javascript:;"
 | 
						||
                                   data-value="day"
 | 
						||
                                   data-type="compare">
 | 
						||
                                    <span class="nav-link-text">
 | 
						||
                                        電錶 - 總盤與分盤 - 月份比較
 | 
						||
                                    </span>
 | 
						||
                                </a>
 | 
						||
                            </li>
 | 
						||
                        </ul>
 | 
						||
                        <div class="filter-message js-filter-message m-0 text-left pl-4 py-3 fw-500"></div>
 | 
						||
                    </div>
 | 
						||
                </div>
 | 
						||
                <div class="col-12 col-xl-10">
 | 
						||
                    <div class="panel-hdr" style="min-height: auto">
 | 
						||
                        <h2 class="py-2" id="xx">
 | 
						||
                            <div class="col-auto price">
 | 
						||
                                <span class="report-type-name"></span>費每度單價
 | 
						||
                            </div>
 | 
						||
                            <input type="text"
 | 
						||
                                   id="elecPriceDegree"
 | 
						||
                                   class="form-control col-1 price" />
 | 
						||
                            <div id="compareTypeBtnsDiv"
 | 
						||
                                 class="item btn-group btn-group-toggle offset-1"
 | 
						||
                                 data-toggle="buttons"
 | 
						||
                                 style="display: none">
 | 
						||
                                <label class="btn btn-outline-success waves-effect active waves-themed">
 | 
						||
                                    <input type="radio"
 | 
						||
                                           name="compareTypeRadio"
 | 
						||
                                           id="compareMonth"
 | 
						||
                                           value="month"
 | 
						||
                                           checked />
 | 
						||
                                    年度同月比較
 | 
						||
                                </label>
 | 
						||
                                <label class="btn btn-outline-success waves-effect waves-themed">
 | 
						||
                                    <input type="radio"
 | 
						||
                                           name="compareTypeRadio"
 | 
						||
                                           id="compareDay"
 | 
						||
                                           value="day" />
 | 
						||
                                    月份同日比較
 | 
						||
                                </label>
 | 
						||
                            </div>
 | 
						||
 | 
						||
                            <div id="compareAreaBtnsDiv"
 | 
						||
                                 class="item btn-group btn-group-toggle"
 | 
						||
                                 data-toggle="buttons"
 | 
						||
                                 style="display: none">
 | 
						||
                                <label class="btn btn-outline-success waves-effect active waves-themed">
 | 
						||
                                    <input type="radio"
 | 
						||
                                           name="compareEleRadio"
 | 
						||
                                           id="compareAll"
 | 
						||
                                           value="0"
 | 
						||
                                           checked />
 | 
						||
                                    總計含分盤資料
 | 
						||
                                </label>
 | 
						||
                                <label class="btn btn-outline-success waves-effect waves-themed">
 | 
						||
                                    <input type="radio"
 | 
						||
                                           name="compareEleRadio"
 | 
						||
                                           id="compareSeperate"
 | 
						||
                                           value="1" />
 | 
						||
                                    總計不含分盤資料
 | 
						||
                                </label>
 | 
						||
                            </div>
 | 
						||
 | 
						||
                            <div class="col-auto offset-1">
 | 
						||
                                選擇<span id="elecTimeText">單一月份</span>
 | 
						||
                            </div>
 | 
						||
                            <input type="text"
 | 
						||
                                   id="elecMonthDate"
 | 
						||
                                   class="form-control col-2" />
 | 
						||
                            <input type="text"
 | 
						||
                                   id="elecYearDate"
 | 
						||
                                   class="form-control col-2"
 | 
						||
                                   style="display: none" />
 | 
						||
                            <div id="elecStartEndDiv"
 | 
						||
                                 class="row m-0 align-items-center"
 | 
						||
                                 style="display: none">
 | 
						||
                                <input type="text"
 | 
						||
                                       id="elecSYearDate"
 | 
						||
                                       class="form-control col-4" />
 | 
						||
                                <span class="px-2">~</span>
 | 
						||
                                <input type="text"
 | 
						||
                                       id="elecEYearDate"
 | 
						||
                                       class="form-control col-4" />
 | 
						||
                            </div>
 | 
						||
                            <div id="elecCompareDiv"
 | 
						||
                                 class="row m-0 align-items-center"
 | 
						||
                                 style="display: none">
 | 
						||
                                <div id="elecComYearDiv" class="row m-0 align-items-center">
 | 
						||
                                    <input type="text"
 | 
						||
                                           id="elecCom1YearDate"
 | 
						||
                                           class="form-control col-4" />
 | 
						||
                                    <span class="px-2">、</span>
 | 
						||
                                    <input type="text"
 | 
						||
                                           id="elecCom2YearDate"
 | 
						||
                                           class="form-control col-4" />
 | 
						||
                                </div>
 | 
						||
                                <div id="elecComMonthDiv"
 | 
						||
                                     class="row m-0 align-items-center"
 | 
						||
                                     style="display: none">
 | 
						||
                                    <input type="text"
 | 
						||
                                           id="elecCom1MonthDate"
 | 
						||
                                           class="form-control col-4" />
 | 
						||
                                    <span class="px-2">、</span>
 | 
						||
                                    <input type="text"
 | 
						||
                                           id="elecCom2MonthDate"
 | 
						||
                                           class="form-control col-4" />
 | 
						||
                                </div>
 | 
						||
                            </div>
 | 
						||
                        </h2>
 | 
						||
                    </div>
 | 
						||
                    <div class="panel-hdr" style="min-height: auto">
 | 
						||
                        <h2 class="py-2 col-12" id="school_zone">
 | 
						||
                            <div class="col-1">校區</div>
 | 
						||
                            <div class="item btn-group btn-group-toggle"
 | 
						||
                                 data-toggle="buttons"></div>
 | 
						||
                        </h2>
 | 
						||
                    </div>
 | 
						||
                    <div class="panel-hdr" style="min-height: auto">
 | 
						||
                        <h2 class="py-2 col-12" id="building">
 | 
						||
                            <div class="col-1">棟別</div>
 | 
						||
                            <div class="item btn-group btn-group-toggle"
 | 
						||
                                 data-toggle="buttons"></div>
 | 
						||
                        </h2>
 | 
						||
                    </div>
 | 
						||
                    <div class="panel-hdr" style="min-height: auto">
 | 
						||
                        <!-- <h2 class="py-2 col-12" id="floors">
 | 
						||
                                    <div class="col-1">樓層</div>
 | 
						||
                                    <button
 | 
						||
                                      type="button"
 | 
						||
                                      class="btn btn-secondary float-right allbtn mr-2 col-auto align-self-center"
 | 
						||
                                      onclick="allFloor()"
 | 
						||
                                      style="display: none"
 | 
						||
                                    >
 | 
						||
                                      全選
 | 
						||
                                    </button>
 | 
						||
                                    <div
 | 
						||
                                      class="item btn-group btn-group-toggle row m-0"
 | 
						||
                                      data-toggle="buttons"
 | 
						||
                                      style="row-gap: 5px"
 | 
						||
                                    ></div>
 | 
						||
                                    <span
 | 
						||
                                      class="text-notice notice-noSelectedBuilding"
 | 
						||
                                      style="display: none"
 | 
						||
                                      >請選擇棟別</span
 | 
						||
                                    >
 | 
						||
                                    <span class="text-notice notice-noBuilding" style="display: none"
 | 
						||
                                      >該棟別沒有樓層</span
 | 
						||
                                    >
 | 
						||
                                  </h2> -->
 | 
						||
                    </div>
 | 
						||
                    <div class="d-flex my-2">
 | 
						||
                        <button type="button"
 | 
						||
                                class="btn btn-primary"
 | 
						||
                                onclick="getMeterData()">
 | 
						||
                            查詢
 | 
						||
                        </button>
 | 
						||
                        <button type="button"
 | 
						||
                                class="btn btn-danger ml-2"
 | 
						||
                                onclick="setExportList()">
 | 
						||
                            匯出
 | 
						||
                        </button>
 | 
						||
                        <div id="tableLoading"
 | 
						||
                             class="row m-0 align-items-center"
 | 
						||
                             style="display: none">
 | 
						||
                            <div class="spinner-border text-info mx-2"
 | 
						||
                                 role="status"
 | 
						||
                                 style="width: 1.2rem; height: 1.2rem">
 | 
						||
                                <span class="sr-only">Loading...</span>
 | 
						||
                            </div>
 | 
						||
                            <span id="tableLoadingText">列表讀取中</span>
 | 
						||
                        </div>
 | 
						||
                        <!-- <button type="button" class="btn btn-primary" onclick="SaveRealTimeCombination()">儲存常用組合</button>
 | 
						||
                                  <button type="button" class="btn btn-danger ml-2" onclick="CleanAll()">全部清除</button>
 | 
						||
                                  <button type="button" class="btn btn-info allbtn ml-2" onclick="LookRealTime()">查看即時資訊</button> -->
 | 
						||
                    </div>
 | 
						||
                    <span class="d-flex justify-content-end">單位:kWh </span>
 | 
						||
                    <table id="report_table"
 | 
						||
                           class="table table-bordered table-striped text-center m-0 w-100"></table>
 | 
						||
                </div>
 | 
						||
            </div>
 | 
						||
        </div>
 | 
						||
    </div>
 | 
						||
</main>
 | 
						||
 | 
						||
<script>
 | 
						||
    var default_building = localStorage.getItem("default_building");
 | 
						||
    var Building; //取得所有棟別
 | 
						||
    var SelectBuildings = new Array(0); //選擇的區域
 | 
						||
    var datatable;
 | 
						||
    var datepickerOptions = {
 | 
						||
        autoclose: true,
 | 
						||
        minViewMode: 1,
 | 
						||
        language: "zh-TW",
 | 
						||
        format: "yyyy-mm",
 | 
						||
    };
 | 
						||
    var reportTypeDict = {
 | 
						||
        RWater: {
 | 
						||
            name: "Water",
 | 
						||
            chiName: "水",
 | 
						||
            listApiUrl: "WaterList",
 | 
						||
            exportListApiUrl: "ExportWaterList",
 | 
						||
        },
 | 
						||
        RElec: {
 | 
						||
            name: "Electric",
 | 
						||
            chiName: "電",
 | 
						||
            listApiUrl: "ElectricList",
 | 
						||
            listApiUrlForTotal: "ElectricListEachTotal",
 | 
						||
            exportListApiUrl: {
 | 
						||
                day: "ExportElectricList",
 | 
						||
                month: "ExportElectricList",
 | 
						||
                year: "ExportElectricList",
 | 
						||
                compare: "ExportElectricCompareList",
 | 
						||
            },
 | 
						||
        },
 | 
						||
    };
 | 
						||
    var token = cookies.get("JWT-Authorization");
 | 
						||
    var school_zone = "0";
 | 
						||
 | 
						||
    $(function () {
 | 
						||
        console.log("即時趨勢進入點");
 | 
						||
        getSchoolZone();
 | 
						||
        setNameByType();
 | 
						||
        initDatePicker();
 | 
						||
        eventsInit();
 | 
						||
        getPrice();
 | 
						||
        setReportTable([]);
 | 
						||
        $("#elecSYearDate")
 | 
						||
            .val(moment().subtract(5, "years").format("YYYY"))
 | 
						||
            .trigger("change");
 | 
						||
        $("#elecEYearDate").val(moment().format("YYYY")).trigger("change");
 | 
						||
        $("#elecCom1YearDate").val(moment().subtract(1, "years").format("YYYY"));
 | 
						||
        $("#elecCom2YearDate").val(moment().format("YYYY"));
 | 
						||
        $("#elecCom1MonthDate").val(
 | 
						||
            moment().subtract(1, "months").format("YYYY-MM")
 | 
						||
        );
 | 
						||
        $("#elecCom2MonthDate").val(moment().format("YYYY-MM"));
 | 
						||
        //調整畫面
 | 
						||
        $("#js-page-content").removeClass("mt-0");
 | 
						||
 | 
						||
        // var html = "";
 | 
						||
        // for (let building of pageAct.buildList) {
 | 
						||
        //   html += `<label class="btn btn-outline-success waves-effect waves-themed">
 | 
						||
        //                 <input type="checkbox" name="buildingRadio" id="radio_${building.building_tag}" value="${building.building_tag}" onChange="SelectBuild(this,'${building.building_tag}')"> ${building.full_name}
 | 
						||
        //             </label>`;
 | 
						||
        // }
 | 
						||
        // $("#building").find(".item").empty();
 | 
						||
        // $("#building").find(".item").append(html);
 | 
						||
        getbuildings(school_zone);
 | 
						||
 | 
						||
        checkIsSelectedBuilding();
 | 
						||
    });
 | 
						||
 | 
						||
    function setNameByType() {
 | 
						||
        $(".report-type-name").text(reportTypeDict["RElec"]["chiName"]);
 | 
						||
    }
 | 
						||
 | 
						||
    function initDatePicker(name = null, otherParam = {}) {
 | 
						||
        const datepickerMonthOptions = Object.assign(
 | 
						||
            {},
 | 
						||
            datepickerOptions,
 | 
						||
            Object.assign(
 | 
						||
                {
 | 
						||
                    minViewMode: 1,
 | 
						||
                    format: "yyyy-mm",
 | 
						||
                },
 | 
						||
                otherParam
 | 
						||
            )
 | 
						||
        );
 | 
						||
        const datepickerYearOptions = Object.assign(
 | 
						||
            {},
 | 
						||
            datepickerOptions,
 | 
						||
            Object.assign(
 | 
						||
                {
 | 
						||
                    minViewMode: 2,
 | 
						||
                    format: "yyyy",
 | 
						||
                },
 | 
						||
                otherParam
 | 
						||
            )
 | 
						||
        );
 | 
						||
        const datepickerSYearOptions = Object.assign(
 | 
						||
            {},
 | 
						||
            datepickerOptions,
 | 
						||
            Object.assign(
 | 
						||
                {
 | 
						||
                    minViewMode: 2,
 | 
						||
                    format: "yyyy",
 | 
						||
                },
 | 
						||
                otherParam
 | 
						||
            )
 | 
						||
        );
 | 
						||
        const datepickerEYearOptions = Object.assign(
 | 
						||
            {},
 | 
						||
            datepickerOptions,
 | 
						||
            Object.assign(
 | 
						||
                {
 | 
						||
                    minViewMode: 2,
 | 
						||
                    format: "yyyy",
 | 
						||
                },
 | 
						||
                otherParam
 | 
						||
            )
 | 
						||
        );
 | 
						||
        const datepickerComYear1Options = Object.assign(
 | 
						||
            {},
 | 
						||
            datepickerOptions,
 | 
						||
            Object.assign(
 | 
						||
                {
 | 
						||
                    minViewMode: 2,
 | 
						||
                    format: "yyyy",
 | 
						||
                },
 | 
						||
                otherParam
 | 
						||
            )
 | 
						||
        );
 | 
						||
        const datepickerComYear2Options = Object.assign(
 | 
						||
            {},
 | 
						||
            datepickerOptions,
 | 
						||
            Object.assign(
 | 
						||
                {
 | 
						||
                    minViewMode: 2,
 | 
						||
                    format: "yyyy",
 | 
						||
                },
 | 
						||
                otherParam
 | 
						||
            )
 | 
						||
        );
 | 
						||
        const datepickerComMonth1Options = Object.assign(
 | 
						||
            {},
 | 
						||
            datepickerOptions,
 | 
						||
            Object.assign(
 | 
						||
                {
 | 
						||
                    minViewMode: 1,
 | 
						||
                    format: "yyyy-mm",
 | 
						||
                },
 | 
						||
                otherParam
 | 
						||
            )
 | 
						||
        );
 | 
						||
        const datepickerComMonth2Options = Object.assign(
 | 
						||
            {},
 | 
						||
            datepickerOptions,
 | 
						||
            Object.assign(
 | 
						||
                {
 | 
						||
                    minViewMode: 1,
 | 
						||
                    format: "yyyy-mm",
 | 
						||
                },
 | 
						||
                otherParam
 | 
						||
            )
 | 
						||
        );
 | 
						||
        if (name == null || name == "Month") {
 | 
						||
            $("#elecMonthDate")
 | 
						||
                .datepicker("destroy")
 | 
						||
                .datepicker(datepickerMonthOptions)
 | 
						||
                .focus(function () {
 | 
						||
                    $(this).datepicker("show");
 | 
						||
                })
 | 
						||
                .datepicker("update", new Date());
 | 
						||
        }
 | 
						||
        if (name == null || name == "Year") {
 | 
						||
            $("#elecYearDate")
 | 
						||
                .datepicker("destroy")
 | 
						||
                .datepicker(datepickerYearOptions)
 | 
						||
                .focus(function () {
 | 
						||
                    $(this).datepicker("show");
 | 
						||
                })
 | 
						||
                .datepicker("update", new Date());
 | 
						||
        }
 | 
						||
        if (name == null || name == "SYear") {
 | 
						||
            $("#elecSYearDate")
 | 
						||
                .datepicker("destroy")
 | 
						||
                .datepicker(datepickerSYearOptions)
 | 
						||
                .focus(function () {
 | 
						||
                    $(this).datepicker("show");
 | 
						||
                });
 | 
						||
        }
 | 
						||
        if (name == null || name == "EYear") {
 | 
						||
            $("#elecEYearDate")
 | 
						||
                .datepicker("destroy")
 | 
						||
                .datepicker(datepickerEYearOptions)
 | 
						||
                .focus(function () {
 | 
						||
                    $(this).datepicker("show");
 | 
						||
                });
 | 
						||
        }
 | 
						||
        if (name == null || name == "ComYear1") {
 | 
						||
            $("#elecCom1YearDate")
 | 
						||
                .datepicker("destroy")
 | 
						||
                .datepicker(datepickerComYear1Options)
 | 
						||
                .focus(function () {
 | 
						||
                    $(this).datepicker("show");
 | 
						||
                });
 | 
						||
        }
 | 
						||
        if (name == null || name == "ComYear2") {
 | 
						||
            $("#elecCom2YearDate")
 | 
						||
                .datepicker("destroy")
 | 
						||
                .datepicker(datepickerComYear2Options)
 | 
						||
                .focus(function () {
 | 
						||
                    $(this).datepicker("show");
 | 
						||
                });
 | 
						||
        }
 | 
						||
        if (name == null || name == "ComMonth1") {
 | 
						||
            $("#elecCom1MonthDate")
 | 
						||
                .datepicker("destroy")
 | 
						||
                .datepicker(datepickerComMonth1Options)
 | 
						||
                .focus(function () {
 | 
						||
                    $(this).datepicker("show");
 | 
						||
                });
 | 
						||
        }
 | 
						||
        if (name == null || name == "ComMonth2") {
 | 
						||
            $("#elecCom2MonthDate")
 | 
						||
                .datepicker("destroy")
 | 
						||
                .datepicker(datepickerComMonth2Options)
 | 
						||
                .focus(function () {
 | 
						||
                    $(this).datepicker("show");
 | 
						||
                });
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    function eventsInit() {
 | 
						||
        $("body").on("change", "[name=reportTypeRadio]", function () {
 | 
						||
            $(
 | 
						||
                "#elecMonthDate, #elecYearDate, #elecStartEndDiv, #elecCompareDiv"
 | 
						||
            ).hide();
 | 
						||
            $("#compareTypeBtnsDiv").hide();
 | 
						||
            $("#compareAreaBtnsDiv").hide();
 | 
						||
 | 
						||
            const value = $(this).data("value");
 | 
						||
            const type = $(this).data("type");
 | 
						||
            const curDate = $("#elecDate").val();
 | 
						||
 | 
						||
            $("#school_zone").show();
 | 
						||
            $("#building").show();
 | 
						||
            $(".price").show();
 | 
						||
 | 
						||
            if (type === "compare") {
 | 
						||
                $("#elecTimeText").text("月份");
 | 
						||
                $("#elecMonthDate").show();
 | 
						||
                $("#compareAreaBtnsDiv").show();
 | 
						||
                $("#school_zone").hide();
 | 
						||
                $("#building").hide();
 | 
						||
                $(".price").hide();
 | 
						||
            } else if (value === "day") {
 | 
						||
                $("#elecTimeText").text("月份");
 | 
						||
                $("#elecMonthDate").show();
 | 
						||
            } else if (value == "month") {
 | 
						||
                $("#elecTimeText").text("年份");
 | 
						||
                $("#elecYearDate").show();
 | 
						||
            } else if (value == "year") {
 | 
						||
                $("#elecTimeText").text("年份範圍");
 | 
						||
                $("#elecStartEndDiv").show();
 | 
						||
            } else if (value == "compare") {
 | 
						||
                $("#elecTimeText").text("年份");
 | 
						||
                $("#elecCompareDiv").show();
 | 
						||
                $("#compareTypeBtnsDiv").show();
 | 
						||
            }
 | 
						||
        });
 | 
						||
 | 
						||
        $("body").on("change", "[name=compareTypeRadio]", function () {
 | 
						||
            $("#elecComYearDiv, #elecComMonthDiv").hide();
 | 
						||
            const value = $(this).val();
 | 
						||
            if (value === "month") {
 | 
						||
                $("#elecTimeText").text("年份");
 | 
						||
                $("#elecComYearDiv").show();
 | 
						||
            } else if (value == "day") {
 | 
						||
                $("#elecTimeText").text("月份");
 | 
						||
                $("#elecComMonthDiv").show();
 | 
						||
            }
 | 
						||
        });
 | 
						||
 | 
						||
        $("[name=reportTypeRadio]")
 | 
						||
            .parent("li")
 | 
						||
            .on("click", function () {
 | 
						||
                $("[name=reportTypeRadio]").parent("li.active").removeClass("active");
 | 
						||
                // $("[name=compareTypeRadio]").parent("label").removeClass("active");
 | 
						||
                const oldVal = $("li.active [name=reportTypeRadio]").data("value");
 | 
						||
                $(this).addClass("active");
 | 
						||
                const newVal = $("li.active [name=reportTypeRadio]").data("value");
 | 
						||
                if (oldVal !== newVal) {
 | 
						||
                    $("li.active [name=reportTypeRadio]").trigger("change");
 | 
						||
                }
 | 
						||
            });
 | 
						||
 | 
						||
        $("[name=compareTypeRadio]")
 | 
						||
            .parent("label")
 | 
						||
            .on("click", function () {
 | 
						||
                $("[name=compareTypeRadio]").parent("label").removeClass("active");
 | 
						||
                const oldVal = $("label.active [name=compareTypeRadio]").val();
 | 
						||
                $(this).addClass("active");
 | 
						||
                const newVal = $("label.active [name=compareTypeRadio]").val();
 | 
						||
                if (oldVal !== newVal) {
 | 
						||
                    $("label.active [name=compareTypeRadio]").trigger("change");
 | 
						||
                }
 | 
						||
            });
 | 
						||
 | 
						||
        $("[name=compareEleRadio]")
 | 
						||
            .parent("label")
 | 
						||
            .on("click", function () {
 | 
						||
                $("[name=compareEleRadio]").parent("label").removeClass("active");
 | 
						||
                const oldVal = $("label.active [name=compareEleRadio]").val();
 | 
						||
                $(this).addClass("active");
 | 
						||
                const newVal = $("label.active [name=compareEleRadio]").val();
 | 
						||
                if (oldVal !== newVal) {
 | 
						||
                    $("label.active [name=compareEleRadio]").trigger("change");
 | 
						||
                }
 | 
						||
            });
 | 
						||
 | 
						||
        $("[name=floorCheckbox]")
 | 
						||
            .parent(".btn")
 | 
						||
            .off("click")
 | 
						||
            .on("click", function () {
 | 
						||
                const oldVal = $("[name=floorCheckbox]:checked").val();
 | 
						||
                $(this).find("input[name=floorCheckbox]").prop("checked", true);
 | 
						||
                const newVal = $("[name=floorCheckbox]:checked").val();
 | 
						||
                if (oldVal !== newVal) {
 | 
						||
                    $("[name=floorCheckbox]:checked").trigger("change");
 | 
						||
                }
 | 
						||
            });
 | 
						||
 | 
						||
        $("body").on("change", "#elecSYearDate", function () {
 | 
						||
            initDatePicker("EYear", {
 | 
						||
                startDate: moment($(this).val()).startOf("year").toDate(),
 | 
						||
            });
 | 
						||
        });
 | 
						||
        $("body").on("change", "#elecEYearDate", function () {
 | 
						||
            initDatePicker("SYear", {
 | 
						||
                endDate: moment($(this).val()).endOf("year").toDate(),
 | 
						||
            });
 | 
						||
        });
 | 
						||
    }
 | 
						||
 | 
						||
    function getListSendData() {
 | 
						||
        const tableType = $("li.active [name=reportTypeRadio]").data("value");
 | 
						||
        const compareType = $("label.active [name=compareTypeRadio]").val();
 | 
						||
        const Mode =
 | 
						||
            $("li.active [name=reportTypeRadio]").data("type") == "compare"
 | 
						||
                ? $("label.active [name=compareEleRadio]").val()
 | 
						||
                : null; // 總盤、分盤
 | 
						||
        const startTime =
 | 
						||
            tableType == "day"
 | 
						||
                ? $("#elecMonthDate").val()
 | 
						||
                : tableType == "month"
 | 
						||
                    ? $("#elecYearDate").val()
 | 
						||
                    : tableType == "year"
 | 
						||
                        ? $("#elecSYearDate").val()
 | 
						||
                        : tableType == "compare"
 | 
						||
                            ? compareType == "month"
 | 
						||
                                ? !$("#elecCom1YearDate").val() || !$("#elecCom2YearDate").val()
 | 
						||
                                    ? null
 | 
						||
                                    : [$("#elecCom1YearDate").val(), $("#elecCom2YearDate").val()]
 | 
						||
                                : compareType == "day"
 | 
						||
                                    ? !$("#elecCom1MonthDate").val() || !$("#elecCom2MonthDate").val()
 | 
						||
                                        ? null
 | 
						||
                                        : [$("#elecCom1MonthDate").val(), $("#elecCom2MonthDate").val()]
 | 
						||
                                    : null
 | 
						||
                            : null;
 | 
						||
 | 
						||
        if (!startTime) {
 | 
						||
            toast_error("請選擇日期");
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        if (Array.isArray(startTime) && startTime.length < 2) {
 | 
						||
            toast_error("請選擇比較日期");
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        const endTime = tableType == "year" ? $("#elecEYearDate").val() : null;
 | 
						||
        if (!endTime && tableType == "year") {
 | 
						||
            toast_error("請選擇結束日期");
 | 
						||
            return;
 | 
						||
        }
 | 
						||
 | 
						||
        let sent_data = Mode
 | 
						||
            ? {
 | 
						||
                tableType: "month",
 | 
						||
                building_tag: "",
 | 
						||
                floor_tag: $("[name=floorCheckbox]:checked")
 | 
						||
                    .map((i, e) => $(e).val())
 | 
						||
                    .toArray(),
 | 
						||
                startTime: startTime,
 | 
						||
                endTime: endTime,
 | 
						||
                price: $("#elecPriceDegree").val()
 | 
						||
                    ? parseFloat($("#elecPriceDegree").val())
 | 
						||
                    : null,
 | 
						||
                Mode: parseInt(Mode),
 | 
						||
            }
 | 
						||
            : {
 | 
						||
                tableType:
 | 
						||
                    $("li.active [name=reportTypeRadio]").data("value") == "compare"
 | 
						||
                        ? $("[name=compareTypeRadio]:checked").val()
 | 
						||
                        : $("li.active [name=reportTypeRadio]").data("value"),
 | 
						||
                building_tag: SelectBuildings.join(","),
 | 
						||
                floor_tag: $("[name=floorCheckbox]:checked")
 | 
						||
                    .map((i, e) => $(e).val())
 | 
						||
                    .toArray(),
 | 
						||
                startTime: startTime,
 | 
						||
                endTime: endTime,
 | 
						||
                price: $("#elecPriceDegree").val()
 | 
						||
                    ? parseFloat($("#elecPriceDegree").val())
 | 
						||
                    : null,
 | 
						||
            };
 | 
						||
 | 
						||
        if (Array.isArray(startTime)) {
 | 
						||
            sent_data = [Object.assign({}, sent_data), Object.assign({}, sent_data)];
 | 
						||
            startTime.forEach((sTime, i) => {
 | 
						||
                const compareType = $("[name=compareTypeRadio]:checked").val();
 | 
						||
                sent_data[i].startTime = sTime;
 | 
						||
                sent_data[i].endTime = null;
 | 
						||
            });
 | 
						||
        }
 | 
						||
 | 
						||
        return sent_data;
 | 
						||
    }
 | 
						||
 | 
						||
    function getMeterData() {
 | 
						||
        let result = [];
 | 
						||
        var sent_data = getListSendData();
 | 
						||
        if (!Array.isArray(sent_data)) {
 | 
						||
            sent_data = [sent_data];
 | 
						||
        }
 | 
						||
 | 
						||
        if (
 | 
						||
            !sent_data[0]?.Mode?.toString() &&
 | 
						||
            !sent_data.some((s) => s.building_tag)
 | 
						||
        ) {
 | 
						||
            toast_error("請選擇棟別");
 | 
						||
            return;
 | 
						||
        }
 | 
						||
        if (!sent_data.some((s) => s.floor_tag)) {
 | 
						||
            toast_error("請選擇樓層");
 | 
						||
            return;
 | 
						||
        }
 | 
						||
        var url =
 | 
						||
            baseApiUrl +
 | 
						||
            "/api/" +
 | 
						||
            `${sent_data[0]?.Mode?.toString()
 | 
						||
                ? reportTypeDict["RElec"]["listApiUrlForTotal"]
 | 
						||
                : reportTypeDict["RElec"]["listApiUrl"]
 | 
						||
            }`;
 | 
						||
 | 
						||
        setLoading(true);
 | 
						||
        sent_data.forEach((sdata, i) => {
 | 
						||
            $.ajax({
 | 
						||
                type: "POST",
 | 
						||
                headers: {
 | 
						||
                    Authorization: "Bearer " + token,
 | 
						||
                },
 | 
						||
                url: url,
 | 
						||
                async: false,
 | 
						||
                data: JSON.stringify(sdata),
 | 
						||
                contentType: "application/json; charset=utf-8",
 | 
						||
                success: function (rel) {
 | 
						||
                    if (rel.code != "0000") {
 | 
						||
                        if (rel.code == "9999") {
 | 
						||
                            toast_error(rel.msg);
 | 
						||
                        } else {
 | 
						||
                            toast_warning(rel.msg);
 | 
						||
                        }
 | 
						||
                        return;
 | 
						||
                    }
 | 
						||
                    if (i == 0) {
 | 
						||
                        result = result.concat(rel.data);
 | 
						||
                        result.forEach((r) => {
 | 
						||
                            r._compare_price = null;
 | 
						||
                            r._compare_total = null;
 | 
						||
                            r._compare_total_price = null;
 | 
						||
                        });
 | 
						||
                    } else {
 | 
						||
                        rel.data.forEach((r) => {
 | 
						||
                            let target =
 | 
						||
                                result.find(
 | 
						||
                                    (d) =>
 | 
						||
                                        d.building_tag == r.building_tag &&
 | 
						||
                                        d.device_serial_tag == r.device_serial_tag &&
 | 
						||
                                        d.floor_tag == r.floor_tag
 | 
						||
                                ) ?? null;
 | 
						||
                            let _target = {};
 | 
						||
                            // if(!target){
 | 
						||
                            //   result.push(target);
 | 
						||
                            //   target = {};
 | 
						||
                            // }
 | 
						||
                            _target.rawData = (target?.rawData ?? []).concat(r.rawData);
 | 
						||
                            _target._compare_price = r.price;
 | 
						||
                            _target._compare_total = r.total;
 | 
						||
                            _target._compare_total_price = r.total_price;
 | 
						||
 | 
						||
                            if (!target) {
 | 
						||
                                _target = Object.assign(_target, r);
 | 
						||
                                _target.price = null;
 | 
						||
                                _target.total = null;
 | 
						||
                                _target.total_price = null;
 | 
						||
                                result.push(_target);
 | 
						||
                                return;
 | 
						||
                            }
 | 
						||
                            target = Object.assign(target, _target);
 | 
						||
                        });
 | 
						||
                    }
 | 
						||
                },
 | 
						||
                complete: () => {
 | 
						||
                    if (sent_data.length - 1 == i) {
 | 
						||
                        setLoading(false);
 | 
						||
                    }
 | 
						||
                },
 | 
						||
            });
 | 
						||
        });
 | 
						||
        setReportTable(result);
 | 
						||
    }
 | 
						||
 | 
						||
    function getPrice() {
 | 
						||
        var sentdata = {
 | 
						||
            type: reportTypeDict["RElec"]["name"],
 | 
						||
        };
 | 
						||
 | 
						||
        var url = baseApiUrl + "/api/HydroMeterPrice";
 | 
						||
 | 
						||
        $.ajax({
 | 
						||
            type: "POST",
 | 
						||
            url: url,
 | 
						||
            headers: {
 | 
						||
                Authorization: "Bearer " + token,
 | 
						||
            },
 | 
						||
            data: JSON.stringify(sentdata),
 | 
						||
            contentType: "application/json; charset=UTF-8;",
 | 
						||
            success: function (rel) {
 | 
						||
                if (rel.code != "0000") {
 | 
						||
                    if (rel.code == "9999") {
 | 
						||
                        toast_error(rel.msg);
 | 
						||
                    } else {
 | 
						||
                        toast_warning(rel.msg);
 | 
						||
                    }
 | 
						||
                    return;
 | 
						||
                }
 | 
						||
                $("#elecPriceDegree").val(rel.data);
 | 
						||
            },
 | 
						||
        });
 | 
						||
    }
 | 
						||
 | 
						||
    function getDayByMonth(month) {
 | 
						||
        const firstDayOfMonth = moment(month).startOf("month");
 | 
						||
        const lastDayOfMonth = moment(month).endOf("month");
 | 
						||
        const datesOfMonth = [];
 | 
						||
        let currentDay = moment(firstDayOfMonth);
 | 
						||
        while (currentDay.isSameOrBefore(lastDayOfMonth)) {
 | 
						||
            datesOfMonth.push(currentDay.format("YYYY-MM-DD"));
 | 
						||
            currentDay = currentDay.add(1, "day");
 | 
						||
        }
 | 
						||
        return datesOfMonth;
 | 
						||
    }
 | 
						||
 | 
						||
    function getMonthByYear(year) {
 | 
						||
        const firstMonthOfYear = moment(year).startOf("year").month();
 | 
						||
        const lastMonthOfYear = moment(year).endOf("year").month();
 | 
						||
        const monthOfYear = [];
 | 
						||
        for (let i = firstMonthOfYear; i <= lastMonthOfYear; i++) {
 | 
						||
            monthOfYear.push(moment(year).month(i).format("YYYY-MM"));
 | 
						||
        }
 | 
						||
        return monthOfYear;
 | 
						||
    }
 | 
						||
 | 
						||
    function getStartEndYear(sYear, eYear) {
 | 
						||
        const years = [];
 | 
						||
        for (let i = sYear; i <= eYear; i++) {
 | 
						||
            years.push(moment().year(i).format("YYYY"));
 | 
						||
        }
 | 
						||
        return years;
 | 
						||
    }
 | 
						||
 | 
						||
    function setTableColumns() {
 | 
						||
        const tableType = $("li.active [name=reportTypeRadio]").data("value");
 | 
						||
        const compareType = $("label.active [name=compareTypeRadio]").val();
 | 
						||
        const columnWidth = "45px";
 | 
						||
        let columns = [];
 | 
						||
        switch (tableType) {
 | 
						||
            case "day":
 | 
						||
                columns = getDayByMonth($("#elecMonthDate").val()).map((dc) => {
 | 
						||
                    return { title: dc, data: dc, sWidth: columnWidth };
 | 
						||
                });
 | 
						||
                break;
 | 
						||
            case "month":
 | 
						||
                columns = getMonthByYear($("#elecYearDate").val()).map((dc) => {
 | 
						||
                    return { title: dc, data: dc, sWidth: columnWidth };
 | 
						||
                });
 | 
						||
                break;
 | 
						||
            case "year":
 | 
						||
                columns = getStartEndYear(
 | 
						||
                    $("#elecSYearDate").val(),
 | 
						||
                    $("#elecEYearDate").val()
 | 
						||
                ).map((dc) => {
 | 
						||
                    return { title: dc, data: dc, sWidth: columnWidth };
 | 
						||
                });
 | 
						||
                break;
 | 
						||
            case "compare":
 | 
						||
                let compareResult = [];
 | 
						||
                switch (compareType) {
 | 
						||
                    case "month":
 | 
						||
                        columns1 = getMonthByYear($("#elecCom1YearDate").val());
 | 
						||
                        columns2 = getMonthByYear($("#elecCom2YearDate").val());
 | 
						||
                        columns1.forEach((c1, index) => {
 | 
						||
                            compareResult.push(c1);
 | 
						||
                            if (columns2[index]) {
 | 
						||
                                compareResult.push({
 | 
						||
                                    value: columns2[index],
 | 
						||
                                    _isCompared: true,
 | 
						||
                                });
 | 
						||
                            }
 | 
						||
                        });
 | 
						||
                        break;
 | 
						||
                    case "day":
 | 
						||
                        columns1 = getDayByMonth($("#elecCom1MonthDate").val());
 | 
						||
                        columns2 = getDayByMonth($("#elecCom2MonthDate").val());
 | 
						||
                        columns1.forEach((c1, index) => {
 | 
						||
                            compareResult.push(c1);
 | 
						||
                            if (columns2[index]) {
 | 
						||
                                compareResult.push({
 | 
						||
                                    value: columns2[index],
 | 
						||
                                    _isCompared: true,
 | 
						||
                                });
 | 
						||
                            }
 | 
						||
                        });
 | 
						||
                        break;
 | 
						||
                }
 | 
						||
 | 
						||
                return compareResult.map((dc) => {
 | 
						||
                    if (dc._isCompared) {
 | 
						||
                        return {
 | 
						||
                            title: dc.value,
 | 
						||
                            data: dc.value,
 | 
						||
                            sClass: "compare",
 | 
						||
                            sWidth: columnWidth,
 | 
						||
                        };
 | 
						||
                    }
 | 
						||
                    return { title: dc, data: dc, sWidth: columnWidth };
 | 
						||
                });
 | 
						||
 | 
						||
                break;
 | 
						||
        }
 | 
						||
        return columns;
 | 
						||
    }
 | 
						||
 | 
						||
    function setReportTable(datas = []) {
 | 
						||
        if (datatable) {
 | 
						||
            datatable.clear().draw();
 | 
						||
            datatable.destroy();
 | 
						||
            $("#report_table").empty();
 | 
						||
        }
 | 
						||
 | 
						||
        const ElecEachTotal =
 | 
						||
            $("li.active [name=reportTypeRadio]").data("type") === "compare";
 | 
						||
        if (ElecEachTotal) {
 | 
						||
            const [year, month] = $("#elecMonthDate").val().split("-");
 | 
						||
            datesColumns = [
 | 
						||
                {
 | 
						||
                    label: "選擇月份 <br>" + `${year}${month}` + "(A)",
 | 
						||
                    value: $("#elecMonthDate").val(),
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    label:
 | 
						||
                        "前一月份 <br>" +
 | 
						||
                        `${year}${month - 1 > 10 ? month - 1 : `0${month - 1}`}` +
 | 
						||
                        "(B)",
 | 
						||
                    value: `${year}-${month - 1 > 10 ? month - 1 : `0${month - 1}`}`,
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    label:
 | 
						||
                        "差異比較 <br>" +
 | 
						||
                        `${year}${month}(A)-${year}${month - 1 > 10 ? month - 1 : `0${month - 1}`
 | 
						||
                        }(B)`,
 | 
						||
                    value: "last month different",
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    label: "去年同期 <br>" + `${year - 1}${month}` + "(C)",
 | 
						||
                    value: `${year - 1}-${month}`,
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    label: "同期差異 <br>" + `${year - 1}${month}(A)-${year}${month}(C)`,
 | 
						||
                    value: "last year different",
 | 
						||
                },
 | 
						||
            ].map((dc) => {
 | 
						||
                return { title: dc.label, data: dc.value, sWidth: "120px" };
 | 
						||
            });
 | 
						||
        } else {
 | 
						||
            datesColumns = setTableColumns();
 | 
						||
        }
 | 
						||
 | 
						||
        const compareType = $("label.active [name=compareTypeRadio]").val();
 | 
						||
        datas.forEach((td) => {
 | 
						||
            td.rawData.forEach((rd) => {
 | 
						||
                td[rd.timeStamp] = rd.avg_rawdata;
 | 
						||
            });
 | 
						||
            datesColumns.forEach((dc) => {
 | 
						||
                td[dc.data] = td[dc.data] === undefined ? null : td[dc.data];
 | 
						||
            });
 | 
						||
        });
 | 
						||
 | 
						||
        let totalColumns = [
 | 
						||
            {
 | 
						||
                title: "小計",
 | 
						||
                data: "total",
 | 
						||
                sWidth: "70px",
 | 
						||
            },
 | 
						||
            {
 | 
						||
                title: "單價",
 | 
						||
                data: "price",
 | 
						||
                sWidth: "45px",
 | 
						||
                render: function (data) {
 | 
						||
                    return parseInt(data) === 0 ? "" : data;
 | 
						||
                },
 | 
						||
            },
 | 
						||
            {
 | 
						||
                title: "金額總計",
 | 
						||
                data: "total_price",
 | 
						||
                sWidth: "70px",
 | 
						||
                render: function (data) {
 | 
						||
                    return parseInt(data) === 0 ? "" : data;
 | 
						||
                },
 | 
						||
            },
 | 
						||
        ];
 | 
						||
        const tableType = $("li.active [name=reportTypeRadio]").data("value");
 | 
						||
 | 
						||
        if (tableType == "compare") {
 | 
						||
            const com1Time =
 | 
						||
                compareType == "month"
 | 
						||
                    ? $("#elecCom1YearDate").val()
 | 
						||
                    : $("#elecCom1MonthDate").val();
 | 
						||
            const com2Time =
 | 
						||
                compareType == "month"
 | 
						||
                    ? $("#elecCom2YearDate").val()
 | 
						||
                    : $("#elecCom2MonthDate").val();
 | 
						||
 | 
						||
            for (var i = 0; i < totalColumns.length; i++) {
 | 
						||
                let c = totalColumns[i];
 | 
						||
                if (["total", "price", "total_price"].includes(c.data)) {
 | 
						||
                    totalColumns.splice(i + 1, 0, {
 | 
						||
                        title: com2Time + c.title,
 | 
						||
                        data: "_compare_" + c.data,
 | 
						||
                        sWidth: "70px",
 | 
						||
                        sClass: "compare",
 | 
						||
                    });
 | 
						||
                    c.title = com1Time + c.title;
 | 
						||
                    c.sWidth = "70px";
 | 
						||
                }
 | 
						||
            }
 | 
						||
        }
 | 
						||
 | 
						||
        datatable = $("#report_table").DataTable({
 | 
						||
            data: datas,
 | 
						||
            destroy: true,
 | 
						||
            sDom: '<"toolbar">tipl',
 | 
						||
            fixedColumns: { left: 3, right: tableType == "compare" ? 2 : 3 },
 | 
						||
            scrollX: "auto",
 | 
						||
            scrollCollapse: true,
 | 
						||
            autoWidth: true,
 | 
						||
            language: { url: "/file/BajascriptTest/js/dataTables/zh-HANT.json" },
 | 
						||
            columns: [
 | 
						||
                {
 | 
						||
                    title: "棟別",
 | 
						||
                    data: "building_name",
 | 
						||
                    className: "text-nowrap",
 | 
						||
                    sWidth: "100px",
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    title: "樓層",
 | 
						||
                    data: "floor_tag",
 | 
						||
                    sWidth: "8%",
 | 
						||
                    className: "text-nowrap",
 | 
						||
                },
 | 
						||
                {
 | 
						||
                    title: "設備",
 | 
						||
                    data: "device_full_name",
 | 
						||
                    sWidth: "100px",
 | 
						||
                },
 | 
						||
                ...datesColumns,
 | 
						||
                ...(ElecEachTotal ? [] : totalColumns),
 | 
						||
            ],
 | 
						||
        });
 | 
						||
    }
 | 
						||
 | 
						||
    function setExportList() {
 | 
						||
        const tableType = $("li.active [name=reportTypeRadio]").data("value");
 | 
						||
        var sent_data = getListSendData();
 | 
						||
        if (!Array.isArray(sent_data)) {
 | 
						||
            sent_data = [sent_data];
 | 
						||
        }
 | 
						||
        // if (!sent_data.some((s) => s.building_tag)) {
 | 
						||
        //   toast_error("請選擇棟別");
 | 
						||
        //   return;
 | 
						||
        // }
 | 
						||
        // if (!sent_data.some((s) => s.floor_tag)) {
 | 
						||
        //   toast_error("請選擇樓層");
 | 
						||
        //   return;
 | 
						||
        // }
 | 
						||
        var url =
 | 
						||
            baseApiUrl +
 | 
						||
            "/api/" +
 | 
						||
            reportTypeDict["RElec"]["exportListApiUrl"][tableType];
 | 
						||
 | 
						||
        setLoading(true, "匯出中");
 | 
						||
        $.ajax({
 | 
						||
            type: "POST",
 | 
						||
            url: url,
 | 
						||
            data:
 | 
						||
                tableType == "compare"
 | 
						||
                    ? JSON.stringify(sent_data)
 | 
						||
                    : JSON.stringify(sent_data[0]),
 | 
						||
            headers: {
 | 
						||
                Authorization: "Bearer " + token,
 | 
						||
            },
 | 
						||
            contentType: "application/json; charset=utf-8",
 | 
						||
            xhrFields: {
 | 
						||
                responseType: "blob", // to avoid binary data being mangled on charset conversion
 | 
						||
            },
 | 
						||
            success: function (rel, text, xhr) {
 | 
						||
                if (rel) {
 | 
						||
                    downloadByBlob(xhr, rel);
 | 
						||
                }
 | 
						||
            },
 | 
						||
            complete: (xhr) => {
 | 
						||
                setLoading(false);
 | 
						||
            },
 | 
						||
        });
 | 
						||
    }
 | 
						||
 | 
						||
    function setLoading(type = true, text = "列表讀取中") {
 | 
						||
        if (type) {
 | 
						||
            $("#tableLoading").fadeIn(200);
 | 
						||
            $("#tableLoadingText").html(text);
 | 
						||
        } else {
 | 
						||
            $("#tableLoading").fadeOut(200);
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    //選擇棟別
 | 
						||
    function SelectBuild(e, building_tag) {
 | 
						||
        if (SelectBuildings.includes(building_tag)) {
 | 
						||
            SelectBuildings = SelectBuildings.filter((bui) => bui !== building_tag);
 | 
						||
        } else {
 | 
						||
            SelectBuildings.push(building_tag);
 | 
						||
        }
 | 
						||
        checkIsSelectedBuilding();
 | 
						||
        // GetFloors(building_tag);
 | 
						||
    }
 | 
						||
 | 
						||
    //取得樓層
 | 
						||
    function GetFloors(building_tag) {
 | 
						||
        var sentdata = {
 | 
						||
            building_tag: building_tag,
 | 
						||
        };
 | 
						||
 | 
						||
        var url = baseApiUrl + "/api/GetAllfloor";
 | 
						||
        $.ajax({
 | 
						||
            type: "POST",
 | 
						||
            url: url,
 | 
						||
            headers: {
 | 
						||
                Authorization: "Bearer " + token,
 | 
						||
            },
 | 
						||
            data: sentdata,
 | 
						||
            success: function (rel) {
 | 
						||
                if (rel.code != "0000") {
 | 
						||
                    if (rel.code == "9999") {
 | 
						||
                        toast_error(rel.msg);
 | 
						||
                    } else {
 | 
						||
                        toast_warning(rel.msg);
 | 
						||
                    }
 | 
						||
                    return;
 | 
						||
                }
 | 
						||
                if (rel.data && rel.data.length > 0) {
 | 
						||
                    $(".allbtn").show();
 | 
						||
                }
 | 
						||
                drawFloorsBtn(rel.data);
 | 
						||
                checkIsHasFloorByBuilding();
 | 
						||
                //   JudgeCurrentDeviceData();
 | 
						||
                //   RedrawDataTable();
 | 
						||
            },
 | 
						||
        });
 | 
						||
    }
 | 
						||
 | 
						||
    function allFloor() {
 | 
						||
        $("[name=floorCheckbox]").prop("checked", true);
 | 
						||
        $("[name=floorCheckbox]").parent(".btn").addClass("active");
 | 
						||
    }
 | 
						||
 | 
						||
    function checkIsSelectedBuilding() {
 | 
						||
        let result = false;
 | 
						||
        let buildingRadios = $("[name=buildingRadio]:checked");
 | 
						||
        if (buildingRadios && buildingRadios.length > 0) {
 | 
						||
            $("#floors .text-notice.notice-noSelectedBuilding").hide();
 | 
						||
            result = true;
 | 
						||
        } else {
 | 
						||
            $("#floors .text-notice.notice-noSelectedBuilding").show();
 | 
						||
            $(".allbtn").hide();
 | 
						||
        }
 | 
						||
        return result;
 | 
						||
    }
 | 
						||
 | 
						||
    function checkIsHasFloorByBuilding() {
 | 
						||
        let result = false;
 | 
						||
        let floorCheckboxs = $("[name=floorCheckbox]");
 | 
						||
        if (!checkIsSelectedBuilding()) {
 | 
						||
            return null;
 | 
						||
        }
 | 
						||
        if (floorCheckboxs && floorCheckboxs.length > 0) {
 | 
						||
            $("#floors .text-notice.notice-noBuilding").hide();
 | 
						||
            result = true;
 | 
						||
        } else {
 | 
						||
            $("#floors .text-notice.notice-noBuilding").show();
 | 
						||
            $(".allbtn").hide();
 | 
						||
        }
 | 
						||
        return result;
 | 
						||
    }
 | 
						||
 | 
						||
    function drawFloorsBtn(floors) {
 | 
						||
        var html = "";
 | 
						||
        for (let floor of floors) {
 | 
						||
            html += `<label class="btn btn-outline-success waves-effect waves-themed" style="flex:0 0 auto">
 | 
						||
                  <input type="checkbox" name="floorCheckbox" onChange="SelectFloor(this,'${floor.floor_guid}')" value="${floor.full_name}" id="${floor.floor_guid}"> ${floor.full_name}
 | 
						||
              </label>`;
 | 
						||
        }
 | 
						||
 | 
						||
        $("#floors").find(".item").empty();
 | 
						||
        $("#floors").find(".item").append(html);
 | 
						||
    }
 | 
						||
 | 
						||
    function SelectFloor(e, floor_guid) {
 | 
						||
        // getMeterData();
 | 
						||
    }
 | 
						||
 | 
						||
    function getSchoolZone() {
 | 
						||
        var url = baseApiUrl + "/api/Device/GetSchoolZone";
 | 
						||
        $.ajax({
 | 
						||
            type: "POST",
 | 
						||
            url: url,
 | 
						||
            headers: {
 | 
						||
                Authorization: "Bearer " + token,
 | 
						||
            },
 | 
						||
            success: function (rel) {
 | 
						||
                if (rel.code != "0000") {
 | 
						||
                    if (rel.code == "9999") {
 | 
						||
                        toast_error(rel.msg);
 | 
						||
                    } else {
 | 
						||
                        toast_warning(rel.msg);
 | 
						||
                    }
 | 
						||
                    return;
 | 
						||
                }
 | 
						||
                if (rel.data && rel.data.length > 0) {
 | 
						||
                    console.log("getSchoolZone", rel);
 | 
						||
                    let htmlStr = "";
 | 
						||
                    rel.data.forEach(({ system_key, system_value }) => {
 | 
						||
                        htmlStr += `
 | 
						||
        <label
 | 
						||
                class="btn btn-outline-success waves-effect waves-themed ${school_zone === system_key ? "active" : ""
 | 
						||
                            }"
 | 
						||
              >
 | 
						||
                <input type="radio" name="buildingRadio" value=${system_key} />${system_value}
 | 
						||
              </label>`;
 | 
						||
                    });
 | 
						||
                    $("#school_zone>.btn-group").append(htmlStr);
 | 
						||
                }
 | 
						||
            },
 | 
						||
        });
 | 
						||
    }
 | 
						||
 | 
						||
    $("#school_zone").on("click", function (event) {
 | 
						||
        event.stopPropagation();
 | 
						||
        if (
 | 
						||
            event.target.tagName !== "INPUT" &&
 | 
						||
            !$(event.target).hasClass("active")
 | 
						||
        ) {
 | 
						||
            $("#school_zone label.active").removeClass("active");
 | 
						||
            $(event.target).addClass("active");
 | 
						||
            SelectBuildings = [];
 | 
						||
        } else if (event.target.tagName === "INPUT") {
 | 
						||
            school_zone = event.target.value;
 | 
						||
            getbuildings(school_zone);
 | 
						||
        }
 | 
						||
    });
 | 
						||
 | 
						||
    function getbuildings(value) {
 | 
						||
        var html = "";
 | 
						||
        for (let building of pageAct.buildList.filter(
 | 
						||
            ({ school_zone }) => school_zone === value
 | 
						||
        )) {
 | 
						||
            html += `<label class="btn btn-outline-success waves-effect waves-themed">
 | 
						||
        <input type="checkbox" name="buildingRadio" id="radio_${building.building_tag}" value="${building.building_tag}" onChange="SelectBuild(this,'${building.building_tag}')"> ${building.full_name}
 | 
						||
        </label>`;
 | 
						||
        }
 | 
						||
        $("#building").find(".item").empty();
 | 
						||
        $("#building").find(".item").append(html);
 | 
						||
        SelectBuildings = [];
 | 
						||
    }
 | 
						||
</script>
 |