1
0
Fork 0
HANYANG_MES/home_dir/www/ksvc/inc/js/customTb.js

248 lines
6.6 KiB
JavaScript

const tb_custom_editor = {
pkCode: function (cell, onRendered, success, cancel, editorParams) {
let editor = document.createElement("input");
const format = editorParams.format ? editorParams.format : "";
if (cell.getData()._STATUS_ == "I") {
editor.setAttribute("type", format);
editor.style.width = "100%";
editor.value = cell.getValue() ? cell.getValue() : "";
onRendered(function () {
editor.focus();
editor.style.height = "100%";
});
function successFunc() {
success(editor.value);
// cell.getElement().classList.add("editable-cell")
}
editor.addEventListener("change", successFunc);
editor.addEventListener("blur", successFunc);
} else {
editor = false;
}
return editor;
},
upper: function (cell, onRendered, success, cancel) {
// input 요소 생성
var input = document.createElement("input");
input.setAttribute("type", "text");
input.style.width = "100%";
input.value = cell.getValue() ? cell.getValue() : "";
// 입력값이 변경될 때 대문자로 변환
input.addEventListener("input", function () {
this.value = this.value.toUpperCase();
});
// 에디터가 렌더링된 후 실행될 콜백
onRendered(function () {
input.focus();
input.style.height = "100%";
input.select();
});
// 값 변경 완료 시
function onChange() {
if (input.value != cell.getValue()) {
success(input.value);
} else {
cancel();
}
}
// 이벤트 리스너 등록
input.addEventListener("blur", onChange);
input.addEventListener("keydown", function (e) {
if (e.keyCode == 13) {
onChange(); // 엔터 키를 누를 때
}
if (e.keyCode == 27) {
cancel(); // ESC 키를 누를 때
}
});
return input;
},
onlyNumber: function (cell, onRendered, success, cancel) {
// 입력 요소 생성
const input = document.createElement("input");
input.setAttribute("type", "text");
input.style.width = "100%";
input.value = cell.getValue() ? cell.getValue() : "";
onRendered(function () {
input.focus();
input.style.height = "100%";
});
function onChange() {
if (input.value.match(/^\d*$/)) {
// 숫자만 허용
success(input.value);
} else {
input.value = input.value.replace(/[^0-9]/g, "");
}
}
input.addEventListener("blur", onChange);
input.addEventListener("keydown", function (e) {
if (e.keyCode == 13) {
onChange();
}
if (e.keyCode == 27) {
cancel();
}
});
return input;
},
time: function (cell, onRendered, success, cancel) {
// 입력 요소 생성
const input = document.createElement("input");
input.setAttribute("type", "text");
input.style.width = "100%";
input.value = cell.getValue() ? cell.getValue() : "";
onRendered(function () {
input.focus();
input.select();
input.style.height = "100%";
});
// 변경사항이 완료되면 호출될 함수
function onChange() {
if (input.value.length === 5) {
// 'HH:mm' 형식 확인
success(input.value);
console.log(cell.getValue());
} else {
cancel();
}
}
// 입력 이벤트 처리
input.addEventListener("input", function () {
var value = input.value.replace(/[^0-9]/g, ""); // 숫자만 입력 받음
if (value.length > 2) {
value = value.substring(0, 4); // 최대 4자리
input.value = value.replace(/(\d{2})(\d{1})/, "$1:$2");
}
});
input.addEventListener("blur", onChange);
input.addEventListener("keydown", function (e) {
if (e.keyCode == 13) {
onChange();
}
if (e.keyCode == 27) {
cancel();
}
});
return input;
},
};
const tb_custom_formatter = {
pkCode: function (tgt, params) {
if (tgt.getData()._STATUS_ == "I") {
tgt.getElement().classList.add("editable-cell");
} else {
}
return tgt.getValue();
},
time: function (cell, formatterParams, onRendered) {
return cell
.getValue()
.padStart(4, "0")
.replace(/(\d{2})(\d{2})/, "$1:$2");
},
diffTitme: function (cell, formatterParams, onRendered) {
let startTime = cell.getRow().getCell("OPER_ST_TM").getValue();
let endTime = cell.getRow().getCell("OPER_ED_TM").getValue();
if (startTime && endTime) {
let start = luxon.DateTime.fromFormat(startTime, "HH:mm");
let end = luxon.DateTime.fromFormat(endTime, "HH:mm");
// 날짜가 반전되는 경우를 처리 (예: 밤샘)
if (end < start) {
end = end.plus({ days: 1 });
}
// 시간 차이 계산
let duration = end.diff(start, "minutes");
return duration.minutes; // 분 단위로 반환
} else {
return ""; // Return empty string if either time is missing
}
},
};
const tb_custom_validator = {
onlyString: function (cell, value, parameters) {
const regex = /^[가-힣A-Za-z\s]+$/;
return regex.test(value);
},
onlyEnglish: function (cell, value, parameters) {
const regex = /^[A-Za-z\s]+$/;
return regex.test(value);
},
stringNumeric: function (cell, value, parameters) {
const regex = /^[가-힣ㄱ-ㅎㅏ-ㅣA-Za-z0-9\/\-\_\s]+$/;
return regex.test(value);
},
};
const formFormat = {
telInput: function (input) {
let formattedNumber = input.value.replace(/[^0-9]/g, ""); // 숫자만 추출
// 자동 포맷팅 로직 구현 예시: "123-456-7890" 형식
if (formattedNumber.length > 10) {
formattedNumber =
formattedNumber.slice(0, 3) +
"-" +
formattedNumber.slice(3, 7) +
"-" +
formattedNumber.slice(7);
} else {
formattedNumber =
formattedNumber.slice(0, 3) +
"-" +
formattedNumber.slice(3, 6) +
"-" +
formattedNumber.slice(6);
}
input.value = formattedNumber; // 포맷팅된 번호를 입력 필드에 다시 설정
},
inNumInput: function (input) {
let formattedNumber = input.value.replace(/[^0-9]/g, ""); // 숫자만 추출
// 자동 포맷팅 로직 구현 예시: "123-456-7890" 형식
formattedNumber =
formattedNumber.slice(0, 6) + "-" + formattedNumber.slice(6, 13);
input.value = formattedNumber; // 포맷팅된 번호를 입력 필드에 다시 설정
},
alphanumeric: function (input) {
input.value = input.value.toUpperCase().replace(/[^A-Z0-9]/g, "");
},
submitValidate: function () {
let isValid = true;
return isValid;
},
};