forked from HANYANG/HANYANG_MES
248 lines
6.6 KiB
JavaScript
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;
|
|
},
|
|
};
|