Files
bns_system/WebContent/WEB-INF/view/transfer/qualityTransferList.jsp
2025-09-16 14:04:11 +09:00

647 lines
19 KiB
Plaintext

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ page import="java.util.*" %>
<%@include file= "/init.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><%=Constants.SYSTEM_NAME%></title>
<script>
$(document).ready(function(){
$(".date_delete").click(function(){
$(".from_to_date").val("");
});
//고객사 목록 조회
fn_setOEMList();
//고객사별 차종 목록 조회
$("#search_oemObjId").change(function(){
var oemObjId = $(this).val();
fn_setCarTypeList(oemObjId);
});
//등록팝업
$(".docTransferRegBtn").click(function(){
window.open("/transfer/qualityTransferFormPopUp.do?actionType=regist", "", "width=1000, height=580");
});
//개발품목을 통한 갑지의 상세 PopUp
$(".btnQualityTransferBaseInfo").click(function(){
var objId = $(this).attr("data-OBJID");
window.open("/transfer/qualityTransferDetailPopUp.do?objId="+objId, "", "width=1000, height=380");
});
//문서이관 관리리스트 선택 시 팝업
$(".btnQualityTransferDetailPopup").click(function(){
var objId = $(this).attr("data-OBJID");
window.open("/transfer/qualityTransferTypeOfCarPopUp.do?transferObjId="+objId, "", "width=1800, height=920");
});
//문서이관 관리리스트의 차종버튼 클릭시
$(".btnRadio").click(function(){
fn_getQualityTransferStatusPieChartData($(this).val());
fn_getQualityTransferCarProductResultColumnChart($(this).val());
fn_searchPartList($(this).val());
});
//인수인계 정보팝업
$(document).on("click", ".btnOpenTakeOverHisPopup", function(){
var targetObjId = $(this).attr("data-TARGET_OBJID");
var takeOverHisObjId = $(this).attr("data-TAKE_OVER_HIS_OBJID");
var partNo = $(this).attr("data-PART_NO");
var url = "/transfer/opinionFormPopup.do?targetObjId="+targetObjId+"&partNo="+partNo;
window.open(url, "takeOverHisResultPopup", "width=1000, height=455");
//Swal.fire("targetObjId : "+targetObjId+", takeOverHisObjId : "+takeOverHisObjId);
});
//조회
$(".btnSearch").click(function(){
fn_search();
});
$("#btnSetBaseInfo").click(function(){
var objId = $("#objId").val();
fn_getDocTransferList(objId);
});
fnc_datepick();
var radioObj = $("input[name=btnRadio]");
if(radioObj.length > 0){
$("input:radio[name=btnRadio]").eq(0).attr("checked",true).trigger("click");
}
});
</script>
<script>
//검색기능
function fn_search(){
document.form1.action = "/transfer/moldTransferList.do";
document.form1.submit();
}
//oem 목록 조회
function fn_setOEMList(){
$.ajax({
url:"/common/getOEMList.do",
type:"POST",
data:{"isJson":true},
dataType:"json",
success:function(data){
var appendCode = "";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].OEM_NAME+"("+data[i].OEM_CODE+")</option>";
});
$("#search_oemObjId").append(appendCode);
var paramValue = "${param.search_oemObjId}";
if(paramValue != ""){
$("#search_oemObjId > option[value="+paramValue+"]").attr("selected", "true");
$("#search_oemObjId").trigger("change");
}
},
error: function(jqxhr, status, error){
}
});
}
//car 목록 조회
function fn_setCarTypeList(oemObjId){
if(oemObjId !=""){
$.ajax({
url:"/common/getCarTypeList.do",
type:"POST",
data:{"isJson":true, "search_oemObjId":oemObjId},
dataType:"json",
success:function(data){
var appendCode = "";
appendCode += "<option value=''>선택</option>";
$.each(data, function(i){
appendCode += "<option value='"+data[i].OBJID+"'>"+data[i].CAR_CODE+"("+data[i].CAR_NAME+")</option>";
});
$("#search_carObjId").children().remove();
$("#search_carObjId").append(appendCode);
var paramValue = "${param.search_carObjId}";
if(paramValue != ""){
$("#search_carObjId > option[value="+paramValue+"]").attr("selected", "true");
}
},
error: function(jqxhr, status, error){
}
});
}else{
$("#search_carObjId").children().remove();
$("#search_carObjId").append("<option value=''>선택</option>");
}
}
//해당 품질이관에 해당하는 정보를 chart1 영역에 표시한다.
function fn_getQualityTransferStatusPieChartData(objId){
$("#chart1").empty();
var prodArr = [];
if(objId != ""){
$.ajax({
url:"/dashboard/getQualityTransferStatusPieChart.do",
type:"POST",
data:{"objId":objId},
dataType:"json",
async:false,
success:function(data){
var resultData = null;
resultData = data;
prodArr = fn_getQualityTransferProductStatusDrillDownData(objId);
fn_drawChart1("chart1",resultData,prodArr);
},
error: function(jqxhr, status, error){
}
});
}else{
var noData = "<div id=\"chart3MessageArea\" style=\"width:100%;height:50%;padding-top:10%;text-align:center;\">조회된 정보가 없습니다.</div>";
$("#chart1").append(noData);
$("#chart2").append(noData);
}
}
//해당 문서이관에 해당하는 진행현황 PIE Chart Drill down 정보를 가져온다.
function fn_getQualityTransferProductStatusDrillDownData(objId){
var prodArr = [];
$.ajax({
url:"/dashboard/getQualityTransferProductStatusDrillDownChart.do",
type:"POST",
data:{"objId":objId},
dataType:"json",
async:false,
success:function(data){
if(data.length > 0){
prodArr = data;
}
},
error: function(jqxhr, status, error){
}
});
return prodArr;
}
//조회된 정보를 통해 해당 문서이관에 해당하는 제품별 진행현황 PIE Chart를 그려준다.
function fn_drawChart1(areaId,data,prodArr){
var okArr = [];
var noConfirmArr = [];
var noInputArr = [];
$.each(prodArr,function(i){
okArr.push(
[fnc_checkNull(prodArr[i].PRODUCT_NAME),Number(fnc_checkNullDefaultValue(prodArr[i].OK_CNT,0))]
);
noConfirmArr.push(
[fnc_checkNull(prodArr[i].PRODUCT_NAME),Number(fnc_checkNullDefaultValue(prodArr[i].NO_CONFIRM_CNT,0))]
);
noInputArr.push(
[fnc_checkNull(prodArr[i].PRODUCT_NAME),Number(fnc_checkNullDefaultValue(prodArr[i].NO_INPUT_CNT,0))]
);
});
$('#'+areaId).highcharts({
colors: ['#558ed5', '#7dace8', '#a0c2eb','#e6e9ee','#d3e3f6','#73bbae','#ddd475','#e6c15d','#b9d5ea'],
chart: {
plotBackgroundColor: null,
plotBorderWidth: null,
plotShadow: false,
type: 'pie'
},
title: {
text: ''
},
tooltip: {
pointFormat: '{series.name}: <b>{point.y} 건</b>'
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
format: '<b>{point.name}</b>: {point.y} 건',
style: {
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
}
}
}
},
series: [
{
name:"건수",
colorByPoint:true,
data:[
{
name: "승인",
y: Number(fnc_checkNullDefaultValue(data.OK_CNT, 0)),
drilldown: "ok"
},
{
name: "미승인",
y: Number(fnc_checkNullDefaultValue(data.NO_CONFIRM_CNT, 0)),
drilldown:"noConfirm"
},
{
name: "미입력",
y: Number(fnc_checkNullDefaultValue(data.NO_INPUT_CNT, 0)),
drilldown:"noInput"
}
]
}
],
drilldown:{
series:[
{
name:"승인",
id:"ok",
data:okArr
},
{
name:"미승인",
id:"noConfirm",
data:noConfirmArr
},
{
name:"미입력",
id:"noInput",
data:noInputArr
}
]
}
});
}
//차종,제품별 품질, 문서 이관율을 보여준다.
function fn_getQualityTransferCarProductResultColumnChart(objId){
$.ajax({
url:"/dashboard/getQualityTransferCarProductResultColumnChart.do",
type:"POST",
data:{"objId":objId},
dataType:"json",
async:false,
success:function(data){
if(data != null){
setChart2("chart2", data);
}
},
error: function(jqxhr, status, error){
}
});
}
function setChart2(divId, productInfo){
var productArr = [];
var testResultArr = [];
var docTransferArr = [];
$.each(productInfo, function(i){
productArr.push(fnc_checkNull(productInfo[i].PRODUCT_NAME));
testResultArr.push(fnc_checkNullDefaultValue(productInfo[i].TEST_RESULT_RATIO,0));
docTransferArr.push(fnc_checkNullDefaultValue(productInfo[i].DOC_RESULT_RATIO,0));
});
$('#'+divId).highcharts({
chart: {
type: 'column'
},
title: {
text: ''
},
xAxis: {
categories: productArr
},
yAxis: [{
min: 0,
title: {
text: ''
}
}, {
title: {
text: ''
},
opposite: true
}],
legend: {
shadow: false
},
tooltip: {
shared: true
},
plotOptions: {
column: {
grouping: false,
shadow: false,
borderWidth: 0
},
series: {
cursor:'pointer',
point:{
events:{
click:function(){
console.log(this);
fn_openEOList(this);
}
}
}
}
},
series: [{
name: '품질',
color: '#eee',
data: testResultArr,
tooltip: {
valuePrefix: '',
valueSuffix: '%'
},
pointPadding: 0.3,
pointPlacement: -0.2
}, {
name: '문서',
color: '#e8ce62',
data: docTransferArr,
tooltip: {
valuePrefix: '',
valueSuffix: '%'
},
pointPadding: 0.4,
pointPlacement: -0.2
}]
});
}
function fn_getDocTransferHandOverResultColumnChart(objId){
$.ajax({
url:"/dashboard/getDocTransferHandOverResultColumnChart.do",
type:"POST",
data:{"objId":objId},
dataType:"json",
async:false,
success:function(data){
if(data.length > 0){
}
},
error: function(jqxhr, status, error){
}
});
}
//part list 구성
function fn_searchPartList(objId){
$("#assyPartList").empty();
var append = "";
if(objId != ""){
$.ajax({
url:"/transfer/getQualityTransferBaseInfoPartList.do",
type:"POST",
data:{"objId":objId},
dataType:"json",
success:function(data){
if(data.length > 0){
$.each(data, function(i){
append += "<tr>";
append += " <td title="+fnc_checkNull(data[i].PART_NO)+">"+fnc_checkNull(data[i].PRODUCT_GROUP_NAME)+"</td>";
append += " <td title="+fnc_checkNull(data[i].PART_NO)+">"+fnc_checkNull(data[i].PART_NO)+"</td>";
append += " <td title="+fnc_checkNull(data[i].PART_NAME)+">"+fnc_checkNull(data[i].PART_NAME)+"</td>";
append += " <td>";
var fileName = fnc_checkNull(data[i].REAL_FILE_NAME);
if(fileName == null || fileName == ""){
append += "<div class='no_img_icon'></div>"
}else{
var srcLocation = encodeURI("/common/viewImage.do?realFileName="+fnc_checkNull(data[i].REAL_FILE_NAME)+"&savedFileName="+fnc_checkNull(data[i].SAVED_FILE_NAME)+"&attDir="+fnc_checkNull(data[i].FILE_PATH));
append += "<img src='"+srcLocation+"' height='68px' width='auto' onclick='openImagePopUp(this.src)' style='cursor:pointer;'/>";
}
append += " </td>";
append += " <td>"+fnc_checkNullDefaultValue(data[i].PRODUCT_TOTAL_RATIO,0)+"%</td>";/* 제품별 종합 이관율 */
append += " <td>"+fnc_checkNullDefaultValue(data[i].TEST_RESULT_RATIO,0)+"%</td>";/* 품질이관율 */
append += " <td>"+fnc_checkNullDefaultValue(data[i].DOC_OK_RATIO,0)+"%</td>";/* 품질양산서류 이관율 */
append += "</tr>";
});
}else{
append += "<tr><td colspan='7' align='center'>조회된 정보가 없습니다.</td></tr>";
}
$("#assyPartList").append(append);
},
error: function(jqxhr, status, error){
}
});
}else{
Swal.fire("선택된 제품이 없습니다.");
append += "<tr><td colspan='7' align='center'>조회된 정보가 없습니다.</td></tr>";
$("#assyPartList").append(append);
}
}
</script>
</head>
<body>
<form name="form1" id="form1" action="" method="post">
<div style="min-width:1500px;">
<div class="plm_menu_name">
<h2>
<span>품질이관</span>
</h2>
</div>
<div id="plmSearchZon">
<table class="short_search">
<tr>
<td><label for="">고객사</label></td>
<td>
<select name="search_oemObjId" id="search_oemObjId">
<option value="">선택</option>
</select>
</td>
<td><label for="">차종</label></td>
<td>
<select name="search_carObjId" id="search_carObjId">
<option value="">선택</option>
</select>
</td>
<td><label for="">이관상태</label></td>
<td>
<select name="search_takeOverStatus" id="search_takeOverStatus">
<option value="">선택</option>
<option value="complete" ${param.search_takeOverStatus eq 'complete'?'selected':''}>이관완료</option>
<option value="create" ${param.search_takeOverStatus eq 'create'?'selected':''}>진행중</option>
</select>
</td>
<td><label for="">이관기간</label></td>
<td colspan="">
<input type="text" id="search_takeOverfromDate" name="search_takeOverfromDate" class="from_to_date" value="${param.search_takeOverFromDate}" readonly>
~ <input type="text" id="search_takeOverToDate" name="search_takeOverToDate" class="from_to_date" value="${param.search_takeOverToDate}" readonly>
<input type="button" class="date_delete" value="x">
</td>
</tr>
</table>
</div>
<div class="btn_wrap" style="float:right; width:38.3%; height:40px; box-shadow: 5px 7px 10px 0px #ccc;">
<div class="plm_btn_wrap" style="margin-right:22px;">
<input type="button" value="조회" class="btnSearch plm_btns">
<input type="button" value="등록" class="plm_btns docTransferRegBtn">
<input type="button" value="문서 기준정보 지정" id="btnSetBaseInfo" class="plm_btns">
<input type="button" value="Task Link" class="plm_btns">
</div>
</div>
<div class="contents_page_basic_margin">
<div class="fourblock" style="width:60%; margin: 45px 0 15px 0; float:left; border:0; height:300px; border-radius: 10px 0 10px 10px; padding: 38px 20px 0 13px; box-shadow: 5px 7px 10px 0px #ccc;">
<div class="title_div" style="margin-top:-20px;line-height: 13px;">품질이관 관리리스트</div>
<div class="plm_table_wrap">
<div style="overflow-y:scroll;">
<table class="plm_table" style="width:100%;">
<colgroup>
<col width="5%" />
<col width="5%" />
<col width="*" />
<col width="*" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
</colgroup>
<thead style="border-bottom: 2px solid #6c93a7;">
<tr class="plm_thead" style="background-image: linear-gradient(#86b3cb, #75a0b6);">
<td></td>
<td>No</td>
<td>고객사</td>
<td>차종</td>
<td>이관 품목</td>
<td>이관율(%)</td>
<td>이관상태</td>
<td>양산일자</td>
<td>이관완료일자</td>
</tr>
</thead>
</table>
</div>
<div class="plm_scroll_table" style="width:100%; height:250px;">
<table class="plm_table">
<colgroup>
<col width="5%" />
<col width="5%" />
<col width="*" />
<col width="*" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
</colgroup>
<tbody id="mainList">
<c:choose>
<c:when test="${!empty LIST}">
<c:forEach var="info" items="${LIST}" varStatus="status">
<tr>
<td><input type="radio" name="btnRadio" class="btnRadio" value="${info.OBJID}" data-WRITER="${info.WRITER}"></td>
<td>${info.RNUM}</td>
<td>${info.OEM_NAME}</td>
<td>${info.CAR_CODE}</td>
<td><a href="#" class="btnQualityTransferBaseInfo" data-OBJID="${info.OBJID}">${info.PROD_CNT}</a></td>
<td>${info.RESULT_RATIO}%</td>
<td><a href="#" class="btnQualityTransferDetailPopup" data-OBJID="${info.OBJID}">${info.RESULT_RATIO == 100?'이관완료':'진행중'}</a></td>
<td>${info.SOP}</td>
<td>${info.RESULT_RATIO == 100?info.TRANSFER_DATE:''}</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td align="center" colspan="9">조회된 정보가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</div>
</div>
<div class="fourblock" style="width:35%; margin-bottom:15px; margin:42px 0 0 0; float:right; height:300px;">
<div class="title_div" style="margin-top:-20px;line-height: 13px;">품질 이관현황</div>
<div id="chart1" style="width:80%; height:230px; margin: 30px auto 0;"></div>
</div>
<div class="fourblock" style="width:60%; float:left; height:300px; margin-left:14px; border:0;">
<div class="title_div" style="margin-top:-20px;line-height: 13px;">품질이관 상세 리스트</div>
<div class="plm_table_wrap">
<div style="overflow-y:scroll;">
<table class="plm_table" style="width:100%;">
<colgroup>
<col width="10%" />
<col width="10%" />
<col width="*" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
</colgroup>
<thead>
<tr class="plm_thead">
<td>제품군</td>
<td>Part No</td>
<td>Part Name</td>
<td>형상</td>
<td>제품별<br>종합 이관율(%)</td>
<td>품질<br>이관율(%)</td>
<td>품질 양산서류<br>이관율(%)</td>
</tr>
</thead>
</table>
</div>
<div class="plm_scroll_table" style="width:100%; height:285px;">
<table class="plm_table">
<colgroup>
<col width="10%" />
<col width="10%" />
<col width="*" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
<col width="10%" />
</colgroup>
<tbody id="assyPartList">
<tr>
<td colspan="7" align="center">조회된 정보가 없습니다.</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="fourblock" style="width:35%; margin-right: 0; float:right; height:300px;">
<div class="title_div" style="margin-top:-20px;line-height: 13px;">품질/문서 이관현황</div>
<div id="chart2" style="width:80%; height:300px; margin: 30px auto 0;"></div>
</div>
</div>
</div>
</form>
</body>
</html>