forked from HANYANG/HANYANG_MES
1925 lines
72 KiB
JavaScript
1925 lines
72 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 || '###';
|
|
// }
|
|
// },
|
|
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);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
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.inc.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("#btnLogout").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 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')}); |