Files
wace_plm/WebContent/WEB-INF/view/quality/customerCsList.jsp

402 lines
14 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ page import="java.util.*" %>
<%@include file= "/init.jsp" %>
<c:set var="now" value="<%=new java.util.Date() %>"/>
<c:set var="sysYear"><fmt:formatDate value="${now}" pattern="yyyy" /></c:set>
<%
String menuObjId = request.getParameter("menuObjId");
String menuName = CommonUtils.getMenuName(menuObjId, "고객 CS 관리");
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
</head>
<style>
/* 상태 스타일 */
.status-receipt { color: #007bff; font-weight: bold; }
.status-progress { color: #ffc107; font-weight: bold; }
.status-complete { color: #28a745; font-weight: bold; }
body, html {
overflow-x: hidden;
width: 100%;
margin: 0;
padding: 0;
}
</style>
<script type="text/javascript">
$(document).ready(function(){
fnc_changePaginationAndTotalCountArea();
$('.select2').select2();
fnc_datepick();
$("input").keyup(function(e){
if(e.keyCode == 13){
$("#page").val("1");
fn_search();
}
});
// 조회
$("#btnSearch").click(function(){
$("#page").val("1");
fn_search();
});
// 고객 불량 등록
$("#btnRegistDefect").click(function(){
fn_registDefectPopUp();
});
// 조치결과 등록
$("#btnRegistAction").click(function(){
fn_registActionPopUp();
});
// 삭제
$("#btnDelete").click(function(){
fn_delete();
});
fn_search();
});
// 접수번호 클릭 시 조치결과 뷰 팝업
function fn_viewActionPopUp(objId){
var popup_width = 1200;
var popup_height = 800;
var hiddenForm = document.hiddenForm;
var target = "customerCsActionViewPopUp";
var url = "/quality/customerCsActionFormPopUp.do";
fn_centerPopup(popup_width, popup_height, "", target);
hiddenForm.action = url;
hiddenForm.OBJID.value = objId;
hiddenForm.actionType.value = 'view'; // 뷰 모드
hiddenForm.target = target;
hiddenForm.submit();
}
// 컬럼: 접수번호, 접수일, 수량, 고객사, 모델명, 제품명, 품번, 생산일, 판매일, S/N, 제조사, 불만내용, 조치내용, 귀책판정, 상태, 비고, 조치일, 조치자, 첨부파일
var columns = [
{headerHozAlign:'center', hozAlign:'center', minWidth:120, widthGrow:1, title:'접수번호', field:'RECEIPT_NO', frozen: true,
formatter:fnc_createGridAnchorTag,
cellClick: function(e, cell){
var objId = fnc_checkNull(cell.getData().OBJID);
fn_viewActionPopUp(objId);
}
},
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'접수일', field:'RECEIPT_DATE'},
{headerHozAlign:'center', hozAlign:'left', minWidth:120, widthGrow:2, title:'조치구분', field:'ACTION_TYPE_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:150, widthGrow:1, title:'고객사', field:'CUSTOMER_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:100, widthGrow:1, title:'제품구분', field:'PRODUCT_TYPE_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:100, widthGrow:1, title:'품명', field:'PRODUCT_NAME'},
{headerHozAlign:'center', hozAlign:'left', minWidth:100, widthGrow:1, title:'품번', field:'PRODUCT_NO'},
{headerHozAlign:'center', hozAlign:'center', minWidth:100, widthGrow:1, title:'S/N', field:'SERIAL_NO'},
{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:'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'},
//{headerHozAlign:'center', hozAlign:'left', minWidth:100, widthGrow:1, title:'부품품번', field:'PART_NO'},
//{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'생산일', field:'PRODUCTION_DATE'},
//{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'판매일', field:'SALES_DATE'},
{headerHozAlign:'center', hozAlign:'left', minWidth:80, widthGrow:1, title:'제조사', field:'MANUFACTURER'},
{headerHozAlign:'center', hozAlign:'left', minWidth:120, widthGrow:2, title:'이슈내용', field:'COMPLAINT_CONTENT'},
{headerHozAlign:'center', hozAlign:'left', minWidth:120, widthGrow:2, title:'조치내용', field:'ACTION_CONTENT'},
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'조치일', field:'ACTION_DATE'},
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'조치자', field:'ACTION_USER_NAME'},
{headerHozAlign:'center', hozAlign:'center', minWidth:80, widthGrow:1, title:'귀책판정', field:'BLAME_DECISION_NAME'},
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'상태(C/O)', field:'STATUS',
formatter: function(cell, formatterParams, onRendered){
var val = fnc_checkNull(cell.getValue());
if(val === '접수') return '<span class="status-receipt">접수</span>';
if(val === '처리중') return '<span class="status-progress">처리중</span>';
if(val === '완료') return '<span class="status-complete">완료</span>';
return val;
}
},
{headerHozAlign:'center', hozAlign:'left', minWidth:100, widthGrow:1, title:'비고', field:'REMARK'},
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'이미지파일', field:'IMAGE_FILE',
formatter:fnc_subInfoValueFormatter,
cellClick:function(e, cell){
var objId = fnc_checkNull(cell.getData().OBJID);
fn_openImageFilePopUp(objId);
}
},
{headerHozAlign:'center', hozAlign:'center', minWidth:90, widthGrow:1, title:'첨부파일', field:'ATTACH_FILE',
formatter:fnc_subInfoValueFormatter,
cellClick:function(e, cell){
var objid = fnc_checkNull(cell.getData().OBJID);
fn_FileRegist(objid,"CUSTOMER_CS_ACTION","조치첨부");
}
}
];
// 조회
function fn_search(){
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/quality/customerCsGridList.do", columns, true);
}
// 검색조건 초기화
function fn_reset(){
$("#search_receipt_date_from").val("");
$("#search_receipt_date_to").val("");
$("#search_customer_name").val("");
$("#search_model_name").val("");
$("#search_product_no").val("");
$("#search_product_name").val("");
$("#search_part_no").val("");
$("#search_part_name").val("");
$("#search_serial_no").val("");
$("#search_manufacturer").val("");
$("#search_blame_decision").val("");
$("#search_status").val("");
$("#search_action_date_from").val("");
$("#search_action_date_to").val("");
$("#search_action_user").val("");
}
// 고객 불량 등록 팝업
function fn_registDefectPopUp(){
var selected = _tabulGrid.getSelectedData();
var popup_width = 800;
var popup_height = 480;
var hiddenForm = document.hiddenForm;
var target = "customerCsDefectPopUp";
var url = "/quality/customerCsDefectFormPopUp.do";
fn_centerPopup(popup_width, popup_height, "", target);
hiddenForm.action = url;
// 선택된 행이 있으면 수정 모드, 없으면 신규 등록
if(selected.length == 1){
hiddenForm.OBJID.value = selected[0].OBJID;
hiddenForm.actionType.value = 'edit';
} else {
hiddenForm.OBJID.value = '';
hiddenForm.actionType.value = 'new';
}
hiddenForm.target = target;
hiddenForm.submit();
}
// 조치결과 등록 팝업
function fn_registActionPopUp(){
var selected = _tabulGrid.getSelectedData();
if(selected.length == 0){
Swal.fire("선택된 데이터가 없습니다.");
return;
}
if(selected.length > 1){
Swal.fire("한건씩 등록 가능합니다.");
return;
}
var popup_width = 1200;
var popup_height = 800;
var hiddenForm = document.hiddenForm;
var target = "customerCsActionPopUp";
var url = "/quality/customerCsActionFormPopUp.do";
fn_centerPopup(popup_width, popup_height, "", target);
hiddenForm.action = url;
hiddenForm.OBJID.value = selected[0].OBJID;
hiddenForm.actionType.value = 'action';
hiddenForm.target = target;
hiddenForm.submit();
}
// 이미지 파일 팝업
function fn_openImageFilePopUp(objId){
var popup_width = 650;
var popup_height = 550;
var url = "/common/ImageRegistPopup.do?targetObjId=" + objId + "&docType=CUSTOMER_CS_IMAGE&docTypeName=이미지";
window.open(url, "imageFilePopUp", "width="+popup_width+",height="+popup_height+",scrollbars=yes,resizable=yes");
}
// 첨부파일 팝업
function fn_FileRegist(objId, docType, docTypeName){
var popup_width = 800;
var popup_height = 300;
var objId = objId;
var docType = docType;
var docTypeName = docTypeName;
var params = "?targetObjId="+objId+"&docType="+docType+"&docTypeName="+docTypeName;
var url = "/projectConcept/FileRegistPopup.do"+params;
fn_centerPopup(popup_width, popup_height, url);
}
// 삭제
function fn_delete(){
var selected = _tabulGrid.getSelectedData();
if(selected.length == 0){
Swal.fire("삭제할 데이터를 선택해주세요.");
return;
}
// 선택된 OBJID 목록 추출
var objIds = [];
for(var i = 0; i < selected.length; i++){
objIds.push(selected[i].OBJID);
}
Swal.fire({
title: '삭제 확인',
text: selected.length + '건의 데이터를 삭제하시겠습니까?',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#d33',
cancelButtonColor: '#3085d6',
confirmButtonText: '삭제',
cancelButtonText: '취소'
}).then((result) => {
if(result.isConfirmed){
$.ajax({
url: "/quality/deleteCustomerCs.do",
type: "POST",
data: {
objIds: JSON.stringify(objIds)
},
dataType: "json",
success: function(response){
if(response.result){
Swal.fire({
icon: 'success',
title: '삭제 완료',
text: response.msg
}).then(function(){
fn_search();
});
} else {
Swal.fire({
icon: 'error',
title: '삭제 실패',
text: response.msg
});
}
},
error: function(xhr, status, error){
Swal.fire({
icon: 'error',
title: '오류',
text: '삭제 중 오류가 발생했습니다.'
});
}
});
}
});
}
</script>
<body>
<form name="hiddenForm" id="hiddenForm" method="post">
<input type="hidden" name="OBJID" id="OBJID">
<input type="hidden" name="actionType" id="actionType">
</form>
<form name="form1" id="form1" action="" method="post">
<div class="content-box" style="height: 99.3%;">
<div class="content-box-s">
<div class="plm_menu_name_gdnsi">
<h2>
<span><%=menuName%></span>
</h2>
<div class="btnArea">
<input type="button" class="plm_btns" value="고객 이슈 등록" id="btnRegistDefect">
<input type="button" class="plm_btns" value="조치결과 등록" id="btnRegistAction">
<input type="button" class="plm_btns btn_red" value="삭제" id="btnDelete">
<input type="button" class="plm_btns" value="조회" id="btnSearch">
</div>
</div>
<div id="plmSearchZon">
<table class="">
<tr>
<td><label>접수일</label></td>
<td>
<input type="text" name="search_receipt_date_from" id="search_receipt_date_from" class="date_icon" style="width:100px;" autocomplete="off">~
<input type="text" name="search_receipt_date_to" id="search_receipt_date_to" class="date_icon" style="width:100px;" autocomplete="off">
</td>
<td><label>고객사</label></td>
<td>
<select name="search_customer_objid" id="search_customer_objid" class="select2" autocomplete="off" style="width:230px;">
<option value="">전체</option>
${code_map.customer_cd}
</select>
</td>
<!-- <td><label>제품구분</label></td>
<td>
<select name="search_product_type" id="search_product_type" class="select2" autocomplete="off" style="width:120px;">
<option value="">전체</option>
${code_map.product_type}
</select>
</td> -->
<td><label>품번</label></td>
<td><input type="text" name="search_product_no" id="search_product_no" style="width:210px;" autocomplete="off"></td>
<td><label>품명</label></td>
<td><input type="text" name="search_product_name" id="search_product_name" style="width:150px;" autocomplete="off"></td>
<!-- <td><label>부품품번</label></td>
<td><input type="text" name="search_part_no" id="search_part_no" style="width:215px;" autocomplete="off"></td>
<td><label>부품품명</label></td>
<td><input type="text" name="search_part_name" id="search_part_name" style="" autocomplete="off"></td> -->
<td><label>S/N</label></td>
<td><input type="text" name="search_serial_no" id="search_serial_no" style="width:215px;" autocomplete="off"></td>
<td><label>제조사</label></td>
<td><input type="text" name="search_manufacturer" id="search_manufacturer" style="width:230px;" autocomplete="off"></td>
</tr>
<tr>
<td><label>귀책판정</label></td>
<td>
<select name="search_blame_decision" id="search_blame_decision" class="select2" autocomplete="off" style="width:212px;">
<option value="">전체</option>
<option value="R">RPS</option>
<option value="C">고객사</option>
<option value="O">외주업체</option>
<option value="E">단순문의</option>
</select>
</td>
<td><label>상태</label></td>
<td>
<select name="search_status" id="search_status" class="select2" autocomplete="off" style="width:230px;">
<option value="">전체</option>
<option value="Open">Open</option>
<option value="Closed">Closed</option>
</select>
</td>
<td><label>조치일</label></td>
<td>
<input type="text" name="search_action_date_from" id="search_action_date_from" class="date_icon" style="width:100px;" autocomplete="off">~
<input type="text" name="search_action_date_to" id="search_action_date_to" class="date_icon" style="width:100px;" autocomplete="off">
</td>
<td><label>조치자</label></td>
<td><input type="text" name="search_action_user" id="search_action_user" style="" autocomplete="off"></td>
</tr>
</table>
</div>
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
</div>
</div>
</form>
</body>
</html>