1
0
Fork 0
HANYANG_MES/home_dir/www/ksvc/base/operation/operation.js

384 lines
12 KiB
JavaScript

/*
* @Overview 공정 등록
*/
class Tb_operation_class {
constructor(container) {
let _this = this;
_this.ajaxUrl = "./operation.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 _this = this;
const OP_NM = document.querySelector("#OP_NM").value;
const USE_FLG = document.querySelector("#USE_FLG").value;
const talert = window.setTimeout(function () { _this.tbList.alert("Loading ...") }, 1000); //1초 이상 지연되면 로딩 출력
ajax_json({
url: _this.ajaxUrl,
data: { mode: 'getOperationList', OP_NM : OP_NM, USE_FLG: USE_FLG },
success: function (data) {
if (data.code) {
_this.tbList.setData(data.data);
}else{
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
window.clearTimeout(talert);
_this.tbList.getRows().forEach(row=>{
row.getCell("OP_CD").getElement().addEventListener("click",(e)=>{
_this.rowClick(e,row);
})
});
// _this.tblList.clearAlert();
// Tb_funcs.setFilter();
}
});
return true;
}
/*
* @Overview 데이터 필터 함수
* @Parameter 없음
*/
setFilter() {}
/*
* @Overview 테이블 행 추가 함수
* @Parameter 없음
* @function 기본키, _STATUS_:I 값을 넣은 행 추가
*/
addRow() {
// if(this.tbList.getSelectedData()){
// this.tbList.addRow(this.tbList.getSelectedData())
// }else {
// this.tbList.addRow({_STATUS_ : "I"})
// }
this.tbList.addRow({_STATUS_ : "I", USE_FLG : "Y"})
}
excelDataLoad(table_block, title) {
let _this = this;
if( _this.tbList.getData('active').map( row => { return row; }).length !== 0){
let filename = title + "_"+luxon.DateTime.now().toFormat('yyyyMMdd')+".xlsx";
tb_common_funtions.tabu2xls(table_block, filename, title, _this.tbList.getData('active').map( row => { return row; } ));
}else{
kuls_alert("다운로드 할 데이터를 조회해주세요");
}
};
/*
* @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 클릭한 테이블 행 선택
*/
rowClick(e,tgt) {
// 삭제가 가능하도록 ROW SELECT
// staus D로 바꾸기?
if (tgt.isSelected()) {
tgt.deselect();
} else {
tgt.select();
}
}
copyRow(){}
/*
* @Overview cell 클릭 함수
* @Parameter 클릭한 cell
* @Function 클릭한 cell의 filed 값에 따라 토글 상태 변경 또는 팝업
*/
cellClick(e, tgt) {
let editor = tgt.getColumn().getDefinition().editor;
switch (tgt.getField()) {
case "USE_FLG":
tgt.setValue(tgt.getValue() == "Y" ? "N" : "Y");
break;
default:
if (!editor) {
this.rowClick && this.rowClick(e, tgt.getRow());
}
break;
}
}
/*
* @Overview 테이블 셀 수정 함수
* @Parameter 셀
* @function 셀 편집이 이후 저장될수 있도록 _STATUS_:U로 데이터 업데이트
*/
cellEdited(cell) {
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
}
/*
* @Overview 추가, 수정 및 삭제 데이터 저장
* @Parameter 없음
* @Function 사번 중복 확인
* @Function _STATUS_ U, I, D인 데이터베이스 가져와서 처리.
*/
putOperation (){
let _this = this;
// let pdata = _this.tblList.getData();
// let dupdata = pdata.map( data => data.OP_CD ).filter( data => data );
// if( dupdata.filter( (data,idx) => dupdata.indexOf(data) !== idx ).length > 0 ){
// kuls_alert("공정 코드가 중복됩니다.");
// return false;
// }
if(this.tbList.getData().filter(row=> row._STATUS_).length == 0){
this.getMainList();
return false;
}
let postdata = {
'mode': 'putOperation',
'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();
}else{
_this.tbList.getRows().forEach( row => { //일부 적용된 열 update 처리
if( data.data.includes(row.getData()['OP_CD']) ){
// row.update({_STATUS_:'U'});
}
} );
kuls_alert(data.mesg);
}
},
error: function (request, status, error) {
kuls_alert(error.message);
},
complete: function () {
}
});
return true;
};
/*
* @Overview 최초 실행 함수
* @Parameter 없음
*/
init() {
let _this = this;
// field 정의
const fields = [
{ formatter: "rownum", title: "NO", minWidth: 50 , width: "5%" },
{ field: "OP_CD", title: "공정 코드", minWidth: 100, width: "10%",
editor: tb_custom_editor.upper,
editable: (cell) => {
let val = cell.getData();
return val._STATUS_ === "I";
},
validator: "alphanumeric"
},
{ field: "OP_GRP", title: "공정그룹", minWidth: 200, width: '15%', editor: "input", visible:false},
{ field: "OP_NM", title: "공정명", minWidth: 200, width: '15%',
editor: tb_custom_editor.upper,
validator:{
type:tb_custom_validator.stringNumeric,
parameters: "특수문자를 입력할 수 없습니다."
},
hozAlign:"left"},
{ field: "REMK", title: "비고", minWidth: 300, width: '63%', editor: "input",hozAlign:"left"},
{ field: "USE_FLG", title: "사용", width: '5%', 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,
validationMode: "highlight"
});
// 데이터 불러오기
_this.tbList.on("tableBuilt", () => {
_this.getMainList();
});
/*
* @Overview 유효성 검사메세지 띄우기
* @Parameter cell, 입력값, validators
*/
_this.tbList.on("validationFailed", (cell, value, validators)=>{
let errMsg = ""
switch(validators[0].type){
case "alphanumeric":
errMsg = " 필드는 한글과 특수문자를 입력할 수 없습니다.";
break;
case "numeric":
errMsg = " 필드는 숫자만 입력할 수 있습니다.";
break;
default:
errMsg = " 필드는 "+ validators[0].parameters;
break;
};
kuls_warning(cell.getColumn().getDefinition().title + errMsg );
});
// cell 클릭 시에
this.tbList.on("cellClick", (e,tgt) => {
this.cellClick && this.cellClick(e,tgt);
});
// cell 수정 시에
this.tbList.on("cellEdited", (e,tgt) => {
this.cellEdited && this.cellEdited(e,tgt);
});
// 추가
["click", "keypress"].forEach((evt) => {
this.addBtn.addEventListener(evt, () => {
this.addRow();
});
});
// 삭제
["click", "keypress"].forEach((evt) => {
this.removeBtn.addEventListener(evt, () => {
// 삭제 함수
kuls_confirm("삭제","하시겠습니까?", ()=>{
this.removeRow && this.removeRow();
})
});
});
// 조회
["click", "keypress"].forEach((evt) => {
const filterBtn = document.querySelector("#filter_btn");
filterBtn.addEventListener(evt, () => {
// setFilter 또는 setData
_this.getMainList();
});
});
// 저장
["click", "keypress"].forEach((evt) => {
const putBtn = document.querySelector("#put_btn");
putBtn.addEventListener(evt, () => {
this.putOperation();
});
});
// 엑셀 다운로드
["click", "keypress"].forEach((evt) => {
const down = document.querySelector("#excel_down");
down.addEventListener(evt, () => {
console.log('asdf');
this.excelDataLoad(this.tbList,'공정 코드');
});
});
// 엑셀 업로드
let dataExcel = [];
["click", "keypress"].forEach((evt) => {
const up = document.querySelector("#excel_up");
up.addEventListener("change", async function(event) {
let xfiles = event.target.files;
dataExcel = [];
var fileName = $("#xupfile").val();
$(".upload-name").val(fileName);
if( !xfiles[0] ){
console.log("파일을 읽을수 없습니다.");
return;
}
let workbook = new ExcelJS.Workbook();
await workbook.xlsx.load(xfiles[0]);
/**/
let fws = workbook._worksheets.keys()[0]; //워크시트 키는 단순 숫자순이 아님을 확인.
let worksheet = workbook.getWorksheet(fws);
/**/
let dataSheet = worksheet._rows.filter((row,idx)=>idx > 0); //두번째 라인부터 읽어오도록 필터링
if( dataSheet.length ){
dataSheet.forEach((row, row_idx)=>{
let nrow = dataExcel.length;
if( !dataExcel[nrow] ){
dataExcel[nrow] = [];
}
row._cells.forEach((cell, cell_idx)=>{
if( !cell.isMerged || cell._mergeCount > 0 ){ //1개의 독립된 Cell 이거나, merge의 Main Cell 이거나
let cellText = "";
switch( cell.type ){
case 4 : //날짜
cellText = moment(cell.value).format("YYYY-MM-DD");
break;
case 5 : //object
cellText = cell.value.text;
break;
case 2 : //숫자
case 3 : //문자
default :
cellText = cell.text;
}
dataExcel[nrow].push(cellText);
}
});
});
/* 실행함수 */
//dataExcel 을 Tabulator에 추가
console.log(dataExcel);
Tb_funcs.getExcelData(dataExcel);
}else{
return false;
}
});
});
}
}
const Tb_operation = new Tb_operation_class("#operation_table");
Tb_operation.init();