From e7297458f60a81e483412cd343614bc92e88c2e7 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Fri, 24 Jul 2026 17:22:10 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=95=EC=A0=9C=20=EB=B0=98=EB=A0=A4=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20-=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=EB=90=9C=20=EC=8A=B9=EC=9D=B8=EC=9E=90=20=EC=9E=88?= =?UTF-8?q?=EB=8A=94=20=EC=8A=B9=EC=9D=B8=20=EC=9A=94=EC=B2=AD=20=EA=B0=95?= =?UTF-8?q?=EC=A0=9C=20=EB=B0=98=EB=A0=A4=20=EB=A1=9C=EC=A7=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20-=20JSP/JS:=20=EA=B0=95=EC=A0=9C=20=EB=B0=98?= =?UTF-8?q?=EB=A0=A4=20=EB=B2=84=ED=8A=BC=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20=EC=8A=B9=EC=9D=B8=20=EC=83=81=ED=83=9C=EB=B3=84=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../approval/portalAppApprovalManPopup.jsp | 44 +++++++++++++++-- .../approval/portalUserApprovalManPopup.jsp | 42 +++++++++++++++-- .../eai/rms/ext/djb/common/DjbProperty.java | 2 +- .../approval/PortalApprovalManController.java | 9 ++++ .../approval/PortalApprovalManService.java | 47 +++++++++++++++++++ 5 files changed, 137 insertions(+), 7 deletions(-) diff --git a/WebContent/jsp/onl/apim/approval/portalAppApprovalManPopup.jsp b/WebContent/jsp/onl/apim/approval/portalAppApprovalManPopup.jsp index 7483acd..7d3e5bd 100644 --- a/WebContent/jsp/onl/apim/approval/portalAppApprovalManPopup.jsp +++ b/WebContent/jsp/onl/apim/approval/portalAppApprovalManPopup.jsp @@ -101,6 +101,32 @@ } }); + $("#btn_app_force_reject").click(function () { + if (!confirm("승인자 목록에 삭제된 사용자가 있어 승인 진행이 불가능한 건입니다.\n강제 반려하시겠습니까?")) { + return; + } + var rejectReason = prompt("강제 반려 사유를 입력해 주세요"); + if (rejectReason != null) { + $.ajax({ + type: "POST", + url: url, + data: {cmd: "FORCE_REJECT", id: key, rejectReason: rejectReason}, + success: function (args) { + alert("강제 반려되었습니다."); + if (window.dialogArguments && window.dialogArguments.self) { + window.dialogArguments.self.location.reload(); + } else if (window.opener) { + window.opener.location.reload(); + } + window.close(); + }, + error: function (e) { + alert(e.responseText); + } + }); + } + }); + $('#btn_app_redeploy').click(function () { if (confirm("재배포 하시겠습니까?")) { $.ajax({ @@ -178,10 +204,11 @@ $("#createdDate").text(data.createdDate).inputmask("9999-99-99 99:99:99.999", {'autoUnmask': true}); $("#expectEndDate").val(data.expectEndDate); - if (data.approvers.some(approver => + var isCurrentApprover = data.approvers.some(approver => approver.approverStatus === 'CURRENT' && - approver.user.USERID === loginUser - )) { + approver.user && approver.user.USERID === loginUser + ); + if (isCurrentApprover) { document.getElementById("btn_app_approve").style.display = ""; document.getElementById("btn_app_reject").style.display = ""; } else { @@ -189,6 +216,14 @@ document.getElementById("btn_app_reject").style.display = "none"; } + // 삭제된 승인자(USERID 없음)로 진행 불가한 건: 요청됨/진행중 상태면 승인자가 아니어도 강제 반려 허용 + var hasDeletedApprover = data.approvers.some(approver => + !approver.user || !approver.user.USERID + ); + var isProgressStatus = data.approvalStatus.code === 'REQUESTED' || data.approvalStatus.code === 'PROCESSING'; + document.getElementById("btn_app_force_reject").style.display = + (hasDeletedApprover && isProgressStatus && !isCurrentApprover) ? "" : "none"; + if (data.approvalStatus.code === 'FAILED') { document.getElementById("btn_app_redeploy").style.display = ""; } @@ -345,6 +380,9 @@ + diff --git a/WebContent/jsp/onl/apim/approval/portalUserApprovalManPopup.jsp b/WebContent/jsp/onl/apim/approval/portalUserApprovalManPopup.jsp index 101cfcc..cc5b70b 100644 --- a/WebContent/jsp/onl/apim/approval/portalUserApprovalManPopup.jsp +++ b/WebContent/jsp/onl/apim/approval/portalUserApprovalManPopup.jsp @@ -150,6 +150,32 @@ } }); + $("#btn_user_force_reject").click(function() { + if (!confirm("승인자 목록에 삭제된 사용자가 있어 승인 진행이 불가능한 건입니다.\n강제 반려하시겠습니까?")) { + return; + } + var rejectReason = prompt("강제 반려 사유를 입력해 주세요"); + if (rejectReason != null) { + $.ajax({ + type: "POST", + url: url, + data: {cmd: "FORCE_REJECT", id: key, rejectReason: rejectReason}, + success: function(args) { + alert("강제 반려되었습니다."); + if (window.dialogArguments && window.dialogArguments.self) { + window.dialogArguments.self.location.reload(); + } else if (window.opener) { + window.opener.location.reload(); + } + window.close(); + }, + error: function(e) { + alert(e.responseText); + } + }); + } + }); + $('#btn_user_redeploy').click(function() { if (confirm("재배포 하시겠습니까?")) { $.ajax({ @@ -222,10 +248,11 @@ $("#mobileNumber").text(portalUser.mobileNumber); $("#userStatusDescription").text(portalUser.userStatusDescription); $("#roleCodeDescription").text(portalUser.roleCodeDescription); - if (data.approvers.some(approver => + var isCurrentApprover = data.approvers.some(approver => approver.approverStatus === 'CURRENT' && - approver.user.USERID === loginUser - )) { + approver.user && approver.user.USERID === loginUser + ); + if (isCurrentApprover) { document.getElementById("btn_user_approve").style.display = ""; document.getElementById("btn_user_reject").style.display = ""; } else { @@ -233,6 +260,14 @@ document.getElementById("btn_user_reject").style.display = "none"; } + // 삭제된 승인자(USERID 없음)로 진행 불가한 건: 요청됨/진행중 상태면 승인자가 아니어도 강제 반려 허용 + var hasDeletedApprover = data.approvers.some(approver => + !approver.user || !approver.user.USERID + ); + var isProgressStatus = data.approvalStatus.code === 'REQUESTED' || data.approvalStatus.code === 'PROCESSING'; + document.getElementById("btn_user_force_reject").style.display = + (hasDeletedApprover && isProgressStatus && !isCurrentApprover) ? "" : "none"; + if (data.approvalStatus.description === '배포실패'){ document.getElementById("btn_user_redeploy").style.display = ""; } @@ -486,6 +521,7 @@