Sfoglia il codice sorgente

修改 進階搜尋 全多選

oransheep 3 anni fa
parent
commit
2f08e83b81
4 ha cambiato i file con 478 aggiunte e 153 eliminazioni
  1. 163 12
      index.php
  2. 224 135
      script/js/search.js
  3. 90 5
      script/js/vue-search-block.js
  4. 1 1
      script/php/get_search_list.php

+ 163 - 12
index.php

@@ -62,7 +62,6 @@ if (!isset($_SESSION['loggedin'])) {
 
 	<!-- vue3 -->
 	<script src="https://unpkg.com/vue@next"></script>
-	<script src='./script/js/search.js'></script>
 	<script src="./script/js/vue-search-block.js"></script>
 
 	<style>
@@ -251,12 +250,12 @@ if (!isset($_SESSION['loggedin'])) {
 			bottom: 0;
 		}
 
-		#checkboxes {
+		.checkboxes {
 			display: none;
 			border: 1px #dadada solid;
 		}
 
-		#checkboxes label {
+		.checkboxes label {
 			display: block;
 			padding-left: 10px;
 			padding-right: 10px;
@@ -264,7 +263,7 @@ if (!isset($_SESSION['loggedin'])) {
 			padding-bottom: 5px;
 		}
 
-		#checkboxes label:hover {
+		.checkboxes label:hover {
 			background-color: #1e90ff;
 			color: #ffffff;
 		}
@@ -596,6 +595,58 @@ if (!isset($_SESSION['loggedin'])) {
 
 
 		});
+
+		$.ajax({
+			url: "./script/php/get_db_table.php",
+			type: "GET",
+			async: false,
+			contentType: "application/json",
+			dataType: "json"
+		}).done(function(data) {
+			db_table = data;
+		}).error(function(error) {
+			console.log(error);
+		});
+
+		db_table["notes"] = merge_object_by_key(db_table["notes"], "project_id", "notes");
+		var notes_button_list = [...new Set([].concat(...Object.values(db_table["notes"])))];
+
+		var search_data = {
+			"category": get_value_list_by_key(db_table["category"], null, -1, "category_id").toString().split(","),
+			"project": get_value_list_by_key(db_table["project"], null, -1, "project_id"),
+			"type": get_value_list_by_key(db_table["type"], null, -1, "type_id").toString().split(","),
+			"notes": notes_button_list
+		};
+
+		function get_value_list_by_key(obj_list, key_search, target_value, key_save) {
+			output_list = [];
+			obj_list.forEach(element => {
+				if (target_value != -1) {
+					target_value.forEach(e => {
+						if(e.toString() == element[key_search].toString()) {
+							output_list.push(element[key_save]);
+						}
+					});
+				} else {
+					output_list.push(element[key_save]);
+				}
+			});
+			output_list = [...new Set(output_list)];
+			return output_list;
+		}
+
+		function merge_object_by_key(obj, key, value) {
+			output_object = {};
+			while (obj.length > 0) {
+				pop_out = obj.pop();
+				if (output_object[pop_out[key]] == undefined) {
+					output_object[pop_out[key]] = [pop_out[value]];
+				} else {
+					output_object[pop_out[key]].push(pop_out[value]);
+				}
+			}
+			return output_object
+		}
 	</script>
 </head>
 
@@ -693,7 +744,93 @@ if (!isset($_SESSION['loggedin'])) {
 				</header>
 				<div class="row">
 
-					<search-block></search-block>
+					<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>
+									</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>
+									</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>
+									</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>
+										<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>
+								</ul>
+							</div>
+
+							<hr class="solid short">
+							<button class="search-by-filter" style="float:right">search</button>
+						</div>
+				
+					</section>
 
 					<div class="col-md-6">
 						<section class="panel">
@@ -783,17 +920,31 @@ if (!isset($_SESSION['loggedin'])) {
 					</div>
 				</div>
 			</section>
-
-
-
-
-
 		</div>
 	</section>
 	</div>
-	
-	<script>vm.mount('.body');</script>
+	<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>");
+		});
 
+		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>");
+		});
+
+		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>");
+		});
+
+		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>");
+		}			
+	</script>
+	<script src='./script/js/search.js'></script>
 </body>
 
 </html>

+ 224 - 135
script/js/search.js

