/*
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");
}
}
});
});