Client API 추가 Popup Scope화면에도 적용. bzwksvckeyname를 화면에 넘겨주기위해 일부 수정.
추가요건 1. 팝업 및 리스트에 API명, API FULL PATH 추가. 추가요건 2. API-SCOPE 매핑하면 -> SCOPE 화면에서 통합관리 할 수 있게 변경.
This commit is contained in:
@@ -18,6 +18,8 @@
|
||||
<script language="javascript" >
|
||||
var url = '<c:url value="/onl/admin/authserver/scopeMan.json" />';
|
||||
var url_view = '<c:url value="/onl/admin/authserver/scopeMan.view" />';
|
||||
var api_url_view = '<c:url value="/onl/apim/apigroup/apiGroupMan.view" />';
|
||||
var mapping_url = '<c:url value="/onl/admin/authserver/apiScopeMan.json" />';
|
||||
|
||||
var isDetail = false;
|
||||
function isValid(){
|
||||
@@ -58,8 +60,106 @@ function detail(key){
|
||||
});
|
||||
}
|
||||
|
||||
function init(key,callback){
|
||||
function mappingInfo(key){
|
||||
if (!isDetail) return;
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url: mapping_url,
|
||||
dataType: "json",
|
||||
data: {cmd: 'LIST', searchScopeId : key},
|
||||
success: function(json){
|
||||
var mappingData = json.rows;
|
||||
|
||||
if (mappingData && mappingData.length > 0) {
|
||||
$.each(mappingData, function(idx, row) {
|
||||
row.apiId = row.apiId;
|
||||
row.apiDesc = row.apiDesc;
|
||||
row.apiFullPath = row.APIFULLPATH;
|
||||
row.bzwksvckeyname = row.BZWKSVCKEYNAME;
|
||||
});
|
||||
}
|
||||
|
||||
var $grid = $("#selectedApiGrid");
|
||||
$grid.jqGrid('clearGridData');
|
||||
$grid.jqGrid('setGridParam', {
|
||||
datatype: 'local',
|
||||
data: mappingData
|
||||
}).trigger("reloadGrid");
|
||||
},
|
||||
error: function(e){
|
||||
alert("데이터 조회 중 오류 발생: " + e.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function init(key, callback){
|
||||
detail(key);
|
||||
|
||||
var selectedApiGrid = $("#selectedApiGrid");
|
||||
selectedApiGrid.jqGrid({
|
||||
datatype: "local",
|
||||
colNames: ['API ID', 'API 명', 'SCOPE ID', 'SCOPE 명', 'API FULL PATH', 'API 정보'],
|
||||
colModel: [
|
||||
{name: 'apiId', index: 'apiId', width: 100, align: 'center'},
|
||||
{name: 'apiDesc', index: 'apiDesc', width: 100, align: 'center'},
|
||||
{name: 'SCOPEID', index: 'SCOPEID', width: 100, align: 'center'},
|
||||
{name: 'SCOPENAME', index: 'SCOPENAME', width: 100, align: 'center'},
|
||||
{name: 'APIFULLPATH', index: 'APIFULLPATH', width: 100, align: 'left'},
|
||||
{name: 'BZWKSVCKEYNAME', index: 'BZWKSVCKEYNAME', width: 100, align: 'left'}
|
||||
],
|
||||
rowNum: 30,
|
||||
rowList: [10, 20, 30],
|
||||
pager: '#selectedApiGridPager',
|
||||
sortname: 'apiId',
|
||||
viewrecords: true,
|
||||
sortorder: "asc",
|
||||
caption: "선택된 API",
|
||||
height: 200,
|
||||
autowidth: true,
|
||||
multiselect: true,
|
||||
ondblClickRow: function (rowid, status, e) {
|
||||
// selectedApiGrid.jqGrid('delRowData', rowid);
|
||||
}
|
||||
});
|
||||
|
||||
mappingInfo(key); // SCOPE ID의 매핑정보 (AJAX 호출)
|
||||
|
||||
// callback이 함수인지 확인 후 호출 (안전장치)
|
||||
if (typeof callback === 'function') {
|
||||
callback(key);
|
||||
}
|
||||
}
|
||||
|
||||
function saveApiGridData(scopeId, returnUrl) {
|
||||
var postData = [];
|
||||
var rows = $("#selectedApiGrid").jqGrid('getRowData');
|
||||
|
||||
$.each(rows, function(index, item) {
|
||||
item.scopeId = scopeId;
|
||||
});
|
||||
|
||||
postData.push({
|
||||
name: "apiList",
|
||||
value: JSON.stringify(rows)
|
||||
});
|
||||
|
||||
postData.push({ name: "cmd" , value:"INSERT_APILIST" });
|
||||
postData.push({ name: "scopeId" , value:scopeId });
|
||||
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url:mapping_url,
|
||||
data: postData,
|
||||
success:function(args){
|
||||
alert("저장 되었습니다.");
|
||||
|
||||
goNav(returnUrl);//LIST로 이동
|
||||
},
|
||||
error:function(e){
|
||||
alert(e.responseText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
@@ -85,8 +185,10 @@ $(document).ready(function() {
|
||||
url:url,
|
||||
data:postData,
|
||||
success:function(args){
|
||||
alert("저장 되었습니다.");
|
||||
goNav(returnUrl);//LIST로 이동
|
||||
alert("SCOPE 정보가 저장 되었습니다. 이어서 API 리스트를 저장합니다.");
|
||||
|
||||
saveApiGridData(key, returnUrl); // API LIST 저장.
|
||||
|
||||
},
|
||||
error:function(e){
|
||||
alert(e.responseText);
|
||||
@@ -121,8 +223,65 @@ $(document).ready(function() {
|
||||
goNav(returnUrl);//LIST로 이동
|
||||
});
|
||||
|
||||
$("#btn_popup_api").click(function () {
|
||||
const args = {};
|
||||
const url2 = api_url_view += "?cmd=POPUP";
|
||||
showModal(url2, args, 1280, 860, function () {
|
||||
const popupFrame = args.self.frames[0];
|
||||
const returnValue = popupFrame.returnValue;
|
||||
const frameElement = popupFrame.frameElement
|
||||
const parentElement = frameElement.parentNode; // 부모 노드를 가져옴
|
||||
|
||||
if (parentElement) { // 부모 노드가 존재하는지 확인
|
||||
parentElement.removeChild(frameElement);
|
||||
}
|
||||
|
||||
var rows = $("#selectedApiGrid").jqGrid('getRowData');
|
||||
|
||||
var existingApiIds = new Set(rows.map(function(row) {
|
||||
return String(row.apiId);
|
||||
}));
|
||||
|
||||
var newItems = Array.isArray(returnValue) ? returnValue : [returnValue];
|
||||
|
||||
var ids = $("#selectedApiGrid").jqGrid('getDataIDs');
|
||||
var currentIdSeq = ids.length > 0 ? Math.max(...ids.map(Number)) : 0;
|
||||
|
||||
$.each(newItems, function(index, item) {
|
||||
var checkId = String(item.apiId);
|
||||
|
||||
if (!existingApiIds.has(checkId)) {
|
||||
currentIdSeq++;
|
||||
$("#selectedApiGrid").jqGrid('addRowData', currentIdSeq, item, "last");
|
||||
|
||||
existingApiIds.add(checkId);
|
||||
} else {
|
||||
//console.log("중복 제외됨: " + item.apiId);
|
||||
}
|
||||
});
|
||||
|
||||
alert("중복건 수를 제외한 API가 추가되었습니다.");
|
||||
});
|
||||
});
|
||||
|
||||
$("#btn_delete_api").click(function () {
|
||||
var grid = $("#selectedApiGrid");
|
||||
var selectedRowIds = grid.jqGrid('getGridParam', 'selarrrow'); // 선택된 행의 ID 배열을 가져옴
|
||||
if (selectedRowIds.length > 0) {
|
||||
// 선택된 행의 ID를 복사한 배열을 사용
|
||||
var idsToDelete = selectedRowIds.slice();
|
||||
|
||||
for (var i = 0; i < idsToDelete.length; i++) {
|
||||
grid.jqGrid('delRowData', idsToDelete[i]); // 선택된 각 행을 삭제
|
||||
}
|
||||
} else {
|
||||
alert("Please select at least one row to delete.");
|
||||
}
|
||||
});
|
||||
|
||||
buttonControl(isDetail);
|
||||
titleControl(isDetail);
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
@@ -161,7 +320,25 @@ $(document).ready(function() {
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!-- API ID / API Full Path 추가 -->
|
||||
<div style="font-size:0;">
|
||||
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 5px ">
|
||||
<div class="table_row_title" style="margin-bottom: 0px">API</div>
|
||||
<div style="text-align: end;">
|
||||
<button type="button" class="cssbtn" id="btn_delete_api" level="W" status="DETAIL,NEW">
|
||||
<i class="material-icons">delete</i> <%= localeMessage.getString("button.delete") %>
|
||||
</button>
|
||||
<button type="button" class="cssbtn" id="btn_popup_api" level="W" status="DETAIL,NEW">
|
||||
<i class="material-icons">add</i> API <%= localeMessage.getString("button.add") %>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:inline-block; width:calc(100%); vertical-align:top;">
|
||||
<div id="selectedApiList" style="margin-top:10px;">
|
||||
<table id="selectedApiGrid"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- end content_middle -->
|
||||
</div><!-- end right_box -->
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user