e-bom, 상태변경 등 경고 표시, 상태변경 권한 적용
This commit is contained in:
@@ -2,7 +2,27 @@
|
||||
<%@ page import="com.pms.common.utils.*"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ page import="java.util.*" %>
|
||||
<%@include file= "/init.jsp" %>
|
||||
<%@include file= "/init.jsp" %>
|
||||
<%
|
||||
// 권한 체크: AUTHORITY_MASTER의 OBJID가 41000668인 그룹에 속한 사용자인지 확인
|
||||
boolean hasStatusChangeAuth = false;
|
||||
try {
|
||||
org.apache.ibatis.session.SqlSession sqlSession = com.pms.common.SqlMapConfig.getInstance().getSqlSession();
|
||||
java.util.Map<String, Object> authParam = new java.util.HashMap<String, Object>();
|
||||
authParam.put("userId", connectUserId);
|
||||
authParam.put("masterObjid", "41000668");
|
||||
|
||||
Integer authCount = (Integer)sqlSession.selectOne("common.checkUserAuthority", authParam);
|
||||
hasStatusChangeAuth = (authCount != null && authCount > 0);
|
||||
|
||||
sqlSession.close();
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
%>
|
||||
<script>
|
||||
var hasStatusChangeAuth = <%=hasStatusChangeAuth%>;
|
||||
</script>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
@@ -165,8 +185,8 @@ var columns = [
|
||||
{headerHozAlign : 'center', hozAlign : 'center', width : '150', title : 'E-BOM', field : 'BOM_CNT',
|
||||
formatter: fnc_subInfoValueFormatter,
|
||||
cellClick:function(e, cell){
|
||||
var objId = fnc_checkNull(cell.getData().OBJID);
|
||||
//var bomReportObjId = fnc_checkNull(cell.getData().BOM_REPORMECHANICAL_TYPET_OBJID);
|
||||
var objId = fnc_checkNull(cell.getData().OBJID);
|
||||
// 바로 팝업 열기 (팝업창 내부에서 경고 처리)
|
||||
fn_openSetStructure(objId);
|
||||
}
|
||||
},
|
||||
@@ -498,6 +518,16 @@ function fn_openChangeDesignNote(objId){
|
||||
* 상태변경 팝업
|
||||
*/
|
||||
function fn_openStatusChange() {
|
||||
// 권한 체크
|
||||
if(!hasStatusChangeAuth) {
|
||||
Swal.fire({
|
||||
title: '권한 없음',
|
||||
text: '상태변경 권한이 없습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
var selectedStructure = _tabulGrid.getSelectedData();
|
||||
|
||||
if(selectedStructure.length == 0){
|
||||
@@ -512,8 +542,33 @@ function fn_openStatusChange() {
|
||||
|
||||
var selectedData = selectedStructure[0];
|
||||
var objId = fnc_checkNull(selectedData.OBJID);
|
||||
var partNo = fnc_checkNull(selectedData.PART_NO);
|
||||
var partName = fnc_checkNull(selectedData.PART_NAME);
|
||||
var currentStatus = fnc_checkNull(selectedData.STATUS);
|
||||
|
||||
window.open("/partMng/structureStatusChangePopup.do?objId=" + objId, "structureStatusChangePopup", "width=500, height=300, resizable=no");
|
||||
// 현재 상태 표시용 텍스트 (Y/N만 존재)
|
||||
var statusText = (currentStatus === 'Y') ? 'Y' : 'N';
|
||||
|
||||
// 상태변경 확인 경고
|
||||
Swal.fire({
|
||||
title: 'E-BOM 상태 변경',
|
||||
html: 'E-BOM의 상태변경을 진행하시겠습니까?<br><br>' +
|
||||
'<strong>품번:</strong> ' + partNo + '<br>' +
|
||||
'<strong>품명:</strong> ' + partName + '<br>' +
|
||||
'<strong>현재 상태:</strong> ' + statusText + '<br><br>' +
|
||||
'상태를 변경하시겠습니까?',
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: '상태변경',
|
||||
cancelButtonText: '취소',
|
||||
reverseButtons: false
|
||||
}).then(result => {
|
||||
if (result.isConfirmed) {
|
||||
window.open("/partMng/structureStatusChangePopup.do?objId=" + objId, "structureStatusChangePopup", "width=500, height=300, resizable=no");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function saveexcelpop() {
|
||||
@@ -552,21 +607,40 @@ function saveexcelpop() {
|
||||
BOM_VERSION = fnc_checkNull(selectedStructure[i].REVISION);
|
||||
}
|
||||
|
||||
// hiddenForm을 사용하여 POST 방식으로 팝업 열기 (한글 인코딩 문제 해결)
|
||||
var hiddenForm = document.hiddenForm;
|
||||
var url = "/partMng/openBomReportExcelImportPopUp.do";
|
||||
var target = "openBomReportExcelImportPopUp";
|
||||
|
||||
hiddenForm.PRODUCT_CD.value = BOM_PRODUCT_CD;
|
||||
hiddenForm.BOM_PART_NAME.value = BOM_PART_NAME;
|
||||
hiddenForm.BOM_PART_NO.value = BOM_PART_NO;
|
||||
hiddenForm.BOM_REPORT_OBJID.value = BOM_REPORT_OBJID;
|
||||
hiddenForm.BOM_VERSION.value = BOM_VERSION;
|
||||
|
||||
window.open('', target, 'width=1920, height=860, menubars=no, scrollbars=yes, resizable=yes');
|
||||
hiddenForm.action = url;
|
||||
hiddenForm.target = target;
|
||||
hiddenForm.submit();
|
||||
// CSV 업로드 확인 경고
|
||||
Swal.fire({
|
||||
title: 'E-BOM CSV 업로드',
|
||||
html: 'CSV 파일을 통해 E-BOM 데이터를 새로 등록합니다.<br><br>' +
|
||||
'<strong>품번:</strong> ' + BOM_PART_NO + '<br>' +
|
||||
'<strong>품명:</strong> ' + BOM_PART_NAME + '<br>' +
|
||||
'<strong>버전:</strong> ' + BOM_VERSION + '<br><br>' +
|
||||
'계속하시겠습니까?',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: '계속',
|
||||
cancelButtonText: '취소',
|
||||
reverseButtons: false
|
||||
}).then(result => {
|
||||
if (result.isConfirmed) {
|
||||
// hiddenForm을 사용하여 POST 방식으로 팝업 열기 (한글 인코딩 문제 해결)
|
||||
var hiddenForm = document.hiddenForm;
|
||||
var url = "/partMng/openBomReportExcelImportPopUp.do";
|
||||
var target = "openBomReportExcelImportPopUp";
|
||||
|
||||
hiddenForm.PRODUCT_CD.value = BOM_PRODUCT_CD;
|
||||
hiddenForm.BOM_PART_NAME.value = BOM_PART_NAME;
|
||||
hiddenForm.BOM_PART_NO.value = BOM_PART_NO;
|
||||
hiddenForm.BOM_REPORT_OBJID.value = BOM_REPORT_OBJID;
|
||||
hiddenForm.BOM_VERSION.value = BOM_VERSION;
|
||||
|
||||
window.open('', target, 'width=1920, height=860, menubars=no, scrollbars=yes, resizable=yes');
|
||||
hiddenForm.action = url;
|
||||
hiddenForm.target = target;
|
||||
hiddenForm.submit();
|
||||
}
|
||||
});
|
||||
}
|
||||
}else{
|
||||
if($("#customer_cd").val()==""){
|
||||
|
||||
@@ -6,8 +6,34 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
<title><%=Constants.SYSTEM_NAME%></title>
|
||||
|
||||
<script>
|
||||
// confirm/alert 헬퍼 함수
|
||||
function showConfirm(options) {
|
||||
if(typeof options === 'string') {
|
||||
alert(options);
|
||||
return Promise.resolve({isConfirmed: true});
|
||||
}
|
||||
|
||||
var message = '';
|
||||
if(options.title) message += options.title + '\n\n';
|
||||
if(options.html) {
|
||||
// HTML 태그 제거
|
||||
message += options.html.replace(/<br\s*\/?>/gi, '\n').replace(/<[^>]+>/g, '');
|
||||
} else if(options.text) {
|
||||
message += options.text;
|
||||
}
|
||||
|
||||
if(options.showCancelButton !== false && (options.icon === 'warning' || options.icon === 'question')) {
|
||||
var result = confirm(message);
|
||||
return Promise.resolve({isConfirmed: result});
|
||||
} else {
|
||||
alert(message);
|
||||
return Promise.resolve({isConfirmed: true});
|
||||
}
|
||||
}
|
||||
|
||||
$(function(){
|
||||
|
||||
$('.select2').select2();
|
||||
@@ -19,7 +45,7 @@ $(function(){
|
||||
var rightSelectedRows = rightFrame.getSelectedRows ? rightFrame.getSelectedRows() : [];
|
||||
|
||||
if(rightSelectedRows.length === 0) {
|
||||
alert("선택된 파트가 없습니다.");
|
||||
showConfirm("선택된 파트가 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -50,7 +76,11 @@ $(function(){
|
||||
var rowData = rightSelectedRows[i].getData();
|
||||
var rightPartNo = rowData.PART_NO;
|
||||
if(rightPartNo == leftPartNo){
|
||||
alert("오류 Part No : ["+rightPartNo+"]\n같은 Part No끼리 연결할 수 없습니다.");
|
||||
showConfirm({
|
||||
title: '연결 불가',
|
||||
html: '오류 Part No : <strong>['+rightPartNo+']</strong><br>같은 Part No끼리 연결할 수 없습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
isSamePart = true;
|
||||
break;
|
||||
}
|
||||
@@ -73,7 +103,11 @@ $(function(){
|
||||
if("unique" == rightPartType){
|
||||
for(var j = 0 ; j < deniedPartArr.length ; j++){
|
||||
if(rightPartNo == deniedPartArr[j]){
|
||||
alert("오류 Part No : "+"["+rightPartNo+"]\n이미 상위에 등록된 Part No 입니다.");
|
||||
showConfirm({
|
||||
title: '연결 불가',
|
||||
html: '오류 Part No : <strong>['+rightPartNo+']</strong><br>이미 상위에 등록된 Part No 입니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
isDeniedPart = true;
|
||||
break;
|
||||
}
|
||||
@@ -94,12 +128,31 @@ $(function(){
|
||||
if(fnc_checkNull(leftPartNo) == ""){
|
||||
var flag = fn_checkSameTopPartNo(rightCheckedArr);
|
||||
if(flag == "true"){
|
||||
alert("1레벨에 같은 Part No가 중복 등록될 수 없습니다.");
|
||||
showConfirm({
|
||||
title: '중복 등록 불가',
|
||||
text: '1레벨에 같은 Part No가 중복 등록될 수 없습니다.',
|
||||
icon: 'error'
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
fn_relatePartInfo(leftPartChildObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId);
|
||||
// Part 연결 확인
|
||||
showConfirm({
|
||||
title: 'Part 연결',
|
||||
text: '선택한 Part를 연결하시겠습니까?',
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: '연결',
|
||||
cancelButtonText: '취소',
|
||||
reverseButtons: false
|
||||
}).then(result => {
|
||||
if (result.isConfirmed) {
|
||||
fn_relatePartInfo(leftPartChildObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId);
|
||||
}
|
||||
});
|
||||
});
|
||||
//end of Part 연결
|
||||
|
||||
@@ -121,12 +174,12 @@ $(function(){
|
||||
var leftPartNoList = $("input[name=checkedPartNo]:checked", parent.frames['leftFrame'].document);
|
||||
|
||||
if(leftPartNoList.length === 0){
|
||||
alert("선택된 파트가 없습니다.");
|
||||
showConfirm("선택된 파트가 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(leftPartNoList.length > 1){
|
||||
alert("한번에 1개의 파트만 변경가능합니다.");
|
||||
showConfirm("한번에 1개의 파트만 변경가능합니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -141,12 +194,12 @@ $(function(){
|
||||
var rightSelectedRows = rightFrame.getSelectedRows ? rightFrame.getSelectedRows() : [];
|
||||
|
||||
if(rightSelectedRows.length === 0){
|
||||
alert("선택된 파트가 없습니다.");
|
||||
showConfirm("선택된 파트가 없습니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(rightSelectedRows.length > 1){
|
||||
alert("한번에 1개의 파트만 변경가능합니다.");
|
||||
showConfirm("한번에 1개의 파트만 변경가능합니다.");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -155,7 +208,24 @@ $(function(){
|
||||
var rightPartRev = rightRowData.REVISION || "";
|
||||
var rightObjId = rightRowData.OBJID;
|
||||
|
||||
fn_changeRelatePartInfo(leftPartBomQtyObjId, rightObjId, leftPartChildObjId, leftParentPartObjid, leftPartChildObjId, leftPartObjid, rightPartNo, rightPartRev);
|
||||
// Part 변경 확인
|
||||
showConfirm({
|
||||
title: 'Part 변경',
|
||||
html: '선택한 Part를 변경하시겠습니까?<br><br>' +
|
||||
'<strong>기존:</strong> ' + leftPartNo + '<br>' +
|
||||
'<strong>변경:</strong> ' + rightPartNo,
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: '변경',
|
||||
cancelButtonText: '취소',
|
||||
reverseButtons: false
|
||||
}).then(result => {
|
||||
if (result.isConfirmed) {
|
||||
fn_changeRelatePartInfo(leftPartBomQtyObjId, rightObjId, leftPartChildObjId, leftParentPartObjid, leftPartChildObjId, leftPartObjid, rightPartNo, rightPartRev);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
@@ -187,11 +257,29 @@ function fn_checkSameTopPartNo(rightCheckedArr){
|
||||
//구조 연결 해제
|
||||
function fn_deletePartRelateInfo(leftObjId, leftPartLastObjId, leftParentPartNo, leftParentObjId, leftPartChildObjId){
|
||||
if(leftObjId == null){
|
||||
alert("연결 해제할 Part를 선택해 주시기 바랍니다.")
|
||||
showConfirm("연결 해제할 Part를 선택해 주시기 바랍니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!confirm("연결 해제하시겠습니까?")) return;
|
||||
showConfirm({
|
||||
title: 'Part 연결 해제',
|
||||
text: '선택한 Part의 연결을 해제하시겠습니까?',
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: '연결 해제',
|
||||
cancelButtonText: '취소',
|
||||
reverseButtons: false
|
||||
}).then(result => {
|
||||
if (!result.isConfirmed) return;
|
||||
|
||||
fn_executeDeletePartRelateInfo(leftObjId, leftPartLastObjId, leftParentPartNo, leftParentObjId, leftPartChildObjId);
|
||||
});
|
||||
}
|
||||
|
||||
// 실제 Part 연결 해제 실행 함수
|
||||
function fn_executeDeletePartRelateInfo(leftObjId, leftPartLastObjId, leftParentPartNo, leftParentObjId, leftPartChildObjId){
|
||||
|
||||
$.ajax({
|
||||
url: "/partMng/deleteStatusPartRelateInfo.do",
|
||||
@@ -222,16 +310,35 @@ function fn_deletePartRelateInfo(leftObjId, leftPartLastObjId, leftParentPartNo,
|
||||
//구조 연결
|
||||
function fn_relatePartInfo(leftObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId){
|
||||
if(typeof rightCheckedArr != "undefined" && rightCheckedArr.length == 0){
|
||||
alert("선택된 Part가 없습니다.");
|
||||
showConfirm("선택된 Part가 없습니다.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(leftObjId == null){
|
||||
if(!confirm("좌측에 선택된 Part정보가 없습니다.\n이대로 연결하면 1레벨로 등록됩니다.\n진행하시겠습니까?")){
|
||||
return;
|
||||
}
|
||||
showConfirm({
|
||||
title: '1레벨 등록 확인',
|
||||
html: '좌측에 선택된 Part정보가 없습니다.<br>이대로 연결하면 1레벨로 등록됩니다.<br><br>진행하시겠습니까?',
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#3085d6',
|
||||
cancelButtonColor: '#d33',
|
||||
confirmButtonText: '진행',
|
||||
cancelButtonText: '취소',
|
||||
reverseButtons: false
|
||||
}).then(result => {
|
||||
if (result.isConfirmed) {
|
||||
fn_executeRelatePartInfo(leftObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
fn_executeRelatePartInfo(leftObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId);
|
||||
}
|
||||
|
||||
// 실제 Part 연결 실행 함수
|
||||
function fn_executeRelatePartInfo(leftObjId, rightCheckedArr, leftPartNoQty, leftPartLastObjId, leftPartChildObjId, leftQtyParObjId){
|
||||
|
||||
$.ajax({
|
||||
url: "/partMng/relatePartInfo.do",
|
||||
method: 'post',
|
||||
|
||||
@@ -3197,4 +3197,12 @@ SELECT option_objid::VARCHAR AS CODE
|
||||
|
||||
ORDER BY CODE_ID
|
||||
</select>
|
||||
|
||||
<!-- 사용자 권한 체크 -->
|
||||
<select id="checkUserAuthority" parameterType="map" resultType="int">
|
||||
SELECT COUNT(*)
|
||||
FROM AUTHORITY_SUB_USER
|
||||
WHERE USER_ID = #{userId}
|
||||
AND MASTER_OBJID::varchar = #{masterObjid}
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user