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

241 lines
6.4 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;
}
}