/* 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 = ["工程概要", "工程計算書", "設計圖", "數量計算書", "工程預算書", "施工規範&特定條款", "設計報告書"]; var types = []; var path = ''; var category = ''; var project_id = ''; var project_name = ''; var project = ''; var blueprint_SN = ''; var blueprint_path = ''; var notes = []; var tempTable = []; var tempTable2 = []; var tree_data; //save getTree ajax data var start = true; var folderPath = ""; var fileNums = []; var is_blueprint2 = false; PDFObject.embed("./assets/null.pdf", "#pdfFile"); addUserImage(userName.charAt(0), role); var table = $('#datatable-ajax').DataTable({ bProcessing: true, responsive: true, "pagingType": "full_numbers", "bLengthChange": true, "lengthMenu": [ [7, 10, 25, -1], [7, 10, 25, "全部"] ], "searching": false, "pageLength": 7, "language": { "processing": "處理中...", "loadingRecords": "載入中...", "lengthMenu": "顯示 _MENU_ 項結果", "zeroRecords": "沒有符合的結果或是沒有資料", "info": "顯示第 _START_ 至 _END_ 項結果,共 _TOTAL_ 項", "infoEmpty": "顯示第 0 至 0 項結果,共 0 項", "infoFiltered": "(從 _MAX_ 項結果中過濾)", "infoPostFix": "", "search": "搜尋:", "paginate": { "first": '', "previous": '', "next": '', "last": '' }, "aria": { "sortAscending": ": 升冪排列", "sortDescending": ": 降冪排列" } }, "columns": [{ "width": "5%" }, null, null, { "width": "5%" }, { "width": "5%" }, ], data: [ [ " ", "", "", "", "", ], [ " ", "", "", "", "", ], [ " ", "", "", "", "", ], [ " ", "", "", "", "", ], [ " ", "", "", "", "", ], [ " ", "", "", "", "", ], [ " ", "", "", "", "", ] ], drawCallback: function () { if (!start) { var api = this.api(); var rowCount = api.rows({ page: 'current' }).count(); /*for (var i = 0; i < api.page.len() - (rowCount === 0 ? 1 : rowCount); i++) { $('#datatable-ajax tbody').append($(" ")); }*/ } start = false; }, }); $("#datatable-ajax_length").append($("#reset")) $.ajax({ url: "./script/php/getTree.php", contentType: "application/json", dataType: "json", type: "GET", async: false }) .success(function (response) { tree_data = response; }).error(function (error) { console.log(error); }); displayDetail(false, true); $('#treeAjaxHTML').jstree({ 'core': { 'themes': { variant: 'large' }, 'data': tree_data, 'multiple': false, 'animation': 40, 'expand_selected_onload': true }, 'types': { 'default': { 'icon': 'fa fa-folder' }, 'file': { 'icon': 'fa fa-file' } }, 'plugins': ['types', 'search', 'wholerow'] }).bind("loaded.jstree", function (event, data) { 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"); } $('.jstree-anchor').each(function () { $(this).children().css("color",color[$(this).text()]); }) }).on( 'select_node.jstree', function (event, data) { if (data.node.text.includes("-")) { $("#reset").prop("disabled", false); $("#header").empty(); 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 = $('' + project + ' > '); span.on("click", function (e) { countFiles(project_id, "false"); displayDetail(false, true); is_blueprint2 = false; for (var k = folderPath.length - 1; k > 0; k--) { $("#header").children().eq(k).remove(); folderPath.pop(); } let i = 1; table.clear().draw(); tempTable = []; types.forEach(function (element) { if (fileNums[i - 1] == null) { total = 0; } else { total = fileNums[i - 1].total; } let temp = [ i, element.type_name, category, '', total, project, element.type_id ]; table.row.add(temp).draw(); tempTable.push(temp); i++; }); $("#tableDetail td").empty(); }); $("#header").append(span); let i = 1; table.clear().draw(); tempTable = []; types.forEach(function (element) { if (fileNums[i - 1] == null) { total = 0; } else { total = fileNums[i - 1].total; } let temp = [ i, element.type_name, category, '', total, project, element.type_id ]; table.row.add(temp).draw(); tempTable.push(temp); i++; }); $("#tableDetail td").empty(); } else { data.instance.toggle_node(data.node); } displayDetail(false, true); }); $('#btn-search').click(function () { $("#reset").prop("disabled", true); $("#header").empty(); $("#header").append("搜尋結果"); $.ajax({ url: "./script/php/search.php", data: { search: $("#search").val(), }, async: false, contentType: "application/json", dataType: "json", type: "GET", }) .success(function (response) { displayDetail(true, true); table.clear().draw(); $("#tableDetail td").empty(); response.forEach(function (data) { let temp = [ data["SN"], data["original_name"], data["keyword"], '1.0.0', data["project_id"], data["project_name"], data["type_id"], data["category_name"], data["notes"], data["filename"], ]; table.row.add(temp).draw(); i++; }); }) .error(function (error) { console.log(error); }) .complete(function () {}); }); $('#search').keyup(function (e) { if (e.keyCode == 13) { $('#btn-search').click(); } }); $('#reset').click(function () { if (folderPath.length != 1) { folderPath.pop(); let index = folderPath.length; $("#header").children().eq(index).remove(); table.clear().draw(); if (is_blueprint2) { tempTable2.forEach(function (data) { table.row.add(data).draw(); }); is_blueprint2 = false; } else { tempTable.forEach(function (data) { table.row.add(data).draw(); }); } $("#tableDetail td").empty(); displayDetail(false, true); } }); $('#datatable-ajax tbody').on('click', 'tr', function () { $("#reset").prop("disabled", false); $(this).parent().find("tr").css('background-color', ''); $(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[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] == '') { path = data[1]; $.ajax({ url: "./script/php/getDetail.php", data: { project_id: project_id, type_id: SN, is_blueprint: is_blueprint, note: note }, async: false, contentType: "application/json", dataType: "json", type: "GET", }) .success(function (response) { var span = $('' + data[1] + ' > '); span.on("click", function (e) { let clicked = $(e.target).text().split(" > ")[0]; let index = folderPath.indexOf(clicked); for (k = index + 1; k < folderPath.length; k++) { $("#header").children().eq(k).remove(); folderPath.pop(); } addTable(data, notes, response, SN, path); is_blueprint2 = false; }); $("#header").append(span); folderPath = $("#header").text().split(" > "); folderPath.pop(); addTable(data, notes, response, SN, path); }) .error(function (error) { console.log(error); }) .complete(function () {}); } else { let type = types[parseInt(data[7]) - 1]; let path = ''; //let category = data[8]; path = data[8] + "/" + data[5] + "-" + data[6] + data[10]; $("#plan_code").text(data[5]); $("#plan_name").text(data[6]); $("#version").text(data[3]); $("#fileName").text(data[1]); if (path.toLowerCase().includes("pdf")) { PDFObject.embed("./assets/建置資料/" + path, "#pdfFile"); $("#download").append(' '); } else { PDFObject.embed("./assets/notPDF.pdf", "#pdfFile"); if (path.toLowerCase().includes("doc")) { $("#download").append(' '); } else if (path.toLowerCase().includes("xls")) { $("#download").append(' '); } } console.log(data[10]); let fileNames = data[10].split('/'); let fileName = fileNames[fileNames.length - 1]; $("#download").append('' + fileName + ''); } }); 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-responsive").hide(); $("#SN").text("項次"); $("#name").text("類別"); if (isBlueprint) { table.page.len(-1).draw(); } else { table.page.len(7).draw(); } $('.nav-tabs a[href="#arcgisTab"]').tab('show'); } } function countFiles(project_id, is_blueprint) { $.ajax({ url: "./script/php/get_file_count.php", data: { project_id: project_id, is_blueprint: is_blueprint, }, async: false, //contentType: "application/json", dataType: "json", type: "POST", }) .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); }) .complete(function () {}); } function addTable(data, notes, response, SN, path) { table.clear().draw(); if (data[1] != "設計圖" && data[1] != "成果圖") { for (i = 0; i < response.length; i++) { table.row.add([ response[i]["SN"], response[i]["original_name"], response[i]["keyword"], '1.0.0', '', response[i]["project_id"], response[i]["project_name"], response[i]["type_id"], response[i]["category_name"], response[i]["notes"], response[i]["filename"], ]) table.draw(); } if (notes.includes(data[1])) { is_blueprint2 = true; displayDetail(true, true); } else { displayDetail(true, false); } } else { 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'], '', '', total, data[5], ]; table.row.add(temp); tempTable2.push(temp); } table.draw(); } } var search_output = {}; var search_word = "" $("#keep-search-button").on("click", function (e) { show_progress_bar(true); update_progress_bar(); $.ajax({ url: "./script/php/get_search_list.php", data: { project_id: [''].concat(search_data["project"]), type_id: [''].concat(search_data["type"]), notes_name: [''].concat(search_data["notes"].filter(element => { return element !== undefined; })), search: $("#search-word").val(), }, type: "GET", dataType: "json", contentType: "application/json", async: false }).success(function (response) { displayDetail(true); search_output = response; search_word = $("#search-word").val(); filter_base_data = search_data; }).error(function (error) { console.log(error); }); setTimeout(() => { draw_datatable(search_output); e.preventDefault(); $.magnificPopup.close(); if ($("#search-filter").css("display") != "none") { $("#search-filter").slideUp(200); $("#filter-slide").toggleClass("fa-sort-desc fa-sort-up"); } $("#search-filter-panel .btn-default").toggleClass("btn-primary btn-default"); show_filter(filter_base_data); show_progress_bar(false); $("#keep-search-button").css("display", "none"); $("#warning-text").css("display", "none"); $("#advanced-search-button").css("display", "inline-block"); $("#search-filter-panel").css("display", "block"); }, 0); }); $("#advanced-search-button").on("click", function (e) { count = {}; $.ajax({ url: "./script/php/sql_search_count.php", data: { project_id: [''].concat(search_data["project"]), type_id: [''].concat(search_data["type"]), notes_name: [''].concat(search_data["notes"].filter(element => { return element !== undefined; })), search: $("#search-word").val(), }, type: "GET", dataType: "json", contentType: "application/json", async: false }).success(function (response) { displayDetail(true); count = response; }).error(function (error) { console.log(error); }); search_total_count = count[0]["total"] + count[1]["total"]; if (search_total_count > 1000) { $("#keep-search-button").css("display", "inline-block"); $("#warning-text").css("display", "inline-block"); $("#advanced-search-button").css("display", "none"); } else { show_progress_bar(true); update_progress_bar(); $.ajax({ url: "./script/php/get_search_list.php", data: { project_id: [''].concat(search_data["project"]), type_id: [''].concat(search_data["type"]), notes_name: [''].concat(search_data["notes"].filter(element => { return element !== undefined; })), search: $("#search-word").val(), }, type: "GET", dataType: "json", contentType: "application/json", async: false }).success(function (response) { displayDetail(true); search_output = response; search_word = $("#search-word").val(); filter_base_data = search_data; }).error(function (error) { console.log(error); }); setTimeout(() => { draw_datatable(search_output); e.preventDefault(); $.magnificPopup.close(); if ($("#search-filter").css("display") != "none") { $("#search-filter").slideUp(200); $("#filter-slide").toggleClass("fa-sort-desc fa-sort-up"); } $("#search-filter-panel .btn-default").toggleClass("btn-primary btn-default"); show_filter(filter_base_data); show_progress_bar(false); $("#search-filter-panel").css("display", "block"); }, 0); } }); $("#advancedSearch .panel-body input").on("change", function () { $("#keep-search-button").css("display", "none"); $("#warning-text").css("display", "none"); $("#advanced-search-button").css("display", "inline-block"); }); function draw_datatable(search_output) { table.clear().draw(); for (i = 0; i < search_output.length; i++) { table.row.add([ search_output[i]["SN"], search_output[i]["original_name"], search_output[i]["keyword"], '1.0.0', '', search_output[i]["project_id"], search_output[i]["project_name"], search_output[i]["type_id"], search_output[i]["category_name"], search_output[i]["notes"], search_output[i]["filename"], ]) table.draw(); // progress_bar_value = (i/search_output.length)*100 // update_progress_bar(); } } function reset_filter_search_output() { output_data = []; click_option = get_filter_click("btn-primary"); $.ajax({ url: "./script/php/get_search_list.php", data: { project_id: [''].concat(click_option["project"]), type_id: [''].concat(click_option["type"]), notes_name: [''].concat(click_option["notes"]), search: search_word }, type: "GET", dataType: "json", contentType: "application/json", async: false }).success(function (response) { displayDetail(true); search_output = response; }).error(function (error) { console.log(error); }); draw_datatable(search_output); } function get_filter_click(click_class) { click_id_list = { "category": [], "project": [], "type": [], "notes": [] }; check_notes = false; $("#f-category ." + click_class).each(function () { if ($(this).css("display") == "inline-block") { click_id_list["category"].push($(this).attr("id").replace("f-c", "")); } }); $("#f-project ." + click_class).each(function () { if ($(this).css("display") == "inline-block") { click_id_list["project"].push($(this).attr("id").replace("f-p", "")); } }); $("#f-type ." + click_class).each(function () { if ($(this).css("display") == "inline-block") { click_id_list["type"].push($(this).attr("id").replace("f-t", "")); if ($(this).attr("id").replace("f-t", "") == "3") { check_notes = true; } } }); if (check_notes) { $("#f-notes ." + click_class).each(function () { if ($(this).css("display") == "inline-block") { click_id_list["notes"].push($(this).text()); } }); } return click_id_list; } function show_filter(filter_base_data) { show_notes = false; $("#search-filter button").css("display", "none"); filter_base_data["category"].forEach(element => { id = "f-c" + element; $("#" + id).css("display", "inline-block"); }); filter_base_data["project"].forEach(element => { id = "f-p" + element; $("#" + id).css("display", "inline-block"); }); filter_base_data["type"].forEach(element => { id = "f-t" + element; $("#" + id).css("display", "inline-block"); if (element == "3") { show_notes = true; } }); if (show_notes) { $("#filter_notes").css("display", "block"); filter_base_data["notes"].forEach(element => { $("#f-notes button").each(function () { if ($(this).text() == element) { $(this).css("display", "inline-block"); } }); }); } else { $("#filter_notes").css("display", "none"); } } var progress_bar_value = 0; function update_progress_bar() { var i = 0; if (i == 0) { i = 1; var id = setInterval(frame, 10); function frame() { if (progress_bar_value >= 100) { clearInterval(id); i = 0; } else { $("#progress-bars").css("width", progress_bar_value + "%"); } } } } function show_progress_bar(show) { if (show) { $("#advanced-search-button-group").css("display", "none"); $("#loading").css("display", "block"); // $("#progress-bars").parent().css("display", "block"); } else { $("#advanced-search-button-group").css("display", "block"); $("#loading").css("display", "none"); // $("#progress-bars").parent().css("display", "none"); } } $("#search-filter-panel").hoverIntent({ sensitivity: 50, interval: 200, over: function (e) { $("#search-filter").slideDown(200); $("#filter-slide").toggleClass("fa-sort-desc fa-sort-up") }, timeout: 200, out: function (e) { $("#search-filter").slideUp(200); $("#filter-slide").toggleClass("fa-sort-desc fa-sort-up") } }); $("#search-filter-panel button").on("click", function (e) { $(this).toggleClass("btn-primary btn-default"); click_option = get_filter_click("btn-primary"); if (click_option["category"].length > 0 && click_option["project"].length > 0 && click_option["type"].length > 0) { reset_filter_search_output(); } else { table.clear().draw(); } }); $("#f-category button").on("click", function () { c_id = $(this).attr("id").replace("f-c", ""); sub_project_list = []; db_table["project"].forEach(element => { if (element["category_id"] == c_id) { sub_project_list.push(element["project_id"]); } }); sub_project_list.forEach(element => { if ($(this).hasClass("btn-primary")) { if ($("#f-p" + element).hasClass("btn-default")) { $("#f-p" + element).toggleClass("btn-primary btn-default"); } } else { if ($("#f-p" + element).hasClass("btn-primary")) { $("#f-p" + element).toggleClass("btn-primary btn-default"); } } click_option = get_filter_click("btn-primary"); if (click_option["category"].length == 0) { table.clear().draw(); } }); reset_filter_search_output(); }); $("#f-type button").on("click", function () { t_id = $(this).attr("id").replace("f-t", ""); if (t_id == "3") { if ($(this).hasClass("btn-default")) { $("#filter_notes").css("display", "none"); $("#f-notes .btn-default").toggleClass("btn-primary btn-default"); } else { $("#filter_notes").css("display", "block"); } } }); });