/* * @Overview 품목등록 페이지 * @History 2024-03-20 / 이원기 / 최초작성 2024-03-26 / 박민희 2024-04-03 / 이원기 */ class Tb_item_class { constructor(container) { let _this = this; _this.tbList =""; _this.itemData = ""; _this.ITEM_CD = ""; this.ajaxUrl = "./item.ajax.php"; this.container = document.querySelector(container); this.table = this.container.querySelector(".hy-table"); // this.upBtn = this.container.querySelector(".up-btn") || ""; // this.downBtn = this.container.querySelector(".down-btn") || ""; this.addBtn = this.container.querySelector(".add-btn"); this.removeBtn = this.container.querySelector(".remove-btn"); } // // tableBuild 되었을때 getManList getMainList() { let _this = this; let talert = window.setTimeout(() => { _this.tbList.alert("Loading ...") }, 1000); let ITEM_GRP = document.getElementById("ITEM_GRP").value; //품목그룹 let ITEM_CODE = document.getElementById("ITEM_CD").value; //품목코드 // let DRAW_NO = document.getElementById("DRAW_NO").value; //도면 ajax_json({ url: this.ajaxUrl, data: { mode: "getItemList", ITEM_GRP:ITEM_GRP, ITEM_CD: ITEM_CODE}, success: (data) => { console.log(data); if(data.code) { _this.tbList.setData(data.data); }else{ kuls_alert(data.mesg); } }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); _this.tbList.clearAlert(); this.setFilter(); _this.tbList.getRows().forEach(row=>{ row.getCell("ITEM_CD").getElement().addEventListener("click",(e)=>{ _this.rowClick(e,row); }) }); }, }); return true; } setFilter() {} /* * @Overview 테이블 행 추가 함수 * @Parameter 없음 * @function 기본키, _STATUS_:I 값을 넣은 행 추가 */ addRow() { this.tbList.addRow({ _STATUS_: "I" }, true); } /* * @Overview 테이블 행 삭제 함수 * @Parameter 없음 * @function 선택된 모든 행 STATUS D */ removeRow() { const selectedRows = this.tbList.getRows().filter(row=>{ return row.getData().check ==="Y" }); if(selectedRows.length > 0 ){ kuls_confirm("삭제","하시겠습니까?", ()=>{ // 선택된 각 행 삭제 selectedRows.forEach((row) => { // STAUS D로 바꾸기 row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D"; const rowElement = row.getElement(); rowElement.classList.add("remove-row"); }); }) }else{ kuls_alert("삭제할 행을 선택해주세요.") } } /* * @Overview 삭제 취소 함수 * @Parameter 삭제 행 * @function 클릭시 삭제 취소 & STATUS를 공란으로 변경 */ clearRemove(tgt){ if(tgt._row.data._STATUS_ == "D"){ // console.log(); tgt._row.data._STATUS_ = ""; tgt._row.getElement().classList.remove("remove-row") // const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 } } /* * @Overview 테이블 행 순서 변경 함수 * @Parameter 방향 * @function 선택된 모든 행 순서 변경 */ upDownRow(dir) { } // rowDblClick(e, tgt) { // popClientEditor({},tgt) // } //클릭 이벤트 rowClick(e, tgt) { let _this = this; let clickRow = tgt._row; let clickData = clickRow.data; Tb_routing.itemData = clickData; Tb_pic.itemData = clickData; Tb_routing.getMainList(Tb_routing.itemData); Tb_pic.getMainList(clickData); if (tgt.isSelected()) { _this.tbList.deselectRow(tgt._row); // Tb_process_check.getMainList(clickData); } else { _this.tbList.deselectRow(); _this.tbList.selectRow(clickRow); } } cellClick(e, tgt) { var editor = tgt.getColumn().getDefinition().editor; // // 체크박스 클릭 switch (tgt.getField()) { case "USE_FLG": tgt.setValue(tgt.getValue() == "Y" ? "N" : "Y"); break; case "check": tgt.setValue(tgt.getValue() == "Y" ? "" : "Y"); this.clearRemove(tgt.getRow()) break; // case "현장직 필드명": // tgt.setValue(tgt.getValue() == "Y" ? null : "Y"); // break; // case "외주 필드명": // tgt.setValue(tgt.getValue() == "Y" ? null : "Y"); // break; // case "외주처 필드명": // // 팝업 열기(common이나 다른 파일에 팝업 함수 정의하고, html(popup.inc.php)만들기?) // break; } } // 셀 수정 cellEdited(cell) { cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U"; }; /* * @Overview 추가, 수정 및 삭제 데이터 저장 * @Parameter 없음 * @Function _STATUS_ : U, I, D Row 인 것 php 처리. */ putData() { let _this = this; // 저장 시 상태 변화 없는 row 요청 X if(this.tbList.getData().filter(row=> row._STATUS_).length == 0){ this.getMainList(); return false; } const blankObj = this.tbList.getRows().filter(row => { return Object.keys(row._row.data).filter(key => key !== '_STATUS_' && key !== 'USE_FLG').every(key => { const value = row._row.data[key]; return (value === undefined || value === ''); }); }); let postdata = { 'mode': 'putItem', 'reqdata': JSON.stringify(this.tbList.getData().filter(row=> row._STATUS_)), }; console.log(blankObj) if(blankObj.length !== 0){ kuls_confirm("비어있는 행을 무시하고 진행하시겠습니까?","",()=>{ ajax_json({ url: _this.ajaxUrl, data: postdata, success: function (data) { if (data.code) { kuls_success("저장되었습니다."); _this.getMainList(); }else{ kuls_alert(data.mesg); } }, error: function (request, status, error) { console.log(request) kuls_alert(error.message); }, complete: function () { } }); },()=>{ blankObj.forEach(row=>{ row.getElement().classList.add("blank-row") }) console.log(blankObj) }) }else{ ajax_json({ url: _this.ajaxUrl, data: postdata, success: function (data) { if (data.code) { kuls_success("저장되었습니다."); _this.getMainList(); }else{ kuls_alert(data.mesg); } }, error: function (request, status, error) { console.log(request) kuls_alert(error.message); }, complete: function () { // this.setFilter(); // _this.tbList.getRows().forEach(row=>{ // row.getCell("BIZ_AREA_CD").getElement().addEventListener("click",(e)=>{ // _this.rowClick(e,row); // }) // }); } }); } } /* * @Overview 최초 실행 함수 * @Parameter 없음 */ init() { let _this = this; // field 정의 const fields = [ { field:"check", title: "선택", width: 50, headerSort: false, formatter: tb_common_funtions.formatterCheckboxIcon, formatterParams: { checkval: "Y" }, }, { formatter: "rownum", title: "NO", width: 50 }, { field: "ITEM_CD", title: "품목", width: 150,editor:'input',editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' }, }, //품목 코드 { field: "ITEM_NM", title: "품명", width: 250,editor:'input', hozAlign:"left" }, //품목 코드 { field: "DRAW_NO", title: "도면", width: 200,editor:'input' }, //도면 번호 - popup { field: "ITEM_GRP", title: "품목 그룹", width: 80, editor:"list", editorParams:{ values : varsITEM_GRP }, formatter: tb_common_funtions.formatterSelect, formatterParams:{ values : varsITEM_GRP }, cssClass:"user-list", }, //품목 그룹 -select { field: "", title: "재고단위", width: 100,editor:'input' }, //formatter : 숫자 EA { field: "DRAW_VER", title: "버전", width: 100,editor:'input' }, ]; const commonFieldData = { // headerSort: true, vertAlign: "middle", hozAlign: "center", resizable: "header", //Resize 는 헤더에서만 가능 headerHozAlign: "center", //헤더 정렬 headerSortTristate: true, //데이터 정렬 => 정/역/초기화 }; _this.tbList = new Tabulator(this.table, { layout: "fitColumns", // selectableRows: 1, data: [], //기본 데이터 columns: fields, //컬럼 설정 columnDefaults: commonFieldData, headerSortElement: "", //정렬 아이콘 // initialSort:[ // {column:"ITEM_CD", dir:"desc"}, //sort by this first // ], }); // 데이터 불러오기 _this.tbList.on("tableBuilt", () => { _this.getMainList(); }); // row 클릭 시에 _this.tbList.on("rowClick", (e, tgt) => { _this.rowClick && Tb_item.rowClick(e, tgt); }); // cell 클릭 시에 _this.tbList.on("cellClick", (e, tgt) => { _this.cellClick && Tb_item.cellClick(e, tgt); }); // cell 수정 시에 _this.tbList.on("cellEdited", (cell) => { _this.cellEdited && Tb_item.cellEdited(cell); }); // 추가 ["click", "keypress"].forEach((evt) => { _this.addBtn.addEventListener(evt, () => { _this.addRow(); }); }); // 삭제 ["click", "keypress"].forEach((evt) => { _this.removeBtn.addEventListener(evt, () => { // 삭제 함수 _this.removeRow && this.removeRow(); }); }); // 조회 ["click", "keypress"].forEach((evt) => { const filterBtn = document.querySelector("#filter_btn"); filterBtn.addEventListener(evt, () => { _this.getMainList && _this.getMainList(); }); }); // ['click', 'keypress'].forEach(evt => document.querySelector("#item_code_pop").addEventListener(evt, () => // { this.popBP() })); // 저장 ["click", "keypress"].forEach((evt) => { const putBtn = document.querySelector("#put_item"); putBtn.addEventListener(evt, () => { _this.putData(); Tb_routing.putRouting(); Tb_process_check.putInspSpec(); Tb_pic.putFile(); }); }); } } class Tb_routing_class { constructor(container) { let _this = this; this.ajaxUrl = "./item.ajax.php"; _this.tbList = ""; _this.itemData = ""; _this.fileData = ""; this.container = document.querySelector(container); this.table = this.container.querySelector(".hy-table"); this.upBtn = this.container.querySelector(".up-btn") || ""; this.downBtn = this.container.querySelector(".down-btn") || ""; this.addBtn = this.container.querySelector(".add-btn"); this.removeBtn = this.container.querySelector(".remove-btn"); this.lastNum = 0; } /* * @Overview 데이터 가져오기 * @Parameter 없음 * @function 데이터 불러오기 * @function this.lastNum에 마지막 공순 넣기 */ getMainList(clickData) { // console.log(Tb_item.tbList.getSelectedData()[0]); let _this = this; let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); ajax_json({ url: this.ajaxUrl, data: { mode: "getRoutingList", ITEM_CD :_this.itemData?.ITEM_CD }, success: (data) => { this.tbList.setData(data.data); if(data.data.length == 0){ this.lastNum = 0 console.log(this.lastNum); }else{ this.lastNum = Math.max(...data.data.map(v=>v.OP_SEQ)); } }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); // this.tbList.clearAlert(); // this.setFilter(); }, }); } afterEditing(){ let _this = this; let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); ajax_json({ url: this.ajaxUrl, data: { mode: "putRouting", reqdata: JSON.stringify(this.sortingRouting().filter( row=> row._STATUS_ )),}, success: (data) => { if(data.code){ kuls_success("적용 되었습니다."); } }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); this.tbList.clearAlert(_this.talert); _this.getMainList(); // this.setFilter(); }, }); } /* * @Overview 라우팅 SORTING * @Parameter 없음 * @function 테이블 데이터 순차적으로 SORTING 하여 데이터 가공 * */ sortingRouting(){ let temArr = this.tbList.getData(); // 테이블 전체 데이터 for(let i = 0; i < temArr.length; i++){ temArr[i].OP_SEQ = (parseInt([i]) + 1) * 10 // 공정 순서의 숫자 채번 if(parseInt([i]) === 0){ // 0인 경우 => 첫번째 공정 순서의 경우 temArr[0].FRST_OP_FLG = 'Y' // 첫번째 공정에 대하여 Y temArr[0].LAST_OP_FLG = 'N' // 마지막 공정에 대하여 N temArr[i].PRV_OP_CD = '' // 이전의 공정에 대하여 빈값 부여 }else{ // 0이 아닌경우 => 두번째 공정 순서부터 값 부여 temArr[i].FRST_OP_FLG = 'N' temArr[i].LAST_OP_FLG = 'N' temArr[i].PRV_OP_CD = temArr[i-1].OP_CD; // 이전의 공정에 대하여 VALUE 바인딩 temArr[i - 1].NXT_OP_CD = temArr[i].OP_CD; // 다음의 공정에 대하여 VALUE 바인딩 } if(parseInt([i]) === temArr.length-1){ temArr[temArr.length-1].FRST_OP_FLG = 'N' temArr[temArr.length-1].LAST_OP_FLG = 'Y' } // some : I나 D 상태가 하나라도 있으면 TRUE 반환 if(temArr.some(x=>x._STATUS_ === "I" ||temArr.some(x=>x._STATUS_ === "D" ))){ }else if(temArr.some(x=>x._STATUS_ === "U")){ temArr[i]._STATUS_ = "U"; } } return temArr } putRouting = (clickData) =>{ let _this = this; let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); ajax_json({ url: this.ajaxUrl, data: { mode: "putRouting", reqdata: JSON.stringify(this.sortingRouting().filter( row=> row._STATUS_ )),}, success: (data) => { if(data.code){ kuls_success("적용 되었습니다."); } }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); this.tbList.clearAlert(_this.talert); _this.getMainList(); // this.setFilter(); }, }); } putTempFile(file, rowData){ let _this = this; let fdata = ""; let formData = new FormData(); formData.append('upfile', file); formData.append('mode', "putRoutTempFile"); let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); jQuery.ajax({ url: _this.ajaxUrl, type: 'POST', data: formData, contentType: false, processData: false, success: (data)=>{ if(data.code !== "0") { kuls_success("적용 되었습니다."); _this.fileData = JSON.parse(data).data; if(rowData._STATUS_ !== "I"){ rowData.FILE_NM = _this.fileData.file_name; this.tbList.updateData([ { id: rowData.id, // FILE_NM: _this.fileData.file_name, TMP_NAME:_this.fileData.tmp_name, FILE_TYPE:_this.fileData.file_type , FILE_SIZE:_this.fileData.file_size, _STATUS_ : "U" } ]); }else if(rowData._STATUS_ === "I"){ rowData.FILE_NM = _this.fileData.file_name; this.tbList.updateData([ { id: rowData.id, // FILE_NM: _this.fileData.file_name, TMP_NAME:_this.fileData.tmp_name, FILE_TYPE:_this.fileData.file_type , FILE_SIZE:_this.fileData.file_size } ]); } }else{ kuls_alert(data.msg); } }, error: (req, stat, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); // this.tbList.clearAlert(); // this.setFilter(); }, }); return _this.fileData; } setFilter() {} /* * @Overview 테이블 행 추가 함수 * @Parameter 없음 * @function 기본키, _STATUS_:I 값을 넣은 행 추가 */ addRow(item_cd) { let _this = this; console.log(_this.fileData); if(item_cd === undefined){ kuls_alert("품목코드를 선택해주세요") return false; } this.lastNum += 10; this.tbList.addRow({ _STATUS_: "I", OP_SEQ: this.lastNum, ITEM_CD: item_cd }); } /* * @Overview 테이블 행 삭제 함수 * @Parameter 없음 * @function 선택된 모든 행 STATUS D */ removeRow() { const selectedRows = this.tbList.getRows().filter(row=>{ return row.getData().check ==="Y" }); if(selectedRows.length > 0 ){ kuls_confirm("삭제","하시겠습니까?", ()=>{ // 선택된 각 행 삭제 selectedRows.forEach((row) => { // STAUS D로 바꾸기 row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D"; const rowElement = row.getElement(); rowElement.classList.add("remove-row"); }); }) }else{ kuls_alert("삭제할 행을 선택해주세요.") } } /* * @Overview 삭제 취소 함수 * @Parameter 삭제 행 * @function 클릭시 삭제 취소 & STATUS를 공란으로 변경 */ clearRemove(tgt){ if(tgt._row.data._STATUS_ == "D"){ // console.log(); tgt._row.data._STATUS_ = ""; tgt._row.getElement().classList.remove("remove-row") // const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 } } /* * @Overview 테이블 행 공순 변경 함수(위로) * @Parameter 없음 * @function 선택된 모든 행 위로 */ upRow() { // const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 // selectedRows.forEach((row) => { // const currData = row.getData()["공순"]; // const upRows = this.tbList.searchRows("공순", "=", currData-10); // upRows.forEach((upRow) => { // upRow.update({_STATUS_: "U", 공순: currData}); // row.update({_STATUS_:"U", 공순 : currData-10}); // }); // }); } /* * @Overview 테이블 행 공순 변경 함수(아래로) * @Parameter 없음 * @function 선택된 모든 행 아래로 */ downRow() { // const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 // selectedRows.forEach((row) => { // const currData = row.getData()["공순"]; // const upRows = this.tbList.searchRows("공순", "=", currData+10); // upRows.forEach((upRow) => { // upRow.update({_STATUS_: "U", 공순: currData}); // row.update({_STATUS_:"U", 공순 : currData+10}); // }); // }); } // 클릭 이벤트 rowClick(e, tgt) { // 삭제가 가능하도록 ROW SELECT // staus D로 바꾸기? } cellClick(e, tgt) { const editor = tgt.getColumn().getDefinition().editor; switch (tgt.getField()) { case "OP_CD": popOper({ OP_CD : "OP_CD", OP_NM: "OP_NM" },tgt.getRow()); break; case "check": tgt.setValue(tgt.getValue() == "Y" ? "" : "Y"); this.clearRemove(tgt.getRow()) break; default: if (!editor) { this.rowClick && this.rowClick(e, tgt.getRow()); } break; } } /* * @Overview 파일 다운로드 함수 * @Parameter 없음 */ getFileUrl =function(DRAW_NO, SID, FILE_ID, FILE_NM,kind,down){ let urlStr = ""; if(kind == "draw"){ urlStr = '/include/getFile.php'+"?gubun=draw&nid=" + DRAW_NO + "&sid="+ SID + "&file_id="+ FILE_ID+ "&name="+FILE_NM if(down === true){ location.href = urlStr; } }else{ urlStr = '/include/getFile.php'+"?gubun=rout&ITEM_CD=" + DRAW_NO + "&ROUT_SQNO="+ SID + "&name="+FILE_ID if(down === true){ location.href = urlStr; } } return urlStr; } /* * @Overview 아이콘 함수 * @Parameter 없음 */ downloadIcon = function(cell, formatterParams, onRendered){ //plain text value if(!cell.getRow().getData().FILE_NM){ // kuls_alert(""); return ""; } return ""; }; // /* // * @Overview file 업로드 함수 // * @Parameter 없음 // * @function 파일 선택 시 업로드 창 열림 -> 선택 후 임시폴더 업로드 -> putTempFile 함수 통해 해당 ROWDATA에 파일 데이터 업데이트 // */ // 셀 수정 cellEdited(cell) { cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U"; } // /* // * @Overview file 업로드 함수 // * @Parameter 없음 // * @function 파일 선택 시 업로드 창 열림 -> 선택 후 임시폴더 업로드 -> putTempFile 함수 통해 해당 ROWDATA에 파일 데이터 업데이트 // */ uploadButton = function(cell){ //plain text value var button = $(""); button.on("click", function(){ // console.log(value); let editor = document.createElement("input"); editor.setAttribute("type", "file"); editor.setAttribute("name", "imgFile"); editor.setAttribute("id", "imgFile"); editor.style.padding = "3px"; editor.style.width = "100%"; editor.style.boxSizing = "border-box"; //trigger your file upload here // editor.addEventListener("click",fun) editor.click(); editor.addEventListener('change', function() { // 파일 정보 가져오기 let file = this.files[0]; console.log(file); Tb_routing.putTempFile(file,cell.getRow().getData()); cell.getRow().getData().id = Math.floor(Math.random() * 101); }); // var file = this.files[0]; // console.log(file); }); return button[0]; }; deleteButton = function(cell, data, row, options){ //plain text value if(!cell.getRow().getData().FILE_NM){ // kuls_alert(""); return ""; } let _this = this; var button = $(""); // value button.on("click", function(){ // console.log(value); kuls_confirm("삭제","하시겠습니까?", ()=>{ ajax_json({ url: "./item.ajax.php", data: { mode: "delRoutFile", ITEM_CD:cell.getRow().getData().ITEM_CD , ROUT_SQNO:cell.getRow().getData().ROUT_SQNO}, success: (data) => { if(data.code){ kuls_success("적용 되었습니다."); } }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { _this.getMainList(); }, }); }) // console.log(cell.getRow().getData()); }); return button[0]; }; putData() { // 사번 중복 확인 및 방지 // _STATUS_ 있는 데이터만 들고와서 PUT하기 } previewIcon = function(cell, formatterParams, onRendered){ //plain text value if(!cell.getRow().getData().FILE_NM){ // kuls_alert(""); return ""; } // console.log(cell.getRow().getData().FILE_NM); return ""; }; /* * @Overview 최초 실행 함수 * @Parameter 없음 */ init() { let _this = this; // field 정의 const fields = [ // 생산오더, 품목, 도면번호, 거래처, 납기일, 지시일, 지시구분, 지시 수량, 단위, 상태, 작업순서, 비고 // {field: "id", title:"id", formatter:function(cell, formatterParams, onRendered) { // // 다른 열의 값을 가져와서 원하는 처리를 수행하여 새로운 값 생성 // let idx = cell.getRow().getData().ROUT_SQNO; // console.log(idx); // return idx; // }}, { field:"check", title: "선택", width: 50, headerSort: false, formatter: tb_common_funtions.formatterCheckboxIcon, formatterParams: { checkval: "Y" }, }, { formatter:"rownum", field:"id", title: "NO", width: 50, visible: false }, { field: "ITEM_CD", title: "품목코드", visible: false}, { field: "OP_SEQ", title: "공순", width: 65,movableRows: true}, { title: "공정", cssClass:"width-200", columns:[ {field:"OP_CD", width:100, editor: "input"}, {field:"OP_NM", width:100, editor: "input"} ] }, {field: "ROUT_SQNO", title: "일련번호", width: 80,visible:false}, { field: "FRST_OP_FLG", title: "처음 공정" , width: 80, visible: false}, { field: "LAST_OP_FLG", title: "마지막 공정", width: 80, visible: false }, { field: "PRV_OP_CD", title: "이전 공정", width: 80, visible: false }, { field: "NXT_OP_CD", title: "다음 공정", width: 80, visible: false }, { field: "STD_SETUP_TM", title: "준비시간
(분)", width: 80, editor: "input", formatter:"money", formatterParams:{ decimal:".", precision:0 } }, { field: "CYCLE_TM", title: "공정시간
(분)", width: 80, editor: "input", formatter:"money", formatterParams:{ decimal:".", precision:0 } }, { field: "STD_OP_AMT", title: "공정 단가
(원)", width: 80 ,editor: "input", formatter:"money", formatterParams:{ decimal:".", precision:0 } }, { title: "작업 표준서", cssClass:"width-230", columns:[ { field: "SID", visible:false}, { field: "FILE_ID", visible:false}, { field:"FILE_NM", width:80, formatter: this.previewIcon, cellClick:function(e,cell){ pop_filedown( _this.getFileUrl( cell.getRow().getData().ITEM_CD, cell.getRow().getData().ROUT_SQNO, cell.getRow().getData().FILE_NM, "", "rout", // cell.getRow().getData().FILE_NM, false ), cell.getRow().getData().FILE_NM.split(".").pop() ); } }, { field:"DOWNLOAD", width:50, formatter: this.downloadIcon, cellClick:function(e, cell){ _this.getFileUrl( cell.getRow().getData().ITEM_CD, cell.getRow().getData().ROUT_SQNO, cell.getRow().getData().FILE_NM, "", "rout", true ); // location.href = '/include/getFile.php'+"?gubun=draw&nid=" // + cell.getRow().getData().DRAW_NO // + "&sid="+cell.getRow().getData().SID // + "&file_id="+cell.getRow().getData().FILE_ID }}, // {field:"REGISTER", width:50,editor: _this.fileEditor} {field:"REGISTER", width:50,formatter: function(cell,formatterParams){ if(cell.getRow().getData().FILE_NM){ return ""; } return _this.uploadButton(cell)} }, {field:"DELETE", width:50,formatter: function(cell,formatterParams){return _this.deleteButton(cell)}} ] }, ]; const commonFieldData = { headerSort: false, vertAlign: "middle", hozAlign: "center", resizable: "header", //Resize 는 헤더에서만 가능 headerHozAlign: "center", //헤더 정렬 headerSortTristate: true, //데이터 정렬 => 정/역/초기화 }; this.tbList = new Tabulator(this.table, { layout: "fitColumns", movableRows:true, selectableRows: 1, data: [], //기본 데이터 columns: fields, //컬럼 설정 columnDefaults: commonFieldData, headerSortElement: "", //정렬 아이콘 selectable: 1 }); // row 이동 시에 this.tbList.on("rowMoved", function(row){ //row - row component if(Tb_routing.sortingRouting().some(x=>x._STATUS_ == "I")){ kuls_alert("현재 입력 중인 라우팅을 저장 후 공정 순서를 조정해주세요") Tb_routing.getMainList(Tb_item.itemData); }else{ const rowElement = row.getElement(); rowElement.classList.add("edit-row"); // console.log(row._row.getData()); row._row.getData()._STATUS_ = "U"; } }); // row 클릭 시에 this.tbList.on("rowClick", (e, tgt) => { this.rowClick && Tb_routing.rowClick(e, tgt); Tb_process_check.getMainList(); }); // cell 클릭 시에 this.tbList.on("cellClick", (e, tgt) => { this.cellClick && Tb_routing.cellClick(e, tgt); Tb_process_check.getMainList(); }); // cell 수정 시에 this.tbList.on("cellEdited", (cell) => { this.cellEdited && Tb_routing.cellEdited(cell); Tb_process_check.getMainList(); }); // 추가 ["click", "keypress"].forEach((evt) => { this.addBtn.addEventListener(evt, () => { // console.log(); this.addRow && this.addRow(Tb_item.tbList.getSelectedData()[0]?.ITEM_CD); }); }); // 삭제 ["click", "keypress"].forEach((evt) => { this.removeBtn.addEventListener(evt, () => { this.removeRow && this.removeRow(); }); }); // 위로 ["click", "keypress"].forEach((evt) => { this.upBtn.addEventListener(evt, () => { // this.upRow && this.upRow(); }); }); // 아래로 ["click", "keypress"].forEach((evt) => { this.downBtn.addEventListener(evt, () => { this.downRow && this.downRow(); }); }); } } class Tb_process_check_class { constructor(container) { this.ajaxUrl = "./item.ajax.php"; this.container = document.querySelector(container); this.table = this.container.querySelector(".hy-table"); this.addBtn = this.container.querySelector(".add-btn"); this.removeBtn = this.container.querySelector(".remove-btn"); } // tableBuild 되었을때 getManList getMainList(clickData) { let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); ajax_json({ url: this.ajaxUrl, data: { mode: "getInspSpecList", ITEM_CD:Tb_item.tbList.getSelectedData()[0]?.ITEM_CD, ROUT_SQNO:Tb_routing.tbList.getSelectedData()[0]?.ROUT_SQNO }, success: (data) => { this.tbList.setData(data.data); }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); this.tbList.clearAlert(); this.tbList.getRows().forEach(row=>{ row.getCell("INSP_ITEM").getElement().addEventListener("click",(e)=>{ console.log("hihi") this.rowClick(e,row); }) }); }, }); } setFilter() {} /* * @Overview 테이블 행 추가 함수 * @Parameter 없음 * @function 기본키, _STATUS_:I 값을 넣은 행 추가 */ addRow(ITEM_CD, ROUT_SQNO, OP_CD) { if(ITEM_CD === undefined){ kuls_alert("품목 코드를 선택해주세요"); return false; } if(ITEM_CD === undefined || ROUT_SQNO === undefined){ kuls_alert("공정 코드를 선택해주세요"); return false; } this.tbList.addRow({ _STATUS_: "I", SPEC_ITEM_CD: ITEM_CD, ROUT_SQNO: ROUT_SQNO, OP_CD : OP_CD }); } // putInspSpec() { // let _this = this; // if(this.tbList.getData().filter(row=> row._STATUS_).length == 0){ // return false; // } // let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); // ajax_json({ // url: _this.ajaxUrl, // data: { // mode: 'putInspSpec', // reqdata: JSON.stringify(this.tbList.getData().filter( row=> row._STATUS_ )), // }, // success: (data)=>{ // if(data.code) { // _this.getMainList(); // kuls_success("적용 되었습니다."); // }else{ // kuls_alert(data.mesg); // }}, // error: function(req, stat, err){ // kuls_alert(err.message); // }, // complete: () => { // window.clearTimeout(talert); // this.tbList.clearAlert(); // // this.setFilter(); // }, // }); // return true; // } /* * @Overview 추가, 수정 및 삭제 데이터 저장 * @Parameter 없음 * @Function _STATUS_ : U, I, D Row 인 것 php 처리. */ putInspSpec() { let _this = this; // 저장 시 상태 변화 없는 row 요청 X if(this.tbList.getData().filter(row=> row._STATUS_).length == 0){ this.getMainList(); return false; } const blankObj = this.tbList.getRows().filter(row => { return Object.keys(row._row.data).filter(key => key !== '_STATUS_' && key !== 'USE_FLG' && key !== 'OP_CD' && key !== 'ROUT_SQNO' && key !== 'SPEC_ITEM_CD').every(key => { const value = row._row.data[key]; return (value === undefined || value === ''); }); }); let postdata = { 'mode': 'putInspSpec', 'reqdata': JSON.stringify(this.tbList.getData().filter(row=> row._STATUS_)), }; console.log(blankObj) if(blankObj.length !== 0){ kuls_confirm("비어있는 행을 무시하고 진행하시겠습니까?","",()=>{ ajax_json({ url: _this.ajaxUrl, data: postdata, success: function (data) { if (data.code) { kuls_success("저장되었습니다."); _this.getMainList(); }else{ kuls_alert(data.mesg); } }, error: function (request, status, error) { console.log(request) kuls_alert(error.message); }, complete: function () { } }); },()=>{ blankObj.forEach(row=>{ row.getElement().classList.add("blank-row") }) console.log(blankObj) }) }else{ ajax_json({ url: _this.ajaxUrl, data: postdata, success: function (data) { if (data.code) { kuls_success("저장되었습니다."); _this.getMainList(); }else{ kuls_alert(data.mesg); } }, error: function (request, status, error) { console.log(request) kuls_alert(error.message); }, complete: function () { } }); } } /* * @Overview 테이블 행 삭제 함수 * @Parameter 없음 * @function 선택된 모든 행 STATUS D */ removeRow() { const selectedRows = this.tbList.getRows().filter(row=>{ return row.getData().check ==="Y" }); if(selectedRows.length > 0 ){ kuls_confirm("삭제","하시겠습니까?", ()=>{ // 선택된 각 행 삭제 selectedRows.forEach((row) => { // STAUS D로 바꾸기 row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D"; const rowElement = row.getElement(); rowElement.classList.add("remove-row"); }); }) }else{ kuls_alert("삭제할 행을 선택해주세요.") } } /* * @Overview 삭제 취소 함수 * @Parameter 삭제 행 * @function 클릭시 삭제 취소 & STATUS를 공란으로 변경 */ clearRemove(tgt){ if(tgt._row.data._STATUS_ == "D"){ // console.log(); tgt._row.data._STATUS_ = ""; tgt._row.getElement().classList.remove("remove-row") // const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 } } /* * @Overview 테이블 행 선택 함수 * @Parameter 없음 * @function 선택된 모든 행 색 변경 */ rowClick(e, tgt) { if (tgt.isSelected()) { tgt.deselect(); this.clearRemove(tgt); } else { tgt.select(); } } /* * @Overview 삭제 취소 함수 * @Parameter 삭제 행 * @function 클릭시 삭제 취소 & STATUS를 공란으로 변경 */ clearRemove(tgt){ if(tgt._row.data._STATUS_ == "D"){ // console.log(); tgt._row.data._STATUS_ = ""; tgt._row.getElement().classList.remove("remove-row") // const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 } } cellClick(e, tgt) { var editor = tgt.getColumn().getDefinition().editor; // 체크박스 클릭 switch (tgt.getField()) { case "INSP_ITEM": popInsp({ INSP_ITEM: "INSP_ITEM" },tgt.getRow()) break; case "check": tgt.setValue(tgt.getValue() == "Y" ? "" : "Y"); this.clearRemove(tgt.getRow()) break; default: if (!editor) { this.rowClick && this.rowClick(e, tgt.getRow()); } break; } } // 셀 수정 cellEdited(cell) { cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U"; } putData() { // 사번 중복 확인 및 방지 // _STATUS_ 있는 데이터만 들고와서 PUT하기 } /* * @Overview 최초 실행 함수 * @Parameter 없음 */ init() { // field 정의 const fields = [ { field:"check", title: "선택", width: 50, headerSort: false, formatter: tb_common_funtions.formatterCheckboxIcon, formatterParams: { checkval: "Y" }, }, { formatter:"rownum", field:"file_id", title: "NO", width: 50 }, { field: "INSP_ITEM", title: "검사 항목", width: 80, editor: "input", editable:(cell)=>{ let val = cell.getData(); return val._STATUS_ === 'I' }, }, // { field: "", title: "검사명", width: 80, editor: "input" }, { field: "INSP_METH", title: "측정 방법", width: 80, editor: "input" }, { field: "ROUT_SQNO", title: "라우팅일련번호", visible:false }, { field: "INSP_TOOL", title: "측정기", width: 150, editor: "input" }, { field: "SPEC_UNIT", title: "단위", width: 50, editor: "input" }, { field: "SPEC_VAL", title: "기준값", width: 100, editor: "input" }, // { field: "", title: "규격유형", width: 100, editor:"list"}, { field: "TOL_UPPER", title: "상한값", width: 100, editor: "input" }, { field: "TOL_LOWER", title: "하한값", width: 100, editor: "input" }, ]; const commonFieldData = { headerSort: false, vertAlign: "middle", hozAlign: "center", resizable: "header", //Resize 는 헤더에서만 가능 headerHozAlign: "center", //헤더 정렬 headerSortTristate: true, //데이터 정렬 => 정/역/초기화 }; this.tbList = new Tabulator(this.table, { layout: "fitColumns", // selectableRows: true, data: [], //기본 데이터 columns: fields, //컬럼 설정 columnDefaults: commonFieldData, }); // 데이터 불러오기 // this.tbList.on("tableBuilt", () => { // this.getMainList(); // }); // row 클릭 시에 this.tbList.on("rowClick", (e, tgt) => { this.rowClick && this.rowClick(e, tgt); }); // 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( Tb_item.tbList.getSelectedData()[0]?.ITEM_CD, Tb_routing.tbList.getSelectedData()[0]?.ROUT_SQNO, Tb_routing.tbList.getSelectedData()[0]?.OP_CD ); }); }); // 삭제 함수 ["click", "keypress"].forEach((evt) => { this.removeBtn.addEventListener(evt, () => { this.removeRow && this.removeRow(); }); }); } } class Tb_pic_class { constructor(container) { let _this = this; _this.file = ""; _this.itemData =""; _this.download_url = "/include/getFile.php"; this.ajaxUrl = "./item.ajax.php"; this.container = document.querySelector(container); this.table = this.container.querySelector(".hy-table"); this.addBtn = this.container.querySelector(".add-btn"); this.removeBtn = this.container.querySelector(".remove-btn"); } // tableBuild 되었을때 getManList getMainList(clickData) { let _this = this; let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); ajax_json({ url: this.ajaxUrl, data: { mode : "getDrawList", ITEM_CD : _this.itemData.ITEM_CD}, success: (data) => { this.tbList.setData(data.data); }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); // this.getMainList(); // this.tbList.clearAlert(); // this.setFilter(); }, }); } setFilter() {} /* * @Overview 테이블 행 추가 함수 * @Parameter 없음 * @function 기본키, _STATUS_:I 값을 넣은 행 추가 */ addRow() { this.tbList.addRow({ _STATUS_: "I" }); } /* * @Overview 테이블 행 삭제 함수 * @Parameter 없음 * @function 선택된 모든 행 STATUS D */ removeRow() { const selectedRows = this.tbList.getRows().filter(row=>{ return row.getData().check ==="Y" }); if(selectedRows.length > 0 ){ kuls_confirm("삭제","하시겠습니까?", ()=>{ // 선택된 각 행 삭제 selectedRows.forEach((row) => { // STAUS D로 바꾸기 row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D"; const rowElement = row.getElement(); rowElement.classList.add("remove-row"); }); }) }else{ kuls_alert("삭제할 행을 선택해주세요.") } } /* * @Overview 삭제 취소 함수 * @Parameter 삭제 행 * @function 클릭시 삭제 취소 & STATUS를 공란으로 변경 */ clearRemove(tgt){ if(tgt._row.data._STATUS_ == "D"){ // console.log(); tgt._row.data._STATUS_ = ""; tgt._row.getElement().classList.remove("remove-row") // const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 } } putTempFile(file){ let _this = this; let formData = new FormData(); formData.append('upfile', file); formData.append('mode', "putTempFile"); let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); jQuery.ajax({ url: _this.ajaxUrl, type: 'POST', data: formData, contentType: false, processData: false, success: (data)=>{ if(data.code !== "0") { kuls_success("적용 되었습니다."); let fdata = JSON.parse(data).data; let FILE_NM = fdata['file_name']; let TMP_NAME = fdata['tmp_name']; let FILE_SIZE = fdata['file_size']; let FILE_TYPE = fdata['file_type']; _this.tbList.addRow({ _STATUS_:'I', ITEM_CD : Tb_item.tbList.getSelectedData()[0].ITEM_CD, // nid:_this.parData['SO_NO'], // sid:_this.parData['SO_SEQ'], FILE_NM, TMP_NAME, FILE_SIZE, FILE_TYPE, gubun:'temp', }); console.log(_this.tbList.getData()); }else{ // this.tbList.getRows().forEach(row =>{ // if(data.data.includes(row.getData()['BIZ_AREA_CD'])){ // row.updata({_STATUS_:"U"}); // } // }); kuls_alert(data.msg); } }, error: (req, stat, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); // this.tbList.clearAlert(); // this.setFilter(); }, }); return true; } putFile(){ let _this = this; if(this.tbList.getData().filter(row=> row._STATUS_).length == 0){ this.getMainList(); return false; } // const curdata = this.tbList.getData(); // // BIZ_AREA_CD 사번 // const dubbleDataCheck = curdata.map( data => data.DRAW_NO && data.DRAW_VER).filter(Boolean); // const noDubbleData = new Set(dubbleDataCheck); // if(noDubbleData.size !== dubbleDataCheck.length){ // kuls_alert("ㄴ"); // return false; // }; let rowData = this.tbList.getData().filter(row => row._STATUS_) // _STATUS_ 있는 데이터만 들고와서 PUT하기 const postData = { 'mode':'putDraw', 'reqdata': JSON.stringify(rowData), }; let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); ajax_json({ url: _this.ajaxUrl, data:postData, success: (data)=>{ if(data.code !== "0") { kuls_success("적용 되었습니다."); _this.getMainList(); }else{ // this.tbList.getRows().forEach(row =>{ // if(data.data.includes(row.getData()['BIZ_AREA_CD'])){ // row.updata({_STATUS_:"U"}); // } // }); kuls_alert(data.msg); } }, error: (req, stat, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); // this.tbList.clearAlert(); // this.setFilter(); }, }); return true; } // 클릭 이벤트 rowClick(e, tgt) { // 삭제가 가능하도록 ROW SELECT // staus D로 바꾸기? let _this = this; if (tgt.isSelected()) { _this.tbList.deselectRow(tgt._row); // Tb_process_check.getMainList(clickData); } else { _this.tbList.deselectRow(); // _this.tbList.selectRow(clickRow); } } /* * @Overview 테이블 행 삭제 함수 * @Parameter 없음 * @function 선택된 모든 행 STATUS D */ removeRow() { const selectedRows = this.tbList.getRows().filter(row=>{ return row.getData().check ==="Y" }); if(selectedRows.length > 0 ){ kuls_confirm("삭제","하시겠습니까?", ()=>{ // 선택된 각 행 삭제 selectedRows.forEach((row) => { // STAUS D로 바꾸기 row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D"; const rowElement = row.getElement(); rowElement.classList.add("remove-row"); }); }) }else{ kuls_alert("삭제할 행을 선택해주세요.") } } /* * @Overview 삭제 취소 함수 * @Parameter 삭제 행 * @function 클릭시 삭제 취소 & STATUS를 공란으로 변경 */ clearRemove(tgt){ if(tgt._row.data._STATUS_ == "D"){ // console.log(); tgt._row.data._STATUS_ = ""; tgt._row.getElement().classList.remove("remove-row") // const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 } } cellClick(e, tgt) { // 체크박스 클릭 switch (tgt.getField()) { case "check": tgt.setValue(tgt.getValue() == "Y" ? "" : "Y"); this.clearRemove(tgt.getRow()) break; } } uploadDraw(e) { let _this = this; // const reader = new FileReader(); // reader.onload = function(){ // const output = document.querySelector('.img-box'); // output.innerHTML = ` // 이미지 파일이 존재하지 않습니다 //
// //
// `; // 이미지 미리보기 설정 // }; // reader.readAsDataURL(event.target.files[0]); // file = event.target.files[0]; // console.log(event.target.files[0]); } // 셀 수정 cellEdited(cell) { cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U"; } putData() { // 사번 중복 확인 및 방지 // _STATUS_ 있는 데이터만 들고와서 PUT하기 } downloadIcon = function(cell, formatterParams, onRendered){ //plain text value return ""; }; getFileUrl =function(DRAW_NO, SID, FILE_ID, FILE_NM,down){ let urlStr = '/include/getFile.php'+"?gubun=draw&nid=" + DRAW_NO + "&sid="+ SID + "&file_id="+ FILE_ID+ "&name="+FILE_NM if(down == true){ location.href = urlStr; } return urlStr; } /* * @Overview 최초 실행 함수 * @Parameter 없음 */ init() { let _this = this // field 정의 const fields = [ { field:"check", title: "선택", width: 50, headerSort: false, formatter: tb_common_funtions.formatterCheckboxIcon, formatterParams: { checkval: "Y" }, }, { formatter: "rownum", title: "NO", width: 50 }, // { field: "DOWNLOAD", title: "다운로드", width: 100, formatter: this.downloadIcon, // cellClick:function(e, cell){ // console.log(cell.getRow().getData()) // } // }, { field: "DOWNLOAD", title: "다운로드", width: 100, formatter: this.downloadIcon, cellClick:function(e, cell){ _this.getFileUrl( cell.getRow().getData().DRAW_NO, cell.getRow().getData().SID, cell.getRow().getData().FILE_ID, cell.getRow().getData().FILE_NM, true ); // location.href = '/include/getFile.php'+"?gubun=draw&nid=" // + cell.getRow().getData().DRAW_NO // + "&sid="+cell.getRow().getData().SID // + "&file_id="+cell.getRow().getData().FILE_ID } }, { field: "DRAW_VER", title: "버전", width: 100 , editor: "input"}, { field: "DRAW_NO", title: "도면번호", width: 150, editor: "input" }, //file의 nid이기도 함 { field: "FILE_NM", title: "파일명", width: 150 }, { field: "SID", visible:false}, { field: "FILE_ID", visible:false}, { field: "MAKE_TM", title: "등록일", width: 100, formatter: (cell)=>{ // let dateData = cell.getValue().date.substring(0,10); // if(dateData == '1900-01-01'){ // dateData = ''; // } return cell; } }, { field: "MAKE_USER_ID",title: "등록자", width: 100 }, { field: "preview", title: "미리보기", width: 80, formatter: Tb_routing.previewIcon, cellClick:function(e,cell){ pop_filedown( _this.getFileUrl( cell.getRow().getData().DRAW_NO, cell.getRow().getData().SID, cell.getRow().getData().FILE_ID, cell.getRow().getData().FILE_NM ), cell.getRow().getData().FILE_NM.split(".").pop() ); } }, ]; const commonFieldData = { headerSort: false, vertAlign: "middle", hozAlign: "center", resizable: "header", //Resize 는 헤더에서만 가능 headerHozAlign: "center", //헤더 정렬 headerSortTristate: true, //데이터 정렬 => 정/역/초기화 }; this.tbList = new Tabulator(this.table, { layout: "fitColumns", selectableRows: true, data: [], //기본 데이터 columns: fields, //컬럼 설정 columnDefaults: commonFieldData, }); // 데이터 불러오기 this.tbList.on("tableBuilt", () => { // this.getMainList(); }); // row 클릭 시에 this.tbList.on("rowClick", (e, tgt) => { // this.rowClick && Tb_item.rowClick(e, tgt); }); // cell 클릭 시에 this.tbList.on("cellClick", (e, tgt) => { this.cellClick && Tb_item.cellClick(e, tgt); }); // cell 수정 시에 this.tbList.on("cellEdited", (cell) => { this.cellEdited && Tb_item.cellEdited(cell); }); // 추가 // ["click", "keypress"].forEach((evt) => { // this.addBtn.addEventListener(evt, () => { // // this.addRow && this.addRow(); // // }); // }); // 삭제 ["click", "keypress"].forEach((evt) => { this.removeBtn.addEventListener(evt, () => { this.removeRow && this.removeRow(); }); }); // 추가 ['click','keypress'].forEach((evt) =>{ this.addBtn.addEventListener(evt,()=> { let _this = this; // uploadFile(); }); }); } } // document.getElementById('fileInput').addEventListener('change', function() { // // 파일 정보 가져오기 // var file = this.files[0]; // var fileName = file.name; // var fileSize = formatBytes(file.size); // var fileType = file.type || '알 수 없음'; // // // 파일 정보를 화면에 표시 // document.getElementById('fileName').innerHTML = '파일명: ' + fileName; // document.getElementById('fileSize').innerHTML = '크기: ' + fileSize; // document.getElementById('fileType').innerHTML = '유형: ' + fileType; // // // 파일 정보를 보여주는 div 요소를 보이도록 설정 // document.getElementById('fileInfo').style.display = 'block'; // }); const Tb_item = new Tb_item_class("#item_ifo_table"); Tb_item.init(); const Tb_routing = new Tb_routing_class("#routing_table"); Tb_routing.init(); const Tb_process_check = new Tb_process_check_class("#process_check_table"); Tb_process_check.init(); const Tb_pic = new Tb_pic_class("#second-tab-container"); Tb_pic.init(); uploadFile=()=> { // console.log(Tb_item.tbList.getSelectedData()[0]?.ITEM_CD); if(!Tb_item.tbList.getSelectedData()[0]?.ITEM_CD){ kuls_alert("품목코드를 클릭해주세요"); return false; } document.getElementById('file_input').click(); } document.getElementById('file_input').addEventListener('change', function() { // 파일 정보 가져오기 var file = this.files[0]; // Tb_pic.file = file; Tb_pic.putTempFile(file); });