Files
eapim-admin/WebContent/jsp/common/acl/deploy/deployResourceSearchMan.jsp
T
Rinjae c54ef1903f init
2025-09-05 17:16:26 +09:00

374 lines
16 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ page import="java.io.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="/jsp/common/include/localemessage.jsp" %>
<%@ page import="com.eactive.eai.rms.common.login.SessionManager"%>
<%@ page import="com.eactive.eai.common.util.SystemUtil"%>
<%
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Expires", "0");
%>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<jsp:include page="/jsp/common/include/css.jsp"/>
<jsp:include page="/jsp/common/include/script.jsp"/>
<script>
var url = '<c:url value="/common/acl/deploy/deployResourceSearchMan.json" />';
var url_view = '<c:url value="/common/acl/deploy/deployResourceSearchMan.view" />';
$(document).ready(function() {
var gridPostData = getSearchForJqgrid("cmd","LIST"); //jqgrid에서는 object 로
$('#sourceGrid').jqGrid({
datatype:"json",
mtype: 'POST',
url: url,
postData : gridPostData,
colNames:[
'<%= localeMessage.getString("deployResourceSearchMan.resourceApp") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.resourceType") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.resourceName") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.resourceDesc") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.resourcePath") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.interfaceName") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.interfaceDesc") %>'
, '<%= localeMessage.getString("deployResourceSearchMan.userId") %>'
, 'downloadable'
],
colModel:[
{ name : 'resourceApp' , align:'center', width: 80}
, { name : 'resourceType' , align:'center', width: 100}
, { name : 'resourceName' , align:'left', width: 250}
, { name : 'resourceDesc' , align:'left', width: 250}
, { name : 'resourcePath' , hidden: true }
, { name : 'interfaceName', align:'center' }
, { name : 'interfaceDesc', hidden: true }
, { name : 'userId' , align:'center', width: 100}
, { name : 'downloadable' , hidden: true},
],
jsonReader: {
repeatitems:false
},
rowNum : 10000,
height: "650",
viewrecords: true,
multiselect: true,
gridComplete:function (d){
var colModel = $(this).getGridParam("colModel");
for(var i = 0 ; i< colModel.length; i++){
$(this).setColProp(colModel[i].name, {sortable : false}); //그리드 헤더 화살표 삭제(정렬X)
}
},
beforeRequest: function() {
$("div.ui-jqgrid-hbox table thead tr th input[type='checkbox']").remove();
},
loadComplete:function (d){
var ids = $(this).jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var rowId = ids[i];
var rowData = $(this).jqGrid('getRowData', rowId);
if (rowData.downloadable === 'false') {
$("#" + rowId).find("input[type=checkbox]").attr("disabled", true);
}
}
$("#sourceGrid").tuiTableRowSpan("6");
// rowspan 된 영역 클릭시 해당 record 모두 선택되도록
$('#sourceGrid').on('click', 'tr.jqgrow td:nth-child(7)', function() {
var rowId = $(this).closest('tr').attr('id');
var rowspan = $(this).attr('rowspan') || 1;
rowspan = parseInt(rowspan, 10);
// 현재 클릭된 셀부터 rowspan 개수만큼의 행 선택
var currentRow = $(this).closest('tr');
for (var i = 0; i < rowspan; i++) {
var currentRowId = currentRow.attr('id');
if (!currentRow.find('input[type=checkbox]').is(':disabled') && rowId != currentRowId) {
// 체크박스가 disabled되지 않았다면 해당 행 선택
$("#sourceGrid").jqGrid('setSelection', currentRowId, true);
}
currentRow = currentRow.next();
}
});
},
loadError: function (jqXHR, textStatus, errorThrown) {
var location ='<%=request.getContextPath()%>/';
comloadError(jqXHR, textStatus, errorThrown ,location);
},
beforeSelectRow: function (rowid, e) {
var cb = $('#jqg_sourceGrid_' + rowid);
if (cb.is(':disabled')) {
return false;
}
},
onCellSelect: function (rowid, iCol, cellcontent, e) {
}
});
jQuery("#sourceGrid").jqGrid( 'setGridWidth', $("#sourceGrid_wrapper").width());
$('#targetGrid').jqGrid({
datatype:"json",
colNames:[
'<%= localeMessage.getString("deployResourceSearchMan.resourceApp") %>',
'<%= localeMessage.getString("deployResourceSearchMan.resourceType") %>',
'<%= localeMessage.getString("deployResourceSearchMan.resourceName") %>',
'<%= localeMessage.getString("deployResourceSearchMan.resourcePath") %>',
'<%= localeMessage.getString("deployResourceSearchMan.deleteBtn") %>'
],
colModel:[
{ name : 'resourceApp', hidden: true},
{ name : 'resourceType', align:'center', width: 80},
{ name : 'resourceName', align:'left' , width: 150},
{ name : 'resourcePath', align:'left' , width: 150},
{ name : 'deleteBtn', align:'center', width: 50,
formatter: (cellvalue, options, rowObject) => {
var rowId = options["rowId"];
return "<img id='btn_pop_delete' name='img_"+rowId+"' src=<c:url value='/images/bt/pop_delete.gif' /> />";
},
unformat: (cellvalue, options, rowObject) => {
return "";
}
}
],
jsonReader: {
repeatitems:false
},
rowNum : 10000,
height: 650,
viewrecords: true,
gridComplete:function (d){
var colModel = $(this).getGridParam("colModel");
for(var i = 0 ; i< colModel.length; i++){
$(this).setColProp(colModel[i].name, {sortable : false}); //그리드 헤더 화살표 삭제(정렬X)
}
},
loadComplete : function (data) {
},
loadBeforeSend : function (xhr,settings){
if(this.p.url ==null || this.p.url == ""){
this.p.loadBeforeSend = null;
return false;
}
},
loadError: function (jqXHR, textStatus, errorThrown) {
var location ='<%=request.getContextPath()%>/';
comloadError(jqXHR, textStatus, errorThrown ,location);
},
onSelectRow : function(rowid, status){
},
onCellSelect: function (rowid, iCol, cellcontent, e) {
}
});
jQuery("#targetGrid").jqGrid( 'setGridWidth', $("#targetGrid_wrapper").width());
$("#btn_search").click(function(){
var postData = getSearchForJqgrid("cmd","LIST");
$("#sourceGrid").setGridParam({ postData: postData ,page : "1" }).trigger("reloadGrid");
$('#sourceGrid').on('click', 'tr.jqgrow td:nth-child(7)', function() {
var rowId = $(this).closest('tr').attr('id');
var rowspan = $(this).attr('rowspan') || 1;
rowspan = parseInt(rowspan, 10);
// 현재 클릭된 셀부터 rowspan 개수만큼의 행 선택
var currentRow = $(this).closest('tr');
for (var i = 0; i < rowspan; i++) {
var currentRowId = currentRow.attr('id');
if (!currentRow.find('input[type=checkbox]').is(':disabled') && rowId != currentRowId) {
// 체크박스가 disabled되지 않았다면 해당 행 선택
$("#sourceGrid").jqGrid('setSelection', currentRowId, true);
}
currentRow = currentRow.next();
}
});
});
$("input[name^=search]").keydown(function(key){
if (key.keyCode == 13){
$("#btn_search").click();
}
});
$("#addBtn").click(function(){
var selectedRows = $("#sourceGrid").jqGrid('getGridParam', 'selarrrow'); // SourceGrid에서 선택된 행의 ID 배열
for(var i = 0; i < selectedRows.length; i++) {
var rowData = $("#sourceGrid").jqGrid('getRowData', selectedRows[i]);
var key = rowData.resourceName;
// TargetGrid에서 동일한 키를 가진 행이 있는지 확인
var isDuplicate = false;
var targetGridData = $("#targetGrid").jqGrid('getRowData');
for (var j = 0; j < targetGridData.length; j++) {
if (targetGridData[j].resourceName === key) {
isDuplicate = true;
break;
}
}
// 중복되지 않은 경우에만 TargetGrid에 행 추가
if (!isDuplicate) {
$("#targetGrid").jqGrid('addRowData', rowData.id, rowData);
} else {
//alert('중복된 항목이 존재합니다: ' + key);
}
}
var ids = $('#targetGrid').jqGrid('getDataIDs');
for (var i = 0; i < ids.length; i++) {
var rowid = ids[i];
$("img[name=img_" + rowid + "]").click(function() {
var name = $(this).attr("name");
var rowId = name.split("_")[1];
$('#targetGrid').jqGrid('delRowData', rowId);
});
}
});
$("#btn_download").click(function() {
var targetGridData = $("#targetGrid").jqGrid('getRowData');
const postData = new FormData();
postData.append('cmd', 'DOWNLOAD_RESOURCES_ZIP');
postData.append('gridData', JSON.stringify(targetGridData));
postData.append('serviceType', sessionStorage["serviceType"]);
fetch(url, {
method: 'POST',
// headers: {
// 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
// },
body: postData
})
.then(response => {
const contentDisposition = response.headers.get('Content-Disposition');
let filename = 'noname.txt';
if (contentDisposition) {
const filenameMatch = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(contentDisposition);
if (filenameMatch && filenameMatch[1]) {
filename = filenameMatch[1].replace(/['"]/g, '');
}
}
return response.blob().then(blob => {
return { blob, filename };
});
})
.then(({ blob, filename }) => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.append(a);
a.click();
a.remove();
window.URL.revokeObjectURL(url);
})
.catch(error => console.error('Download error:', error));
});
buttonControl();
$(window).on('resize.jqGrid', function () {
jQuery("#sourceGrid").jqGrid( 'setGridWidth', $("#sourceGrid_wrapper").width());
jQuery("#targetGrid").jqGrid( 'setGridWidth', $("#targetGrid_wrapper").width());
});
});
</script>
</head>
<body>
<div class="right_box">
<div class="content_top">
<ul class="path">
<li><a href="#">${rmsMenuPath}</a></li>
</ul>
</div><!-- end content_top -->
<div class="content_middle" id="content_middle">
<div class="search_wrap">
<button type="button" class="cssbtn" id="btn_search" level="R" ><i class="material-icons">search</i> <%= localeMessage.getString("button.search") %></button>
</div>
<div class="title"><%= localeMessage.getString("deployResourceSearchMan.title") %></div>
<table class="search_condition" cellspacing=0;>
<tbody>
<tr>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.resourceApp") %></th>
<td><input type="text" name="searchResourceApp" value="${param.searchResourceApp}"></td>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.resourceName") %></th>
<td><input type="text" name="searchResourceName" value="${param.searchResourceName}"></td>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.resourceDesc") %></th>
<td><input type="text" name="searchResourceDesc" value="${param.searchResourceDesc}"></td>
</tr>
<tr >
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.resourceType") %></th>
<td>
<div class="select-style">
<select name="searchResourceType" value="${param.searchResourceType}">
<option value="">ALL</option>
<option value="interface">interface</option>
<option value="transform">transform</option>
<option value="layout">layout</option>
</select>
</div>
</td>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.interfaceName") %></th>
<td><input type="text" name="searchInterfaceName" value="${param.searchInterfaceName}"></td>
<th style="width:180px;"><%= localeMessage.getString("deployResourceSearchMan.interfaceDesc") %></th>
<td><input type="text" name="searchInterfaceDesc" value="${param.searchInterfaceDesc}"></td>
</tr>
</tbody>
</table>
<div style="text-align: right; margin-bottom: 15px;">
<button type="button" class="cssbtn" id="btn_download" level="W" ><i class="material-icons">download</i> Download</button>
</div>
<div style="display: flex; justify-content: space-between;">
<div id="sourceGrid_wrapper" style="width: 65%;">
<table id="sourceGrid" ></table>
</div>
<div style="width: 5%; text-align: center;">
<button type="button" class="cssbtn" id="addBtn" level="W" style="min-width: 50px; margin-bottom: 2px; margin-top: 90px; display: inline-block;">
<i class="material-icons">keyboard_double_arrow_right</i>
</button>
</div>
<div id="targetGrid_wrapper" style="width: 30%;">
<table id="targetGrid" ></table>
</div>
</div>
</div><!-- end content_middle -->
</div><!-- end right_box -->
</body>
</html>