402 lines
14 KiB
Plaintext
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:'WRITER_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>
|