forked from HANYANG/HANYANG_MES
2892 lines
87 KiB
JavaScript
2892 lines
87 KiB
JavaScript
/*
|
|
* 로그아웃
|
|
* */
|
|
const logout = function () {
|
|
ajax_json({
|
|
url: "/inc/common.ajax.php",
|
|
type: "POST",
|
|
data: { mode: "memberLogout" },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
kuls_alert("로그아웃 되었습니다.", function () {
|
|
location.href = "/ksvc/";
|
|
});
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
kuls_alert(error.message);
|
|
},
|
|
});
|
|
};
|
|
|
|
const side_menu_load = function (menu_code) {
|
|
ajax_json({
|
|
url: "/inc/common.ajax.php",
|
|
type: "POST",
|
|
data: {
|
|
mode: "getSiteMenuList",
|
|
menu_code: menu_code,
|
|
},
|
|
success: function (data) {
|
|
if (data.code) {
|
|
jQuery(".side-nav .side-menu").fancytree({
|
|
activeVisible: true,
|
|
clickFolderMode: 3,
|
|
source: data.data,
|
|
|
|
// activate: function(e, data){
|
|
// if( !data.node.folder ){
|
|
// location.href = data.node.data.href || '###';
|
|
// }
|
|
// },
|
|
|
|
// createNode: function(event, data) {
|
|
// // 노드 생성 후 span을 a로 변경
|
|
// // let node = data.node;
|
|
// // let spanTag = $(node.span);
|
|
// //
|
|
// // let aTag = $("<a href='http://hymes.kuls.co.kr/ksvc/base/worker/worker.php' class='fancytree-node fancytree-exp-n fancytree-ico-c'></a>").html(spanTag.find("> span.fancytree-title").html());
|
|
// // spanTag.find("> span.fancytree-title").replaceWith(aTag);
|
|
// },
|
|
click: function (event, data) {
|
|
if (!data.node.folder) {
|
|
location.href = data.node.data.href || "###";
|
|
}
|
|
},
|
|
});
|
|
}
|
|
},
|
|
error: function (request, status, error) {},
|
|
complete: function (request, status) {
|
|
jQuery(".side-nav").on("click", "a", function (e) {
|
|
e.preventDefault();
|
|
});
|
|
|
|
jQuery(".side-nav").on("click", ".node-side-nav", function (e) {
|
|
if (jQuery(this).find(".expand-icon").length == 0) {
|
|
let href = jQuery(this).find("> a").attr("href");
|
|
href && (location.href = href);
|
|
};
|
|
});
|
|
|
|
if (jQuery(".fold-btn-container").length) {
|
|
jQuery(".fold-btn-container").on("click", function() {
|
|
|
|
const container = jQuery(".container");
|
|
|
|
if (container.hasClass("on")) {
|
|
|
|
container.removeClass("on");
|
|
jQuery(".side-nav .side-menu").fancytree("option", "autoCollapse", false);
|
|
|
|
} else {
|
|
|
|
container.addClass("on");
|
|
jQuery(".side-nav .side-menu").fancytree("option", "autoCollapse", true);
|
|
|
|
if (jQuery(".side-nav .side-menu").fancytree("instance")) {
|
|
jQuery.ui.fancytree.getTree(".side-nav .side-menu").expandAll(false);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},
|
|
});
|
|
};
|
|
|
|
const cont_hfix = function () {
|
|
jQuery(".cont_hfix").css("height", 0);
|
|
let win_h = jQuery(window).outerHeight();
|
|
jQuery(".cont_hfix")
|
|
.toArray()
|
|
.forEach((tgt) => {
|
|
let cont_y = jQuery(tgt).offset().top;
|
|
let cont_height = win_h - cont_y - 20;
|
|
jQuery(tgt).css("height", cont_height);
|
|
});
|
|
};
|
|
|
|
const cont_hfix_page = function () {
|
|
jQuery(".cont_hfix_page").css("height", 0);
|
|
let win_h = jQuery(window).outerHeight();
|
|
jQuery(".cont_hfix_page")
|
|
.toArray()
|
|
.forEach((tgt) => {
|
|
let cont_y = jQuery(tgt).offset().top;
|
|
let cont_height = win_h - cont_y - 20;
|
|
jQuery(tgt).css("height", cont_height);
|
|
});
|
|
};
|
|
|
|
const show_spinner = function () {
|
|
document.getElementById("loading_div").classList.remove("d-none");
|
|
};
|
|
|
|
const hide_spinner = function () {
|
|
document.getElementById("loading_div").classList.add("d-none");
|
|
};
|
|
|
|
const pop_filedown = function (file_url, file_ext) {
|
|
let preview_type = [
|
|
"pdf",
|
|
"jpg",
|
|
"jpeg",
|
|
"png",
|
|
"gif",
|
|
"tiff",
|
|
"jfif",
|
|
"bmp",
|
|
];
|
|
if (preview_type.indexOf(file_ext) !== -1) {
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.php",
|
|
"#pop_file_preview",
|
|
function (loadHtml) {
|
|
previewModal = kuls_modal(loadHtml, {
|
|
resizable: true,
|
|
dontclose: true,
|
|
});
|
|
if (file_ext == "pdf") {
|
|
document.querySelector("#preview_frame").src =
|
|
"/include/vendor/pdfjs/web/viewer.html?file=" +
|
|
encodeURIComponent(file_url);
|
|
} else {
|
|
document.querySelector("#preview_frame").src =
|
|
"/include/vendor/pdfjs/web/imgviewer.php?file=" +
|
|
encodeURIComponent(file_url);
|
|
}
|
|
}
|
|
);
|
|
} else {
|
|
location.href = file_url;
|
|
}
|
|
};
|
|
|
|
jQuery(document).ready(function () {
|
|
if (jQuery(".side-nav").length) {
|
|
side_menu_load(menu_code);
|
|
}
|
|
|
|
cont_hfix();
|
|
cont_hfix_page();
|
|
});
|
|
|
|
jQuery(window).on("resize", function () {
|
|
cont_hfix();
|
|
cont_hfix_page();
|
|
});
|
|
|
|
jQuery("#log_out_btn").on("click", function () {
|
|
kuls_confirm("로그아웃", "정말 로그아웃 하시겠습니까?", () => {
|
|
logout();
|
|
});
|
|
});
|
|
|
|
jQuery(document).on("focus", ".timepicker", function (e) {
|
|
jQuery(e.target).timepicker({
|
|
show2400: true,
|
|
timeFormat: "H:i",
|
|
showOn: ["click"],
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// if (document.getElementById("hamburger_icon")) {
|
|
// document.getElementById("hamburger_icon").addEventListener("click", () => {
|
|
// if (
|
|
// document.getElementById("frame_main").classList.contains("full_width")
|
|
// ) {
|
|
// document.getElementById("frame_main").classList.remove("full_width");
|
|
// } else {
|
|
// document.getElementById("frame_main").classList.add("full_width");
|
|
// }
|
|
// });
|
|
// }
|
|
|
|
/* tabulator 페이징 처리
|
|
* 1. sp 변경
|
|
* 2.1 ajax.php 에 $params 내 page 변수 추가,
|
|
* 2.2 ajax.php 에 $row['LIST_NUM'] 추가
|
|
* 3.1 tabulator 옵션에 footerElement 추가
|
|
* 3.2 filter 무효화
|
|
* 3.3 #bntListSearch 조회버튼 및 이벤트 추가
|
|
* 3.4 getMainList ajax 에 page 옵션추가
|
|
* 3.5 success에 putPagiNation({}) 실행추가
|
|
* 4. sort 기능
|
|
* 4.1 columnDefaults //컬럼 공통 규칙에 sorter:()=>{}, headerSort: false, 속성부여
|
|
* 4.2 columnSort 함수 추가 확인
|
|
* 4.3 headerClick 이벤트에 columnSort 함수 설정
|
|
* 4.4 sort 가능한 컬럼에 headerSort: true 속성 부여
|
|
* */
|
|
const putPagiNation = function (conf) {
|
|
if (!conf.TARGET) return false;
|
|
conf.NOW_PAGE = conf.NOW_PAGE || 1;
|
|
conf.PREB_PAGE = conf.PREB_PAGE || 1;
|
|
conf.NEXB_PAGE = conf.NEXB_PAGE || 1;
|
|
conf.LAST_PAGE = conf.LAST_PAGE || 1;
|
|
conf.PAGE_LISTS = conf.PAGE_LISTS || [1];
|
|
|
|
let ul = document.createElement("ul");
|
|
ul.className = "pagination justify-content-center align-items-center";
|
|
|
|
ul.appendChild(
|
|
putPageButton({
|
|
...conf,
|
|
NOW_PAGE: 1,
|
|
text: '<i class="fa-solid fa-angles-left"></i>',
|
|
})
|
|
);
|
|
|
|
ul.appendChild(
|
|
putPageButton({
|
|
...conf,
|
|
NOW_PAGE: conf.PREB_PAGE,
|
|
class: "mr-3",
|
|
text: '<i class="fa-solid fa-angle-left"></i>',
|
|
})
|
|
);
|
|
|
|
for (let i = 0; i < conf.PAGE_LISTS.length; i++) {
|
|
ul.appendChild(
|
|
putPageButton({
|
|
...conf,
|
|
NOW_PAGE: conf.PAGE_LISTS[i],
|
|
active: conf.PAGE_LISTS[i] == conf.NOW_PAGE,
|
|
text: conf.PAGE_LISTS[i],
|
|
})
|
|
);
|
|
}
|
|
|
|
ul.appendChild(
|
|
putPageButton({
|
|
...conf,
|
|
NOW_PAGE: conf.NEXB_PAGE,
|
|
class: "ml-3",
|
|
text: '<i class="fa-solid fa-angle-right"></i>',
|
|
})
|
|
);
|
|
|
|
ul.appendChild(
|
|
putPageButton({
|
|
...conf,
|
|
NOW_PAGE: conf.LAST_PAGE,
|
|
text: '<i class="fa-solid fa-angles-right"></i>',
|
|
})
|
|
);
|
|
|
|
document.querySelector(conf.TARGET).innerHTML = "";
|
|
document.querySelector(conf.TARGET).appendChild(ul);
|
|
};
|
|
|
|
const putPageButton = function (conf) {
|
|
let li = document.createElement("li");
|
|
let a = document.createElement("a");
|
|
let span = document.createElement("span");
|
|
span.className = "f_page";
|
|
a.className = "pn_link npage btn btn-outline-secondary";
|
|
["click", "keypress"].forEach((evt) =>
|
|
a.addEventListener(evt, () => {
|
|
conf.callback(conf);
|
|
})
|
|
);
|
|
|
|
if (conf.active) {
|
|
a.classList.add("active");
|
|
}
|
|
span.innerHTML = conf.text;
|
|
a.appendChild(span);
|
|
li.appendChild(a);
|
|
conf.class && li.classList.add(conf.class);
|
|
return li;
|
|
};
|
|
|
|
|
|
|
|
// const popItemList = function (columns, tabrow) {
|
|
// // 팝업 템플릿 로드 후 모달 출력
|
|
// vnLoad("", "/ksvc/inc/popup.inc.php", "#pop_item_search", function (loadHtml) {
|
|
// let partnerModal = kuls_modal(loadHtml);
|
|
|
|
// const fields = [
|
|
// {
|
|
// formatter: "rownum",
|
|
// title: "No",
|
|
// width: 40,
|
|
// headerSort: false,
|
|
// hozAlign: "center",
|
|
// },
|
|
// { field: "ITEM_CD", title: "품목코드", width: 80 },
|
|
// ];
|
|
|
|
// const table_pop_item_search = new Tabulator("#popItemList", {
|
|
// layout: "fitColumns",
|
|
// data: [], // 기본 데이터
|
|
// height: "100%",
|
|
// columns: fields, // 컬럼 설정
|
|
// columnDefaults: {
|
|
// vertAlign: "middle",
|
|
// hozAlign: "center",
|
|
// resizable: "header", // Resize 는 헤더에서만 가능
|
|
// headerHozAlign: "center", // 헤더 정렬
|
|
// headerSortTristate: true, // 정렬 => 정/역/초기화
|
|
// },
|
|
// headerSortElement: "<i class='bi'></i>", // 정렬 아이콘
|
|
// });
|
|
|
|
// const getPopItemList = function () {
|
|
// // 리스트 불러오기
|
|
// ajax_json({
|
|
// url: "/ksvc/inc/common.ajax.php",
|
|
// data: { mode: "getItemList" },
|
|
// success: function (data) {
|
|
// if (data.code) {
|
|
// table_pop_item_search.setData(data.data);
|
|
// }
|
|
// },
|
|
// error: function (request, status, error) {
|
|
// // kuls_alert(error.message);
|
|
// },
|
|
// });
|
|
// };
|
|
|
|
// // const setTableFilter = function () {
|
|
// // // 검색어 필터 적용
|
|
// // let stxt = document.querySelector("#awn-popup-wrapper input[name=stxt]").value.trim();
|
|
// // let sgrp = document.querySelector("#awn-popup-wrapper select[name=sgrp]").value.trim();
|
|
// // table_pop_item_search.setFilter(function (data) {
|
|
// // return (
|
|
// // (!sgrp || data["SALES_GRP"] === sgrp) &&
|
|
// // (!stxt ||
|
|
// // data["ITEM_CD"].search(new RegExp(stxt, "i")) !== -1)
|
|
// // );
|
|
// // }, "=", true);
|
|
// // };
|
|
|
|
// const setPopPartnerData = function (e, tgt) {
|
|
// // Row 더블클릭 실행
|
|
// let row = tgt._row;
|
|
// if (tabrow) {
|
|
// let uptjson = { _STATUS_: tabrow.getData()["_STATUS_"] || "U" };
|
|
// Object.keys(columns).forEach((key) => {
|
|
// if (key === "tgt_id") {
|
|
// uptjson[columns[key]] = row.data["ITEM_CD"];
|
|
// }
|
|
// });
|
|
// tabrow.updateData(uptjson);
|
|
// } else {
|
|
// if (document.querySelector(columns.tgt_id))
|
|
// document.querySelector(columns.tgt_id).value = row.data["ITEM_CD"];
|
|
|
|
// if (document.querySelector(columns.tgt_name))
|
|
// document.querySelector(columns.tgt_name).dispatchEvent(new Event("change"));
|
|
// }
|
|
// partnerModal.delete();
|
|
// };
|
|
|
|
// document.querySelector("#awn-popup-wrapper [name=stxt]").addEventListener("keyup", function () {
|
|
// // 검색어 입력 이벤트
|
|
// setTableFilter();
|
|
// });
|
|
|
|
// // document.querySelector("#awn-popup-wrapper .btnPopSearch").addEventListener("click", getPopPartnerList);
|
|
// // document.querySelector("#awn-popup-wrapper .btnPopInit").addEventListener("click", initPopPartnerData);
|
|
|
|
// table_pop_item_search.on("rowDblClick", setPopPartnerData); // Row 더블클릭 이벤트
|
|
// table_pop_item_search.on("tableBuilt", getPopItemList); // 초기 데이터 불러오기 이벤트
|
|
// });
|
|
// };
|
|
|
|
|
|
|
|
const popPartnerList = function (columns, tabrow) {
|
|
//tabrow 존재하면 (tabulator 필드명), 그외는 거래처코드 selector=>tgt_id, 거래처명 selector => 거래처명
|
|
//팝업 템플릿 로드 후 모달 출력
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.inc.php",
|
|
"#pop_partner_search",
|
|
function (loadHtml) {
|
|
let partnerModal = kuls_modal(loadHtml);
|
|
|
|
let selecttag = document.querySelector("#sgrp");
|
|
selecttag.options.length = 0;
|
|
let opt = document.createElement("option");
|
|
opt.value = "";
|
|
opt.text = "- 전 체 -";
|
|
selecttag.add(opt);
|
|
Object.keys(varsSALES_GRP).forEach((key) => {
|
|
opt = document.createElement("option");
|
|
opt.value = key;
|
|
opt.text = varsSALES_GRP[key];
|
|
selecttag.add(opt);
|
|
});
|
|
|
|
const fields = [
|
|
{
|
|
formatter: "rownum",
|
|
title: "No",
|
|
width: 40,
|
|
headerSort: false,
|
|
hozAlign: "center",
|
|
},
|
|
{
|
|
field: "SALES_GRP",
|
|
title: "영업구분",
|
|
width: 80,
|
|
formatter: (cell) => varsSALES_GRP[cell.getValue()],
|
|
},
|
|
{ field: "BP_CD", title: "거래처", width: 80 },
|
|
{ field: "BP_NM", title: "거래처명", width: 150 },
|
|
{ field: "REPRESN_NM", title: "대표자명", width: 100 },
|
|
{ field: "CURRENCY_CD", title: "거래화폐", width: 90 },
|
|
{
|
|
field: "PUR_FLG",
|
|
title: "매입처",
|
|
width: 70,
|
|
formatter: tb_common_funtions.formatterSelCircleIcon,
|
|
},
|
|
{
|
|
field: "SAL_FLG",
|
|
title: "매출처",
|
|
width: 70,
|
|
formatter: tb_common_funtions.formatterSelCircleIcon,
|
|
},
|
|
];
|
|
|
|
const table_pop_partner_search = new Tabulator("#pop_partner_list", {
|
|
layout: "fitColumns",
|
|
data: [], //기본 데이터
|
|
height: "100%",
|
|
columns: fields, //컬럼 설정
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //정렬 => 정/역/초기화
|
|
},
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
});
|
|
|
|
const getPopPartnerList = function () {
|
|
//리스트 불러오기
|
|
ajax_json({
|
|
url: "/ksvc/inc/common.ajax.php",
|
|
data: { mode: "getPartnerList" },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
table_pop_partner_search.setData(data.data);
|
|
if (columns.tgt_filter && columns.txt_filter) {
|
|
document.querySelector(columns.tgt_filter).value =
|
|
columns.txt_filter;
|
|
setTableFilter();
|
|
}
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
//kuls_alert(error.message);
|
|
},
|
|
});
|
|
};
|
|
const setTableFilter = function () {
|
|
//검색어 필터 적용
|
|
let stxt = trim(
|
|
document.querySelector("#awn-popup-wrapper input[name=stxt]").value
|
|
);
|
|
let sgrp = trim(
|
|
document.querySelector("#awn-popup-wrapper select[name=sgrp]").value
|
|
);
|
|
table_pop_partner_search.setFilter(
|
|
function (data) {
|
|
return (
|
|
(!sgrp || data["SALES_GRP"] === sgrp) &&
|
|
(!stxt ||
|
|
data["BP_CD"].search(RegExp(stxt, "is")) !== -1 ||
|
|
data["BP_NM"].search(RegExp(stxt, "is")) !== -1 ||
|
|
data["BP_FULL_NM"].search(RegExp(stxt, "is")) !== -1)
|
|
);
|
|
},
|
|
"=",
|
|
true
|
|
);
|
|
};
|
|
const setPopPartnerData = function (e, tgt) {
|
|
//Row 더블클릭 실행
|
|
let row = tgt._row;
|
|
if (tabrow) {
|
|
let uptjson = { _STATUS_: tabrow.getData()["_STATUS_"] || "U" };
|
|
Object.keys(columns).forEach((key) => {
|
|
switch (key) {
|
|
case "tgt_id":
|
|
uptjson[columns[key]] = row.data["BP_CD"];
|
|
break;
|
|
case "tgt_name":
|
|
uptjson[columns[key]] = row.data["BP_NM"];
|
|
break;
|
|
case "tgt_full_name":
|
|
uptjson[columns[key]] =
|
|
row.data["BP_FULL_NM"] || row.data["BP_NM"];
|
|
break;
|
|
case "tgt_addr":
|
|
uptjson[columns[key]] = row.data["ADDR1"];
|
|
break;
|
|
case "tgt_currency":
|
|
uptjson[columns[key]] = row.data["CURRENCY_CD"];
|
|
break;
|
|
case "tgt_chid":
|
|
uptjson[columns[key]] = row.data["BP_PRSN_ID"];
|
|
break;
|
|
case "tgt_chname":
|
|
uptjson[columns[key]] = row.data["BP_PRSN_NM"];
|
|
break;
|
|
case "tgt_chmail":
|
|
uptjson[columns[key]] = row.data["BP_PRSN_EMAIL"];
|
|
break;
|
|
case "tgt_chtel":
|
|
uptjson[columns[key]] = row.data["BP_PRSN_TEL_NO"];
|
|
break;
|
|
case "tgt_chcell":
|
|
uptjson[columns[key]] = row.data["BP_PRSN_CELL_NO"];
|
|
break;
|
|
case "tgt_chfax":
|
|
uptjson[columns[key]] = row.data["BP_PRSN_FAX_NO"];
|
|
break;
|
|
case "tgt_portnm":
|
|
uptjson[columns[key]] = row.data["PORT_NM"];
|
|
break;
|
|
case "tgt_sales_grp":
|
|
uptjson[columns[key]] = row.data["SALES_GRP"];
|
|
break;
|
|
}
|
|
});
|
|
tabrow.updateData(uptjson);
|
|
// if( tgt_id && tabrow.getCell(tgt_id) ) tabrow.getCell(tgt_id).setValue(row.data['BP_CD']);
|
|
// if( tgt_name && tabrow.getCell(tgt_name)) tabrow.getCell(tgt_name).setValue(row.data['BP_NM']);
|
|
// if( tgt_addr && tabrow.getCell(tgt_addr)) tabrow.getCell(tgt_addr).setValue(row.data['ADDR1']);
|
|
// if( tgt_currency && tabrow.getCell(tgt_currency)) tabrow.getCell(tgt_currency).setValue(row.data['CURRENCY_CD']);
|
|
} else {
|
|
if (document.querySelector(columns.tgt_id))
|
|
document.querySelector(columns.tgt_id).value = row.data["BP_CD"];
|
|
if (document.querySelector(columns.tgt_name))
|
|
document.querySelector(columns.tgt_name).value = row.data["BP_NM"];
|
|
if (document.querySelector(columns.tgt_full_name))
|
|
document.querySelector(columns.tgt_full_name).value =
|
|
row.data["BP_FULL_NM"] || row.data["BP_NM"];
|
|
if (document.querySelector(columns.tgt_addr))
|
|
document.querySelector(columns.tgt_addr).value = row.data["ADDR1"];
|
|
if (document.querySelector(columns.tgt_currency))
|
|
document.querySelector(columns.tgt_currency).value =
|
|
row.data["CURRENCY_CD"];
|
|
if (document.querySelector(columns.tgt_chid))
|
|
document.querySelector(columns.tgt_chid).value =
|
|
row.data["BP_PRSN_ID"];
|
|
if (document.querySelector(columns.tgt_chname))
|
|
document.querySelector(columns.tgt_chname).value =
|
|
row.data["BP_PRSN_NM"];
|
|
if (document.querySelector(columns.tgt_chmail))
|
|
document.querySelector(columns.tgt_chmail).value =
|
|
row.data["BP_PRSN_EMAIL"];
|
|
if (document.querySelector(columns.tgt_chtel))
|
|
document.querySelector(columns.tgt_chtel).value =
|
|
row.data["BP_PRSN_TEL_NO"];
|
|
if (document.querySelector(columns.tgt_chcell))
|
|
document.querySelector(columns.tgt_chcell).value =
|
|
row.data["BP_PRSN_CELL_NO"];
|
|
if (document.querySelector(columns.tgt_chfax))
|
|
document.querySelector(columns.tgt_chfax).value =
|
|
row.data["BP_PRSN_FAX_NO"];
|
|
if (document.querySelector(columns.tgt_portnm))
|
|
document.querySelector(columns.tgt_portnm).value =
|
|
row.data["PORT_NM"];
|
|
if (document.querySelector(columns.tgt_sales_grp))
|
|
document.querySelector(columns.tgt_sales_grp).value =
|
|
row.data["SALES_GRP"];
|
|
|
|
document.querySelector(columns.tgt_name) &&
|
|
document
|
|
.querySelector(columns.tgt_name)
|
|
.dispatchEvent(new Event("change"));
|
|
}
|
|
partnerModal.delete();
|
|
};
|
|
const initPopPartnerData = function () {
|
|
//Row 더블클릭 실행
|
|
if (tabrow) {
|
|
kuls_warning("거래처는 필수항목 입니다.");
|
|
} else {
|
|
if (document.querySelector(columns.tgt_id))
|
|
document.querySelector(columns.tgt_id).value = "";
|
|
if (document.querySelector(columns.tgt_name))
|
|
document.querySelector(columns.tgt_name).value = "";
|
|
if (document.querySelector(columns.tgt_addr))
|
|
document.querySelector(columns.tgt_addr).value = "";
|
|
if (document.querySelector(columns.tgt_currency))
|
|
document.querySelector(columns.tgt_addr).value = "";
|
|
if (document.querySelector(columns.tgt_chname))
|
|
document.querySelector(columns.tgt_chname).value = "";
|
|
if (document.querySelector(columns.tgt_chmail))
|
|
document.querySelector(columns.tgt_chmail).value = "";
|
|
if (document.querySelector(columns.tgt_chtel))
|
|
document.querySelector(columns.tgt_chtel).value = "";
|
|
if (document.querySelector(columns.tgt_chcell))
|
|
document.querySelector(columns.tgt_chcell).value = "";
|
|
if (document.querySelector(columns.tgt_chfax))
|
|
document.querySelector(columns.tgt_chfax).value = "";
|
|
if (document.querySelector(columns.tgt_portnm))
|
|
document.querySelector(columns.tgt_portnm).value = "";
|
|
}
|
|
partnerModal.delete();
|
|
};
|
|
|
|
//document.querySelector("#awn-popup-wrapper .btnPopSearch").addEventListener("click",function() { //조회버튼 클릭 이벤트
|
|
// getPopPartnerList();
|
|
//});
|
|
//document.querySelector("#awn-popup-wrapper .btnPopInit").addEventListener("click",function() { //조회버튼 클릭 이벤트
|
|
// initPopPartnerData();
|
|
//});
|
|
document
|
|
.querySelector("#awn-popup-wrapper [name=stxt]")
|
|
.addEventListener("keyup", function () {
|
|
//검색어 입력 이벤트
|
|
setTableFilter();
|
|
});
|
|
document
|
|
.querySelector("#awn-popup-wrapper [name=sgrp]")
|
|
.addEventListener("change", function () {
|
|
//영업분류 변경 이벤트
|
|
setTableFilter();
|
|
});
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#awn-popup-wrapper #ptReset")
|
|
.addEventListener(evt, function () {
|
|
//검색어 입력 이벤트
|
|
initPopPartnerData();
|
|
})
|
|
);
|
|
|
|
table_pop_partner_search.on("rowDblClick", setPopPartnerData); //Row 더블클릭 이벤트
|
|
table_pop_partner_search.on("tableBuilt", function () {
|
|
//초기 데이터 불러오기 이벤트
|
|
getPopPartnerList();
|
|
});
|
|
}
|
|
);
|
|
};
|
|
|
|
const popBizareaList = function (tgt_id, tgt_name, tabrow) {
|
|
//tabrow 존재하면 (tabulator 필드명), 그외는 거래처코드 selector=>tgt_id, 거래처명 selector => 거래처명
|
|
//팝업 템플릿 로드 후 모달 출력
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.inc.php",
|
|
"#pop_bizarea_search",
|
|
function (loadHtml) {
|
|
let bizareaModal = kuls_modal(loadHtml);
|
|
|
|
const fields = [
|
|
{
|
|
formatter: "rownum",
|
|
title: "No",
|
|
width: 50,
|
|
headerSort: false,
|
|
hozAlign: "center",
|
|
},
|
|
{ field: "BIZ_AREA_CD", title: "사업장코드", width: 100 },
|
|
{ field: "BIZ_AREA_NM", title: "사업장명", width: 160 },
|
|
{ field: "HQ_FLG", title: "본사구분", width: 90 },
|
|
{ field: "WORK_STD_TIME", title: "기준시간", width: 90 },
|
|
{ field: "STD_CURRENCY_CD", title: "기준화폐", width: 90 },
|
|
];
|
|
|
|
const table_pop_bizarea_search = new Tabulator("#pop_bizarea_list", {
|
|
layout: "fitColumns",
|
|
data: [], //기본 데이터
|
|
height: "100%",
|
|
columns: fields, //컬럼 설정
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //정렬 => 정/역/초기화
|
|
},
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
});
|
|
|
|
const getPopBizareaList = function () {
|
|
//리스트 불러오기
|
|
ajax_json({
|
|
url: "/ksvc/inc/common.ajax.php",
|
|
data: { mode: "getBizareaList" },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
table_pop_bizarea_search.setData(data.data);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
//kuls_alert(error.message);
|
|
},
|
|
});
|
|
};
|
|
const setTableFilter = function () {
|
|
//검색어 필터 적용
|
|
let stxt = trim(
|
|
document.querySelector("#awn-popup-wrapper input[name=stxt]").value
|
|
);
|
|
table_pop_bizarea_search.setFilter(
|
|
function (data) {
|
|
return (
|
|
!stxt ||
|
|
data["BP_CD"].search(RegExp(stxt, "is")) !== -1 ||
|
|
data["BP_NM"].search(RegExp(stxt, "is")) !== -1 ||
|
|
data["BP_FULL_NM"].search(RegExp(stxt, "is")) !== -1
|
|
);
|
|
},
|
|
"=",
|
|
true
|
|
);
|
|
};
|
|
const setPopBizareaData = function (e, tgt) {
|
|
//Row 더블클릭 실행
|
|
let row = tgt._row;
|
|
if (tabrow) {
|
|
tabrow.updateData({
|
|
[tgt_id]: row.data["BIZ_AREA_CD"],
|
|
[tgt_name]: row.data["BIZ_AREA_NM"],
|
|
_STATUS_: tabrow.getData()["_STATUS_"] || "U",
|
|
});
|
|
} else {
|
|
if (document.querySelector(tgt_id))
|
|
document.querySelector(tgt_id).value = row.data["BIZ_AREA_CD"];
|
|
if (document.querySelector(tgt_name))
|
|
document.querySelector(tgt_name).value = row.data["BIZ_AREA_NM"];
|
|
}
|
|
bizareaModal.delete();
|
|
};
|
|
const initPopBizareaData = function () {
|
|
//Row 더블클릭 실행
|
|
if (tabrow) {
|
|
kuls_warning("Bizarea is neccessary field!");
|
|
} else {
|
|
if (document.querySelector(tgt_id))
|
|
document.querySelector(tgt_id).value = "";
|
|
if (document.querySelector(tgt_name))
|
|
document.querySelector(tgt_name).value = "";
|
|
}
|
|
bizareaModal.delete();
|
|
};
|
|
|
|
//document.querySelector("#awn-popup-wrapper .btnPopSearch").addEventListener("click",function() { //조회버튼 클릭 이벤트
|
|
// getPopBizareaList();
|
|
//});
|
|
//document.querySelector("#awn-popup-wrapper .btnPopInit").addEventListener("click",function() { //조회버튼 클릭 이벤트
|
|
// initPopBizareaData();
|
|
//});
|
|
document
|
|
.querySelector("#awn-popup-wrapper [name=stxt]")
|
|
.addEventListener("keyup", function () {
|
|
//검색어 입력 이벤트
|
|
setTableFilter();
|
|
});
|
|
|
|
table_pop_bizarea_search.on("rowDblClick", setPopBizareaData); //Row 더블클릭 이벤트
|
|
table_pop_bizarea_search.on("tableBuilt", function () {
|
|
//초기 데이터 불러오기 이벤트
|
|
getPopBizareaList();
|
|
});
|
|
}
|
|
);
|
|
};
|
|
|
|
const popMemberList = function (tgt_id, tgt_name, tabrow) {
|
|
//tabrow 존재하면 (tabulator 필드명), 그외는 거래처코드 selector=>tgt_id, 거래처명 selector => 거래처명
|
|
//팝업 템플릿 로드 후 모달 출력
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.inc.php",
|
|
"#pop_member_search",
|
|
function (loadHtml) {
|
|
let bizareaModal = kuls_modal(loadHtml);
|
|
|
|
const fields = [
|
|
{
|
|
formatter: "rownum",
|
|
title: "No",
|
|
width: 50,
|
|
headerSort: false,
|
|
hozAlign: "center",
|
|
},
|
|
{ field: "EMP_NO", title: "사 번", width: 100 },
|
|
{ field: "EMP_NM", title: "이 름", width: 160 },
|
|
{ field: "DEPT_NM", title: "부서명", width: 90 },
|
|
{ field: "BIZ_AREA_NM", title: "사업장", width: 90 },
|
|
];
|
|
|
|
const table_pop_bizarea_search = new Tabulator("#pop_bizarea_list", {
|
|
layout: "fitColumns",
|
|
data: [], //기본 데이터
|
|
height: "100%",
|
|
columns: fields, //컬럼 설정
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //정렬 => 정/역/초기화
|
|
},
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
});
|
|
|
|
const getPopBizareaList = function () {
|
|
//리스트 불러오기
|
|
ajax_json({
|
|
url: "/ksvc/inc/common.ajax.php",
|
|
data: { mode: "getBizareaList" },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
table_pop_bizarea_search.setData(data.data);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
//kuls_alert(error.message);
|
|
},
|
|
});
|
|
};
|
|
const setTableFilter = function () {
|
|
//검색어 필터 적용
|
|
let stxt = trim(
|
|
document.querySelector("#awn-popup-wrapper input[name=stxt]").value
|
|
);
|
|
table_pop_bizarea_search.setFilter(
|
|
function (data) {
|
|
return (
|
|
!stxt ||
|
|
data["BP_CD"].search(RegExp(stxt, "is")) !== -1 ||
|
|
data["BP_NM"].search(RegExp(stxt, "is")) !== -1 ||
|
|
data["BP_FULL_NM"].search(RegExp(stxt, "is")) !== -1
|
|
);
|
|
},
|
|
"=",
|
|
true
|
|
);
|
|
};
|
|
const setPopBizareaData = function (e, tgt) {
|
|
//Row 더블클릭 실행
|
|
let row = tgt._row;
|
|
if (tabrow) {
|
|
tabrow.updateData({
|
|
[tgt_id]: row.data["BIZ_AREA_CD"],
|
|
[tgt_name]: row.data["BIZ_AREA_NM"],
|
|
_STATUS_: tabrow.getData()["_STATUS_"] || "U",
|
|
});
|
|
} else {
|
|
if (document.querySelector(tgt_id))
|
|
document.querySelector(tgt_id).value = row.data["BIZ_AREA_CD"];
|
|
if (document.querySelector(tgt_name))
|
|
document.querySelector(tgt_name).value = row.data["BIZ_AREA_NM"];
|
|
}
|
|
bizareaModal.delete();
|
|
};
|
|
const initPopBizareaData = function () {
|
|
//Row 더블클릭 실행
|
|
if (tabrow) {
|
|
kuls_warning("Bizarea is neccessary field!");
|
|
} else {
|
|
if (document.querySelector(tgt_id))
|
|
document.querySelector(tgt_id).value = "";
|
|
if (document.querySelector(tgt_name))
|
|
document.querySelector(tgt_name).value = "";
|
|
}
|
|
bizareaModal.delete();
|
|
};
|
|
|
|
//document.querySelector("#awn-popup-wrapper .btnPopSearch").addEventListener("click",function() { //조회버튼 클릭 이벤트
|
|
// getPopBizareaList();
|
|
//});
|
|
//document.querySelector("#awn-popup-wrapper .btnPopInit").addEventListener("click",function() { //조회버튼 클릭 이벤트
|
|
// initPopBizareaData();
|
|
//});
|
|
document
|
|
.querySelector("#awn-popup-wrapper [name=stxt]")
|
|
.addEventListener("keyup", function () {
|
|
//검색어 입력 이벤트
|
|
setTableFilter();
|
|
});
|
|
|
|
table_pop_bizarea_search.on("rowDblClick", setPopBizareaData); //Row 더블클릭 이벤트
|
|
table_pop_bizarea_search.on("tableBuilt", function () {
|
|
//초기 데이터 불러오기 이벤트
|
|
getPopBizareaList();
|
|
});
|
|
}
|
|
);
|
|
};
|
|
|
|
const popDeptListLive = function (tgt_id, tgt_name, tab) {
|
|
//팝업 템플릿 로드 후 모달 출력
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.inc.php",
|
|
"#pop_dept_search",
|
|
function (loadHtml) {
|
|
let bizareaModal = kuls_modal(loadHtml);
|
|
document.querySelector(".awn-popup-confirm.awn-dept .s_fld").innerHTML =
|
|
""; //사업장 Select 태그 제거
|
|
let row = tab._row;
|
|
let tree_data = tab.getTable().getData();
|
|
let row_data = row.getData();
|
|
let BIZ_AREA_CD = row_data["BIZ_AREA_CD"];
|
|
if (!BIZ_AREA_CD) {
|
|
kuls_alert("사업장 코드를 선택하지 않았습니다.");
|
|
return;
|
|
}
|
|
|
|
jQuery("#pop_dept_tree").fancytree({
|
|
clickFolderMode: 3,
|
|
source: tree_by_parent(tree_data, "DEPT_CD", "PAR_DEPT_CD", ""),
|
|
dblclick: function (event, data) {
|
|
let node = data.node;
|
|
if (
|
|
("|" + node.data["DEPT_PATH_CD"] + "|").indexOf(
|
|
"|" + row.data["DEPT_CD"] + "|"
|
|
) !== -1
|
|
) {
|
|
kuls_alert("해당부서 또는 하위부서를 상위부서로 선택하였습니다.");
|
|
return false;
|
|
}
|
|
row.updateData({
|
|
[tgt_id]: node.data["DEPT_CD"],
|
|
[tgt_name]: node.data["DEPT_NM"],
|
|
_STATUS_: row.getData()["_STATUS_"] || "U",
|
|
});
|
|
bizareaModal.delete();
|
|
},
|
|
});
|
|
}
|
|
);
|
|
};
|
|
|
|
/* 위는 수정/추가가 반영되는 라이브 상태로 진행되며, 아래 코드는 DB 내용만 가져오는것. */
|
|
const popDeptList = function (tgt_id, tgt_name, tgt_intnl, BIZ_AREA_CD, tab) {
|
|
//팝업 템플릿 로드 후 모달 출력
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.inc.php",
|
|
"#pop_dept_search",
|
|
function (loadHtml) {
|
|
let bizareaModal = kuls_modal(loadHtml);
|
|
let row = tab._row;
|
|
const cfunc = function (data) {
|
|
let node = data.node;
|
|
row.updateData({
|
|
[tgt_id]: node.data["DEPT_CD"],
|
|
[tgt_name]: node.data["DEPT_NM"],
|
|
[tgt_intnl]: node.data["INTNL_DEPT_CD"],
|
|
_STATUS_: row.getData()["_STATUS_"] || "U",
|
|
});
|
|
bizareaModal.delete();
|
|
};
|
|
ajax_json({
|
|
url: "/inc/common.ajax.php",
|
|
type: "POST",
|
|
data: {
|
|
mode: "getBizareaList",
|
|
},
|
|
success: function (data) {
|
|
if (data.code) {
|
|
let selecttag = document.querySelector(
|
|
".s_fld select[name=BIZ_AREA_CD]"
|
|
);
|
|
selecttag.options.length = 0;
|
|
data.data.forEach((row) => {
|
|
let opt = document.createElement("option");
|
|
opt.value = row["BIZ_AREA_CD"];
|
|
opt.text = row["BIZ_AREA_NM"];
|
|
selecttag.add(opt);
|
|
});
|
|
selecttag.value = BIZ_AREA_CD;
|
|
}
|
|
},
|
|
error: function (request, status, error) {},
|
|
complete: function (request, status) {
|
|
getDeptList(tgt_id, tgt_name, BIZ_AREA_CD, cfunc);
|
|
},
|
|
});
|
|
document
|
|
.querySelector(".s_fld select[name=BIZ_AREA_CD]")
|
|
.addEventListener("change", function () {
|
|
getDeptList(tgt_id, tgt_name, this.value, cfunc);
|
|
});
|
|
}
|
|
);
|
|
};
|
|
|
|
const getDeptList = function (tgt_id, tgt_name, BIZ_AREA_CD, cfunc) {
|
|
document.querySelector(
|
|
".awn-popup-confirm.awn-dept .awn-popup-content"
|
|
).innerHTML = "<div id='pop_dept_tree' class='poptree'></div>";
|
|
ajax_json({
|
|
url: "/inc/common.ajax.php",
|
|
type: "POST",
|
|
data: {
|
|
mode: "getDeptTree",
|
|
BIZ_AREA_CD,
|
|
},
|
|
success: function (data) {
|
|
if (data.code) {
|
|
jQuery("#pop_dept_tree").fancytree({
|
|
clickFolderMode: 3,
|
|
source: tree_by_parent(data.data, "DEPT_CD", "PAR_DEPT_CD", ""),
|
|
dblclick: function (event, data) {
|
|
cfunc && cfunc(data);
|
|
},
|
|
});
|
|
}
|
|
},
|
|
error: function (request, status, error) {},
|
|
complete: function (request, status) {},
|
|
});
|
|
};
|
|
|
|
const popEmployeeList = function (tgt_id, tgt_name, BIZ_AREA_CD, tabrow) {
|
|
//팝업 템플릿 로드 후 모달 출력
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.inc.php",
|
|
"#pop_employee_search",
|
|
function (loadHtml) {
|
|
let bizareaModal = kuls_modal(loadHtml);
|
|
|
|
const cfunc = function (e, tgt) {
|
|
let row = tgt._row;
|
|
if (tabrow) {
|
|
tabrow.updateData({
|
|
[tgt_id]: row.data["EMP_NO"],
|
|
[tgt_name]: row.data["EMP_NM"],
|
|
_STATUS_: tabrow.getData()["_STATUS_"] || "U",
|
|
});
|
|
} else {
|
|
if (document.querySelector(tgt_id))
|
|
document.querySelector(tgt_id).value = row.data["EMP_NO"];
|
|
if (document.querySelector(tgt_name))
|
|
document.querySelector(tgt_name).value = row.data["EMP_NM"];
|
|
}
|
|
bizareaModal.delete();
|
|
};
|
|
ajax_json({
|
|
url: "/inc/common.ajax.php",
|
|
type: "POST",
|
|
data: {
|
|
mode: "getBizareaList",
|
|
},
|
|
success: function (data) {
|
|
if (data.code) {
|
|
let selecttag = document.querySelector(
|
|
".s_fld select[name=BIZ_AREA_CD]"
|
|
);
|
|
selecttag.options.length = 0;
|
|
data.data.forEach((row) => {
|
|
let opt = document.createElement("option");
|
|
opt.value = row["BIZ_AREA_CD"];
|
|
opt.text = row["BIZ_AREA_NM"];
|
|
selecttag.add(opt);
|
|
});
|
|
selecttag.value = BIZ_AREA_CD;
|
|
}
|
|
},
|
|
error: function (request, status, error) {},
|
|
complete: function (request, status) {
|
|
getEmployeeList(tgt_id, tgt_name, BIZ_AREA_CD, cfunc);
|
|
},
|
|
});
|
|
document
|
|
.querySelector(".s_fld select[name=BIZ_AREA_CD]")
|
|
.addEventListener("change", function () {
|
|
getEmployeeList(tgt_id, tgt_name, this.value, cfunc);
|
|
});
|
|
}
|
|
);
|
|
};
|
|
|
|
const getEmployeeList = function (tgt_id, tgt_name, BIZ_AREA_CD, cfunc) {
|
|
const fields = [
|
|
{
|
|
formatter: "rownum",
|
|
title: "No",
|
|
width: 50,
|
|
headerSort: false,
|
|
hozAlign: "center",
|
|
},
|
|
{ field: "EMP_NO", title: "사 번", width: 100 },
|
|
{ field: "EMP_NM", title: "이 름", width: 160 },
|
|
{ field: "DEPT_NM", title: "부서명", width: 120 },
|
|
{ field: "BIZ_AREA_NM", title: "사업장", width: 150 },
|
|
];
|
|
|
|
const table_pop_employee_search = new Tabulator("#pop_employee_list", {
|
|
layout: "fitColumns",
|
|
data: [], //기본 데이터
|
|
height: "100%",
|
|
columns: fields, //컬럼 설정
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //정렬 => 정/역/초기화
|
|
},
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
});
|
|
|
|
const getPopEmployeeList = function () {
|
|
//리스트 불러오기
|
|
ajax_json({
|
|
url: "/ksvc/inc/common.ajax.php",
|
|
data: { mode: "getEmployeeList", BIZ_AREA_CD },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
table_pop_employee_search.setData(data.data);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
//kuls_alert(error.message);
|
|
},
|
|
});
|
|
};
|
|
|
|
table_pop_employee_search.on("rowDblClick", (e, tgt) => {
|
|
cfunc && cfunc(e, tgt);
|
|
}); //Row 더블클릭 이벤트
|
|
table_pop_employee_search.on("tableBuilt", function () {
|
|
//초기 데이터 불러오기 이벤트
|
|
getPopEmployeeList();
|
|
});
|
|
|
|
["change", "keyup"].forEach((evt) =>
|
|
document
|
|
.querySelector(".s_fld input[name=stxt]")
|
|
.addEventListener(evt, function () {
|
|
table_pop_employee_search.setFilter(
|
|
function (data) {
|
|
//필터링
|
|
return (
|
|
true &&
|
|
data.EMP_NM.indexOf(
|
|
document.querySelector(".s_fld input[name=stxt]").value
|
|
) !== -1
|
|
);
|
|
},
|
|
"=",
|
|
true
|
|
);
|
|
})
|
|
);
|
|
};
|
|
|
|
const popBasecodeList = function (tgt_id, tgt_name, Bran_Uid, tabrow, rtgt) {
|
|
//팝업 템플릿 로드 후 모달 출력
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.inc.php",
|
|
"#pop_basecode_search",
|
|
function (loadHtml) {
|
|
let basecodeModal = kuls_modal(loadHtml);
|
|
|
|
if (rtgt) {
|
|
//Routing 전용
|
|
let basecodes = [
|
|
//{Bran_Uid: 'SHAPE_TYPE', Code_Exp: '형상관리'},
|
|
{ Bran_Uid: "ITEM_SPEC", Code_Exp: "스펙항목관리" },
|
|
{ Bran_Uid: "OP_PART", Code_Exp: "가공부위관리" },
|
|
{ Bran_Uid: "INSP_ITEM", Code_Exp: "검사항목관리" },
|
|
];
|
|
|
|
let selecttag = document.querySelector(".s_fld select[name=BASECODE]");
|
|
selecttag.options.length = 0;
|
|
basecodes.forEach((row) => {
|
|
let opt = document.createElement("option");
|
|
opt.value = row["Bran_Uid"];
|
|
opt.text = row["Code_Exp"];
|
|
selecttag.add(opt);
|
|
});
|
|
Bran_Uid = Bran_Uid || basecodes[0].Bran_Uid;
|
|
selecttag.value = Bran_Uid;
|
|
|
|
document
|
|
.querySelector(".s_fld select[name=BASECODE]")
|
|
.addEventListener("change", function () {
|
|
getPopBasecodeList(this.value);
|
|
switch (this.value) {
|
|
case "SHAPE_TYPE":
|
|
tabrow = Tb_funcs_Spec.arefunc;
|
|
break;
|
|
case "ITEM_SPEC":
|
|
tabrow = Tb_funcs_Spec.brefunc;
|
|
break;
|
|
case "OP_PART":
|
|
tabrow = Tb_funcs_Cond.refunc;
|
|
break;
|
|
case "INSP_ITEM":
|
|
tabrow = Tb_funcs_Insp.refunc;
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
const fields = [
|
|
{
|
|
formatter: "rownum",
|
|
title: "No",
|
|
width: "10%",
|
|
minWidth: 50,
|
|
headerSort: false,
|
|
hozAlign: "center",
|
|
},
|
|
{
|
|
field: "Code_Uid",
|
|
title: "코드",
|
|
width: "30%",
|
|
minWidth: 100,
|
|
editor: "input",
|
|
editable: (cell) => {
|
|
let val = cell.getData();
|
|
return val._STATUS_ === "I";
|
|
},
|
|
},
|
|
{
|
|
field: "Code_Val",
|
|
title: "명칭",
|
|
width: "40%",
|
|
minWidth: 160,
|
|
editor: "input",
|
|
},
|
|
{
|
|
field: "Code_Active",
|
|
title: "사용",
|
|
width: "20%",
|
|
minWidth: 60,
|
|
cssClass: "user-editable",
|
|
formatter: tb_common_funtions.formatterToggleboxGreenIcon,
|
|
formatterParams: { checkval: "Y" },
|
|
},
|
|
];
|
|
|
|
const table_pop_basecode_search = new Tabulator("#pop_basecode_list", {
|
|
layout: "fitColumns",
|
|
data: [], //기본 데이터
|
|
height: "100%",
|
|
columns: fields, //컬럼 설정
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //정렬 => 정/역/초기화
|
|
},
|
|
movableRows: true,
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
});
|
|
|
|
const getPopBasecodeList = function (Bran_Uid) {
|
|
//리스트 불러오기
|
|
ajax_json({
|
|
url: "/ksvc/inc/common.ajax.php",
|
|
data: { mode: "getBasecodeList", Bran_Uid },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
table_pop_basecode_search.setData(data.data);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
//kuls_alert(error.message);
|
|
},
|
|
complete: function () {
|
|
setFilter();
|
|
},
|
|
});
|
|
};
|
|
|
|
const setFilter = () => {
|
|
table_pop_basecode_search.setFilter(
|
|
function (data) {
|
|
//필터링
|
|
return (
|
|
true &&
|
|
(!document.getElementById("P_USE_FLG") ||
|
|
!document.getElementById("P_USE_FLG").checked ||
|
|
data.Code_Active === "Y")
|
|
);
|
|
},
|
|
"=",
|
|
true
|
|
);
|
|
};
|
|
|
|
//Row 추가
|
|
const addRow = () => {
|
|
table_pop_basecode_search.addRow({
|
|
_STATUS_: "I",
|
|
Bran_Uid,
|
|
Group_Uid: Bran_Uid,
|
|
Code_Active: "Y",
|
|
});
|
|
};
|
|
|
|
//Cell 클릭 콜백
|
|
const cellClick = (e, tgt) => {
|
|
switch (tgt.getField()) {
|
|
case "Code_Active":
|
|
tgt.setValue(tgt.getValue() == "Y" ? "N" : "Y");
|
|
break;
|
|
}
|
|
};
|
|
|
|
//Cell 변경 콜백
|
|
const cellEdited = (cell) => {
|
|
let _this = this;
|
|
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
|
|
};
|
|
|
|
const putItem = () => {
|
|
let pdata = table_pop_basecode_search.getData();
|
|
let dupdata = pdata.map((data) => data["Code_Uid"]);
|
|
if (
|
|
dupdata.filter((data, idx) => dupdata.indexOf(data) !== idx).length >
|
|
0
|
|
) {
|
|
kuls_alert("코드가 중복됩니다.");
|
|
return false;
|
|
}
|
|
let postdata = {
|
|
mode: "putBasecode",
|
|
reqdata: JSON.stringify(
|
|
table_pop_basecode_search.getData().filter((row) => row._STATUS_)
|
|
),
|
|
};
|
|
ajax_json({
|
|
url: "/ksvc/inc/common.ajax.php",
|
|
data: postdata,
|
|
success: function (data) {
|
|
if (data.code) {
|
|
kuls_success("적용 되었습니다.");
|
|
if (typeof tabrow == "function") {
|
|
tabrow(pdata, null);
|
|
basecodeModal.delete();
|
|
}
|
|
} else {
|
|
kuls_alert(data.mesg);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
kuls_alert(error.message);
|
|
},
|
|
});
|
|
return true;
|
|
};
|
|
|
|
table_pop_basecode_search.on("rowDblClick", (e, tgt) => {
|
|
return false;
|
|
|
|
let row = tgt._row;
|
|
document.ttt = tgt;
|
|
if (typeof tabrow == "function") {
|
|
tabrow(tgt.getTable().getData(), tgt.getData());
|
|
} else if (tabrow) {
|
|
tabrow.updateData({
|
|
[tgt_id]: row.data["Code_Uid"],
|
|
[tgt_name]: row.data["Code_Val"],
|
|
_STATUS_: tabrow.getData()["_STATUS_"] || "U",
|
|
});
|
|
} else {
|
|
if (document.querySelector(tgt_id))
|
|
document.querySelector(tgt_id).value = row.data["Code_Uid"];
|
|
if (document.querySelector(tgt_name))
|
|
document.querySelector(tgt_name).value = row.data["Code_Val"];
|
|
}
|
|
basecodeModal.delete();
|
|
}); //Row 더블클릭 이벤트
|
|
|
|
table_pop_basecode_search.on("cellClick", (e, tgt) => {
|
|
//Tabulator cell Click
|
|
cellEdited && cellClick(e, tgt);
|
|
});
|
|
table_pop_basecode_search.on("cellEdited", (cell) => {
|
|
//Tabulator cell Edited
|
|
cellEdited && cellEdited(cell);
|
|
});
|
|
table_pop_basecode_search.on("rowMoved", (row, a, b) => {
|
|
//Tabulator Row Moved
|
|
let Code_Uid = row.getData()["Code_Uid"];
|
|
let n_idx = row
|
|
.getTable()
|
|
.getData()
|
|
.findIndex((v) => v.Code_Uid === Code_Uid);
|
|
do {
|
|
//현재 이하 순서 변경
|
|
row._row.updateData({
|
|
Code_Idx: ++n_idx,
|
|
_STATUS_: row.getData()["_STATUS_"] || "U",
|
|
});
|
|
} while ((row = row.getNextRow()));
|
|
});
|
|
["click", "keypress"].forEach((evt) =>
|
|
document.querySelector("#btnAddBcode").addEventListener(evt, () => {
|
|
addRow();
|
|
})
|
|
);
|
|
["click", "keypress"].forEach((evt) =>
|
|
document.querySelector("#btnPutBcode").addEventListener(evt, () => {
|
|
putItem();
|
|
})
|
|
);
|
|
["change", "keydown", "keyup"].forEach((evt) =>
|
|
document.querySelectorAll("#P_USE_FLG").forEach((tgt) =>
|
|
tgt.addEventListener(evt, () => {
|
|
setFilter();
|
|
})
|
|
)
|
|
);
|
|
table_pop_basecode_search.on("tableBuilt", function () {
|
|
//초기 데이터 불러오기 이벤트
|
|
getPopBasecodeList(Bran_Uid);
|
|
});
|
|
}
|
|
);
|
|
};
|
|
|
|
const popBasegroupList = function (
|
|
tgt_id,
|
|
tgt_name,
|
|
Bran_Uid,
|
|
Group_Uid,
|
|
refunc,
|
|
rtgt
|
|
) {
|
|
//팝업 템플릿 로드 후 모달 출력
|
|
vnLoad(
|
|
"",
|
|
"/ksvc/inc/popup.inc.php",
|
|
"#pop_basecode_search",
|
|
function (loadHtml) {
|
|
let basegroupModal = kuls_modal(loadHtml);
|
|
|
|
if (rtgt) {
|
|
//Routing 전용
|
|
let basegroups = Object.keys(varsSHAPE_GRP).map((key) => {
|
|
return { Group_Uid: key, Code_Exp: varsSHAPE_GRP[key].Code_Exp };
|
|
});
|
|
let selecttag = document.querySelector(".s_fld select[name=BASECODE]");
|
|
selecttag.options.length = 0;
|
|
basegroups.forEach((row) => {
|
|
let opt = document.createElement("option");
|
|
opt.value = row["Group_Uid"];
|
|
opt.text = row["Code_Exp"];
|
|
selecttag.add(opt);
|
|
});
|
|
Group_Uid = Group_Uid || basegroups[0].Group_Uid;
|
|
selecttag.value = Group_Uid;
|
|
|
|
document
|
|
.querySelector(".s_fld select[name=BASECODE]")
|
|
.addEventListener("change", function () {
|
|
getPopBasegroupList(this.value);
|
|
});
|
|
}
|
|
const fields = [
|
|
{
|
|
formatter: "rownum",
|
|
title: "No",
|
|
width: "10%",
|
|
minWidth: 50,
|
|
headerSort: false,
|
|
hozAlign: "center",
|
|
},
|
|
{
|
|
field: "Code_Uid",
|
|
title: "코드",
|
|
width: "30%",
|
|
minWidth: 100,
|
|
editor: "input",
|
|
editable: (cell) => {
|
|
let val = cell.getData();
|
|
return val._STATUS_ === "I";
|
|
},
|
|
},
|
|
{
|
|
field: "Code_Val",
|
|
title: "명칭",
|
|
width: "40%",
|
|
minWidth: 160,
|
|
editor: "input",
|
|
},
|
|
{
|
|
field: "Code_Active",
|
|
title: "사용",
|
|
width: "20%",
|
|
minWidth: 60,
|
|
cssClass: "user-editable",
|
|
formatter: tb_common_funtions.formatterToggleboxGreenIcon,
|
|
formatterParams: { checkval: "Y" },
|
|
},
|
|
];
|
|
|
|
const table_pop_basegroup_search = new Tabulator("#pop_basecode_list", {
|
|
layout: "fitColumns",
|
|
data: [], //기본 데이터
|
|
height: "100%",
|
|
columns: fields, //컬럼 설정
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //정렬 => 정/역/초기화
|
|
},
|
|
movableRows: true,
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
});
|
|
|
|
const getPopBasegroupList = function (G_Uid) {
|
|
//리스트 불러오기
|
|
Group_Uid = G_Uid || Group_Uid;
|
|
ajax_json({
|
|
url: "/ksvc/inc/common.ajax.php",
|
|
data: { mode: "getBasecodeList", Bran_Uid, Group_Uid: Group_Uid },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
table_pop_basegroup_search.setData(data.data);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
//kuls_alert(error.message);
|
|
},
|
|
complete: function () {
|
|
setFilter();
|
|
},
|
|
});
|
|
};
|
|
|
|
const setFilter = () => {
|
|
table_pop_basegroup_search.setFilter(
|
|
function (data) {
|
|
//필터링
|
|
return (
|
|
true &&
|
|
(!document.getElementById("P_USE_FLG") ||
|
|
!document.getElementById("P_USE_FLG").checked ||
|
|
data.Code_Active === "Y")
|
|
);
|
|
},
|
|
"=",
|
|
true
|
|
);
|
|
};
|
|
|
|
//Row 추가
|
|
const addRow = () => {
|
|
table_pop_basegroup_search.addRow({
|
|
_STATUS_: "I",
|
|
Bran_Uid,
|
|
Group_Uid: Group_Uid,
|
|
Code_Active: "Y",
|
|
});
|
|
};
|
|
|
|
//Cell 클릭 콜백
|
|
const cellClick = (e, tgt) => {
|
|
switch (tgt.getField()) {
|
|
case "Code_Active":
|
|
tgt.setValue(tgt.getValue() == "Y" ? "N" : "Y");
|
|
break;
|
|
}
|
|
};
|
|
|
|
//Cell 변경 콜백
|
|
const cellEdited = (cell) => {
|
|
let _this = this;
|
|
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
|
|
};
|
|
|
|
const putItem = () => {
|
|
let pdata = table_pop_basegroup_search.getData();
|
|
let dupdata = pdata.map((data) => data["Code_Uid"]);
|
|
if (
|
|
dupdata.filter((data, idx) => dupdata.indexOf(data) !== idx).length >
|
|
0
|
|
) {
|
|
kuls_alert("코드가 중복됩니다.");
|
|
return false;
|
|
}
|
|
let postdata = {
|
|
mode: "putBasecode",
|
|
reqdata: JSON.stringify(
|
|
table_pop_basegroup_search.getData().filter((row) => row._STATUS_)
|
|
),
|
|
};
|
|
ajax_json({
|
|
url: "/ksvc/inc/common.ajax.php",
|
|
data: postdata,
|
|
success: function (data) {
|
|
if (data.code) {
|
|
kuls_success("적용 되었습니다.");
|
|
if (typeof tabrow == "function") {
|
|
tabrow(pdata, null);
|
|
basegroupModal.delete();
|
|
}
|
|
} else {
|
|
kuls_alert(data.mesg);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
kuls_alert(error.message);
|
|
},
|
|
});
|
|
return true;
|
|
};
|
|
|
|
table_pop_basegroup_search.on("rowDblClick", (e, tgt) => {
|
|
return false;
|
|
|
|
let row = tgt._row;
|
|
document.ttt = tgt;
|
|
if (typeof tabrow == "function") {
|
|
tabrow(tgt.getTable().getData(), tgt.getData());
|
|
} else if (tabrow) {
|
|
tabrow.updateData({
|
|
[tgt_id]: row.data["Code_Uid"],
|
|
[tgt_name]: row.data["Code_Val"],
|
|
_STATUS_: tabrow.getData()["_STATUS_"] || "U",
|
|
});
|
|
} else {
|
|
if (document.querySelector(tgt_id))
|
|
document.querySelector(tgt_id).value = row.data["Code_Uid"];
|
|
if (document.querySelector(tgt_name))
|
|
document.querySelector(tgt_name).value = row.data["Code_Val"];
|
|
}
|
|
basegroupModal.delete();
|
|
}); //Row 더블클릭 이벤트
|
|
|
|
table_pop_basegroup_search.on("cellClick", (e, tgt) => {
|
|
//Tabulator cell Click
|
|
cellEdited && cellClick(e, tgt);
|
|
});
|
|
table_pop_basegroup_search.on("cellEdited", (cell) => {
|
|
//Tabulator cell Edited
|
|
cellEdited && cellEdited(cell);
|
|
});
|
|
table_pop_basegroup_search.on("rowMoved", (row, a, b) => {
|
|
//Tabulator Row Moved
|
|
let Code_Uid = row.getData()["Code_Uid"];
|
|
let n_idx = row
|
|
.getTable()
|
|
.getData()
|
|
.findIndex((v) => v.Code_Uid === Code_Uid);
|
|
do {
|
|
//현재 이하 순서 변경
|
|
row._row.updateData({
|
|
Code_Idx: ++n_idx,
|
|
_STATUS_: row.getData()["_STATUS_"] || "U",
|
|
});
|
|
} while ((row = row.getNextRow()));
|
|
});
|
|
["click", "keypress"].forEach((evt) =>
|
|
document.querySelector("#btnAddBcode").addEventListener(evt, () => {
|
|
addRow();
|
|
})
|
|
);
|
|
["click", "keypress"].forEach((evt) =>
|
|
document.querySelector("#btnPutBcode").addEventListener(evt, () => {
|
|
putItem();
|
|
})
|
|
);
|
|
["change", "keydown", "keyup"].forEach((evt) =>
|
|
document.querySelectorAll("#P_USE_FLG").forEach((tgt) =>
|
|
tgt.addEventListener(evt, () => {
|
|
setFilter();
|
|
})
|
|
)
|
|
);
|
|
table_pop_basegroup_search.on("tableBuilt", function () {
|
|
//초기 데이터 불러오기 이벤트
|
|
getPopBasegroupList();
|
|
});
|
|
}
|
|
);
|
|
};
|
|
|
|
class drawManager {
|
|
constructor() {
|
|
let _this = this;
|
|
_this.tblList = "";
|
|
_this.prow = "";
|
|
_this.ajax_url = "/order/registration/registration.ajax.php";
|
|
_this.upload_ajax_url = "/order/registration/attfile.ajax.php";
|
|
_this.download_url = "/include/getFile.php";
|
|
_this.drawModal = null;
|
|
}
|
|
|
|
init(row) {
|
|
let _this = this;
|
|
|
|
_this.prow = row;
|
|
_this.parData = Object.assign({}, row.getData());
|
|
if (!_this.parData.SO_SEQ) {
|
|
kuls_alert(
|
|
"저장되지 않은 수주상세입니다.<br/>수주상세 저장 후 도면등록이 가능합니다."
|
|
);
|
|
return;
|
|
}
|
|
|
|
vnLoad("", "/order/registration/draw.pop.inc.php", "", function (loadHtml) {
|
|
_this.drawModal = kuls_modal(loadHtml);
|
|
_this.initload();
|
|
});
|
|
}
|
|
|
|
//리스트 로드
|
|
getMainList() {
|
|
let _this = this;
|
|
|
|
let introw = ["ORD_QTY", "SO_QTY"];
|
|
let fltrow = ["OUT_DIA", "IN_DIA", "THICK", "WIDTH", "LENGTH"];
|
|
|
|
Object.keys(_this.parData).forEach((key) => {
|
|
if (introw.indexOf(key) !== -1) {
|
|
_this.parData[key] = parseInt(_this.parData[key]);
|
|
}
|
|
if (fltrow.indexOf(key) !== -1) {
|
|
_this.parData[key] = currency(_this.parData[key], { precision: 3 });
|
|
}
|
|
if (key === "SHAPE_TYPE")
|
|
_this.parData[key] = varsSHAPE_TYPE[_this.parData[key]];
|
|
if (key === "ITEM_CD")
|
|
_this.parData[key] = varsSHAPE_GRP[_this.parData[key]]?.Code_Exp;
|
|
|
|
if (document.getElementById("pop_" + key))
|
|
document.getElementById("pop_" + key).innerHTML = _this.parData[key];
|
|
});
|
|
let talert = window.setTimeout(function () {
|
|
_this.tblList.alert("Loading ...");
|
|
}, 1000); //1초 이상 지연되면 로딩 출력
|
|
|
|
ajax_json({
|
|
url: _this.upload_ajax_url,
|
|
data: {
|
|
mode: "getDrawList",
|
|
nid: _this.parData["SO_NO"] || "",
|
|
sid: _this.parData["SO_SEQ"] || "",
|
|
},
|
|
success: function (data) {
|
|
if (data.code) {
|
|
if (data.data.length) {
|
|
_this.tblList.setData(
|
|
data.data.map((sd) => {
|
|
return { ...sd, _OLD_STATUS_: sd._STATUS_ };
|
|
})
|
|
);
|
|
_this.prow.update({
|
|
ASS_DRAW: data.data.sort((a, b) =>
|
|
a.file_id < b.file_id ? 1 : -1
|
|
)[0].file_exp,
|
|
});
|
|
}
|
|
} else {
|
|
kuls_alert(data.mesg);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
kuls_alert(error.message);
|
|
},
|
|
complete: function () {
|
|
window.clearTimeout(talert);
|
|
_this.tblList.clearAlert();
|
|
//멀티파일 업로더
|
|
if (!_this.uploader) {
|
|
_this.uploader = FilePond.create(
|
|
document.getElementById("drawfilepond"),
|
|
{
|
|
...filepond_ko_KR,
|
|
name: "upfile",
|
|
allowMultiple: true,
|
|
maxParallelUploads: 3,
|
|
allowProcess: false,
|
|
instantUpload: true,
|
|
server: {
|
|
url: _this.upload_ajax_url + "?mode=putTempFile",
|
|
process: {
|
|
onload: function (data) {
|
|
data = JSON.parse(data);
|
|
let fdata = data.data;
|
|
let file_name = fdata["file_name"];
|
|
let tmp_name = fdata["tmp_name"];
|
|
let file_size = fdata["file_size"];
|
|
let file_type = fdata["file_type"];
|
|
_this.tblList.addRow({
|
|
_STATUS_: "I",
|
|
nid: _this.parData["SO_NO"],
|
|
sid: _this.parData["SO_SEQ"],
|
|
file_name,
|
|
tmp_name,
|
|
file_size,
|
|
file_type,
|
|
gubun: "temp",
|
|
});
|
|
},
|
|
},
|
|
},
|
|
allowFileSizeValidation: true,
|
|
maxFileSize: 100000000,
|
|
credits: {},
|
|
}
|
|
);
|
|
|
|
// document.addEventListener('FilePond:processfile', (e)=>{
|
|
// let data = e.detail.file;
|
|
// let name = data.filename;
|
|
// let ext = data.fileExtension;
|
|
// let size = data.fileSize;
|
|
// let type = data.fileType;
|
|
// let file_url = _this.download_url+"?gubun=temp&tmp_name="+1+"&name="+name+"&size="+size;
|
|
//
|
|
// _this.tblList.addRow({_STATUS_:'I', file_name:name, url:file_url});
|
|
// });
|
|
|
|
document
|
|
.getElementById("drawfilepond")
|
|
.addEventListener("FilePond:addfilestart", (e) => {
|
|
_this.tblList.alert("미리보기 작성중...");
|
|
document.querySelector(
|
|
"#pop_draw_search .btn_prim"
|
|
).disabled = true;
|
|
});
|
|
document
|
|
.getElementById("drawfilepond")
|
|
.addEventListener("FilePond:processfiles", (e) => {
|
|
_this.tblList.clearAlert();
|
|
document.querySelector(
|
|
"#pop_draw_search .btn_prim"
|
|
).disabled = false;
|
|
});
|
|
}
|
|
},
|
|
});
|
|
return true;
|
|
}
|
|
|
|
setFilter() {
|
|
let _this = this;
|
|
}
|
|
|
|
//Row 추가
|
|
addRow() {
|
|
let _this = this;
|
|
}
|
|
|
|
//Cell 클릭 콜백
|
|
cellClick(e, tgt) {
|
|
let _this = this;
|
|
let rowData = tgt.getData();
|
|
switch (tgt.getField()) {
|
|
case "file_url":
|
|
let file_url =
|
|
_this.download_url +
|
|
"?gubun=" +
|
|
rowData["gubun"] +
|
|
"&nid=" +
|
|
rowData["nid"] +
|
|
"&sid=" +
|
|
rowData["sid"] +
|
|
"&file_id=" +
|
|
rowData["file_id"] +
|
|
"&tmp_name=" +
|
|
rowData["tmp_name"] +
|
|
"&name=" +
|
|
rowData["file_name"] +
|
|
"&size=" +
|
|
rowData["file_size"];
|
|
pop_filedown(file_url, rowData["file_name"].split(".").pop());
|
|
break;
|
|
|
|
case "DEL_FLG":
|
|
tgt.setValue(tgt.getValue() == "Y" ? "N" : "Y");
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Cell 변경 콜백
|
|
cellEdited(cell) {
|
|
let _this = this;
|
|
|
|
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
|
|
}
|
|
|
|
//등록
|
|
uploadDraw() {
|
|
let _this = this;
|
|
|
|
_this.uploader.browse();
|
|
}
|
|
|
|
//등록
|
|
putDraw() {
|
|
let _this = this;
|
|
/* 삭제를 토글로 처리시, 복구를 위해 DEL_FLG가 추가될 경우에 사용.
|
|
let rowData = _this.tblList.getData().map( row => {
|
|
if( row['DEL_FLG'] === "Y" ){
|
|
row['_STATUS_'] = "D";
|
|
}
|
|
return row;
|
|
}).filter(row => row['_STATUS_'] && (row['_STATUS_'] !== "D" || row['file_id']) );
|
|
*/
|
|
let rowData = _this.tblList.getData().filter((row) => row["_STATUS_"]);
|
|
|
|
ajax_json({
|
|
url: _this.upload_ajax_url,
|
|
data: { mode: "putDraw", reqdata: JSON.stringify(rowData) },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
kuls_success("저장되었습니다.");
|
|
//Tb_funcs_Detail.drawModal.delete();
|
|
_this.getMainList();
|
|
} else {
|
|
kuls_alert(data.mesg);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
kuls_alert(error.message);
|
|
},
|
|
complete: function () {},
|
|
});
|
|
}
|
|
|
|
rowDelete() {
|
|
let _this = this;
|
|
_this.tblList.getSelectedRows().forEach((row) => {
|
|
row.getData()["_STATUS_"] = "D";
|
|
row.getElement().classList.add("del-row");
|
|
});
|
|
}
|
|
|
|
revokeData(row) {
|
|
let _this = this;
|
|
row.update({ _STATUS_: row.getData()["_OLD_STATUS_"] });
|
|
row.getElement().classList.remove("del-row");
|
|
}
|
|
|
|
//시작 실행
|
|
initload() {
|
|
let _this = this;
|
|
|
|
const fields = [
|
|
//{ formatter: "rownum", title: "No", width: "8%", minWidth:80, },
|
|
{
|
|
formatter: "rowSelection",
|
|
title: "No",
|
|
width: "10%",
|
|
headerSort: false,
|
|
},
|
|
{
|
|
field: "file_exp",
|
|
title: "도면번호",
|
|
width: "40%",
|
|
minWidth: 200,
|
|
editor: "input",
|
|
},
|
|
{ field: "file_name", title: "도면파일", width: "40%", minWidth: 200 },
|
|
{
|
|
field: "file_url",
|
|
title: "<i class='fa-solid fa-compass-drafting'></i>",
|
|
width: "10%",
|
|
minWidth: 80,
|
|
formatter: () => '<i class="fa-solid fa-download"></i>',
|
|
},
|
|
//{ field: "DEL_FLG", title: "삭제", width: "8%", minWidth:80, cssClass:'user-editable', formatter: tb_common_funtions.formatterToggleboxRedIcon, formatterParams: {checkval:'Y'}},
|
|
];
|
|
|
|
_this.tblList = new Tabulator("#pop_draw", {
|
|
layout: "fitColumns",
|
|
height: "100%",
|
|
data: [], //기본 데이터
|
|
columns: fields, //컬럼 설정
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
|
|
},
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
});
|
|
|
|
_this.tblList.on("tableBuilt", () => {
|
|
//Tabulator 초기 데이터 불러오기 이벤트
|
|
_this.getMainList();
|
|
});
|
|
|
|
_this.tblList.on("cellClick", (e, tgt) => {
|
|
//Tabulator cell Click
|
|
_this.cellClick && _this.cellClick(e, tgt);
|
|
});
|
|
_this.tblList.on("cellEdited", (cell) => {
|
|
//Tabulator cell Edited
|
|
_this.cellEdited && _this.cellEdited(cell);
|
|
});
|
|
_this.tblList.on("rowDeselected", (row) => {
|
|
//Tabulator cell Deslected
|
|
_this.revokeData && _this.revokeData(row);
|
|
});
|
|
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#pop_draw_search #btnAddDraw")
|
|
.addEventListener(evt, () => {
|
|
_this.uploadDraw();
|
|
})
|
|
);
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#pop_draw_search #btnDelDraw")
|
|
.addEventListener(evt, () => {
|
|
_this.rowDelete();
|
|
})
|
|
);
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#pop_draw_search .btn_prim")
|
|
.addEventListener(evt, () => {
|
|
_this.putDraw();
|
|
})
|
|
);
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#pop_draw_search .btn_close")
|
|
.addEventListener(evt, () => {
|
|
_this.drawModal.delete();
|
|
})
|
|
);
|
|
}
|
|
}
|
|
|
|
class planrouteManager {
|
|
constructor() {
|
|
let _this = this;
|
|
_this.tblList = "";
|
|
_this.ajax_url = "/order/planing/planing_ready.ajax.php";
|
|
}
|
|
|
|
init(row) {
|
|
let _this = this;
|
|
|
|
vnLoad(
|
|
"",
|
|
"/order/planing/planing_ready.pop.inc.php",
|
|
"",
|
|
function (loadHtml) {
|
|
_this.routeModal = kuls_modal(loadHtml);
|
|
|
|
_this.initload(row);
|
|
}
|
|
);
|
|
}
|
|
|
|
//리스트 로드
|
|
getMainList(row) {
|
|
let _this = this;
|
|
|
|
let introw = ["ORD_QTY", "SO_QTY"];
|
|
let fltrow = ["OUT_DIA", "IN_DIA", "THICK", "WIDTH", "LENGTH"];
|
|
let rowData = Object.assign({}, row);
|
|
Object.keys(rowData).forEach((key) => {
|
|
switch (key) {
|
|
case "SHAPE_TYPE":
|
|
rowData[key] = varsSHAPE_TYPE[rowData[key]];
|
|
break;
|
|
case "ITEM_CD":
|
|
rowData[key] = varsSHAPE_GRP[rowData[key]]?.Code_Exp;
|
|
break;
|
|
case "ORD_QTY":
|
|
case "SO_QTY":
|
|
rowData[key] = parseInt(rowData[key]);
|
|
break;
|
|
case "OUT_DIA":
|
|
case "IN_DIA":
|
|
case "THICK":
|
|
case "WIDTH":
|
|
case "LENGTH":
|
|
rowData[key] = currency(rowData[key], { precision: 1 });
|
|
break;
|
|
}
|
|
|
|
if (document.getElementById("pop_" + key))
|
|
document.getElementById("pop_" + key).innerHTML = rowData[key];
|
|
});
|
|
|
|
let talert = window.setTimeout(function () {
|
|
_this.tblList.alert("Loading ...");
|
|
}, 1000); //1초 이상 지연되면 로딩 출력
|
|
ajax_json({
|
|
url: _this.ajax_url,
|
|
data: { mode: "getRouteList", MNG_NO: rowData["MNG_NO"] },
|
|
success: function (data) {
|
|
if (data.code) {
|
|
_this.tblList.setData(
|
|
data.data.map((r) => {
|
|
r["ORD_QTY"] = parseInt(r["ORD_QTY"]);
|
|
return r;
|
|
})
|
|
);
|
|
} else {
|
|
kuls_alert(data.mesg);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
kuls_alert(error.message);
|
|
},
|
|
complete: function () {
|
|
window.clearTimeout(talert);
|
|
_this.tblList.clearAlert();
|
|
//Tb_funcs.setFilter();
|
|
},
|
|
});
|
|
return true;
|
|
}
|
|
|
|
setFilter() {
|
|
let _this = this;
|
|
}
|
|
|
|
//Row 추가
|
|
addRow() {
|
|
let _this = this;
|
|
}
|
|
|
|
//Cell 클릭 콜백
|
|
cellClick(e, tgt) {
|
|
let _this = this;
|
|
let row = tgt.getRow();
|
|
let rowData = row.getData();
|
|
//if( rowData['ORD_STATUS'] === "Y" ) return; //작업지시가 내려진 상태에서는 클릭 불가
|
|
if (varsOPSTATUS["WORK"].includes(rowData["PLN_STATUS"])) return; //작업지시가 내려진 상태에서는 클릭 불가
|
|
|
|
switch (tgt.getField()) {
|
|
case "btn_branch": //분할
|
|
if (rowData["REL"] === "S") {
|
|
if (rowData["_STATUS_"] === "D") {
|
|
//STATUS 토글
|
|
row
|
|
.update({ _STATUS_: tgt.getData()["_OLD_STATUS_"] })
|
|
.then(() => _this.callbackRowPartitial(row));
|
|
} else {
|
|
row.update({ _OLD_STATUS_: tgt.getData()["_STATUS_"] });
|
|
row
|
|
.update({ _STATUS_: "D" })
|
|
.then(() => _this.callbackRowPartitial(row));
|
|
}
|
|
} else {
|
|
let childRow = [];
|
|
let childData = {
|
|
...rowData,
|
|
REL: "S",
|
|
_children: null,
|
|
ORD_QTY: 0,
|
|
CT: rowData["CT"],
|
|
PLN_TERM_TM: "",
|
|
WO_FACLT_NO: "",
|
|
};
|
|
if (rowData["_children"]) {
|
|
childRow = rowData["_children"];
|
|
childData["_STATUS_"] = "I"; //추가 분할 값
|
|
}
|
|
childRow.push(childData);
|
|
row.update({ _children: childRow });
|
|
row.treeExpand();
|
|
}
|
|
|
|
_this.callbackPatitial(_this.tblList, row);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Cell 변경 콜백
|
|
cellEditing(cell) {
|
|
let _this = this;
|
|
//let per_period = 6; //10분단위
|
|
let per_period = 1; //1시간 단위
|
|
|
|
switch (cell.getField()) {
|
|
case "PLN_ST_TM":
|
|
if (!jQuery(cell.getElement()).find(".dtime_picker").length) {
|
|
jQuery(cell.getElement())
|
|
.off()
|
|
.on("focus", "input", function (e) {
|
|
jQuery(e.target)
|
|
.datetimepicker({
|
|
allowTimes: [...Array(24 * per_period).keys()].map(
|
|
(idx) =>
|
|
Math.floor(idx / per_period)
|
|
.toString()
|
|
.padStart(2, "0") +
|
|
":" +
|
|
(idx % per_period).toString().padEnd(2, "0")
|
|
),
|
|
format: "Y-m-d H:i",
|
|
defaultTime:
|
|
luxon.DateTime.now().toFormat("HH:") +
|
|
Math.floor(luxon.DateTime.now().toFormat("mm") / 10)
|
|
.toString()
|
|
.padEnd(2, "0"),
|
|
})
|
|
.addClass("dtime_picker");
|
|
jQuery(cell.getElement())
|
|
// .on('change',function(){
|
|
// _this.setTimeCalc(cell);
|
|
// })
|
|
.before()
|
|
.on("click focus", function () {
|
|
jQuery(cell.getElement())
|
|
.find("input")
|
|
.datetimepicker("show");
|
|
});
|
|
});
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Cell 변경 콜백
|
|
cellEdited(cell) {
|
|
let _this = this;
|
|
|
|
switch (cell.getField()) {
|
|
case "PLN_ST_TM":
|
|
_this.setTimeCalc(cell);
|
|
break;
|
|
|
|
case "ORD_QTY":
|
|
_this.setTimeCalc(cell);
|
|
break;
|
|
}
|
|
|
|
_this.callbackPatitial(_this.tblList);
|
|
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
|
|
}
|
|
|
|
//등록
|
|
putPlanRoute() {
|
|
let _this = this;
|
|
|
|
let tblData = _this.tblList
|
|
.getData()
|
|
.filter((row) => row["WO_MAKE_FLG"] === "Y");
|
|
let scs = tblData.reduce((chk, row) => {
|
|
if (chk && row["_children"] && row["_children"].length) {
|
|
let subSum = row["_children"].reduce(
|
|
(rev, r) => rev + (r["_STATUS_"] === "D" ? 0 : r["ORD_QTY"]),
|
|
0
|
|
);
|
|
if (row["ORD_QTY"] !== subSum) {
|
|
chk = false;
|
|
}
|
|
}
|
|
return chk;
|
|
}, true);
|
|
|
|
if (!scs) {
|
|
kuls_alert("작업분할된 수량이 일치하지 않습니다.");
|
|
return false;
|
|
}
|
|
|
|
let postdata = {
|
|
mode: "putPlanRoute",
|
|
reqdata: JSON.stringify(tblData),
|
|
};
|
|
ajax_json({
|
|
url: _this.ajax_url,
|
|
data: postdata,
|
|
success: function (data) {
|
|
if (data.code) {
|
|
kuls_success("적용 되었습니다.");
|
|
//닫기처리
|
|
} else {
|
|
kuls_alert(data.mesg);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
kuls_alert(error.message);
|
|
},
|
|
complete: function () {},
|
|
});
|
|
return true;
|
|
}
|
|
|
|
setTimeCalc(cell) {
|
|
//종료시간 계산
|
|
let rowData = cell.getData();
|
|
let sutime = Number(rowData["ST"]) || 0; //셋업시간
|
|
let dgtime = Number(rowData["CT"]) || 0; //단위가공시간
|
|
let pnum = Number(rowData["ORD_QTY"]) || 0; //수량
|
|
let pcnt = Number(rowData["OP_COUNT"]) || 1; //가공횟수
|
|
let termtm = dgtime * pnum * pcnt + sutime;
|
|
let fdate = luxon.DateTime.fromFormat(
|
|
rowData["PLN_ST_TM"],
|
|
"y-MM-dd HH:mm"
|
|
).plus({ minutes: termtm });
|
|
if (fdate.c)
|
|
cell.getRow().update({
|
|
PLN_ED_TM: fdate.toFormat("y-MM-dd HH:mm"),
|
|
PLN_TERM_TM: termtm,
|
|
});
|
|
}
|
|
|
|
formatterExpaned(tgt, params) {
|
|
//분할 formatter
|
|
let rowData = tgt.getData();
|
|
if (rowData["REL"] === "S") {
|
|
return "<i class='fa-regular fa-circle-xmark text-danger'></i>";
|
|
} else {
|
|
return "<i class='fa-solid fa-code-branch'></i>";
|
|
}
|
|
}
|
|
|
|
formatterSelect(tgt, params) {
|
|
let rowData = tgt.getData();
|
|
if (
|
|
rowData["REL"] === "S" ||
|
|
!rowData["_children"] ||
|
|
rowData["_children"].filter((sr) => sr["_STATUS_"] !== "D").length === 0
|
|
) {
|
|
return tb_common_funtions.formatterSelect(tgt, params);
|
|
} else {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
formatterHiddenMVal(tgt, params) {
|
|
//값 숨김 formatter
|
|
let rowData = tgt.getData();
|
|
if (
|
|
rowData["REL"] === "S" ||
|
|
!rowData["_children"] ||
|
|
rowData["_children"].filter((sr) => sr["_STATUS_"] !== "D").length === 0
|
|
) {
|
|
if (params.func) {
|
|
return params.func(tgt, params);
|
|
} else {
|
|
return tgt.getValue();
|
|
}
|
|
} else {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
formatterHiddenSVal(tgt, params) {
|
|
//값 숨김 formatter
|
|
let rowData = tgt.getData();
|
|
if (rowData["REL"] === "S") {
|
|
return "";
|
|
} else {
|
|
if (params.func) {
|
|
return params.func(tgt, params);
|
|
} else {
|
|
return tgt.getValue();
|
|
}
|
|
}
|
|
}
|
|
|
|
formatterTotNum(tgt) {
|
|
//수량 formatter
|
|
let rowData = tgt.getData();
|
|
let childRowData = rowData["_children"]
|
|
? rowData["_children"].filter((sr) => sr["_STATUS_"] !== "D")
|
|
: [];
|
|
let theVal = rowData["ORD_QTY"];
|
|
if (rowData["REL"] !== "S") {
|
|
let subSum = childRowData.length
|
|
? childRowData.reduce((rev, r) => rev + r["ORD_QTY"], 0)
|
|
: theVal;
|
|
if (theVal != subSum) {
|
|
tgt.getElement().classList.add("warn-cell");
|
|
} else {
|
|
tgt.getElement().classList.remove("warn-cell");
|
|
}
|
|
}
|
|
return theVal;
|
|
}
|
|
|
|
formatterRow(row) {
|
|
//Row formatter
|
|
let rowData = row.getData();
|
|
if (rowData["_STATUS_"] === "D") {
|
|
row.getElement().classList.add("del-row");
|
|
} else {
|
|
row.getElement().classList.remove("del-row");
|
|
}
|
|
|
|
//if( rowData['WO_MAKE_FLG'] !== 'Y' || rowData['ORD_STATUS'] === 'Y' ){
|
|
if (
|
|
rowData["WO_MAKE_FLG"] !== "Y" ||
|
|
varsOPSTATUS["WORK"].includes(rowData["PLN_STATUS"])
|
|
) {
|
|
row.getElement().classList.add("text-secondary");
|
|
row.getElement().classList.add("bg-light");
|
|
row.selectable = false;
|
|
}
|
|
}
|
|
|
|
callbackPatitial(tbl, trow) {
|
|
//테이블 전체 수량 formmater
|
|
tbl.getRows().forEach((row) => {
|
|
let rowData = row.getData();
|
|
let fld = ["FACLT_CD", "PLN_ST_TM"];
|
|
|
|
if (
|
|
!rowData["_children"] ||
|
|
rowData["_children"].filter((sr) => sr["_STATUS_"] !== "D").length === 0
|
|
) {
|
|
fld.forEach((tgt) => row.getCell(tgt).setValue(rowData[tgt]));
|
|
fld.forEach((tgt) =>
|
|
row.getCell(tgt).getElement().classList.add("tabulator-editable")
|
|
);
|
|
} else {
|
|
fld.forEach((tgt) => row.getCell(tgt).setValue(""));
|
|
fld.forEach((tgt) =>
|
|
row.getCell(tgt).getElement().classList.remove("tabulator-editable")
|
|
);
|
|
}
|
|
|
|
row.getCell("ORD_QTY").setValue(rowData["ORD_QTY"]); //수량 트리거
|
|
rowData = row.getData();
|
|
row
|
|
.getCell("PLN_TERM_TM")
|
|
.setValue(
|
|
rowData["_children"]
|
|
? rowData["_children"]
|
|
.filter((sr) => sr["_STATUS_"] !== "D")
|
|
.reduce((subsum, r) => subsum + Number(r.PLN_TERM_TM), 0)
|
|
: rowData["PLN_TERM_TM"]
|
|
); //가공시간 트리거
|
|
});
|
|
}
|
|
|
|
callbackRowPartitial(row) {
|
|
let rowData = row.getData();
|
|
let fld = ["FACLT_CD", "PLN_ST_TM", "ORD_QTY"];
|
|
|
|
if (rowData["_STATUS_"] !== "D") {
|
|
fld.forEach((tgt) =>
|
|
row.getCell(tgt).getElement().classList.add("tabulator-editable")
|
|
);
|
|
} else {
|
|
fld.forEach((tgt) =>
|
|
row.getCell(tgt).getElement().classList.remove("tabulator-editable")
|
|
);
|
|
}
|
|
}
|
|
|
|
chkEditable(tgt) {
|
|
//수정 가능여부 체크
|
|
let rowData = tgt.getData();
|
|
//return rowData['WO_MAKE_FLG'] === 'Y' && rowData['_STATUS_'] !== "D" && rowData['ORD_STATUS'] !== "Y" && (!rowData['_children'] || rowData['_children'].filter( sr => sr['_STATUS_'] !== 'D' ).length === 0 );
|
|
return (
|
|
rowData["WO_MAKE_FLG"] === "Y" &&
|
|
rowData["_STATUS_"] !== "D" &&
|
|
//rowData['ORD_STATUS'] !== "Y" &&
|
|
!varsOPSTATUS["WORK"].includes(rowData["PLN_STATUS"]) &&
|
|
(!rowData["_children"] ||
|
|
rowData["_children"].filter((sr) => sr["_STATUS_"] !== "D").length ===
|
|
0)
|
|
);
|
|
}
|
|
|
|
chkEditable2(tgt) {
|
|
//수정 가능여부 체크2
|
|
let rowData = tgt.getData();
|
|
return (
|
|
rowData["REL"] === "S" &&
|
|
rowData["_STATUS_"] !== "D" &&
|
|
//rowData['ORD_STATUS'] !== "Y"
|
|
!varsOPSTATUS["WORK"].includes(rowData["PLN_STATUS"])
|
|
);
|
|
}
|
|
|
|
//시작 실행
|
|
initload(row) {
|
|
let _this = this;
|
|
let factlist = varsFactInfo.reduce((nval, val) => {
|
|
nval[val.FACLT_CD] = val.FACLT_NM;
|
|
return nval;
|
|
}, {});
|
|
const fields = [
|
|
{
|
|
field: "OP_SEQ",
|
|
title: "공순",
|
|
width: "5%",
|
|
minWidth: 50,
|
|
formatter: _this.formatterHiddenSVal,
|
|
},
|
|
{
|
|
field: "OP_CD",
|
|
title: "공정명",
|
|
width: "15%",
|
|
minWidth: 100,
|
|
formatter: _this.formatterHiddenSVal,
|
|
formatterParams: {
|
|
values: varOPGRP.reduce((r, v) => {
|
|
return Object.assign(
|
|
r,
|
|
v.OPTIONS.reduce((rev, vo) => {
|
|
rev[vo.OP_CD] = vo.OP_NM;
|
|
return rev;
|
|
}, {})
|
|
);
|
|
}, {}),
|
|
func: tb_common_funtions.formatterSelect,
|
|
},
|
|
},
|
|
{
|
|
field: "FACLT_CD",
|
|
title: "설비",
|
|
width: "16%",
|
|
minWidth: 100,
|
|
editor: "list",
|
|
editorParams: { clearable: true, values: factlist },
|
|
formatter: _this.formatterSelect,
|
|
formatterParams: { values: factlist },
|
|
editable: _this.chkEditable,
|
|
},
|
|
{
|
|
field: "PLN_ST_TM",
|
|
title: "시작시간",
|
|
width: "18%",
|
|
minWidth: 150,
|
|
editor: "input",
|
|
editable: _this.chkEditable,
|
|
formatter: _this.formatterHiddenMVal,
|
|
},
|
|
{
|
|
field: "PLN_ED_TM",
|
|
title: "종료시간",
|
|
width: "16%",
|
|
minWidth: 120,
|
|
visible: false,
|
|
formatter: _this.formatterHiddenMVal,
|
|
},
|
|
{
|
|
field: "ORD_QTY",
|
|
title: "수량",
|
|
width: "6%",
|
|
minWidth: 50,
|
|
editor: "number",
|
|
editorParams: { min: 0 },
|
|
editable: _this.chkEditable2,
|
|
formatter: _this.formatterTotNum,
|
|
},
|
|
{ field: "ST", title: "셋업시간<br>(분)", width: "10%", minWidth: 90 },
|
|
{
|
|
field: "CT",
|
|
title: "단위가공시간<br>(분)",
|
|
width: "12%",
|
|
minWidth: 90,
|
|
},
|
|
//{ field: "OP_COUNT", title: "가공횟수", width: "8%", minWidth:70, },
|
|
{
|
|
field: "PLN_TERM_TM",
|
|
title: "가공시간<br>(분)",
|
|
width: "10%",
|
|
minWidth: 90,
|
|
},
|
|
{
|
|
field: "btn_branch",
|
|
title: "분할",
|
|
width: "6%",
|
|
minWidth: 50,
|
|
formatter: _this.formatterExpaned,
|
|
},
|
|
];
|
|
|
|
_this.tblList = new Tabulator("#pop_plan_route", {
|
|
layout: "fitColumns",
|
|
height: "100%",
|
|
data: [], //기본 데이터
|
|
columns: fields, //컬럼 설정
|
|
dataTree: true,
|
|
dataTreeStartExpanded: true,
|
|
dataTreeElementColumn: "OP_CD",
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
headerSort: false,
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
|
|
},
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
rowFormatter: _this.formatterRow,
|
|
});
|
|
|
|
_this.tblList.on("tableBuilt", () => {
|
|
//Tabulator 초기 데이터 불러오기 이벤트
|
|
_this.getMainList(row);
|
|
});
|
|
|
|
_this.tblList.on("cellClick", (e, tgt) => {
|
|
//Tabulator cell Click
|
|
_this.cellClick(e, tgt);
|
|
});
|
|
_this.tblList.on("cellEdited", (cell) => {
|
|
//Tabulator cell Edited
|
|
_this.cellEdited(cell);
|
|
});
|
|
_this.tblList.on("cellEditing", (cell) => {
|
|
//Tabulator cell Edited
|
|
_this.cellEditing(cell);
|
|
});
|
|
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#pop_plan_search .btn_prim")
|
|
.addEventListener(evt, () => {
|
|
_this.putPlanRoute();
|
|
})
|
|
);
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#pop_plan_search .btn_close")
|
|
.addEventListener(evt, () => {
|
|
_this.routeModal.delete();
|
|
})
|
|
);
|
|
}
|
|
}
|
|
|
|
class conditionRemkManager {
|
|
constructor() {
|
|
let _this = this;
|
|
_this.tblList = "";
|
|
_this.ajax_url = "/order/condition/condition.ajax.php";
|
|
}
|
|
|
|
init(tcell) {
|
|
let _this = this;
|
|
|
|
vnLoad("", "/order/condition/remk.pop.inc.php", "", function (loadHtml) {
|
|
_this.remkModal = kuls_modal(loadHtml);
|
|
|
|
_this.initload(tcell);
|
|
});
|
|
}
|
|
|
|
//리스트 로드
|
|
getMainList(tcell) {
|
|
let _this = this;
|
|
|
|
let rowData = Object.assign({}, tcell.getData());
|
|
Object.keys(rowData).forEach((key) => {
|
|
if (document.getElementById("pop_" + key))
|
|
document.getElementById("pop_" + key).innerHTML = rowData[key];
|
|
});
|
|
|
|
let talert = window.setTimeout(function () {
|
|
_this.tblList.alert("Loading ...");
|
|
}, 1000); //1초 이상 지연되면 로딩 출력
|
|
ajax_json({
|
|
url: _this.ajax_url,
|
|
data: {
|
|
mode: "getRouteList2",
|
|
MNG_NO: rowData["MNG_NO"],
|
|
OP_CD: rowData["OP_CD"],
|
|
},
|
|
success: function (data) {
|
|
if (data.code) {
|
|
_this.tblList.setData(data.data);
|
|
} else {
|
|
kuls_alert(data.mesg);
|
|
}
|
|
},
|
|
error: function (request, status, error) {
|
|
kuls_alert(error.message);
|
|
},
|
|
complete: function () {
|
|
window.clearTimeout(talert);
|
|
_this.tblList.clearAlert();
|
|
},
|
|
});
|
|
return true;
|
|
}
|
|
|
|
//Cell 변경 콜백
|
|
cellEdited(cell) {
|
|
let _this = this;
|
|
|
|
cell.getData()._STATUS_ = cell.getData()._STATUS_ || "U";
|
|
}
|
|
|
|
//등록
|
|
putRemk(tcell) {
|
|
let _this = this;
|
|
let tblData = _this.tblList.getData();
|
|
tcell.getRow().update({ REMK: tblData[0].REMK });
|
|
_this.remkModal.delete();
|
|
// let tblData = _this.tblList.getData();
|
|
// let postdata = {
|
|
// 'mode': 'putRouteList',
|
|
// 'reqdata': JSON.stringify(tblData),
|
|
// };
|
|
// ajax_json({
|
|
// url: _this.ajax_url,
|
|
// data: postdata,
|
|
// success: function (data) {
|
|
// if (data.code) {
|
|
// kuls_success("저장되었습니다.");
|
|
// _this.remkModal.delete();
|
|
// }else{
|
|
// kuls_alert(data.mesg);
|
|
// }
|
|
// },
|
|
// error: function (request, status, error) {
|
|
// kuls_alert(error.message);
|
|
// },
|
|
// complete: function () {
|
|
// }
|
|
// });
|
|
return true;
|
|
}
|
|
|
|
//시작 실행
|
|
initload(tcell) {
|
|
let _this = this;
|
|
const fields = [
|
|
{ field: "OP_SEQ", title: "공순", width: "10%" },
|
|
{
|
|
field: "OP_CD",
|
|
title: "공정명",
|
|
width: "20%",
|
|
formatter: tb_common_funtions.formatterSelect,
|
|
formatterParams: {
|
|
values: varOPGRP.reduce((r, v) => {
|
|
return Object.assign(
|
|
r,
|
|
v.OPTIONS.reduce((rev, vo) => {
|
|
rev[vo.OP_CD] = vo.OP_NM;
|
|
return rev;
|
|
}, {})
|
|
);
|
|
}, {}),
|
|
},
|
|
},
|
|
{
|
|
field: "REMK",
|
|
title: "지시사항",
|
|
width: "70%",
|
|
formatter: "textarea",
|
|
editor: "textarea",
|
|
editorParams: {
|
|
elementAttributes: { maxlength: "500" },
|
|
verticalNavigation: "editor",
|
|
},
|
|
hozAlign: "left",
|
|
},
|
|
];
|
|
|
|
_this.tblList = new Tabulator("#pop_condition_remk", {
|
|
layout: "fitColumns",
|
|
height: "100%",
|
|
rowHeight: 450,
|
|
data: [], //기본 데이터
|
|
columns: fields, //컬럼 설정
|
|
columnDefaults: {
|
|
//컬럼 공통 규칙
|
|
headerSort: false,
|
|
vertAlign: "middle",
|
|
hozAlign: "center",
|
|
resizable: "header", //Resize 는 헤더에서만 가능
|
|
headerHozAlign: "center", //헤더 정렬
|
|
headerSortTristate: true, //데이터 정렬 => 정/역/초기화
|
|
height: "100%",
|
|
},
|
|
headerSortElement: "<i class='bi'></i>", //정렬 아이콘
|
|
});
|
|
|
|
_this.tblList.on("tableBuilt", () => {
|
|
//Tabulator 초기 데이터 불러오기 이벤트
|
|
_this.tblList.setData([tcell.getData()]);
|
|
//_this.getMainList(tcell);
|
|
});
|
|
_this.tblList.on("cellEdited", (cell) => {
|
|
//Tabulator cell Edited
|
|
_this.cellEdited(cell);
|
|
});
|
|
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#pop_remk_search .btn_prim")
|
|
.addEventListener(evt, () => {
|
|
_this.putRemk(tcell);
|
|
})
|
|
);
|
|
["click", "keypress"].forEach((evt) =>
|
|
document
|
|
.querySelector("#pop_remk_search .btn_close")
|
|
.addEventListener(evt, () => {
|
|
_this.remkModal.delete();
|
|
})
|
|
);
|
|
}
|
|
}
|
|
|
|
document.querySelectorAll("#mtop_search input").forEach((tgt) => {
|
|
tgt.addEventListener("keypress", (e) => {
|
|
if (e.key == "Enter") {
|
|
document
|
|
.querySelector("#mtop_search button.btn_prim")
|
|
.dispatchEvent(new Event("click"));
|
|
}
|
|
});
|
|
});
|
|
|
|
jQuery(document).on("focus", ".user-editable input", function () {
|
|
jQuery(this).attr("readonly", true);
|
|
jQuery(this).trigger("click");
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 선택태그 옵션 생성
|
|
function setSelectOption(selectKey, tag){
|
|
// 옵션값 자동 렌더링
|
|
const createOpt = function(optValue, optText){
|
|
const opt = document.createElement('option');
|
|
opt.value = optValue;
|
|
opt.text = optText;
|
|
|
|
return opt;
|
|
}
|
|
// 선택태그 있으면
|
|
const selectTag = document.querySelector(tag);
|
|
if(selectTag){
|
|
selectTag.options.length = 0;
|
|
const opt = createOpt('','- 전 체 -')
|
|
selectTag.add(opt);
|
|
|
|
Object.keys(selectKey).forEach(key => {
|
|
selectTag.add(createOpt(key, selectKey[key]));
|
|
});
|
|
|
|
}
|
|
}
|
|
|
|
setSelectOption(varsITEM_GRP,'select#ITEM_GRP');
|
|
setSelectOption(varsWH_TYPE,'select#WH_TYPE'); |