//////////////////////////////////////////////////////////////////////////////////////// //Page 전역 변수 //////////////////////////////////////////////////////////////////////////////////////// var selectPdServiceId; // 제품 아이디 var selectPdServiceName; // 제품 이름 var dataTableRef; // 데이터테이블 참조 변수 var reqStatusDataTableRef; // 엑셀 업로드 결과 테이블 참조 //////////////////////////////////////////////////////////////////////////////////////// //Document Ready //////////////////////////////////////////////////////////////////////////////////////// function execDocReady() { var pluginGroups = [ [ "../reference/lightblue4/docs/lib/slimScroll/jquery.slimscroll.min.js", "../reference/lightblue4/docs/lib/widgster/widgster.js" ], [ "../reference/jquery-plugins/dataTables-1.10.16/media/css/jquery.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/css/responsive.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/css/select.dataTables_lightblue4.css", "../reference/jquery-plugins/dataTables-1.10.16/media/js/jquery.dataTables.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Responsive/js/dataTables.responsive.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Select/js/dataTables.select.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/dataTables.buttons.min.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.html5.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/buttons.print.js", "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/jszip.min.js" ] ]; loadPluginGroupsParallelAndSequential(pluginGroups) .then(function () { console.log("모든 플러그인 로드 완료"); //vfs_fonts 파일이 커서 defer 처리 함. setTimeout(function () { var script = document.createElement("script"); script.src = "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/vfs_fonts.js"; script.defer = true; // defer 속성 설정 document.head.appendChild(script); }, 5000); // 5초 후에 실행됩니다. //pdfmake 파일이 커서 defer 처리 함. setTimeout(function () { var script = document.createElement("script"); script.src = "../reference/jquery-plugins/dataTables-1.10.16/extensions/Buttons/js/pdfmake.min.js"; script.defer = true; // defer 속성 설정 document.head.appendChild(script); }, 5000); // 5초 후에 실행됩니다. //위젯 헤더 처리 및 사이드 메뉴 처리 $(".widget").widgster(); setSideMenu("sidebar_menu_requirement", "sidebar_menu_gantt_excel_upload"); // --- 데이터 테이블 설정 --- // var waitDataTable = setInterval(function() { try { if (!$.fn.DataTable.isDataTable("#pdservice_table")) { dataTableLoad(); clearInterval(waitDataTable); } } catch (err) { console.log("서비스 데이터 테이블 로드가 완료되지 않아서 초기화 재시도 중..."); } }, 313 /*milli*/); }) .catch(function (error) { console.error("플러그인 로드 실패:", error); }); } //////////////////////////////////////////////////////////////////////////////////////// // --- 데이터 테이블 설정 --- // //////////////////////////////////////////////////////////////////////////////////////// function dataTableLoad() { var columnList = [ { name: "c_id", title: "제품(서비스) 아이디", data: "c_id", visible: false }, { name: "c_title", title: "제품(서비스) 이름", data: "c_title", render: function (data, type, row, meta) { if (type === "display") { return '"; } return data; }, className: "dt-body-left", visible: true } ]; var rowsGroupList = []; var columnDefList = []; var selectList = {}; var orderList = [[0, "asc"]]; var buttonList = []; var jquerySelector = "#pdservice_table"; var ajaxUrl = "/auth-user/api/arms/pdServicePure/getPdServiceMonitor.do"; var jsonRoot = "response"; var isServerSide = false; dataTableRef = dataTable_build( jquerySelector, ajaxUrl, jsonRoot, columnList, rowsGroupList, columnDefList, selectList, orderList, buttonList, isServerSide ); $("#excelFileInput").on("change", function (e) { var file = e.target.files && e.target.files[0]; if (!file) { return; } if (!selectPdServiceId) { jError("제품(서비스)를 먼저 선택해 주세요."); $(this).val(""); return; } var pdServiceIdForRequest = selectPdServiceId; var formData = new FormData(); formData.append("excelFile", file); $.ajax({ url: "/auth-user/api/arms/reqAdd/excel-upload/server-data/pd-service-id/" + pdServiceIdForRequest, type: "POST", data: formData, processData: false, contentType: false, success: function (res) { console.log("엑셀 업로드 접수:", res); if (!res || !res.requestId) { jError("requestId 응답이 없습니다."); return; } jSuccess("엑셀 업로드 작업이 접수되었습니다. 처리 완료를 대기합니다..."); pendingRequestIds[res.requestId] = function () { jSuccess("엑셀 업로드 처리가 완료되었습니다."); fetchExcelUploadList(pdServiceIdForRequest); }; }, error: function (xhr) { var msg = xhr.responseJSON && xhr.responseJSON.error && xhr.responseJSON.error.message ? xhr.responseJSON.error.message : "엑셀 업로드 중 오류가 발생했습니다."; jError(msg); } }); $(this).val(""); }); } //////////////////////////////////////////////////////////////////////////////////////// // --- 엑셀 업로드 결과 조회 및 렌더 --- // //////////////////////////////////////////////////////////////////////////////////////// function fetchExcelUploadList(pdServiceId) { $.ajax({ url: "/auth-user/api/arms/reqAdd/excel-upload/server-data/pd-service-id/" + pdServiceId, type: "GET", success: function (res) { var rows = (res && res.response) || []; renderReqStatusTable(rows); }, error: function () { jError("업로드 결과 조회 중 오류가 발생했습니다."); } }); } function renderReqStatusTable(rows) { var columnList = [ { name: "wbs", title: "WBS", data: "data.wbs", defaultContent: "", className: "dt-body-left" }, { name: "jobName", title: "작업", data: "data.jobName", defaultContent: "", className: "dt-body-left" }, { name: "status", title: "상태", data: "status", defaultContent: "" }, { name: "valid", title: "유효", data: "valid", render: function (data) { return data ? "OK" : "NG"; } }, { name: "requestComplete", title: "완료", data: "requestComplete", render: function (data) { return data ? "✔" : ""; } }, { name: "message", title: "메시지", data: "message", defaultContent: "", className: "dt-body-left" } ]; if (reqStatusDataTableRef) { reqStatusDataTableRef.clear().rows.add(rows).draw(); return; } reqStatusDataTableRef = $("#reqstatustable").DataTable({ data: rows, columns: columnList, responsive: true, ordering: true, searching: true, paging: true, dom: "frtip" }); } // 데이터 테이블 구성 이후 꼭 구현해야 할 메소드 : 열 클릭시 이벤트 function dataTableClick(tempDataTable, selectedData) { selectPdServiceId = selectedData.c_id; selectPdServiceName = selectedData.c_title; console.log("selectedData.c_id : ", selectedData.c_id); fetchExcelUploadList(selectPdServiceId); } //데이터 테이블 ajax load 이후 콜백. function dataTableCallBack(settings, json) {} function dataTableDrawCallback(tableInfo) { $("#" + tableInfo.sInstance) .DataTable() .columns.adjust() .responsive.recalc(); }