@@ -1,159 +1,217 @@
-// var search_output = {};
 $(function() {
-    
-
     $(".selectBox").on("click", function (e) {
-        if(get_value_list_by_key(db_table["project"], "category_id", search_data["category"], "project_id").length) {
-            if (checkboxes.style.display == "none") {
-                checkboxes.style.display = "block";
+        if($(this).siblings(".checkboxes").find("label").css("display") == "block") {
+            if($(this).siblings(".checkboxes").css("display") == "none") {
+                $(".checkboxes").css("display", "none");
+                $(this).siblings(".checkboxes").css("display", "block");
             } else {
-                checkboxes.style.display = "none";
+                $(".checkboxes").css("display", "none");
             }
         }
     });
 
     $("body").on("click", function (event) {
-        test = $(event.target);
         if (!$(event.target).hasClass("overSelect")) {
-            if (($(event.target).closest("#checkboxes").length == 1)) {
-                checkboxes.style.display = "block";
-            } else {
-                checkboxes.style.display = "none";
+            if (($(event.target).closest(".checkboxes").length == 0)) {
+                $(".checkboxes").css("display", "none");
             }
         }
     });
 
-    $("#category_button").on("change", function() {
-        var category_id = [this.value.split(',')[0]];
-        var list_id = [this.value.split(',')[1]];
-        $("#p-select").prop("disabled", false);
-        $('#type-button').prop("value", "any");
+    $(".multiselect #category-any").on("change", function() {
         $("#notes").slideUp(200);
-        $('#notes-button').prop("value", "any");
-        //set search_data
+        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);
+        }
+
+        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);
+    });
+
+    $(".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, [], "category_id");
-            search_data["project"] = get_value_list_by_key(db_table["project"], null, [], "project_id");
-            search_data["type"] = get_value_list_by_key(db_table["type"], null, [], "type_id");
+            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 {
-            search_data["category"] = category_id;
-            search_data["project"] = get_value_list_by_key(db_table["project"], "category_id", category_id, "project_id");
-            target_type_id_list = get_value_list_by_key(db_table["category_type"], "list_id", list_id, "category_list");
+            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);
         }
 
-        //show project option
-        project_id_list = string_concat_list("project", search_data["project"]);
-        show_multi_checkbox("project-button", project_id_list);
+
+        //set view
+        show_select_option("project", search_data["project"], "p", true);
         $("#project-any").prop("checked", true);
-        set_multi_checkbox_text("project-checkbox", "project")
-        if (!search_data["project"].length) {
-            $("#p-select").prop("disabled", true);
-            $("#p-select option").text("無符合條件選項");
+        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 {
+            $("#category-any").prop("checked", true);
         }
 
-        //show type option
-        show_select_option("type-button", search_data["type"]);
-
-        //init notes
-        search_data["notes"] = 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);
     });
 
-    $("#project-any").on("change", function() {
+    $(".multiselect #project-any").on("change", function() {
+        $("#notes").slideUp(200);
         if(this.checked) {
-            search_data["project"] = get_value_list_by_key(db_table["project"], "category_id", search_data["category"], "project_id");
-            project_id_list = string_concat_list("project", search_data["project"]);
-            show_multi_checkbox("project-button", project_id_list);
+            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-checkbox").prop("checked", false);
+            $(".project-option").prop("checked", false);
         }
-        set_multi_checkbox_text("project-checkbox", "project");
+        set_select_text("project", false);
+
     });
 
-    $(".project-checkbox").on("change", function() {
-        $('#type-button').prop("value", "any");
+    $(".multiselect .project-option").on("change", function() {
         $("#notes").slideUp(200);
-        $('#notes-button').prop("value", "any");        
+        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);
 
-        check_option = get_multi_checkbox_check_list("project-checkbox", "project");
-        if(check_option.length < get_value_list_by_key(db_table["project"], "category_id", search_data["category"], "project_id").length) {
+        if($(".project-option:checked").length < $(".project-button:visible").length) {
             $("#project-any").prop("checked", false);
         } else {
             $("#project-any").prop("checked", true);
         }
 
-        search_data["project"] = check_option;
-        search_data["notes"] = notes_button_list;
-        set_multi_checkbox_text("project-checkbox", "project");
+        reset_checkbox("type", "t", true);
     });
 
-    $("#type-button").on("change", function() {
-        var type_id = this.value;
-        var show_notes_list = [];
-
-        if (type_id == "3") {
-            project_id_list = get_multi_checkbox_check_list("project-checkbox", "project");
-            project_id_list.forEach(element => {
-                show_notes_list = show_notes_list.concat(db_table["notes"][element]);
+    $(".multiselect #type-any").on("change", function() {
+        $("#notes").slideUp(200);
+        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);
             });
-            show_notes_list = [...new Set(show_notes_list)];
-            show_select_option("notes-button", show_notes_list);
-            $("#notes").slideDown(200);
         } else {
-            $("#notes").slideUp(200);
-            $('#notes-button').prop("value", "any");
+            search_data["type"] = [];
+            $(".type-option").prop("checked", false);
         }
+        set_select_text("type", false);
+        reset_checkbox("notes", "n", true);
+    });
 
-        if(type_id == "any") {
-            search_data["type"] = get_value_list_by_key(db_table["type"], null, [], "type_id");
+    $(".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 {
-            search_data["type"] = [type_id];
+            $("#type-any").prop("checked", true);
         }
-        search_data["notes"] = notes_button_list;
-    });
 
-    $("#notes-button").on("change", function() {
-        var notes_name = this.value;
-        if(notes_name == "any") {
-            search_data["notes"] = notes_button_list;
+        if($("#t3").prop("checked")) {
+            $("#notes").slideDown(200);
+            reset_checkbox("notes", "n", true);
         } else {
-            search_data["notes"] = [notes_name];
+            $("#notes").slideUp(200);
         }
-        });
-
-});
+    });
 
-//sql
-function get_value_list_by_key(obj_list, key_search, target_value, key_save) {
-    output_list = [];
-    obj_list.forEach(element => {
-        if (target_value.length) {
-            target_value.forEach(e => {
-                if(e.toString() == element[key_search].toString()) {
-                    output_list.push(element[key_save]);
-                }
+    $(".multiselect #notes-any").on("change", function() {
+        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 {
-            output_list.push(element[key_save]);
+            search_data["notes"] = [];
+            $(".notes-option").prop("checked", false);
         }
+        set_select_text("notes", false);
     });
-    output_list = [...new Set(output_list)];
-    return output_list;
-}
 
-function merge_object_by_key(obj, key, value) {
-    output_object = {};
-    while (obj.length > 0) {
-        pop_out = obj.pop();
-        if (output_object[pop_out[key]] == undefined) {
-            output_object[pop_out[key]] = [pop_out[value]];
+    $(".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 {
-            output_object[pop_out[key]].push(pop_out[value]);
+            $("#notes-any").prop("checked", true);
         }
-    }
-    return output_object
-}
+    });
+});
 
 function merge_string_to_list(string_list) {
     output = [];
@@ -171,51 +229,82 @@ function string_concat_list(name, target_list) {
     return output_list;
 }
 
-function show_multi_checkbox(class_name, show_list) {
-    $("."+class_name+" input").prop("checked", false);
-    $("."+class_name).css("display", "none");
-    
-    show_list.forEach(element => {
-        $("#"+element).prop("checked", true);
-        $("#"+element).parent().css("display", "block");
+function get_multi_checkbox_check_list(checkbox_class, name_replace) {
+    output = [];
+    var $select_option = $("."+checkbox_class+":checked");
+    $select_option.each(function(){
+        if(checkbox_class == "notes-option") {
+            output.push($(this).attr('value'));
+        } else {
+            output.push($(this).attr('id').replace(name_replace, ""));
+        }
+        
     });
+    return output;
 }
 
-function show_select_option(select_id, show_list) {
-    $("#" + select_id + " option").hide();
-    $("#notes-button").prop("disabled", false);
+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(show_list.length == 1 & show_list[0] == undefined) {
-        $('#notes-button').prop("value", "none");
-        $("#notes-button").prop("disabled", true);
+    //set select bar text
+    if(check_length == 0){
+        if(lock) {
+            $("#"+address+" select option").text("無符合條件選項");
+            $("#"+address+" select").prop("disabled", true);
+        } else {
+            $("#"+address+" select option").text("未選擇任何專案");
+        }
     } else {
-        $("#" + select_id + " option[value=any]").show();
-        show_list.forEach(element => {
-            $("#" + select_id + " option[value=" + element + "]").show();
-        });
+        if(check_length > 2) {
+            $("#"+address+" select option").text("已選擇 "+check_length+" 項");
+        } else {
+            $("#"+address+" select option").text(show_list);
+        }
     }
-    
 }
 
-function set_multi_checkbox_text(checkbox_class, name_replace) {
-    check_list = get_multi_checkbox_check_list(checkbox_class, name_replace);
+function show_select_option(address, show_list, id_name, lock) {
+    //init option
+    $("#" + address + " .checkboxes input").prop("checked", false);
+    $("#" + address + " .checkboxes label").css("display", "none");
 
-    if(check_list.length > 3){
-        $("#p-select option").text("已選擇 "+check_list.length+" 項");
-    } else {
-        if(check_list.length == 0) {
-            $("#p-select option").text("未選擇任何專案");
-        } else {
-            $("#p-select option").text(check_list);
-        }
+    //show option
+    show_list.forEach(element => {
+        $("#"+id_name+element).prop("checked", true);
+        $("#"+id_name+element).parent().css("display", "block");
+    });
+
+    if(show_list.length) {
+        $("#" + address + " #" + address + "-any").prop("checked", true);
+        $("#" + address + " #" + address + "-any").parent().css("display", "block");
     }
+
+    set_select_text(address, lock);
 }
 
-function get_multi_checkbox_check_list(checkbox_class, name_replace) {
-    output = [];
-    var $select_option = $("."+checkbox_class+":checked");
-    $select_option.each(function(){
-        output.push($(this).attr('id').replace(name_replace, ""));
+function reset_checkbox(checkbox_class, id_name, lock) {
+    search_data[checkbox_class] = [];
+
+    $("#"+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 {
+                search_data[checkbox_class] = search_data[checkbox_class].concat($(this).find("input").attr("id").replace(id_name, ""));
+            }
+        }
     });
-    return output;
-}
+    $("#"+checkbox_class+" #" + checkbox_class + "-any").prop("checked", true);
+    set_select_text(checkbox_class, lock)
+}
+

+ 90 - 5
script/js/vue-search-block.js

@@ -1,5 +1,35 @@
 var db_table = {};
 
+function get_value_list_by_key(obj_list, key_search, target_value, key_save) {
+    output_list = [];
+    obj_list.forEach(element => {
+        if (target_value.length) {
+            target_value.forEach(e => {
+                if(e.toString() == element[key_search].toString()) {
+                    output_list.push(element[key_save]);
+                }
+            });
+        } else {
+            output_list.push(element[key_save]);
+        }
+    });
+    output_list = [...new Set(output_list)];
+    return output_list;
+}
+
+function merge_object_by_key(obj, key, value) {
+    output_object = {};
+    while (obj.length > 0) {
+        pop_out = obj.pop();
+        if (output_object[pop_out[key]] == undefined) {
+            output_object[pop_out[key]] = [pop_out[value]];
+        } else {
+            output_object[pop_out[key]].push(pop_out[value]);
+        }
+    }
+    return output_object
+}
+
 $.ajax({
     url: "./script/php/get_db_table.php",
     type: "GET",
@@ -43,6 +73,18 @@ vm.component('search-block', {
                         <option value="any">any</option>
                         <category-button v-for="item in category_list" v-bind:object="item"></category-button>
                     </select>
+                    <div class="multiselect">
+                        <div class="selectBox">
+                            <select id="c-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>
+                            <category-button v-for="item in category_list" :object="item"></category-button>
+                        </div>
+                    </div>
                 </ul>
 
                 <ul class="button-group nav nav-pills nav-pills-primary">
@@ -56,7 +98,7 @@ vm.component('search-block', {
                             </select>
                             <div class="overSelect"></div>
                         </div>
-                        <div id="checkboxes" class="form-inline" style="display: none;">
+                        <div class="checkboxes form-inline" style="display: none;">
                             <label for="project-any"><input type="checkbox" id="project-any" value="any" checked/> 全選</label>
                             <project-button v-for="item in project_list" :object="item"></project-button>
                         </div>
@@ -96,8 +138,52 @@ vm.component('search-block', {
         </section>`
 });
 
+vm.component("multi-select", {
+    template:
+        `<div class="multiselect">
+            <div class="selectBox">
+                <select id="c-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>
+                <category-button v-for="item in category_list" :object="item"></category-button>
+            </div>
+        </div>`,
+    props: {
+        object: {
+            category_name: String,
+            category_id: String,
+            list_id: String
+        },
+    },
+    computed: {
+        id_concat(){
+            return "category" + this.object.category_id + "-" + this.object.list_id;
+        }        
+    }
+});
+
+vm.component("checkbox-option", {
+    template: `<label class="category-button" v-bind:for="id_concat"><input type="checkbox" class="category-checkbox" :value=object.category_id :id="id_concat" checked/>{{" " + this.object.category_name}}</label>`,
+    props: {
+        object: {
+            category_name: String,
+            category_id: String,
+            list_id: String
+        },
+    },
+    computed: {
+        id_concat(){
+            return "category" + this.object.category_id + "-" + this.object.list_id;
+        }        
+    }
+});
+
 vm.component('category-button', {
-    template: `<option v-bind:value="concat">{{object.category_name}}</option>`,
+    template: `<label class="category-button" v-bind:for="id_concat"><input type="checkbox" class="category-checkbox" :value=object.category_id :id="id_concat" checked/>{{" " + this.object.category_name}}</label>`,
     props: {
         object: {
             category_name: String,
@@ -106,8 +192,8 @@ vm.component('category-button', {
         },
     },
     computed: {
-        concat(){
-            return this.object.category_id + ','+ this.object.list_id;
+        id_concat(){
+            return "category" + this.object.category_id + "-" + this.object.list_id;
         }        
     }
 });
@@ -147,4 +233,3 @@ vm.component('notes-button', {
     }
 });
 
-

+ 1 - 1
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");