488 lines
15 KiB
JavaScript
488 lines
15 KiB
JavaScript
/**
|
|
* Tabulator custom js
|
|
*/
|
|
|
|
$(function(){
|
|
fnc_calculateContentHeight("gridDiv");
|
|
$(window).resize(function() {
|
|
fnc_calculateContentHeight("gridDiv");
|
|
});
|
|
});
|
|
|
|
var _tabul_layout_fitData = "fitData";
|
|
var _tabul_layout_fitDataFill = "fitDataFill";
|
|
var _tabul_layout_fitDataTable = "fitDataTable";
|
|
var _tabul_layout_fitDataStretch = "fitDataStretch"; //width 전부 넣으면 화면에 맞게 100%참
|
|
var _tabul_layout_fitColumns = "fitColumns";
|
|
|
|
//isNotSearchFirst //생성과 동시에 검색 여부(없으면 검색) (true이어야 최초검색 안함)
|
|
|
|
var _columnCheck = [{
|
|
formatter:"rowSelection",
|
|
titleFormatter:"rowSelection",
|
|
headerHozAlign:'center',
|
|
hozAlign:"center",
|
|
frozen:true,
|
|
headerSort:false,
|
|
width:'30'
|
|
}];
|
|
var _columnNo = [{title:'No', frozen:true, headerSort:false, field:'RNUM', headerHozAlign:'center', hozAlign:'center', width:'50' }];
|
|
|
|
var _columnAppStatus = [{
|
|
title:'상태', field:'APPR_STATUS_NAME', headerHozAlign:'center', hozAlign:'center', width:'70',
|
|
formatter:fnc_createGridApprovalAnchorTag,
|
|
cellClick:function(e, cell){
|
|
var targetStatus = fnc_checkNull(cell.getData().APPR_STATUS).toUpperCase();
|
|
if("CREATE" != targetStatus && "REJECT" != targetStatus){
|
|
fnc_approvalDetail(cell.getData().APPROVAL_OBJID, cell.getData().ROUTE_OBJID);
|
|
}
|
|
}
|
|
}];
|
|
|
|
function fnc_tabul_search(layoutParam, gridObj, searchURL, columnParam, showCheck, showNo, p_selectable, p_movableColumns, isNotSearchFirst, formId, hidePaging, showApp, checkValidation, rowSelectionControl) {
|
|
|
|
//alert(document.form1.page.value);
|
|
//alert($("#form1").serialize());
|
|
//grid.setPage(document.form1.page.value);
|
|
//alert(p_notSelectable + ":" + fnc_checkNullDefaultValue(p_notSelectable, true) + ":" + (p_notSelectable == false ? p_notSelectable : true));
|
|
if(gridObj){
|
|
//생성이후 search
|
|
fnc_tabul_searchAjax(gridObj, searchURL, formId, hidePaging, checkValidation);
|
|
}else{
|
|
//최초 생성
|
|
//alert('create');
|
|
|
|
var allColumns = [];
|
|
if(showCheck) allColumns = allColumns.concat(_columnCheck);
|
|
if(showNo) allColumns = allColumns.concat(_columnNo);
|
|
allColumns = allColumns.concat(columnParam);
|
|
if(showApp) allColumns = allColumns.concat(_columnAppStatus);
|
|
|
|
gridObj = new Tabulator("#mainGrid", {
|
|
height : "auto",//"640px",
|
|
layout : fnc_checkNullDefaultValue(layoutParam, _tabul_layout_fitDataStretch), //fitDataFill fitDataStretch
|
|
//selectable: true,
|
|
placeholder : "조회된 정보가 없습니다.",
|
|
//headerBackgroundColor: "red",
|
|
selectable : (p_selectable == false ? p_selectable : true),
|
|
movableColumns : (p_movableColumns == false ? p_movableColumns : true),
|
|
//movableColumns : true,
|
|
//selectable : true,
|
|
columns : allColumns
|
|
//progressiveLoad : "scroll",
|
|
//progressiveLoadScrollMargin: 50,
|
|
//ajaxURL : "/projectConcept/searchmettingmgmtGridList.do",
|
|
//ajaxParams : $("#form1").serializeObject(),
|
|
/*
|
|
ajaxURLGenerator:function(url, config, params){
|
|
//url - the url from the ajaxURL property or setData function
|
|
//config - the request config object from the ajaxConfig property
|
|
//params - the params object from the ajaxParams property, this will also include any pagination, filter and sorting properties based on table setup
|
|
|
|
//return request url
|
|
return url + "?params=" + encodeURI(JSON.stringify(params)); //encode parameters as a json object
|
|
},
|
|
dataSendParams:{
|
|
"page":"pageNo", //change page request parameter to "pageNo"
|
|
page - the page number being requested
|
|
size - the number of rows to a page (if paginationSize is set)
|
|
sorters - the first current sorters(if any)
|
|
filter - an array of the current filters (if any)
|
|
} ,
|
|
dataReceiveParams:{
|
|
"last_page":"MAX_PAGE_SIZE", //change last_page parameter name to "max_pages"
|
|
"totalRows":"TOTAL_CNT"
|
|
} ,
|
|
//pagination:"local",
|
|
//paginationMode:"remote", //enable remote pagination
|
|
//pagination:true, //enable pagination
|
|
paginationSize:10, // 한 페이지에 표시할 행 수
|
|
paginationSizeSelector:[10,20,30], // 페이지 크기 선택 옵션 , true(all)
|
|
paginationCounter:"rows", //rows pages
|
|
paginationCounter:function(pageSize, currentRow, currentPage, totalRows, totalPages){
|
|
return "Showing " + pageSize + " rows of " + totalRows + " total";
|
|
},
|
|
,ajaxResponse : function(url, params, response) {
|
|
//console.log("response:" + response.TOTAL_CNT);
|
|
$(".tabulator-footer").hide();
|
|
//$(".total_count_text").empty();
|
|
//$(".total_count_text").append("총 " + response.TOTAL_CNT + "건");
|
|
var modResponse = {};
|
|
modResponse.data = response.RESULTLIST;
|
|
//alert(response.MAX_PAGE_SIZE + ":" + response.COUNT_PER_PAGE + ":" + response.COUNT_PER_PAGE + ":");
|
|
modResponse.last_page = fnc_checkNull(response.MAX_PAGE_SIZE);
|
|
modResponse.paginationSize = fnc_checkNull(response.COUNT_PER_PAGE);
|
|
$(".table_paging_wrap").html(response.PAGE_HTML);
|
|
return modResponse;
|
|
}
|
|
*/
|
|
});
|
|
|
|
gridObj.on("tableBuilt", function(){ //tableBuilding
|
|
$(".tabulator-footer").hide(); //tabulator 페이징 영역 숨김
|
|
|
|
if(!isNotSearchFirst) //생성과 동시에 검색
|
|
fnc_tabul_searchAjax(gridObj, searchURL, formId, hidePaging, checkValidation);
|
|
});
|
|
}
|
|
return gridObj;
|
|
}
|
|
|
|
function fnc_tabul_searchAjax(gridObj, searchURL, formId, hidePaging, checkValidation) {
|
|
if(!$("#"+fnc_checkNullDefaultValue(formId, "form1")) || $("#"+fnc_checkNullDefaultValue(formId, "form1")).length < 1){
|
|
alert('check form : '+fnc_checkNullDefaultValue(formId, "form1"));
|
|
}
|
|
|
|
var formId = fnc_checkNullDefaultValue(formId, "form1");
|
|
|
|
if(checkValidation && !fnc_validate(formId)){
|
|
return;
|
|
}
|
|
|
|
$.ajax({
|
|
url: searchURL,
|
|
type:"POST",
|
|
data:$("#"+formId).serializeObject(),
|
|
dataType:"json",
|
|
//async:false,
|
|
beforeSend:function(){
|
|
_startLoading("Loading...");
|
|
},
|
|
complete:function(){
|
|
_endLoading();
|
|
},
|
|
success:function(response){
|
|
gridObj.setData(response.RESULTLIST);
|
|
if(!hidePaging){
|
|
$(".table_paging_wrap").html(response.PAGE_HTML);
|
|
}
|
|
|
|
//gridObj.selectRow();
|
|
//gridObj.data = data.RESULTLIST;
|
|
//console.log(data);
|
|
},
|
|
error: function(jqxhr, status, error){
|
|
console.log(jqxhr);
|
|
console.log(status);
|
|
console.log(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
var fnc_customSelectEditor = function(cell, onRendered, success, cancel, editorParams) {
|
|
|
|
var cellRealValue = cell.getElement().dataset.selVal;
|
|
cellRealValue = (typeof cellRealValue === "undefined") ? "none" : cellRealValue;
|
|
|
|
//Create and append select list
|
|
var selectList = document.createElement("select");
|
|
selectList.style.width = "100%";
|
|
selectList.style.boxSizing = "border-box";
|
|
|
|
onRendered(function() {
|
|
selectList.focus();
|
|
selectList.style.height = "100%";
|
|
});
|
|
|
|
function onChange() {
|
|
if (selectList.selectedOptions[0].value != cellRealValue) {
|
|
success(selectList.selectedOptions[0].value);
|
|
// Store value to cell dataset; will be done by formatter
|
|
// cell.getElement().dataset.loginName = selectList.selectedOptions[0].value
|
|
//alert("Here is what the actual looks like: " + JSON.stringify(cell.getTable().getData()))
|
|
} else { // No change
|
|
cancel();
|
|
}
|
|
}
|
|
|
|
//submit new value on blur or change
|
|
selectList.addEventListener("blur", onChange);
|
|
|
|
//submit new value on enter
|
|
selectList.addEventListener("keydown", function(e) {
|
|
if (e.keyCode == 13) {
|
|
onChange();
|
|
}
|
|
if (e.keyCode == 27) {
|
|
cancel();
|
|
}
|
|
});
|
|
|
|
if(editorParams.values){
|
|
//Create and append the options
|
|
$.each(editorParams.values, function(i){
|
|
//alert('key:' + key + ' / ' + 'value:' + value);
|
|
var codeId = this[editorParams.valueId];
|
|
var codeName = this[editorParams.labelId];
|
|
|
|
var option = document.createElement("option");
|
|
option.value = codeId;
|
|
option.text = codeName;
|
|
if (codeId === cellRealValue) {
|
|
option.selected = "selected";
|
|
}
|
|
selectList.appendChild(option);
|
|
});
|
|
}
|
|
|
|
return selectList;
|
|
};
|
|
|
|
function fnc_tabul_addrow(layoutParam, gridObj, isNewObjId, objIdFieldId) {
|
|
if(gridObj){
|
|
//생성이후 search
|
|
|
|
var dataArray = gridObj.getData();
|
|
var newData = {};
|
|
// 각 데이터에 대해 순회
|
|
for (var i = 0; i < dataArray.length; i++) {
|
|
if (i == dataArray.length-1) { // 마지막일 경우
|
|
// 각 데이터의 객체
|
|
var dataObj = dataArray[i];
|
|
|
|
// 객체의 키와 값을 출력
|
|
for (var key in dataObj) {
|
|
var value = dataObj[key];
|
|
//console.log("Key: " + key + ", Value: " + value);
|
|
newData[key] = ""; // 빈값 넣기
|
|
}
|
|
}
|
|
}
|
|
if(isNewObjId){
|
|
var newObjid = fnc_createObjId();
|
|
newData[objIdFieldId] = newObjid;
|
|
}
|
|
// Tabulator 객체를 사용하여 행 추가
|
|
gridObj.addData([newData]);
|
|
|
|
}
|
|
return gridObj;
|
|
}
|
|
|
|
function fnc_tabul_delrow(layoutParam, gridObj, showAlert) {
|
|
if (gridObj) {
|
|
// 현재 선택된 행을 가져옴
|
|
var selectedRows = gridObj.getSelectedRows();
|
|
|
|
// 선택된 행이 있는지 확인
|
|
if (selectedRows.length > 0) {
|
|
|
|
if(showAlert){
|
|
// 선택된 행을 삭제하기 전에 사용자에게 확인 메시지를 보여줌
|
|
Swal.fire({
|
|
title: '삭제 확인',
|
|
text: '선택된 항목을 삭제하시겠습니까?',
|
|
icon: 'question',
|
|
showCancelButton: true,
|
|
confirmButtonColor: '#3085d6',
|
|
cancelButtonColor: '#d33',
|
|
confirmButtonText: '삭제',
|
|
cancelButtonText: '취소'
|
|
}).then(function(result) {
|
|
if (result.isConfirmed) {
|
|
// 확인을 클릭한 경우 선택된 행을 삭제
|
|
selectedRows.forEach(function(row) {
|
|
gridObj.deleteRow(row);
|
|
});
|
|
// 선택 해제
|
|
gridObj.deselectRow();
|
|
// 삭제 완료 메시지 표시
|
|
Swal.fire(
|
|
'삭제 완료!',
|
|
'선택된 항목이 삭제되었습니다.',
|
|
'success'
|
|
);
|
|
}
|
|
});
|
|
}else{
|
|
selectedRows.forEach(function(row) {
|
|
gridObj.deleteRow(row);
|
|
});
|
|
// 선택 해제
|
|
gridObj.deselectRow();
|
|
}
|
|
} else {
|
|
// 선택된 행이 없는 경우 경고 메시지 표시
|
|
Swal.fire(
|
|
'삭제할 항목이 선택되지 않았습니다.',
|
|
'',
|
|
'warning'
|
|
);
|
|
}
|
|
}
|
|
return gridObj;
|
|
}
|
|
function fnc_customSelectEditorMes(param, codeParam) {
|
|
// <option value='WG0010' id='' >물류창고</option><option value='WG0020' id='' >공정창고</option>
|
|
//console.log("param : " + param + "codeParam" + codeParam);
|
|
var txt = "#";
|
|
txt += param;
|
|
|
|
var rawData = $(txt).val();
|
|
//console.log("rawData" + rawData);
|
|
|
|
var $options = $(rawData);
|
|
|
|
var resultObject = {};
|
|
resultObject[""] = "선택";
|
|
|
|
|
|
|
|
$options.each(function() {
|
|
var value = $(this).val();
|
|
var text = $(this).text().trim();
|
|
//console.log("value : " + value + " text: " + text);
|
|
resultObject[text] = text;
|
|
|
|
});
|
|
|
|
//console.log("resultObject" + resultObject);
|
|
return resultObject
|
|
|
|
}
|
|
|
|
function fnc_customSelectEditorMesKey(checkKey, currentRowData) {
|
|
var txt = "#";
|
|
txt += checkKey;
|
|
|
|
var rawData = $(txt).val();
|
|
|
|
var $options = $(rawData);
|
|
|
|
var resultObject = {};
|
|
resultObject[""] = "선택";
|
|
|
|
$options.each(function() {
|
|
var value = $(this).val();
|
|
var text = $(this).text().trim();
|
|
resultObject[text] = value;
|
|
});
|
|
|
|
|
|
var keys = Object.keys(resultObject);
|
|
for (var i = 0; i < keys.length; i++) {
|
|
var key = keys[i];
|
|
var value = resultObject[key];
|
|
|
|
var whGroupCodeValue = currentRowData;
|
|
|
|
//console.log("value: " + value + "Key: " + key + ", currentRow: " + whGroupCodeValue);
|
|
|
|
if (key == whGroupCodeValue) {
|
|
return value;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
var fnc_customSelectFormatter = function(cell, formatterParams) {
|
|
var value = cell.getValue();
|
|
if(formatterParams && formatterParams.values){
|
|
for (var i = 0; i < formatterParams.values.length; i++) {
|
|
//if (formatterParams.values[i].CODE_ID === value) {
|
|
if (formatterParams.values[i][formatterParams.valueId] === value) {
|
|
// Store value to cell dataset
|
|
cell.getElement().dataset.selVal = value;
|
|
//value = _PROBLEM_REVIEW_CODE_LIST[i].CODE_ID;
|
|
value = formatterParams.values[i][formatterParams.labelId];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return value;
|
|
}
|
|
|
|
function fnc_isValidateColumnData(validType, columName, message, cell, gridObj) {
|
|
var cnt = 0;
|
|
var trimmedRowData = "";
|
|
if (cell ==="newRowSave") { // 신규형 저장시 유효성 검사
|
|
if(gridObj) grid = gridObj;
|
|
var allRows = grid.getRows();
|
|
// 빈 OBJID를 가진 행만 추출 << 신규행
|
|
const emptyObjIdRows = allRows.filter(function(row) {
|
|
return row.getData().OBJID === "";
|
|
});
|
|
|
|
// 추출된 행을 변수에 저장
|
|
const emptyObjIdRowsData = emptyObjIdRows.map(function(row) {
|
|
return row.getData();
|
|
});
|
|
|
|
// 결과 확인
|
|
//console.log(emptyObjIdRowsData);
|
|
for (var j = 0; j < emptyObjIdRowsData.length; j++) {
|
|
var emptyObjIdWhCode = emptyObjIdRowsData[j][columName];
|
|
trimmedRowData = emptyObjIdWhCode.trim();
|
|
if (trimmedRowData == null || trimmedRowData === "") { // required 검사 시작
|
|
cnt++;
|
|
}
|
|
}
|
|
|
|
if (validType == "unique" || validType == "required") { // 유효성 검사 시작
|
|
if( cnt >= 1) { // required 빈값
|
|
alert(message);
|
|
return true;
|
|
}
|
|
|
|
if (validType == "unique") { // PK성
|
|
for (var i = 0; i < allRows.length; i++) {
|
|
var currentWhCode = allRows[i].getData()[columName];
|
|
|
|
for (var j = 0; j < emptyObjIdRowsData.length; j++) {
|
|
var emptyObjIdWhCode = emptyObjIdRowsData[j][columName];
|
|
|
|
if (currentWhCode === emptyObjIdWhCode) {
|
|
console.log('일치하는 행을 찾았습니다.');
|
|
cnt++;
|
|
} else {
|
|
console.log('일치하지 않는 행입니다.');
|
|
}
|
|
}
|
|
|
|
if (cnt > 1) {
|
|
alert(message);
|
|
return true; // 유효성검사에 적발됨
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else { // 수정된 row 유효성검사
|
|
var currentRowData = cell.getData()[columName];
|
|
trimmedRowData = currentRowData.trim();
|
|
|
|
var values = grid.getData().map(function(row) {
|
|
return row[columName];
|
|
});
|
|
|
|
if (validType == "unique" || validType == "required") { // 유효성 검사 시작
|
|
if (trimmedRowData == null || trimmedRowData === "") { // required 검사 시작
|
|
// 유효성검사 실패
|
|
alert(message);
|
|
return true;
|
|
}
|
|
|
|
if (validType == "unique") { // PK성
|
|
for (var i = 0; i < values.length; i++) {
|
|
//console.log("values: " + values[i] + " currentRowData: " + currentRowData );
|
|
var trimmedValue = values[i].trim();
|
|
if (trimmedValue === trimmedRowData) { // 유효성 검사 cnt
|
|
cnt++;
|
|
}
|
|
}
|
|
if (cnt > 1) { // 유효성검사 실패
|
|
alert(message);
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
|
|
|
|
|
|
}; |