class Tb_pop_class { constructor(container,modal) { this.ajaxUrl = "./reg_order.ajax.php"; this.tbList = ""; this.itemData = ""; this.fileData = ""; this.modal = modal; this.container = document.querySelector(container); this.table = this.container; this.lastNum = 0; } addRow() { this.tbList.addRow(); } getExcel2(data) { let sheet_title = "생산오더등록"; let file_name = "생산오더등록"; const work_Book = new ExcelJS.Workbook(); // ExcelJS 라이브러리로 새 워크북 생성 const work_Sheet = work_Book.addWorksheet(sheet_title); // 새 워크시트 추가 const all_border = { top: { style: "thin", color: { argb: "FF000000" } }, left: { style: "thin", color: { argb: "FF000000" } }, bottom: { style: "thin", color: { argb: "FF000000" } }, right: { style: "thin", color: { argb: "FF000000" } }, }; const field_css = { yellow: { border: all_border, font: { color: { argb: "FF9C5700" }, bold: true }, alignment: { vertical: "middle", horizontal: "center" }, fill: { type: "pattern", pattern: "solid", fgColor: { argb: "FFFFEB9C" }, }, }, green: { border: all_border, font: { color: { argb: "FF006100" }, bold: true }, alignment: { vertical: "middle", horizontal: "center" }, fill: { type: "pattern", pattern: "solid", fgColor: { argb: "FFC6EFCE" }, }, }, red: { border: all_border, font: { color: { argb: "FF9C0006" }, bold: true }, alignment: { vertical: "middle", horizontal: "center" }, fill: { type: "pattern", pattern: "solid", fgColor: { argb: "FFFFC7CE" }, }, }, blue: { border: all_border, font: { font: { size: 11 }, color: { argb: "0E3979" }, bold: true }, alignment: { vertical: "middle", horizontal: "center" }, fill: { type: "pattern", pattern: "solid", fgColor: { argb: "EAEFF3" }, } }, title: { font: { size: 15, bold: true }, alignment: { vertical: "middle", horizontal: "center" }, }, box: { border: all_border, alignment: { vertical: "middle", horizontal: "center" }, font: { size: 11 }, }, }; // // 첫 번째 행 설정, 높이와 제목 설정 // let ws_row1 = work_Sheet.getRow(1); // ws_row1.height = 32; // ws_row1.getCell(1).value = "검사항목"; // ws_row1.getCell(1).style = field_css.title // work_Sheet.mergeCells('A1:E1'); // 코드 가변처리, 항목추가시 편의성 개선 let headers = [ { name: "생산오더", width: 15 }, { name: "작업순서", width: 12 }, { name: "품목코드", width: 15 }, { name: "거래처코드", width: 15 }, { name: "릴리즈일", width: 15 }, { name: "납기일", width: 15 }, { name: "지시수량", width: 15 }, //{ name: "검사번호", width: 15 }, { name: "검사시료수", width: 15 }, { name: "비고", width: 15 }, ]; let ws_row = work_Sheet.getRow(1); ws_row.height = 25; headers.forEach((header, index) => { let cell = ws_row.getCell(index + 1); cell.style = field_css.blue; cell.value = header.name; }); work_Sheet.columns = headers.map(header => ({ width: header.width })); /* let ws_row = work_Sheet.getRow(1); ws_row.height = 25; // ws_row.getCell(1).style = field_css.blue; // ws_row.getCell(1).value = "NO."; ws_row.getCell(1).style = field_css.blue; ws_row.getCell(1).value = "품목"; ws_row.getCell(2).style = field_css.blue; ws_row.getCell(2).value = "품목(명)"; ws_row.getCell(3).style = field_css.blue; ws_row.getCell(3).value = "공순"; ws_row.getCell(4).style = field_css.blue; ws_row.getCell(4).value = "공정코드"; ws_row.getCell(5).style = field_css.blue; ws_row.getCell(5).value = "준비시간"; ws_row.getCell(6).style = field_css.blue; ws_row.getCell(6).value = "공정시간"; ws_row.getCell(7).style = field_css.blue; ws_row.getCell(7).value = "공정단가"; ws_row.getCell(8).style = field_css.blue; ws_row.getCell(8).value = "검사명"; ws_row.getCell(9).style = field_css.blue; ws_row.getCell(9).value = "측정기"; ws_row.getCell(10).style = field_css.blue; ws_row.getCell(10).value = "검사방법"; ws_row.getCell(11).style = field_css.blue; ws_row.getCell(11).value = "기준값(㎜)"; ws_row.getCell(12).style = field_css.blue; ws_row.getCell(12).value = "상한치(㎛)"; ws_row.getCell(13).style = field_css.blue; ws_row.getCell(13).value = "하한치(㎛)"; work_Sheet.columns = [ { width: 15 }, { width: 30 }, { width: 15 }, { width: 15 }, { width: 15 }, { width: 15 }, { width: 15 }, { width: 15 }, { width: 15 }, { width: 15 }, { width: 15 }, { width: 15 }, { width: 15 }, ]; */ // 파일 생성 및 다운로드 부분 work_Book.xlsx.writeBuffer().then((data) => { const blob = new Blob([data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", }); const url = window.URL.createObjectURL(blob); const anchor = document.createElement("a"); anchor.href = url; anchor.download = file_name; anchor.click(); window.URL.revokeObjectURL(url); }); } uploadExcel(){ let _this = this; let postdata = { mode : 'uploadData', reqdata : JSON.stringify(this.tbList.getData()) } ajax_json({ url: this.ajaxUrl, data: postdata, success: function (data) { if (data.code) { _this.tbList.setData(data.data); Tb_order.getMainList("getOrderList"); kuls_success("저장되었습니다."); }else if(data.code == 0){ _this.tbList.setData(data.mesg); } }, error: function (request, status, error) { kuls_alert(error.message); }, complete: function () { } }); } excelDateToJSDate(excelDate) { let formatMethod = ""; let regex = /^\d{4}\.\d{2}\.\d{2}$/; console.log(excelDate); let excelEpoch = new Date(1900, 0, 1); let jsDate = new Date(excelEpoch.getTime() + (excelDate - 2) * 24 * 60 * 60 * 1000); if(regex.test(excelDate)){ formatMethod = this.convertDateFormat(excelDate) }else{ formatMethod = this.formatDateToYYYYMMDD(jsDate); } return formatMethod } formatDateToYYYYMMDD(date) { let year = date.getFullYear(); let month = (date.getMonth() + 1).toString().padStart(2, '0'); // 월은 0부터 시작하므로 1을 더해줌 let day = date.getDate().toString().padStart(2, '0'); return `${year}-${month}-${day}`; } convertDateFormat(dateString) { // 날짜를 yyyy-mm-dd 형식으로 변환 const parts = dateString.split('.'); const year = parts[0]; const month = parts[1]; const day = parts[2]; return `${year}-${month}-${day}`; } cellClick(e, tgt) { let editor = tgt.getColumn().getDefinition().editor; // // 체크박스 클릭 switch (tgt.getField()) { case "check": tgt.setValue(tgt.getValue() == "Y" ? "" : "Y"); break; case "OKNG_FLG": tgt.setValue(tgt.getValue() == "Y" ? "" : "Y"); this.clearRemove(tgt.getRow()) break; default: if (!editor) { this.rowClick && this.rowClick(e, tgt.getRow()); } break; } } /* * @Overview 최초 실행 함수 * @Parameter 없음 */ init() { let _this = this; // field 정의 const fields = [ // {formatter:"rownum", title:"NO", width:40}, // {field:"ORD_STATUS", title:"상태", width:50, editable:false, formatter: tb_common_funtions.formatterSelect, formatterParams: {values: varsWO_STATUS,}}, {field:"WO_NO", title:"생산오더", width:70, editor: "input", // formatter: tb_custom_formatter.pkCode, // formatterParams : {tableClass: this}, }, // {field:"ORD_TYPE", title:"지시 구분", width:70,editable:false, editorParams: {values: varsORD_TYPE,}, formatter: tb_common_funtions.formatterSelect, formatterParams: {values: varsORD_TYPE,}}, {field:"PROC_SEQ", title:"작업
순서", width:50,hozAlign:"center",editor: "input" }, // {field:"ITEM_CD", title:"품목", width:80 ,editor:tb_custom_editor.pop}, {field:"ITEM_CD", title:"품목코드", width:300,hozAlign:"left", editor:"input" }, // {field:"BP_CD", title:"거래처", visible: false,}, {field:"BP_CD", title:"거래처코드", width:170 , editor:"input" , hozAlign:"left"}, {field:"ORD_DT", title:"릴리즈일", width:80 , editor:'date', editorParams: {max:'9999-12-31'}, formatter:"datetime", formatterParams:{ inputFormat:"yyyy-MM-dd", outputFormat:"yyyy.MM.dd", }, cssClass:"editable-cell", }, {field:"DLVY_REQ_DT", title:"납기일", width:80 , editor:'date', editorParams: {max:'9999-12-31'}, formatter:"datetime", formatterParams:{ inputFormat:"yyyy-MM-dd", outputFormat:"yyyy.MM.dd", }, cssClass:"editable-cell",}, {field:"ORD_QTY", title:"지시수량", width:60 ,hozAlign:"right",editor: "input", cssClass:"editable-cell",}, {field:"INSP_SAMPL_QTY", title:"검사
시료수", width:60 ,hozAlign:"right" ,editor: "input",}, {field:'REMARK', title:'비고', width:300 ,editor: "input", hozAlign:"left"}, {field:'RS_MSG', title:'업로드여부', width:300 ,editor: "input", hozAlign:"left"} ]; const commonFieldData = { headerSort: true, vertAlign: "middle", hozAlign: "center", resizable: "header", //Resize 는 헤더에서만 가능 headerHozAlign: "center", //헤더 정렬 headerSortTristate: true, //데이터 정렬 => 정/역/초기화 }; this.tbList = new Tabulator(this.table, { layout: "fitColumns", data: [], //기본 데이터 columns: fields, //컬럼 설정 columnDefaults: commonFieldData, headerSortElement: "" }); // 데이터 불러오기 this.tbList.on("tableBuilt", () => { // this.getMainList("getOrderList","order_date_st", "order_date_ed", "WO_NO", "ITEM_CD","ITEM_NM", "BP_CD", "BP_NM","WO_STATUS", "ITEM_GRP"); }); // cell 클릭 시에 this.tbList.on("cellClick", (e, tgt) => { this.cellClick && this.cellClick(e, tgt); }); // cell 수정 시에 this.tbList.on("cellEdited", (cell) => { // this.cellEdited && this.cellEdited(cell); }); // // 추가 // ["click", "keypress"].forEach((evt) => { // this.addBtn.addEventListener(evt, () => { // this.addRow(); // }); // }); // 삭제 // ["click", "keypress"].forEach((evt) => { // this.removeBtn.addEventListener(evt, () => { // // 삭제 함수 // this.removeRow(); // }); // }); // 저장 ["click", "keypress"].forEach((evt) => { const saveBtn = document.querySelector(".save-btn"); saveBtn.addEventListener(evt, () => { _this.uploadExcel() // this.putData(); // Tb_process.putData(); // Tb_check.putData(); }); }); document.getElementById('excel_down').addEventListener('click', function (e) { _this.getExcel2(); }); document.getElementById('excel_up').addEventListener('click', function (e) { const inputBtn = document.querySelector("#fileInput"); inputBtn.click(); }); document.getElementById('fileInput').addEventListener('change', function (e) { let file = e.target.files[0]; if (!file) { return; } let reader = new FileReader(); reader.onload = (e) => { let data = new Uint8Array(e.target.result); let workbook = ""; workbook = XLSX.read(data, { type: 'array' }); workbook.SheetNames.forEach((sheetName) => { let rows = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName], { header:1 }); rows.slice(1).forEach((row,index) => { if(row.length !== 0){ let rowToAdd = { WO_NO : row[0], PROC_SEQ : row[1], ITEM_CD : row[2], BP_CD : row[3], ORD_DT : _this.excelDateToJSDate(row[4]), DLVY_REQ_DT : _this.excelDateToJSDate(row[5]), ORD_QTY : row[6], INSP_SAMPL_QTY : row[7], REMARK : row[8], _STATUS_ : "I" }; console.log(rowToAdd); _this.tbList.addRow(rowToAdd); } }); }); document.querySelector("#fileInput").value = "" }; reader.readAsArrayBuffer(file) }); }; }