/* * @Overview 설비 관리 대장 * @History 2024-04-08 / 박민희 */ class Tb_main_class { constructor(container) { let _this = this; _this.ajaxUrl = "./facility.ajax.php"; _this.clickData = ""; 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.FACLT_CD_Vaule =document.querySelector("form #FACLT_CD").value; _this.tbList =""; } // tableBuild 되었을때 getManList getMainList() { let _this = this; let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); _this.FACLT_CD =document.getElementById("FACLT_CD").value; ajax_json({ url: _this.ajaxUrl, data: { mode: "getFacilityList" ,FACLT_CD:_this.FACLT_CD}, success: (data) => { this.tbList.setData(data.data); }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); this.tbList.clearAlert(); // this.setFilter(); }, }); } // putFacility() { // let formData = new FormData(form); // let _this = this; // const postdata = ""; // let selectData = _this.tbList.getSelectedData(); // 선택 데이터 //// let statFilterData = _this.tbList.getData().filter(row=> row._STATUS_); //Status가 존재하는 데이터 // 선택 데이터가 존재하고 row.status가 존재하지 않는 데이터 => // if(selectData.length === 1 && statFilterData.length === 0){ // postdata = { // 'mode': 'setFacility', // 'reqdata': JSON.stringify([this.editRow()]), //오른쪽 form 데이터 통해 생성된 가상의 ROW // 'file' : file // }; // }else{ // postdata = { // 'mode': 'putFacility', // 'reqdata': JSON.stringify(statFilterData), // 'file' : file // }; // } // postdata = { // mode: "putFacility", // reqdata:JSON.stringify(statFilterData), // file:file // } // ajax_form({ // url: _this.ajaxUrl, // type: "POST", // data: JSON.stringify(postdata), // success: (data)=>{ // if( data.code !== '0'){ // kuls_success("적용 되었습니다."); // this.getMainList(); // }else{ // kuls_alert(data.msg); // } // }, // error: function (request, status, error) { // kuls_alert(error.message); // }, // complete: ()=>{ // this.getMainList(); // // _this.formInit(); // } // }); // }; // setFilter() {} /* * @Overview 테이블 데이터 추가 함수 * @Parameter 없음 * @function 팝업 띄우기 */ addRow() { // var form = document.getElementById("form"); // let temdata = new FormData(form); // let newdata = Object.fromEntries(temdata); //form데이터 // newdata["_STATUS_"] = "I"; // this.tbList.addRow(newdata); this.modalFacility(); } /* * @Overview 팝업 오픈 * @Parameter 설비 추가 및 수정 */ modalFacility(row_data) { let _this = this; vnLoad( '', './facility_pop.inc.php', '', (loadHtml)=>{ this.putFacilityModal = kuls_modal(loadHtml); // rowData form에 입력 if(row_data){ const rowData = row_data.getData(); Object.keys(rowData).forEach( key => { if(document.querySelector(".custom-popup #"+key)){ document.querySelector(".custom-popup #"+key).value = rowData[key]; }; }); //document.querySelector(".custom-popup #FACLT_CD_PK").value = rowData['FACLT_CD']; document.querySelector(".custom-popup #FACLT_CD").readOnly = true; document.querySelector(".custom-popup #img_preview").src = _this.getFileUrl('faclt', row_data.getData().FACLT_CD, row_data.getData().SID, row_data.getData().FILE_ID); } //const getFile = _this.getFileUrl(row_data.FACLT_CD, row_data.SID.row_data.FILE_ID, row_data.FILE_NM); const fileInput = document.querySelector("#file_input"); fileInput.addEventListener("change", (event) => { if (event.target.files.length > 0) { this.putTempFile(event.target.files[0], row_data); // 파일과 함께 rowData 전달 } }); // form 데이터 row에 입력 document.querySelector(".awn-popup-confirm .add-btn").addEventListener("click",(e)=>{ let _this = this; e.preventDefault(); const formData = new FormData(document.querySelector("#form")); if( row_data ){ formData.set("FACLT_CD_PK", row_data.getData()['FACLT_CD']); } if (formData.get("FACLT_CD_PK")) { formData.append("mode", "setForm"); }else{ formData.append("mode", "putForm" ); } ajax_form({ url: _this.ajaxUrl, data: formData, success: (data)=>{ if (data.code) { // document.querySelector("#FACLT_CD_PK").value = faclt_cd; _this.getMainList(); kuls_success("적용 되었습니다."); }else{ kuls_alert(data.mesg); } }, error: function(req, stat, err){ kuls_alert(err.message); } }); //this.putFacilityModal.delete(); }); }); }; editRow(){ var form = document.getElementById("form"); let temdata = new FormData(form); let newdata = Object.fromEntries(temdata); //form데이터 newdata["_STATUS_"] = "U"; // return newdata; } /* * @Overview 테이블 행 삭제 함수 * @Parameter 없음 * @function 선택된 모든 행 삭제 */ removeRow() { const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 // 선택된 각 행 삭제 selectedRows.forEach((row) => { // STAUS D로 바꾸기 row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D"; const rowElement = row.getElement(); rowElement.classList.add("remove-row"); }); } //거래처등록 사진 업로드 putTempFile(file){ let _this = this; let formData = new FormData(); formData.append('upfile', file); formData.append('mode', "putTempFile"); ajax_form({ url: _this.ajaxUrl, data: formData, success: (data)=>{ if ( data.code ) { let file_name = data.data.tmp_name; document.querySelector("#tmp_file").value = file_name; }else{ kuls_alert(data.mesg); } }, error: (req, stat, err) => { kuls_alert(err.message); }, }); return true; } getFileUrl = function(kind,FACLT_CD, SID, FILE_ID){ let urlStr = ""; if(kind == "faclt"){ urlStr = '/include/getFile.php'+"?gubun=faclt&nid=" + FACLT_CD + "&sid="+ SID + "&file_id="+ FILE_ID }else{ urlStr = '/include/getFile.php'+"?gubun=faclt&ITEM_CD=" + FACLT_CD + "&ROUT_SQNO="+ SID + "&name="+FILE_ID } return urlStr; } /* * @Overview 테이블 행 순서 변경 함수 * @Parameter 방향 * @function 선택된 모든 행 순서 변경 */ upDownRow(dir) { } // 클릭 이벤트 rowClick(e, tgt) { if (tgt.isSelected()) { tgt.deselect(); Tb_process.code = null; } else { this.tbList.deselectRow(); Tb_process.getMainList(tgt.getData().FACLT_CD); Tb_repair.getMainList(tgt.getData().FACLT_CD); tgt.select(); } // 삭제가 가능하도록 ROW SELECT // let rowData = tgt._row.data; //row 클릭 시 rowData 설비에 입력 현재 MAPPING 하지 않은 상태 // let {EDIT_USER_ID,EDIT_TM,FACLT_SPEC // ,INTNL_USE_DEPT_CD,INTNL_USE_DEPT_NM // ,MAJR_EMP_NM,MAKER_NM,MAKE_TM,MAKE_USER_ID,MINR_EMP_NM,PURPOS_USAGE,PUR_BP_NM,PUR_DT,PUR_PRSN_NM,PUR_REPRE_NM,PUR_TEL_NO,MANUL_FLG,USE_FLG,WRK_TEAM, ...otherData} = rowData; // for(let temp in otherData){ // if(document.getElementById(`${temp}`).value !== null){ // document.getElementById(`${temp}`).value = rowData[temp]??''; // } // } // document.getElementById("FACLT_CD").readOnly = true; // Tb_process.getMainList(); // _this.formInit(); //추후 수정 // const output = document.querySelector('.img-box'); // output.innerHTML = ` // 이미지 파일이 존재하지 않습니다 //
// //
// ` } /* * @Overview 테이블 행 더블 클릭시에 팝업 * @Parameter 이벤트, 타겟 행 */ rowDblClick(e, tgt) { // popClientEditor({ // // },tgt) let _this = this; let row = tgt; _this.modalFacility(row); } /* * @Overview 선택한 CELL의 정보 또는 상태 변화에 활용하는 함수 * @Parameter 클릭한 CELL 데이터 */ cellClick(e, tgt) { // const editor = tgt.getColumn().getDefinition().editor; //에디터 속성을 가진 컬럼 변수(컬럼에 editor : input 을 부여하면 수정 가능해진다) // switch (tgt.getField()) { // default: // if (!editor) { // this.rowClick && this.rowClick(e, tgt.getRow()); // } // break; // } } // 셀 수정 cellEdited(cell) { cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U"; } //기본건 삭제만 가능 putData() { const _this = this; // 기본키 중복 확인 및 방지 // _STATUS_ 있는 데이터만 들고와서 PUT하기 let postdata = { 'mode': 'deleteForm', 'reqdata': JSON.stringify(this.tbList.getData().filter(row=> row._STATUS_)), }; ajax_json({ url: _this.ajaxUrl, data: postdata, success: function (data) { if (data.code) { kuls_success("저장되었습니다."); _this.getMainList(); Tb_process.getMainList(); Tb_repair.getMainList(); } }, error: function (request, status, error) { kuls_alert(error.message); }, complete: function () { } }); return true; } //이미지 미리보기 previewImage=(event)=>{ for (var image of event.target.files) { var reader = new FileReader(); reader.onload = function(event) { var img = document.createElement("img"); img.setAttribute("src", event.target.result); document.querySelector("div#image_container").appendChild(img); }; reader.readAsDataURL(image); } } /* * @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: "FACLT_CD", title: "설비코드", width: 100 }, { field: "FACLT_NM", title: "설비명", width: 150 }, //formatter : 숫자 EA { field: "WRK_TEAM", title: "소속", width: 100 }, { field: "USE_FLG", title: "사용", width: 50, formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: {checkval:'Y'} }, { field: "FILE_ID", title: "FILE_ID", width: 50 ,visible:false}, { field: "FILE_NAME", title: "FILE_NAME", width: 50 ,visible:false}, { field: "SID", title: "SID", width: 50 ,visible:false} ]; const commonFieldData = { headerSort: false, 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, }); // 데이터 불러오기 this.tbList.on("tableBuilt", () => { this.getMainList(); }); // row 클릭 시에 this.tbList.on("rowClick", (e, tgt) => { this.rowClick && this.rowClick(e, tgt); }); // row 클릭 시에 this.tbList.on("rowDblClick", (e, tgt) => { this.rowDblClick && this.rowDblClick(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); }); function tabWork(elementId, className) { var element = document.getElementById(elementId); if (!element || !element.classList) { return false; } return element.classList.contains(className); } // 추가 ["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) => { const filterBtn = document.querySelector("#filter_btn"); filterBtn.addEventListener(evt, () => { this.getMainList && this.getMainList(); // setFilter 또는 setData }); }); // 저장 ["click", "keypress"].forEach((evt) => { let _this = this; const putBtn = document.querySelector("#put_item"); putBtn.addEventListener(evt, () => { // let base64String = document.getElementsByClassName("img-box")[0].outerHTML; // let firstSlice = base64String.indexOf("base64,")+1; // `=" alt` // let base64String = document.getElementsByClassName("img-box")[0].outerHTML; // let firstSlice = base64String.indexOf("base64,")+7; // let lastSlice = base64String.indexOf("\" alt="); // file = base64String.substring(firstSlice,lastSlice); this.putData && this.putData(); Tb_process.putData && Tb_process.putData(); }); }); } } class Tb_process_class { constructor(container) { let _this = this; this.ajaxUrl = "./facility.ajax.php"; this.container = document.querySelector(container); this.table = this.container.querySelector(".hy-table"); this.SEQNO = 0; // 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.tbList = ""; } // tableBuild 되었을때 getManList getMainList(FACLT_CD) { // const selectData = Tb_facility.tbList.getSelectedData()[0]?.FACLT_CD; //FACLT_CD : Tb_facility.selectRowgetSelectedData()[0].FACLT_CD this.code = FACLT_CD; let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); ajax_json({ url: this.ajaxUrl, data: { mode: "getprocess", FACLT_CD: this.code}, success: (data) => { this.tbList.setData(data.data); this.SEQNO = data.data[data.data.length - 1]?data.data[data.data.length - 1].SEQNO : 0; }, error: (req, status, err) => { kuls_alert(err.message); }, complete: () => { window.clearTimeout(talert); this.tbList.clearAlert(); // this.setFilter(); }, }); } putData() { if(this.tbList.getData().filter(row=> row._STATUS_).length == 0){ this.getMainList(); return false; } const postdata = { 'mode': 'putProcess', 'reqdata': JSON.stringify(this.tbList.getData().filter(row=> row._STATUS_)) }; ajax_form({ url: this.ajaxUrl, type: "POST", data: JSON.stringify(postdata), success: (data)=>{ if( data.code ){ kuls_success("적용 되었습니다."); //_this.getRepairInfo(formdata.get("FACLT_CD")); // Tb_funcs.putFacilityModal.delete(); this.getMainList(this.code); }else{ kuls_alert(data.mesg); } }, error: function (request, status, error) { kuls_alert(error.message); }, complete: function(){ } }); }; setFilter() {} /* * @Overview 테이블 행 추가 함수 * @Parameter 없음 * @function 기본키, _STATUS_:I 값을 넣은 행 추가 */ addRow() { this.SEQNO += 1; if(this.code){ this.tbList.addRow({ SEQNO: this.SEQNO, FACLT_CD: this.code, _STATUS_: "I" }); } } /* * @Overview 테이블 행 삭제 함수 * @Parameter 없음 * @function 선택된 모든 행 삭제 */ removeRow() { const selectedRows = this.tbList.getSelectedRows(); // 선택된 모든 행 가져오기 // 선택된 각 행 삭제 selectedRows.forEach((row) => { // STAUS D로 바꾸기 row.getData()._STATUS_ = row.getData()._STATUS_=="I"?null:"D"; const rowElement = row.getElement(); rowElement.classList.add("remove-row"); }); } /* * @Overview 테이블 행 순서 변경 함수 * @Parameter 방향 * @function 선택된 모든 행 순서 변경 */ upDownRow(dir) { } /* * @Overview 테이블 행 클릭 함수 * @Parameter 셀 * @function 클릭한 테이블 행 선택 */ rowClick(e,tgt) { // 삭제가 가능하도록 ROW SELECT // staus D로 바꾸기? if (tgt.isSelected()) { tgt.deselect(); } else { this.tbList.deselectRow(); tgt.select(); } } 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 "USE_FLG": tgt.setValue(tgt.getValue() == "Y" ? "N" : "Y"); break; default: if (!editor) { this.rowClick && this.rowClick(e, tgt.getRow()); } break; } } // 셀 수정 cellEdited(cell) { cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U"; } /* * @Overview 최초 실행 함수 * @Parameter 없음 */ init() { // field 정의 const fields = [ { field:"check", title: "선택", width: 50, headerSort: false,formatter: tb_common_funtions.formatterCheckboxIcon,formatterParams: { checkval: "Y" },}, { field: "SEQNO", title: "NO", width: 50 }, // { field: "SEQNO", formatter: "rownum", title: "NO", width: 50 }, { field: "OP_CD", title: "공정코드", width: 200 , cssClass:"editable-cell", }, { field: "OP_NM", title: "공정명", width: 200 }, { field: "REMK", title: "비고", width: 300}, // { field: "USE_FLG", title: "사용", width: 50, cssClass:"editable-cell", formatter: tb_common_funtions.formatterToggleboxGreenIcon, formatterParams: {checkval:'Y'} }, ]; 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, () => { // Tb_facility.addRow(); this.addRow && this.addRow(); }); }); // 삭제 ["click", "keypress"].forEach((evt) => { this.removeBtn.addEventListener(evt, () => { // 삭제 함수 this.removeRow && this.removeRow(); }); }); } } /* * @Overview 팝업 * @Parameter 없음 */ class Tb_repair_class{ constructor(container) { this.ajaxUrl = "./facility.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"); } getMainList(FACLT_CD) { this.code = FACLT_CD; // Tb_faclility에서 가져와야할것 변수로 저장 // ajaxJson 으로 테이블 가져오기? } putData() { }; addRow(){ } removeRow(){} /* * @Overview 선택한 ROW의 정보 또는 상태 변화에 활용하는 함수 * @Parameter 클릭한 row 데이터 */ rowClick(e, tgt) { if (tgt.isSelected()) { tgt.deselect(); } else { tgt.select(); } } /* * @Overview 선택한 CELL의 정보 또는 상태 변화에 활용하는 함수 * @Parameter 클릭한 CELL 데이터 */ cellClick(e, tgt) { const editor = tgt.getColumn().getDefinition().editor; //에디터 속성을 가진 컬럼 변수(컬럼에 editor : input 을 부여하면 수정 가능해진다) switch (tgt.getField()) { default: if (!editor) { this.rowClick && this.rowClick(e, tgt.getRow()); } break; } } // 셀 수정 cellEdited(cell) { cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U"; } init(){ const fields = [ { formatter:"rownum", title:"NO", width:50, headerSort:false }, { field:"", title:"수리일", width:150, }, { field:"", title:"수리내역", width:150, }, { field:"", title:"수리비용", width:100, }, { field:"", title:"수리업체", width:100, }, { field:"", title:"전화번호", width:200, }, ] const commonFieldData = { headerSort: false, 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(); }); // 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); }); } } const Tb_facility = new Tb_main_class("#main_table"); Tb_facility.init(); const Tb_process = new Tb_process_class("#process_table"); Tb_process.init(); const Tb_repair = new Tb_repair_class("#repair_table"); Tb_repair.init(); /* * @Overview form 이미지 등록/수정 및 미리 보기 * @Parameter event */ function previewImage(event) { let _this = this; const reader = new FileReader(); reader.onload = function () { const output = document.querySelector(".img-box"); output.innerHTML = ` 이미지 파일이 존재하지 않습니다
`; // 이미지 미리보기 설정 }; const file = event.target.files[0]; reader.readAsDataURL(file); // file = event.target.files[0]; } /* * @Overview form 이미지 및 미리 보기 삭제 * @Parameter 없음 */ function removeImage() { // 입력된 파일 정보 지우기 // const inputBtn = document.querySelector("#file_input"); // inputBtn.value = ""; // 이미지 미리보기 제거 const output = document.querySelector(".img-box"); output.innerHTML = ""; } // uploadFile=()=> { // document.getElementById('file_input').click(); // } // document.getElementById('file_input').addEventListener('change', function() { // // 파일 정보 가져오기 // var file = this.files[0]; // // Tb_pic.file = file; // Tb_facility.putTempFile(file); // }); // function image(event) { // previewImage(event); // 이미지 미리보기 // }