Compare commits

...

4 Commits

10 changed files with 99 additions and 41 deletions

View File

@@ -47,6 +47,12 @@ body {
background-color: #fff9c4 !important;
}
/* 선택된 행 하이라이트 스타일 */
.tabulator-row.row-selected {
background-color: #b8daff !important;
border: 1px solid #007bff !important;
}
/* Select2 in Tabulator 스타일 */
.tabulator-cell .select2-container {
width: 100% !important;
@@ -72,6 +78,7 @@ body {
</style>
<script>
var _tabulGrid;
var selectedRowData = null; // 선택된 행 데이터
// 프로젝트 수주수량 (최상위 프레임에서 가져오기)
var projectQuantity = 1; // 기본값
@@ -256,7 +263,9 @@ function fn_initGrid() {
levelColumns.push({
headerHozAlign: 'center',
hozAlign: 'center',
width: 10,
width: 25,
minWidth: 25,
maxWidth: 25,
title: i,
field: 'LEVEL_' + i,
formatter: function(cell) {
@@ -293,7 +302,7 @@ function fn_initGrid() {
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 60,
width: 50,
title: '수량',
field: 'QTY_TEMP',
visible: true
@@ -339,7 +348,7 @@ function fn_initGrid() {
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 60,
width: 50,
title: '3D',
field: 'CU01_CNT',
visible: true,
@@ -351,7 +360,7 @@ function fn_initGrid() {
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 60,
width: 50,
title: '2D',
field: 'CU02_CNT',
visible: true,
@@ -430,7 +439,7 @@ function fn_initGrid() {
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
width: 70,
title: '자급/사급',
field: 'SUPPLY_TYPE',
titleFormatter: function() { return '<span class="editable-header">자급/사급</span>'; },
@@ -877,6 +886,26 @@ function fn_initGrid() {
}
});
// 행 클릭 시 선택 처리 이벤트
_tabulGrid.on("rowClick", function(e, row) {
// 링크 클릭 시에는 기본 동작 유지
if($(e.target).is('a')) {
return;
}
// 기존 선택 해제
$('.tabulator-row.row-selected').removeClass('row-selected');
$('input[name=checkedPartNo]').prop('checked', false);
// 현재 행 선택
$(row.getElement()).addClass('row-selected');
var rowData = row.getData();
selectedRowData = rowData;
// 해당 행의 라디오 버튼 선택
$(row.getElement()).find('input[name=checkedPartNo]').prop('checked', true);
});
// 셀 편집 이벤트 등록
_tabulGrid.on("cellEdited", function(cell) {
var field = cell.getField();
@@ -1016,6 +1045,11 @@ function applyBulkDeadline(processingDeadline, grindingDeadline) {
}
*/
// 선택된 행 데이터 가져오기 (Center 프레임에서 사용)
function getSelectedRowData() {
return selectedRowData;
}
// M-BOM 트리 데이터 수집 (저장용)
function getMbomTreeData() {
var allData = _tabulGrid.getData();

View File

@@ -22,8 +22,8 @@ String actionDate = CommonUtils.checkNull(info.get("action_date"));
if(actionDate.isEmpty()) actionDate = today;
// 조치자
String actionUserName = CommonUtils.checkNull(info.get("action_user_name"));
if(actionUserName.isEmpty()) actionUserName = connectUserName;
String actionUserId = CommonUtils.checkNull(info.get("action_user_id"));
if(actionUserId.isEmpty()) actionUserId = connectUserId;
%>
<!DOCTYPE html>
<html>
@@ -56,8 +56,10 @@ $(document).ready(function(){
// 기존 값 선택
var savedBlameDecision = "${info.blame_decision}";
var savedStatus = "${info.status}";
var savedActionUserId = "<%=actionUserId%>";
if(savedBlameDecision) $("#BLAME_DECISION").val(savedBlameDecision).trigger('change');
if(savedStatus) $("#STATUS").val(savedStatus).trigger('change');
if(savedActionUserId) $("#ACTION_USER_ID").val(savedActionUserId).trigger('change');
// 뷰 모드일 경우 입력 필드 비활성화
if(isViewMode){
@@ -336,7 +338,7 @@ function fn_save(){
<td class="input_title"><label>접수일</label></td>
<td>${info.receipt_date}</td>
<td class="input_title"><label>접수자</label></td>
<td>${info.writer_name}</td>
<td>${info.receipt_user_name}</td>
</tr>
<tr>
<td class="input_title"><label>고객사</label></td>
@@ -413,7 +415,7 @@ function fn_save(){
<option value="R" ${info.BLAME_DECISION eq 'R' ? 'selected' : ''}>RPS</option>
<option value="C" ${info.BLAME_DECISION eq 'C' ? 'selected' : ''}>고객사</option>
<option value="O" ${info.BLAME_DECISION eq 'O' ? 'selected' : ''}>외주업체</option>
<option value="O" ${info.BLAME_DECISION eq 'E' ? 'selected' : ''}>단순문의</option>
<option value="E" ${info.BLAME_DECISION eq 'E' ? 'selected' : ''}>단순문의</option>
</select>
</td>
<td class="input_title"><label>상태 <span style="color:red;">*</span></label></td>
@@ -432,7 +434,10 @@ function fn_save(){
</td>
<td class="input_title"><label>조치자 <span style="color:red;">*</span></label></td>
<td>
<input type="text" name="ACTION_USER_NAME" id="ACTION_USER_NAME" value="<%=actionUserName%>" readonly>
<select name="ACTION_USER_ID" id="ACTION_USER_ID" class="select2" required reqTitle="조치자" type="select" style="width:100%;">
<option value="">선택</option>
${code_map.user_cd}
</select>
</td>
</tr>
<tr>

View File

@@ -22,8 +22,8 @@ if(objId.isEmpty()){
}
// 접수자/작성자
String writerName = CommonUtils.checkNull(info.get("writer_name"));
if(writerName.isEmpty()) writerName = connectUserName;
String receiptUserId = CommonUtils.checkNull(info.get("receipt_user_id"));
if(receiptUserId.isEmpty()) receiptUserId = connectUserId;
%>
<!DOCTYPE html>
<html>
@@ -43,8 +43,10 @@ $(document).ready(function(){
// 수정 모드인 경우 기존 값 선택
var savedBlameDecision = "${info.blame_decision}";
var savedStatus = "${info.status}";
var savedWriter = "<%=receiptUserId%>";
if(savedBlameDecision) $("#BLAME_DECISION").val(savedBlameDecision).trigger('change');
if(savedStatus) $("#STATUS").val(savedStatus).trigger('change');
if(savedWriter) $("#RECEIPT_USER_ID").val(savedWriter).trigger('change');
// 저장
@@ -147,9 +149,12 @@ function fn_save(){
<td>
<input type="text" name="RECEIPT_DATE" id="RECEIPT_DATE" class="date_icon" required reqTitle="접수일" value="${info.receipt_date}">
</td>
<td class="input_title"><label>접수자</label></td>
<td class="input_title"><label>접수자 <span style="color:red;">*</span></label></td>
<td>
<input type="text" id="ACTION_USER_NAME" value="<%=writerName%>" readonly>
<select name="RECEIPT_USER_ID" id="RECEIPT_USER_ID" class="select2" required reqTitle="접수자" type="select" style="width:100%;">
<option value="">선택</option>
${code_map.user_cd}
</select>
</td>
</tr>
<tr>
@@ -162,9 +167,9 @@ function fn_save(){
</td>
</tr>
<tr>
<td class="input_title"><label>수량 <span style="color:red;">*</span></label></td>
<td class="input_title"><label>수량</label></td>
<td>
<input type="text" name="QTY" id="QTY" value="${info.qty}" required reqTitle="수량">
<input type="text" name="QTY" id="QTY" value="${info.qty}" reqTitle="수량">
</td>
<td class="input_title"><label>제품구분 <span style="color:red;">*</span></label></td>
<td>
@@ -224,7 +229,7 @@ function fn_save(){
<tr>
<td class="input_title"><label>이슈내용 <span style="color:red;">*</span></label></td>
<td colspan="3">
<textarea name="COMPLAINT_CONTENT" id="COMPLAINT_CONTENT" rows="3" style="width:100%;" required reqTitle="불만내용" type="text">${info.complaint_content}</textarea>
<textarea name="COMPLAINT_CONTENT" id="COMPLAINT_CONTENT" rows="3" style="width:100%;" required reqTitle="이슈내용" type="text">${info.complaint_content}</textarea>
</td>
</tr>
</table>

View File

@@ -103,7 +103,7 @@ var columns = [
{headerHozAlign:'center', hozAlign:'right', minWidth:70, widthGrow:1, title:'수량', field:'QTY',
formatter:"money", formatterParams:{thousand:",", precision:false}
},
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'접수자', field:'WRITER_NAME'},
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'접수자', field:'RECEIPT_USER_NAME'},
//{headerHozAlign:'center', hozAlign:'left', minWidth:100, widthGrow:1, title:'모델명', field:'MODEL_NAME'},
//{headerHozAlign:'center', hozAlign:'left', minWidth:100, widthGrow:1, title:'부품품명', field:'PART_NAME'},

View File

@@ -77,21 +77,28 @@ $(document).ready(function(){
// 컬럼: ECR No, 요청일, 요청자, 품번, 품명, 이슈사항, 완료요청일, 조치부서, 조치담당자, 조치자, 조치내용, 완료일, 이미지파일, 첨부파일, 설계변경요청서
var columns = [
{headerHozAlign:'center', hozAlign:'center', minWidth:130, widthGrow:1, title:'ECR No', field:'ECR_NO',
{headerHozAlign:'center', hozAlign:'center', minWidth:110, widthGrow:1, title:'ECR No', field:'ECR_NO',
formatter:fnc_createGridAnchorTag,
cellClick: function(e, cell){
var objId = fnc_checkNull(cell.getData().OBJID);
fn_viewEcrPopUp(objId);
}
},
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'요청일', field:'REQUEST_DATE'},
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'요청일', field:'REQUEST_DATE'},
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'요청자', field:'REQUESTER_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:120, widthGrow:2, title:'품번', field:'PART_NO'},
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:2, title:'품명', field:'PART_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:2, title:'이슈사항', field:'ISSUE_CONTENT'},
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'완료요청일', field:'DUE_DATE'},
{headerHozAlign:'center', hozAlign:'center', minWidth:120, widthGrow:1, title:'설계변경요청서', field:'ECR_DOC_CNT',
formatter:fnc_subInfoValueFormatter,
cellClick:function(e, cell){
var objid = fnc_checkNull(cell.getData().OBJID);
fn_openEcrDocPopUp(objid);
}
},
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'조치부서', field:'ACTION_DEPT_NAME'},
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'조치담당자', field:'ACTION_MANAGER_NAME'},
//{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'조치담당자', field:'ACTION_MANAGER_NAME'},
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'조치자', field:'ACTION_USER_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:2, title:'조치내용', field:'ACTION_CONTENT'},
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'완료일', field:'COMPLETE_DATE'},
@@ -108,13 +115,6 @@ var columns = [
var objid = fnc_checkNull(cell.getData().OBJID);
fn_FileRegist(objid,"ECR_RESULT","ECR결과첨부");
}
},
{headerHozAlign:'center', hozAlign:'center', minWidth:110, widthGrow:1, title:'설계변경요청서', field:'ECR_DOC_CNT',
formatter:fnc_subInfoValueFormatter,
cellClick:function(e, cell){
var objid = fnc_checkNull(cell.getData().OBJID);
fn_openEcrDocPopUp(objid);
}
}
];
@@ -340,13 +340,13 @@ function fn_approval(){
</tr>
<tr>
<td><label>조치담당자</label></td>
<!-- <td><label>조치담당자</label></td>
<td>
<select name="search_action_manager" id="search_action_manager" class="select2" style="width:215px;">
<option value="">전체</option>
${code_map.action_manager_id}
</select>
</td>
</td> -->
<td><label>조치자</label></td>
<td>
<select name="search_action_user" id="search_action_user" class="select2" style="width:150px;">

View File

@@ -187,7 +187,7 @@ function fn_save(){
</select>
</td>
</tr>
<tr>
<!-- <tr>
<td class="input_title"><label>조치담당자</label></td>
<td>
<select name="ACTION_MANAGER_ID" id="ACTION_MANAGER_ID" class="select2" type="select" style="width:100%;">
@@ -197,7 +197,7 @@ function fn_save(){
</td>
<td class="input_title"><label></label></td>
<td></td>
</tr>
</tr> -->
<tr>
<td class="input_title"><label>이슈사항 <span style="color:red;">*</span></label></td>
<td colspan="3">

View File

@@ -346,9 +346,9 @@ function fn_save(){
</tr>
<tr>
<td class="input_title"><label>조치부서</label></td>
<td>${info.action_dept_name}</td>
<td class="input_title"><label>조치담당자</label></td>
<td>${info.action_manager_name}</td>
<td colspan="3">${info.action_dept_name}</td>
<!-- <td class="input_title"><label>조치담당자</label></td>
<td>${info.action_manager_name}</td> -->
</tr>
<tr>
<td class="input_title"><label>이슈사항</label></td>

View File

@@ -799,6 +799,8 @@ public class QualityController {
code_map.put("customer_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)info.get("customer_objid")), "common.getClientMngSupplySelect"));
// 제품구분
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)info.get("product_type")), "common.getCodeselect"));
// 접수자 (사용자 목록)
code_map.put("user_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)info.get("receipt_user_id")), "common.getUserselect"));
} catch(Exception e) {
e.printStackTrace();
}
@@ -828,6 +830,8 @@ public class QualityController {
info = service.getCustomerCsInfo(paramMap);
// 조치구분
code_map.put("action_type", commonService.bizMakeOptionList("0001835", CommonUtils.nullToEmpty((String)info.get("action_type")), "common.getCodeselect"));
// 조치자 (사용자 목록)
code_map.put("user_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)info.get("action_user_id")), "common.getUserselect"));
} catch(Exception e) {
e.printStackTrace();
}

View File

@@ -1938,13 +1938,15 @@
, CODE_NAME(CCS.ACTION_TYPE) AS ACTION_TYPE_NAME
, CCS.ACTION_CONTENT
, CCS.BLAME_DECISION
, CASE CCS.BLAME_DECISION WHEN 'R' THEN 'RPS' WHEN 'C' THEN '고객사' WHEN 'O' THEN '외주업체' ELSE CCS.BLAME_DECISION END AS BLAME_DECISION_NAME
, CASE CCS.BLAME_DECISION WHEN 'R' THEN 'RPS' WHEN 'C' THEN '고객사' WHEN 'O' THEN '외주업체' WHEN 'E' THEN '단순문의' ELSE CCS.BLAME_DECISION END AS BLAME_DECISION_NAME
, CCS.STATUS
, CCS.REMARK
, CCS.ACTION_DATE
, CCS.ACTION_USER_ID
, CCS.WRITER
, USER_NAME(CCS.WRITER) as WRITER_NAME
, CCS.RECEIPT_USER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = CCS.RECEIPT_USER_ID) AS RECEIPT_USER_NAME
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = CCS.ACTION_USER_ID) AS ACTION_USER_NAME
, (SELECT COUNT(*) FROM ATTACH_FILE_INFO AFI WHERE AFI.TARGET_OBJID = CCS.OBJID AND AFI.DOC_TYPE = 'CUSTOMER_CS_IMAGE' AND STATUS = 'Active') AS IMAGE_FILE
, (SELECT COUNT(*) FROM ATTACH_FILE_INFO AFI WHERE AFI.TARGET_OBJID = CCS.OBJID AND AFI.DOC_TYPE = 'CUSTOMER_CS_ACTION' AND STATUS = 'Active') AS ATTACH_FILE
@@ -2033,6 +2035,8 @@
, CCS.ATTACH_FILE_OBJID
, CCS.WRITER
, USER_NAME(CCS.WRITER) AS WRITER_NAME
, CCS.RECEIPT_USER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = CCS.RECEIPT_USER_ID) AS RECEIPT_USER_NAME
, TO_CHAR(CCS.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM CUSTOMER_CS CCS
WHERE CCS.OBJID = #{OBJID}
@@ -2069,6 +2073,7 @@
, STATUS
, REMARK
, WRITER
, RECEIPT_USER_ID
, REG_DATE
) VALUES (
#{OBJID}
@@ -2090,6 +2095,7 @@
, #{STATUS}
, #{REMARK}
, #{WRITER}
, #{RECEIPT_USER_ID}
, NOW()
)
</insert>
@@ -2110,6 +2116,7 @@
, SERIAL_NO = #{SERIAL_NO}
, MANUFACTURER = #{MANUFACTURER}
, COMPLAINT_CONTENT = #{COMPLAINT_CONTENT}
, RECEIPT_USER_ID = #{RECEIPT_USER_ID}
, MOD_DATE = NOW()
WHERE OBJID = #{OBJID}
</update>

View File

@@ -1585,10 +1585,13 @@ public class QualityService extends BaseService{
try{
sqlSession = SqlMapConfig.getInstance().getSqlSession();
// 조치자가 선택되지 않은 경우에만 접속자 ID 사용
String actionUserId = CommonUtils.checkNull(paramMap.get("ACTION_USER_ID"));
if(actionUserId.isEmpty()){
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
String actionUserId = person != null ? person.getUserId() : "";
actionUserId = person != null ? person.getUserId() : "";
paramMap.put("ACTION_USER_ID", actionUserId);
}
sqlSession.update("quality.updateCustomerCsAction", paramMap);