forked from HANYANG/HANYANG_MES
1830 lines
54 KiB
JavaScript
1830 lines
54 KiB
JavaScript
/*
|
|
* @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: "<i class='bi'></i>", //정렬 아이콘
|
|
// 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;
|
|
|
|
console.log(_this.fileData);
|
|
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
|
|
}
|
|
]);
|
|
}
|
|
|
|
console.log(this.tbList.getData());
|
|
}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 "<button class='reverse-btn disabled-btn' disabled>다운</button>";
|
|
}
|
|
return "<button class='reverse-btn'>다운</button>";
|
|
|
|
};
|
|
|
|
// /*
|
|
// * @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 class='reverse-btn'>업로드</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 "<button class='reverse-btn disabled-btn' disabled>삭제</button>";
|
|
}
|
|
let _this = this;
|
|
var button = $("<button class='reverse-btn'>삭제</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 "<button class='reverse-btn disabled-btn' diabled>미리보기</button>";
|
|
}
|
|
// console.log(cell.getRow().getData().FILE_NM);
|
|
return "<button class='reverse-btn'>미리보기</button>";
|
|
|
|
};
|
|
/*
|
|
* @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: "준비시간</br>(분)", width: 80, editor: "input",
|
|
formatter:"money",
|
|
formatterParams:{
|
|
decimal:".",
|
|
precision:0
|
|
}
|
|
},
|
|
{ field: "CYCLE_TM", title: "공정시간</br>(분)", width: 80, editor: "input",
|
|
formatter:"money",
|
|
formatterParams:{
|
|
decimal:".",
|
|
precision:0
|
|
}
|
|
},
|
|
{ field: "STD_OP_AMT", title: "공정 단가</br>(원)", 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 "<button class='reverse-btn disabled-btn' disabled>업로드</button>";
|
|
}
|
|
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: "<i class='bi'></i>", //정렬 아이콘
|
|
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.getMainList();
|
|
// 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 = `
|
|
// <img src="${reader.result}" alt="이미지 파일이 존재하지 않습니다" style="max-width: 100%; height: auto;">
|
|
// <div class="img-cover">
|
|
// <input type="submit" value="삭제" class="btn-danger" onClick="removeImage()" />
|
|
// </div>
|
|
// `; // 이미지 미리보기 설정
|
|
// };
|
|
// 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 "<i class='fa-solid fa-download'></i>";
|
|
};
|
|
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 dateData;
|
|
}
|
|
},
|
|
{ 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);
|
|
});
|
|
|