Răsfoiți Sursa

新增 進階搜尋_文字搜尋

oransheep 3 ani în urmă
părinte
comite
4d0b7cfd7c
4 a modificat fișierele cu 348 adăugiri și 270 ștergeri
  1. 107 85
      index.php
  2. 125 57
      script/js/jstreeAJAX.js
  3. 92 124
      script/js/search.js
  4. 24 4
      script/php/get_search_list.php

+ 107 - 85
index.php

@@ -47,7 +47,6 @@ if (!isset($_SESSION['loggedin'])) {
 	<!-- chart.js -->
 	<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
 	<!-- DataTable -->
-
 	<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.css">
 	<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.25/js/jquery.dataTables.js"></script>
 	<!-- Icon -->
@@ -65,10 +64,6 @@ if (!isset($_SESSION['loggedin'])) {
 	<script src="./script/js/vue-search-block.js"></script>
 
 	<style>
-		.row {
-			margin-top: -15px;
-		}
-
 		.page-header>ul {
 			list-style: none;
 			padding: 0;
@@ -235,6 +230,7 @@ if (!isset($_SESSION['loggedin'])) {
 
 		.selectBox {
 			position: relative;
+			width: 200px;
 		}
 
 		.selectBox select {
@@ -253,6 +249,11 @@ if (!isset($_SESSION['loggedin'])) {
 		.checkboxes {
 			display: none;
 			border: 1px #dadada solid;
+			background-color: white;
+			z-index: 2;
+			position: absolute;
+			width: 200px;
+			display: none;
 		}
 
 		.checkboxes label {
@@ -271,6 +272,16 @@ if (!isset($_SESSION['loggedin'])) {
 		.multiselect {
 			display: inline-block;
 		}
+
+		#pop {
+			position: relative;
+			background: #FFF;
+			padding: 20px;
+			width: auto;
+			max-width: 500px;
+			margin: 20px auto;
+		}
+
 	</style>
 
 	<script>
@@ -740,97 +751,102 @@ if (!isset($_SESSION['loggedin'])) {
 						<li class="right">
 							<div class="input-group input-search" style="table-layout: auto;"><input type="text" class="form-control" name="search" id="search" placeholder="Search..."><span class="input-group-btn"><button class="btn btn-default" id="btn-search"><i class="fa fa-search"></i></button></span></div>
 						</li>
+						<li class="right">
+							<a class="mb-xs mt-xs mr-xs modal-with-move-anim btn btn-default" href="#advancedSearch">進階搜尋</a>
+						</li>
 					</ul>
 				</header>
 				<div class="row">
-
-					<section class="panel">
-						<div class="panel-body">
-							<div id="category">
-								<ul class="button-group nav nav-pills nav-pills-primary">
-									<li style="padding: 10px 15px;">
-										<label>工程類別:</label>
-									</li>
-									<div class="multiselect">
-										<div class="selectBox">
-											<select>
-												<option>選擇工程</option>
-											</select>
-											<div class="overSelect"></div>
-										</div>
-										<div class="checkboxes form-inline" style="display: none;">
-											<label for="category-any"><input type="checkbox" id="category-any" value="any" checked/> 全選</label>
-											<!-- append option -->
+					<div id="advancedSearch" class="zoom-anim-dialog modal-block modal-block-primary mfp-hide">
+						<section class="panel">
+							<header class="panel-heading">
+								<h2 class="panel-title">進階搜尋</h2>
+							</header>
+							<div class="panel-body">
+								<form class="form-horizontal form-bordered" method="get">
+									<div class="form-group" id="category">
+										<label class="col-md-3 control-label">工程類別:</label>
+										<div class="multiselect col-md-6">
+											<div class="selectBox">
+												<select>
+													<option>選擇工程</option>
+												</select>
+												<div class="overSelect"></div>
+											</div>
+											<div class="checkboxes form-inline" style="display: none;">
+												<label for="category-any"><input type="checkbox" id="category-any" value="any" checked/> 全選</label>
+												<!-- append option -->
+											</div>
 										</div>
 									</div>
-								</ul>
-							</div>
 
-							<div id="project">
-								<ul class="button-group nav nav-pills nav-pills-primary">
-									<li style="padding: 10px 15px;">
-										<label >專案類別:</label>
-									</li>
-									<div class="multiselect">
-										<div class="selectBox">
-											<select>
-												<option>選擇專案</option>
-											</select>
-											<div class="overSelect"></div>
-										</div>
-										<div class="checkboxes form-inline" style="display: none;">
-											<label for="project-any"><input type="checkbox" id="project-any" value="any" checked/> 全選</label>
-											<!-- append option -->
+									<div class="form-group" id="project">
+										<label class="col-md-3 control-label">專案類別:</label>
+										<div class="multiselect col-md-6">
+											<div class="selectBox">
+												<select>
+													<option>選擇專案</option>
+												</select>
+												<div class="overSelect"></div>
+											</div>
+											<div class="checkboxes form-inline" style="display: none;">
+												<label for="project-any"><input type="checkbox" id="project-any" value="any" checked/> 全選</label>
+												<!-- append option -->
+											</div>
 										</div>
 									</div>
-								</ul>
-							</div>
-							
-							<div id="type">
-								<ul class="button-group nav nav-pills nav-pills-primary">
-									<li style="padding: 10px 15px;">
-										<label>文件類別:</label>
-									</li>
-									<div class="multiselect">
-										<div class="selectBox">
-											<select>
-												<option>選擇文件</option>
-											</select>
-											<div class="overSelect"></div>
-										</div>
-										<div class="checkboxes form-inline" style="display: none;">
-											<label for="type-any"><input type="checkbox" id="type-any" value="any" checked/> 全選</label>
-											<!-- append option -->
+
+									<div class="form-group" id="type">
+										<label class="col-md-3 control-label">文件類別:</label>
+										<div class="multiselect col-md-6">
+											<div class="selectBox">
+												<select>
+													<option>選擇文件</option>
+												</select>
+												<div class="overSelect"></div>
+											</div>
+											<div class="checkboxes form-inline" style="display: none;">
+												<label for="type-any"><input type="checkbox" id="type-any" value="any" checked/> 全選</label>
+												<!-- append option -->
+											</div>
 										</div>
 									</div>
-								</ul>
-							</div>
 
-							<div id="notes" style="display: none;">
-								<ul class="button-group nav nav-pills nav-pills-primary">
-									<li style="padding: 10px 15px;">
-										<label>設計圖類別:</label>
-									</li>
-									<div class="multiselect">
-										<div class="selectBox">
-											<select>
-												<option>選擇設計圖</option>
-											</select>
-											<div class="overSelect"></div>
+									<div class="form-group" id="notes" style="display: bllock;" hidden>
+										<label class="col-md-3 control-label">設計圖類別:</label>
+										<div class="multiselect col-md-6">
+											<div class="selectBox">
+												<select>
+													<option>選擇設計圖</option>
+												</select>
+												<div class="overSelect"></div>
+											</div>
+											<div class="checkboxes form-inline" style="display: none;">
+												<label for="notes-any"><input type="checkbox" id="notes-any" value="any" checked/> 全選</label>
+												<!-- append option -->
+											</div>
 										</div>
-										<div class="checkboxes form-inline" style="display: none;">
-											<label for="notes-any"><input type="checkbox" id="notes-any" value="any" checked/> 全選</label>
-											<!-- append option -->
+									</div>
+
+									<div class="form-group">
+										<label class="col-md-3 control-label" for="search-word">文字搜尋:</label>
+										<div class="col-md-6">
+											<input type="text" class="form-control" placeholder="輸入關鍵字" id="search-word">
 										</div>
 									</div>
-								</ul>
+								</form>
+								
 							</div>
-
-							<hr class="solid short">
-							<button class="search-by-filter" style="float:right">search</button>
-						</div>
-				
-					</section>
+							<footer class="panel-footer">
+								<div class="row">
+									<div class="col-md-12 text-right">
+										<button class="btn btn-primary" id="advanced-search-button">搜尋</button>
+										<button class="btn btn-default modal-dismiss">取消</button>
+									</div>
+								</div>
+							</footer>
+						</section>
+					</div>
 
 					<div class="col-md-6">
 						<section class="panel">
@@ -926,25 +942,31 @@ if (!isset($_SESSION['loggedin'])) {
 	<script>
 		db_table["category"].forEach(element => {
 			option_id = "c" + element["category_id"] + "-l" + element["list_id"]
-			$("#category .checkboxes").append("<label class='category-button' for="+option_id+"><input type='checkbox' class='category-option' value="+element["category_name"]+" id="+option_id+" checked/>"+element["category_name"]+"</label>");
+			$("#category .checkboxes").append("<label class='category-button' for="+option_id+"><input type='checkbox' class='category-option' value="+element["category_name"]+" id="+option_id+" />"+element["category_name"]+"</label>");
 		});
 
 		db_table["project"].forEach(element => {
 			option_id = "p" + element["project_id"]
-			$("#project .checkboxes").append("<label class='project-button' for="+option_id+"><input type='checkbox' class='project-option' value="+element["project_id"]+" id="+option_id+" checked/>["+element["project_id"]+"] "+element["project_name"]+"</label>");
+			$("#project .checkboxes").append("<label class='project-button' for="+option_id+"><input type='checkbox' class='project-option' value="+element["project_id"]+" id="+option_id+" />["+element["project_id"]+"] "+element["project_name"]+"</label>");
 		});
 
 		db_table["type"].forEach(element => {
 			option_id = "t" + element["type_id"]
-			$("#type .checkboxes").append("<label class='type-button' for="+option_id+"><input type='checkbox' class='type-option' value="+element["type_name"]+" id="+option_id+" checked/>"+element["type_name"]+"</label>");
+			$("#type .checkboxes").append("<label class='type-button' for="+option_id+"><input type='checkbox' class='type-option' value="+element["type_name"]+" id="+option_id+" />"+element["type_name"]+"</label>");
 		});
 
 		for(i=0;i<notes_button_list.length;i++) {
 			option_id = "n" + i
-			$("#notes .checkboxes").append("<label class='notes-button' for="+option_id+"><input type='checkbox' class='notes-option' value="+notes_button_list[i]+" id="+option_id+" checked/>"+notes_button_list[i]+"</label>");
+			$("#notes .checkboxes").append("<label class='notes-button' for="+option_id+"><input type='checkbox' class='notes-option' value="+notes_button_list[i]+" id="+option_id+" />"+notes_button_list[i]+"</label>");
 		}			
 	</script>
+	<!-- Vendor -->
+	<script src="assets/vendor/magnific-popup/magnific-popup.js"></script>
+
+	<!-- Examples -->
 	<script src='./script/js/search.js'></script>
+	<script src="assets/javascripts/ui-elements/examples.modals.js"></script>
+	
 </body>
 
 </html>

+ 125 - 57
script/js/jstreeAJAX.js

@@ -1,5 +1,19 @@
+/* 
+    0:自動編號         SN項次
+    1:類別             圖名
+    2:X                關鍵字
+    3:X                版次
+    4:檔案數            X
+    5:計畫編號-計畫名稱  計畫編號
+    6:類別ID            計畫名稱
+    7:X                 類別ID
+    8:X                 工程類別
+    9:X                 上一層資料夾
+    10:X                檔案路徑
+*/
 $(document).ready(function () {
-    const types = ["工程概要", "工程計算書", "設計圖", "數量計算書", "工程預算書", "施工規範及特定條款", "設計報告書"];
+    //const types = ["工程概要", "工程計算書", "設計圖", "數量計算書", "工程預算書", "施工規範&特定條款", "設計報告書"];
+    var types = [];
     var path = '';
     var category = '';
     var project_id = '';
@@ -93,9 +107,9 @@ $(document).ready(function () {
                     page: 'current'
                 }).count();
 
-                for (var i = 0; i < api.page.len() - (rowCount === 0 ? 1 : rowCount); i++) {
+                /*for (var i = 0; i < api.page.len() - (rowCount === 0 ? 1 : rowCount); i++) {
                     $('#datatable-ajax tbody').append($("<tr><td>&nbsp;</td><td></td><td></td><td></td></tr>"));
-                }
+                }*/
 
             }
             start = false;
@@ -115,8 +129,8 @@ $(document).ready(function () {
         }).error(function (error) {
             console.log(error);
         });
-    
-    displayDetail(false);
+
+    displayDetail(false, true);
 
 
 
@@ -140,10 +154,11 @@ $(document).ready(function () {
         },
         'plugins': ['types', 'search', 'wholerow']
     }).bind("loaded.jstree", function (event, data) {
-        var searchURL = window.location.search;
-        searchURL = searchURL.substring(1, searchURL.length);
-        if (searchURL.includes("=")) {
-            type = decodeURIComponent(searchURL.split("&")[1].split("=")[1]);
+
+        var url_href = window.location.href;
+        var url = new URL(url_href);
+        var projectId = url.searchParams.get("projectId");
+        if (projectId != null) {
             $(this).jstree("open_all");
         }
 
@@ -154,17 +169,19 @@ $(document).ready(function () {
             if (data.node.text.includes("-")) {
                 $("#reset").prop("disabled", false);
                 $("#header").empty();
-                displayDetail(false);
+                displayDetail(false, true);
                 project_id = data.node.text.split("-")[0];
                 project_name = data.node.text.split("-")[1];
                 project = data.node.text;
                 $("#project-id").val(project_id)
                 $("#header").empty();
                 category = $('#treeAjaxHTML').jstree(true).get_node(data.node.parents[0]).text;
+                countFiles(project_id, "false");
 
                 var span = $('<span>' + project + ' > </span>');
                 span.on("click", function (e) {
-                    displayDetail(false);
+                    countFiles(project_id, "false");
+                    displayDetail(false, true);
                     is_blueprint2 = false;
                     for (var k = folderPath.length - 1; k > 0; k--) {
                         $("#header").children().eq(k).remove();
@@ -173,16 +190,22 @@ $(document).ready(function () {
                     let i = 1;
                     table.clear().draw();
                     tempTable = [];
-                    types.forEach(function (data) {
 
+
+                    types.forEach(function (element) {
+                        if (fileNums[i - 1] == null) {
+                            total = 0;
+                        } else {
+                            total = fileNums[i - 1].total;
+                        }
                         let temp = [
                             i,
-                            data,
+                            element.type_name,
                             category,
                             '',
-                            fileNums[i - 1].total,
+                            total,
                             project,
-
+                            element.type_id
                         ];
                         table.row.add(temp).draw();
 
@@ -197,15 +220,21 @@ $(document).ready(function () {
                 let i = 1;
                 table.clear().draw();
                 tempTable = [];
-                countFiles(project_id, "false");
-                types.forEach(function (data) {
+
+                types.forEach(function (element) {
+                    if (fileNums[i - 1] == null) {
+                        total = 0;
+                    } else {
+                        total = fileNums[i - 1].total;
+                    }
                     let temp = [
                         i,
-                        data,
+                        element.type_name,
                         category,
                         '',
-                        fileNums[i - 1].total,
+                        total,
                         project,
+                        element.type_id
                     ];
                     table.row.add(temp).draw();
                     tempTable.push(temp);
@@ -216,7 +245,7 @@ $(document).ready(function () {
             } else {
                 data.instance.toggle_node(data.node);
             }
-            displayDetail(false);
+            displayDetail(false, true);
         });
 
     $('#btn-search').click(function () {
@@ -235,7 +264,7 @@ $(document).ready(function () {
                 type: "GET",
             })
             .success(function (response) {
-                displayDetail(true);
+                displayDetail(true, true);
                 table.clear().draw();
                 $("#tableDetail td").empty();
                 response.forEach(function (data) {
@@ -285,7 +314,7 @@ $(document).ready(function () {
                 });
             }
             $("#tableDetail td").empty();
-            displayDetail(false);
+            displayDetail(false, true);
         }
 
     });
@@ -297,13 +326,15 @@ $(document).ready(function () {
         $(this).css("background-color", "#cccccc");
         $("#tableDetail td").empty();
         var data = table.row(this).data();
+        console.log(data)
         if (data == null) {
             data = ["", "", "null", "", "", "", "", "", "", ""];
         }
         let project_id = data[5].split("-")[0];
-        let SN = data[0];
-        let is_blueprint = data[1] == "設計圖" ? true : false;
+        let SN = data[6] != null ? data[6] : 0;
+        let is_blueprint = data[1] == "設計圖" || data[1] == "成果圖" ? true : false;
         let note = notes.includes(data[1]) ? data[1] : '';
+
         if (data[2] == 'null') {
             $("#tableDetail td").empty();
         } else if (data[3] == '') {
@@ -351,41 +382,62 @@ $(document).ready(function () {
             let type = types[parseInt(data[7]) - 1];
             let path = '';
             //let category = data[8];
-            if (data[7] == 3) {
-                path = data[8] + "/" + data[5] + "-" + data[6] + "/" + data[7] + "_" + type + "/" + data[9] + "/" + data[10];
-            } else {
-                path = data[8] + "/" + data[5] + "-" + data[6] + "/" + data[7] + "_" + type + "/" + data[10];
-            }
 
+            path = data[8] + "/" + data[5] + "-" + data[6] + data[10];
             $("#plan_code").text(data[5]);
             $("#plan_name").text(data[6]);
-            $("#download").append('<img src="./assets/images/' + 'pdf-icon.png" style="height: 30px; display: inline-block;"> ');
-            $("#download").append('<a target="_blank" href="./assets/建置資料/' + path + '">' + data[10] + '</a>');
+
+
             $("#version").text(data[3]);
             $("#fileName").text(data[1]);
-            PDFObject.embed("./assets/建置資料/" + path, "#pdfFile");
+            if (path.toLowerCase().includes("pdf")) {
+                PDFObject.embed("./assets/建置資料/" + path, "#pdfFile");
+                $("#download").append('<img src="./assets/images/' + 'pdf-icon.png" style="height: 30px; display: inline-block;"> ');
+            } else {
+                PDFObject.embed("./assets/notPDF.pdf", "#pdfFile");
+
+                if (path.toLowerCase().includes("doc")) {
+                    $("#download").append('<img src="./assets/images/' + 'word-icon.png" style="height: 30px; display: inline-block;"> ');
+                } else if (path.toLowerCase().includes("xls")) {
+                    $("#download").append('<img src="./assets/images/' + 'excel-icon.png" style="height: 30px; display: inline-block;"> ');
+                }
+
+            }
+            console.log(data[10]);
+            let fileNames = data[10].split('/');
+            let fileName = fileNames[fileNames.length - 1];
+            $("#download").append('<a target="_blank" href="./assets/建置資料/' + path + '">' + fileName + '</a>');
 
         }
 
     });
 
-    function displayDetail(status) {
-        if (status) {
-            table.column(2).visible(true);
-            table.column(3).visible(true);
-            table.column(4).visible(false);
+    function displayDetail(isFile, isBlueprint) {
+
+        table.column(0).visible(isBlueprint);
+        table.column(2).visible(isFile);
+        table.column(3).visible(isFile);
+        table.column(4).visible(!isFile);
+        if (isFile) {
             $(".table-responsive").show();
             $("#SN").text("圖號");
             $("#name").text("圖名");
             $('.nav-tabs a[href="#pdfTab"]').tab('show');
+            test = table;
+            if (table.rows().count() > 10) {
+                table.page.len(10).draw();
+            } else {
+                table.page.len(-1).draw();
+            }
         } else {
-            table.column(2).visible(false);
-            table.column(3).visible(false);
-            table.column(4).visible(true);
             $(".table-responsive").hide();
             $("#SN").text("項次");
             $("#name").text("類別");
-            table.page.len(7).draw();
+            if (isBlueprint) {
+                table.page.len(-1).draw();
+            } else {
+                table.page.len(7).draw();
+            }
             $('.nav-tabs a[href="#arcgisTab"]').tab('show');
         }
 
@@ -406,6 +458,13 @@ $(document).ready(function () {
             .success(function (response) {
                 console.log(response);
                 fileNums = response;
+                types = [];
+                response.forEach(function (element) {
+                    types.push({
+                        type_id: element.type_id,
+                        type_name: element.type_name
+                    })
+                });
             })
             .error(function (error) {
                 console.log(error);
@@ -416,13 +475,9 @@ $(document).ready(function () {
     function addTable(data, notes, response, SN, path) {
 
         table.clear().draw();
-        table.page.len(10).draw();
-        if (data[1] != "設計圖") {
-            displayDetail(true);
+        if (data[1] != "設計圖" && data[1] != "成果圖") {
+
 
-            if (notes.includes(data[1])) {
-                is_blueprint2 = true;
-            }
             for (i = 0; i < response.length; i++) {
                 table.row.add([
                     response[i]["SN"],
@@ -439,22 +494,32 @@ $(document).ready(function () {
                 ])
                 table.draw();
             }
+            if (notes.includes(data[1])) {
+                is_blueprint2 = true;
+                displayDetail(true, true);
+            } else {
+                displayDetail(true, false);
+            }
 
         } else {
-            displayDetail(false);
+            displayDetail(false, true);
             blueprint_SN = SN;
             blueprint_path = path;
             tempTable2 = [];
             countFiles(project_id, "true");
             for (i = 0; i < response.length; i++) {
                 notes[i] = response[i]['notes'];
-
+                if (fileNums[i] == null) {
+                    total = 0;
+                } else {
+                    total = fileNums[i].total;
+                }
                 let temp = [
                     i + 1,
                     response[i]['notes'],
                     '',
                     '',
-                    fileNums[i].total,
+                    total,
                     data[5],
 
 
@@ -468,21 +533,22 @@ $(document).ready(function () {
     }
 
     var search_output = {};
-    $(".search-by-filter").on("click", function (e) {
+    $("#advanced-search-button").on("click", function (e) {
         $.ajax({
             url: "./script/php/get_search_list.php",
             data: {
                 project_id: search_data["project"],
                 type_id: search_data["type"],
-                notes_name: search_data["notes"].filter(element => {return element !== undefined;})
+                notes_name: search_data["notes"].filter(element => {return element !== undefined;}),
+                search: $("#search-word").val(),
             },
             type: "GET",
-            async: false,
+            dataType: "json",
             contentType: "application/json",
-            dataType: "json"
-        }).done(function(data) {
+            async: false
+        }).success(function (response) {
             displayDetail(true);
-            search_output = data;
+            search_output = response;
         }).error(function(error) {
             console.log(error);
         });
@@ -504,6 +570,8 @@ $(document).ready(function () {
             ])
             table.draw();
         }
+        
+        e.preventDefault();
+		$.magnificPopup.close();
     });
-
 });

+ 92 - 124
script/js/search.js

@@ -20,151 +20,97 @@ $(function() {
 
     $(".multiselect #category-any").on("change", function() {
         $("#notes").slideUp(200);
+        $(".category-option").prop("checked", false);
         if(this.checked) {
             search_data["category"] = get_value_list_by_key(db_table["category"], null, -1, "category_id");
             search_data["project"] = get_value_list_by_key(db_table["project"], null, -1, "project_id");
             search_data["type"] = get_value_list_by_key(db_table["type"], null, -1, "type_id");
-            $(".category-option").prop("checked", true);
-            show_select_option("project", search_data["project"], "p", true);
-            $("#project-any").prop("checked", true);
-            show_select_option("type", search_data["type"], "t", true);
-            $("#type-any").prop("checked", true);
-
         } else {
             search_data["category"] = [];
             search_data["project"] = [];
             search_data["type"] = [];
-            $(".category-option").prop("checked", false);
-            show_select_option("project", search_data["project"], "p", true);
-            show_select_option("type", search_data["type"], "t", true);
         }
+        notes_show = get_notes_list_by_project(notes_button_list);
 
-        search_data["notes"] = [];
-        search_data["project"].forEach(element => {
-            search_data["notes"] = search_data["notes"].concat(db_table["notes"][element]);
-        });
-        notes_show_id_list = [];
-        search_data["notes"].forEach(element => {
-            for(i=0; i<notes_button_list.length; i++) {
-                if(notes_button_list[i] == element) {
-                    notes_show_id_list.push(i);
-                }
-            }
-        });
-        show_select_option("notes", notes_show_id_list, "n", true);
-        set_select_text("category", "false");
+        set_select_text("category", false);
+        show_select_option("project", search_data["project"], "p", true);
+        show_select_option("type", search_data["type"], "t", true);
+        show_select_option("notes", notes_show, "n", true);
     });
-
+    
     $(".multiselect .category-option").on("change", function() {
         $("#notes").slideUp(200);
         category_id_list = [];
         list_id_list = [];
 
-        //set search data
-        if (this.value == "any") {
-            search_data["category"] = get_value_list_by_key(db_table["category"], null, -1, "category_id");
-            search_data["project"] = get_value_list_by_key(db_table["project"], null, -1, "project_id");
-            search_data["type"] = get_value_list_by_key(db_table["type"], null, -1, "type_id");
-        } else {
-            check_list = get_multi_checkbox_check_list("category-option");
-            check_list.forEach(element => {
-                if(element != "any") {
-                    category_id_list.push(element.split("-")[0].replace("c", ""));
-                    list_id_list.push(element.split("-")[1].replace("l", ""));
-                }
-            });
-            search_data["category"] = category_id_list;
-            search_data["project"] = get_value_list_by_key(db_table["project"], "category_id", category_id_list, "project_id");
-            target_type_id_list = get_value_list_by_key(db_table["category_type"], "list_id", list_id_list, "category_list");
-            search_data["type"] = merge_string_to_list(target_type_id_list);
-        }
-
+        //set search_data
+        check_list = get_multi_checkbox_check_list("category-option");
+        check_list.forEach(element => {
+            category_id_list.push(element.split("-")[0].replace("c", ""));
+            list_id_list.push(element.split("-")[1].replace("l", ""));
+        });
+        search_data["category"] = category_id_list;
+        search_data["project"] = get_value_list_by_key(db_table["project"], "category_id", category_id_list, "project_id");
+        target_type_id_list = get_value_list_by_key(db_table["category_type"], "list_id", list_id_list, "category_list");
+        search_data["type"] = merge_string_to_list(target_type_id_list);
+        notes_show = get_notes_list_by_project(notes_button_list);
 
         //set view
-        show_select_option("project", search_data["project"], "p", true);
-        $("#project-any").prop("checked", true);
-        show_select_option("type", search_data["type"], "t", true);
-        $("#type-any").prop("checked", true);
-        
-        if(category_id_list.length < db_table["category"].length) {
-            $("#category-any").prop("checked", false);
-        } else {
+        if(search_data["category"].length == db_table["category"].length) {
+            $("#category .checkboxes input").prop("checked", false);
             $("#category-any").prop("checked", true);
+        } else {
+            $("#category-any").prop("checked", false);
         }
-
-        search_data["notes"] = [];
-        search_data["project"].forEach(element => {
-            search_data["notes"] = search_data["notes"].concat(db_table["notes"][element]);
-        });
-        notes_show_id_list = [];
-        search_data["notes"].forEach(element => {
-            for(i=0; i<notes_button_list.length; i++) {
-                if(notes_button_list[i] == element) {
-                    notes_show_id_list.push(i);
-                }
-            }
-        });
-        show_select_option("notes", notes_show_id_list, "n", true);
-        set_select_text("category", "false");
+        set_select_text("category", false);
+        show_select_option("project", search_data["project"], "p", true);
+        show_select_option("type", search_data["type"], "t", true);
+        show_select_option("notes", notes_show, "n", true);
     });
 
     $(".multiselect #project-any").on("change", function() {
         $("#notes").slideUp(200);
+        $(".project-option").prop("checked", false);
+
+        search_data["project"] = [];
         if(this.checked) {
-            search_data["project"] = [];
-            $(".project-button:visible").prop("checked", true);
             $(".project-button:visible").each(function(){
                 search_data["project"].push($(this).find("input").attr("id").replace("p", ""));
-                $(this).find("input").prop("checked", true);
             });
-        } else {
-            search_data["project"] = [];
-            $(".project-option").prop("checked", false);
         }
-        set_select_text("project", false);
+        notes_show = get_notes_list_by_project(notes_button_list);
 
+        set_select_text("project", false);
+        reset_checkbox("type", "t", true);
+        show_select_option("notes", notes_show, "n", true);
     });
-
+    
     $(".multiselect .project-option").on("change", function() {
         $("#notes").slideUp(200);
-        search_data["project"] = get_multi_checkbox_check_list("project-option", "p");
-        set_select_text("project", false);
 
-        search_data["notes"] = [];
-        search_data["project"].forEach(element => {
-            search_data["notes"] = search_data["notes"].concat(db_table["notes"][element]);
-        });
-        notes_show_id_list = [];
-        search_data["notes"].forEach(element => {
-            for(i=0; i<notes_button_list.length; i++) {
-                if(notes_button_list[i] == element) {
-                    notes_show_id_list.push(i);
-                }
-            }
-        });
-        show_select_option("notes", notes_show_id_list, "n", true);
+        search_data["project"] = get_multi_checkbox_check_list("project-option", "p");
+        notes_show = get_notes_list_by_project(notes_button_list);
 
-        if($(".project-option:checked").length < $(".project-button:visible").length) {
-            $("#project-any").prop("checked", false);
-        } else {
+        if($(".project-option:checked").length == $(".project-button:visible").length) {
+            $("#project .checkboxes input").prop("checked", false);
             $("#project-any").prop("checked", true);
+        } else {
+            $("#project-any").prop("checked", false);
         }
-
+        set_select_text("project", false);
         reset_checkbox("type", "t", true);
+        show_select_option("notes", notes_show, "n", true);
     });
 
     $(".multiselect #type-any").on("change", function() {
         $("#notes").slideUp(200);
+        $(".type-option").prop("checked", false);
+
+        search_data["type"] = [];
         if(this.checked) {
-            search_data["type"] = [];
-            $(".type-button:visible").prop("checked", true);
             $(".type-button:visible").each(function(){
                 search_data["type"].push($(this).find("input").attr("id").replace("t", ""));
-                $(this).find("input").prop("checked", true);
             });
-        } else {
-            search_data["type"] = [];
-            $(".type-option").prop("checked", false);
         }
         set_select_text("type", false);
         reset_checkbox("notes", "n", true);
@@ -172,13 +118,14 @@ $(function() {
 
     $(".multiselect .type-option").on("change", function() {
         search_data["type"] = get_multi_checkbox_check_list("type-option", "t");
-        set_select_text("type", false);
 
-        if($(".type-option:checked").length < $(".type-button:visible").length) {
-            $("#type-any").prop("checked", false);
-        } else {
+        if($(".type-option:checked").length == $(".type-button:visible").length) {
+            $("#type .checkboxes input").prop("checked", false);
             $("#type-any").prop("checked", true);
+        } else {
+            $("#type-any").prop("checked", false);
         }
+        set_select_text("type", false);
 
         if($("#t3").prop("checked")) {
             $("#notes").slideDown(200);
@@ -189,29 +136,27 @@ $(function() {
     });
 
     $(".multiselect #notes-any").on("change", function() {
+        $(".project-option").prop("checked", false);
+
+        search_data["notes"] = [];
         if(this.checked) {
-            search_data["notes"] = [];
-            $(".notes-button:visible").prop("checked", true);
             $(".notes-button:visible").each(function(){
                 search_data["notes"].push(notes_button_list[parseInt($(this).find("input").attr("id").replace("n", ""))]);
-                $(this).find("input").prop("checked", true);
             });
-        } else {
-            search_data["notes"] = [];
-            $(".notes-option").prop("checked", false);
         }
         set_select_text("notes", false);
     });
 
     $(".multiselect .notes-option").on("change", function() {
         search_data["notes"] = get_multi_checkbox_check_list("notes-option", "n");
-        set_select_text("notes", false);
-
-        if($(".notes-option:checked").length < $(".notes-button:visible").length) {
-            $("#notes-any").prop("checked", false);
-        } else {
+        
+        if($(".notes-option:checked").length == $(".notes-button:visible").length) {
+            $("#notes .checkboxes input").prop("checked", false);
             $("#notes-any").prop("checked", true);
+        } else {
+            $("#notes-any").prop("checked", false);
         }
+        set_select_text("notes", false);
     });
 });
 
@@ -248,17 +193,23 @@ function get_multi_checkbox_check_list(checkbox_class, name_replace) {
 function set_select_text(address, lock) {
     //unlock select bar
     $("#"+address+" select").prop("disabled", false);
-    //get check number
-    check_length = $("."+address+"-option:checked").length;
 
     //get option name that show on select bar
     show_list = [];
-    $("."+address+"-option:checked").each(function() {
-        show_list = show_list.concat($(this).attr("value"));
-    });
+    if($("#"+address+"-any").prop("checked")) {
+        $("."+address+"-button").each(function() {
+            if($(this).css("display") == "block") {
+                show_list = show_list.concat($(this).find("input").attr("value"));
+            }
+        });
+    } else {
+        $("."+address+"-option:checked").each(function() {
+            show_list = show_list.concat($(this).attr("value"));
+        });
+    }
 
     //set select bar text
-    if(check_length == 0){
+    if(show_list.length == 0){
         if(lock) {
             $("#"+address+" select option").text("無符合條件選項");
             $("#"+address+" select").prop("disabled", true);
@@ -266,8 +217,8 @@ function set_select_text(address, lock) {
             $("#"+address+" select option").text("未選擇任何專案");
         }
     } else {
-        if(check_length > 2) {
-            $("#"+address+" select option").text("已選擇 "+check_length+" 項");
+        if(show_list.length > 2) {
+            $("#"+address+" select option").text("已選擇 "+show_list.length+" 項");
         } else {
             $("#"+address+" select option").text(show_list);
         }
@@ -281,7 +232,6 @@ function show_select_option(address, show_list, id_name, lock) {
 
     //show option
     show_list.forEach(element => {
-        $("#"+id_name+element).prop("checked", true);
         $("#"+id_name+element).parent().css("display", "block");
     });
 
@@ -298,7 +248,6 @@ function reset_checkbox(checkbox_class, id_name, lock) {
 
     $("#"+checkbox_class+" ." + checkbox_class + "-button").each(function() {
         if($(this).css("display") == "block") {
-            $(this).find("input").prop("checked", true);
             if(checkbox_class == "notes") {
                 search_data[checkbox_class] = search_data[checkbox_class].concat($(this).find("input").attr("value"));
             } else {
@@ -306,7 +255,26 @@ function reset_checkbox(checkbox_class, id_name, lock) {
             }
         }
     });
+
+    $("#"+checkbox_class+" .checkboxes input").prop("checked", false);
     $("#"+checkbox_class+" #" + checkbox_class + "-any").prop("checked", true);
     set_select_text(checkbox_class, lock)
 }
 
+function get_notes_list_by_project(notes_order_list) {
+    search_data["notes"] = []
+    search_data["project"].forEach(element => {
+        search_data["notes"] = search_data["notes"].concat(db_table["notes"][element]);
+    });
+    search_data["notes"] = [...new Set(search_data["notes"])];
+
+    output_notes_order = []
+    search_data["notes"].forEach(element => {
+        for(i=0; i<notes_order_list.length; i++) {
+            if(notes_order_list[i] == element) {
+                output_notes_order.push(i);
+            }
+        }
+    });
+    return output_notes_order;
+}

+ 24 - 4
script/php/get_search_list.php

@@ -6,7 +6,7 @@ if (isset($_GET['project_id'])) {
     $project_id = implode(", ", $_GET['project_id']);
     $type_id = implode(", ", $_GET['type_id']);
     $notes_name = implode("', '", $_GET['notes_name']);
-    // $search = $_GET['search'];
+    $search = $_GET['search'];
     $array = [];
 
     $connectionInfo = array("Database" => "$dbname", "UID" => "$username", "PWD" => "$password", "CharacterSet" => "UTF-8");
@@ -19,17 +19,37 @@ if (isset($_GET['project_id'])) {
         $sql = "SELECT DISTINCT [Blueprint].[project_id],[SN],[original_name],[filename],[project_name],[type_id],[category_name],[notes],[keyword] FROM [21000X].[dbo].[Blueprint]
             INNER JOIN [Project_Table] ON [Blueprint].[project_id] = [Project_Table].[project_id] 
             INNER JOIN [Construction_Category] ON [Project_Table].[category_id] = [Construction_Category].[category_id]
-            WHERE [Blueprint].[project_id] IN ($project_id) AND [type_id] IN ($type_id) AND [notes] IN ('$notes_name')
+            WHERE [Blueprint].[project_id] IN ($project_id) AND [type_id] IN ($type_id) AND [notes] IN ('$notes_name') 
+            AND CONCAT(
+                [Blueprint].[project_id] ,' '
+                ,[SN] ,' '
+                ,[blueprint_id] ,' '
+                ,[original_name] ,' '
+                ,[keyword] ,' '
+                ,[notes] ,' '
+                ,[filename]) like '%".$search."%'
             UNION
             SELECT DISTINCT [File_Table].[project_id],[SN],[original_name],[filename],[project_name],[type_id],[category_name],null,[keyword] FROM [21000X].[dbo].[File_Table]
             INNER JOIN [Project_Table] ON [File_Table].[project_id] = [Project_Table].[project_id]
             INNER JOIN [Construction_Category] ON [Project_Table].[category_id] = [Construction_Category].[category_id]
-            WHERE [File_Table].[project_id] IN ($project_id) AND [type_id] IN ($type_id);";
+            WHERE [File_Table].[project_id] IN ($project_id) AND [type_id] IN ($type_id)
+            AND CONCAT(
+                [File_Table].[project_id],' '
+                ,[SN],' '
+                ,[type_id],' '
+                ,[original_name],' '
+                ,[filename],' ') like '%".$search."%';";
     } else {
         $sql = "SELECT DISTINCT [File_Table].[project_id],[SN],[original_name],[filename],[project_name],[type_id],[category_name],null,[keyword] FROM [21000X].[dbo].[File_Table]
             INNER JOIN [Project_Table] ON [File_Table].[project_id] = [Project_Table].[project_id]
             INNER JOIN [Construction_Category] ON [Project_Table].[category_id] = [Construction_Category].[category_id]
-            WHERE [File_Table].[project_id] IN ($project_id) AND [type_id] IN ($type_id);";
+            WHERE [File_Table].[project_id] IN ($project_id) AND [type_id] IN ($type_id)
+            AND CONCAT(
+                [File_Table].[project_id],' '
+                ,[SN],' '
+                ,[type_id],' '
+                ,[original_name],' '
+                ,[filename],' ') like '%".$search."%';";
     }
     
     $fetchResult = sqlsrv_query($conn, $sql);