/* * @Overview 공정 등록 */ class Tb_process_class { constructor(container) { let _this = this; _this.ajaxUrl = "./process.ajax.php"; this.tbList = ""; 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") } /* * @Overview 데이터 세팅 함수 * @Parameter 없음 */ getMainList() { // let talert = window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000); // ajax_json({ // url: this.ajaxUrl, // data: { mode: "" }, // success: (data) => {}, // error: (req, status, err) => { // kuls_alert(err.message); // }, // complete: () => { // // window.clearTimeout(talert); // // this.tbList.clearAlert(); // // this.setFilter(); // }, // }); } /* * @Overview 데이터 필터 함수 * @Parameter 없음 */ setFilter() {} /* * @Overview 테이블 행 추가 함수 * @Parameter 없음 * @function 기본키, _STATUS_:I 값을 넣은 행 추가 */ addRow() { this.tbList.addRow({ _STATUS_: "I" }); } /* * @Overview 테이블 행 삭제 함수 * @Parameter 없음 * @function 선택된 모든 행 삭제 */ removeRow() { const selectedRows = this.tbList.getRows().filter(row=>{ return row.getData().check ==="Y" }); // 선택된 각 행 삭제 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 클릭한 테이블 행 선택 */ rowClick(cell) { // 삭제가 가능하도록 ROW SELECT // staus D로 바꾸기? } /* * @Overview 테이블 셀 클릭 함수 * @Parameter 이벤트, 타겟 * @function 클릭한 셀에 따라 각각 다른 이벤트 설정 * @function 팝업, 체크박스 등 */ cellClick(e, tgt) { } /* * @Overview 테이블 셀 수정 함수 * @Parameter 셀 * @function 셀 편집이 이후 저장될수 있도록 _STATUS_:U로 데이터 업데이트 */ cellEdited(cell) { cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U"; } /* * @Overview 추가, 수정 및 삭제 데이터 저장 * @Parameter 없음 * @Function 기본키 중복 확인 * @Function _STATUS_ U, I, D인 데이터베이스 가져와서 처리. */ putData() { let _this = this; // const curdata = this.tbList.getData(); // // BIZ_AREA_CD 사번 // const dubbleDataCheck = curdata.map( data => data.BIZ_AREA_CD).filter(Boolean); // const noDubbleData = new Set(dubbleDataCheck); // if(noDubbleData.size !== dubbleDataCheck.length){ // kuls_alert("사업장 코드를 입력하지 않았거나 중복됩니다."); // return false; // }; // _STATUS_ D인 데이터 삭제 // 필요하면 작성 // _STATUS_ 있는 데이터만 들고와서 PUT하기 const postData = { 'mode':'putBizarea', 'reqdata': JSON.stringify(this.tbList.getData().filter(row => row._STATUS_)) }; console.log(postData); ajax_json({ url: _this.ajaxUrl, data:postData, success: (data)=>{ if(data.code) { 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.mesg); } }, error: (req, stat, err) => { kuls_alert(err.message); }, }); return true; } /* * @Overview 최초 실행 함수 * @Parameter 없음 */ init() { // field 정의 const fields = [ { field:"check", title: "선택", width: 50, headerSort: false, formatter: tb_common_funtions.formatterCheckboxIcon, formatterParams: { checkval: "Y" }, }, { formatter: "rownum", title: "NO", minWidth: 50 , width: '10%' }, { field: "OP_CD", title: "공정 코드", minWidth: 200, width: '15%', editor: "input", editable: (cell) => { let val = cell.getData(); return val._STATUS_ === "I"; }, }, { field: "OP_GRP", title: "공정 코드", minWidth: 200, width: '15%', editor: "input", visible:false}, { field: "OP_NM", title: "공정명", minWidth: 200, width: '15%', editor: "input", hozAlign:"left"}, { field: "REMK", title: "비고", minWidth: 300, width: '60%', 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", selectableRows: true, data: [], //기본 데이터 columns: fields, //컬럼 설정 columnDefaults: commonFieldData, headerSortElement: "", //정렬 아이콘 }); // 데이터 불러오기 this.tbList.on("tableBuilt", () => { this.getMainList(); }); // row 클릭 시에 this.tbList.on("rowClick", (e,tgt) => { this.rowClick && Tb_process.rowClick(e,tgt); }); // cell 클릭 시에 this.tbList.on("cellClick", (e,tgt) => { this.cellClick && Tb_process.cellClick(e,tgt); }); // cell 수정 시에 this.tbList.on("cellEdited", (e,tgt) => { this.cellEdited && Tb_process.cellEdited(e,tgt); }); // 추가 ["click", "keypress"].forEach((evt) => { this.addBtn.addEventListener(evt, () => { console.log("hi") this.addRow(); }); }); // 삭제 ["click", "keypress"].forEach((evt) => { this.removeBtn.addEventListener(evt, () => { // 삭제 함수 this.removeRow(); }); }); // 조회 ["click", "keypress"].forEach((evt) => { const filterBtn = document.querySelector("#filter_worker"); filterBtn.addEventListener(evt, () => { // setFilter 또는 setData }); }); // 저장 ["click", "keypress"].forEach((evt) => { const putBtn = document.querySelector("#put_worker"); putBtn.addEventListener(evt, () => { this.putData(); }); }); } } const Tb_process = new Tb_process_class("#process_table"); Tb_process.init();