1
0
Fork 0

fix: 데이터없을 시에 셀 없어짐 개선

This commit is contained in:
sychoi 2024-04-30 09:47:40 +09:00
parent edcaf330a0
commit 260c00791a
4 changed files with 173 additions and 76 deletions

View File

@ -156,12 +156,12 @@ include_once _SVC_INC_PATH_ . "/header.php";
<tbody>
<template v-for="(code, idx) in codeList">
<tr>
<td rowspan="5">{{code?.WO_NO}}<br>{{code?.ORD_DT.date}}</td>
<td rowspan="5">{{code?.ITEM_CD}}<br>{{code?.DRAW_NO}}<br>{{code?.BP_CD}}</td>
<td rowspan="5">{{code?.DLVY_REQ_DT.date}}</td>
<td rowspan="5">{{code?.WO_SEQ}}</td>
<td rowspan="5">{{code.WO_NO}}<br>{{code.ORD_DT.date}}</td>
<td rowspan="5">{{code.ITEM_CD}}<br>{{code.DRAW_NO}}<br>{{code.BP_CD}}</td>
<td rowspan="5">{{code.DLVY_REQ_DT.date}}</td>
<td rowspan="5">{{code.WO_SEQ}}</td>
<td rowspan="5">{{code.완료}}</td>
<td colspan="2" v-for="index in 10" :key="`process-${index}`">{{ code.OP_CD ? code.OP_CD.OP_CD ? code.OP_CD.OP_CD: '' : '' }}</td>
<td colspan="2" v-for="index in 10" :key="`process-${index}`">{{ code.OP_CD?.OP_CD }}</td>
</tr>
<tr>
<td v-for="n in 20" :key="`plan-${n}`">
@ -174,7 +174,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
</td>
</tr>
<tr>
<td colspan="2" v-for="index in 10" :key="`pre-${index}`">{{ code.OP_CD ? code.OP_CD.예상종료시간 ? code.OP_CD.예상종료시간: '' : '' }}</td>
<td colspan="2" v-for="index in 10" :key="`pre-${index}`">{{ code.OP_CD?.예상종료시간 }}</td>
</tr>
<tr>
<td v-for="n in 20" :key="`fa-${n}`">

View File

@ -31,30 +31,36 @@ if( !_notAuth("R") ){/************ 권한체크*/
$retval['code'] = false;
}
break;
case "getOrderList":
// 생산오더별 진행현황
case 'getStsList':
$squl = "USP_P_WO_OPER_RSLT_S40";
$params = array(
"date_st" => $_REQUEST["order_date_st"] ?: "2024-04-01",
// "date_st" => "2024-04-16" ?: "",
"date_ed" => $_REQUEST["order_date_ed"] ?: "2024-05-31",
"WO_NO" => $_REQUEST["P_WO_NO"] ?: "",
"ITEM_CD" => $_REQUEST["ITEM_CD"] ?: "",
"OP_CD" => $_REQUEST["OP_CD"] ?: "",
"FACLT_CD " => $_REQUEST["FACLT_CD_P"] ?: "",
"EMP_NO" => $_REQUEST["EMP_NO"] ?: ""
);
$rst = $baseObj->DB->exec($squl, $params);
$rows = array();
if ($rst) {
$retval['code'] = true;
// $sql = "USP_B_OPERATION_S10";
while ($row = $baseObj->DB->fetch_array($rst)) {
$rows[] = $row;
};
$retval['data'] = $rows;
$retval['mesg'] = '정상 동작 되었습니다.';
} else {
$retval['code'] = false;
}
// $params = array(
// "OP_NM" => "",
// "USE_FLG" => "Y"
// );
// $rst = $baseObj->DB->exec($sql,$params);
// $rows = array();
// if( $rst ){
// $retval['code'] = true;
// while( $row = $baseObj->DB->fetch_array($rst) ){
// // $row['OP_CD_OLD'] = $row['OP_CD'];
// $rows[] = $row;
// }
// $retval['data'] = $rows;
// $retval['mesg'] = "정상적으로 작동하였습니다.";
// }else{
// $retval['code'] = false;
// }
break;
}
}

View File

@ -3,6 +3,7 @@
*/
class Tb_oper_class {
constructor(container){
this.ajaxUrl = "./sts_order_prod.ajax.php";
@ -220,13 +221,13 @@ class Tb_oper_class {
const VueOperStatusCode = createApp({
data(){
return {
ajaxUrl: './sts_oper_prod.ajax.php',
ajaxUrl: './sts_order_prod.ajax.php',
codeList: [],
isHover: {}
}
},
mounted(){
this.getCodeList();
this.getMainList("getStsList", "P_WO_NO");
},
// computed: {
@ -245,14 +246,14 @@ const VueOperStatusCode = createApp({
if(operData){
finalDataList.push(
{
공정명: operData.공정 ,
계획수량: operData.계획수량,
실적수량 : operData.실적수량,
투입시간:operData.투입시간,
종료시간 : operData.종료시간,
OP_CD: operData.OP_CD ,
PLAN_QTY: operData.PLAN_QTY,
PRD_QTY : operData.PRD_QTY,
ST_TM:operData.ST_TM,
ED_TM : operData.ED_TM,
예상종료시간 : operData.예상종료시간 ,
설비: operData.설비,
작업자: operData.작업자
FACLT_CD: operData.FACLT_CD,
EMP_NM: operData.EMP_NM
}
)
}else{
@ -270,25 +271,112 @@ const VueOperStatusCode = createApp({
}
},
getCodeList() {
// 임의의 데이터 직접 입력 [데이터 이렇게 php로 전처리...]
let temp = [
{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
];
const group = Object.values(Object.groupBy(temp, ({생산오더}) => 생산오더))
console.log(group);
// tableBuild 되었을때 getManList
getMainList(mode,...test) {
const talert= window.setTimeout(()=> { this.tbList.alert("Loading ...") }, 1000);
let arr = test;
// let testList = new Array();
let data = new Object();
for(let i=0; i < arr.length; i++){
let temp = [arr[i]]
console.log();
if(document.getElementById(arr[i])?.type !== "checkbox"){
data[temp] = document.getElementById(temp)?.value
}else{
data[temp] = document.getElementById(temp)?.checked?"Y":"N";
}
}
data.mode = mode
// let USEFLAG = document.getElementById("USE_FLG").checked?"Y":"N"; //사용여부
ajax_json({
url: this.ajaxUrl,
data: data,
success: (data) => {
if(data.code) {
console.log(data.data);
this.getCodeList(data.data)
}else{
kuls_alert(data.mesg);
}
},
error: (req, status, err) => {
kuls_alert(err.message);
},
complete: () => {
window.clearTimeout(talert);
// this.setFilter();
// this.tbList.getRows().forEach(row=>{
// row.getCell("WO_NO").getElement().addEventListener("click",(e)=>{
// this.rowClick(e,row);
// })
// });
},
});
return true;
},
getCodeList(temp) {
console.log(temp)
let realTemp = [];
console.log(Object.values(Object.groupBy(temp,( {WO_NO} )=>WO_NO)));
let group = Object.values(Object.groupBy(temp,( {WO_NO,WO_SEQ} )=>WO_NO && WO_SEQ));
for(let i = 0; i < group.length; i++) {
group[i][0].OP_CD = group[i].map(function (element) {
return {
OP_CD: element?.OP_CD,
계획수량: element?.계획수량,
PRD_QTY: element?.PRD_QTY,
ST_TM: element?.ST_TM,
ED_TM: element?.ED_TM,
예상종료시간: element?.예상종료시간,
FACLT_CD: element?.FACLT_CD,
EMP_NM: element?.EMP_NM
}
});
console.log(group[i][0]);
realTemp.push(group[i][0]);
}
// 임의의 데이터 직접 입력 [데이터 이렇게 php로 전처리...]
// let temp = [
// {생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15998', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'최창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 1, 공정 : '소재', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 2, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 4, 공정 : 'G', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 3, 공정 : 'F', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 5, 공정 : 'H', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ,{생산오더: 'P15968', 등록일: '2023.01.02', 품목:'PT01105', 도면번호:'P9900021580/000', 업체명:'현대로보틱스', 판매오더수량:"(20)", 납기일:'2023.01.27', 작업순서: 1, 공정순서 : 6, 공정 : 'M', 계획수량 : 20, 실적수량 : 20, 투입시간: '01.27 15:00', 종료시간 :'01.27 15:00', 예상종료시간 :'01.27 18:00', 설비:'L5', 작업자 :'이창희'}
// ];
// const group = Object.values(Object.groupBy(temp, ({WO_NO}) => WO_NO))
this.codeList = realTemp
this.initData(group);
// 실제 데이터 입력함수
@ -306,21 +394,23 @@ const VueOperStatusCode = createApp({
// kuls_alert(err.message);
// }
// })
return this.codeList;
},
openPop(data, idx) {
const process = data['공정'][idx]
const process = data['OP_CD'][idx]
const bindingData = {
WO_NO: data['생산오더'],
WO_NO: data['WO_NO'],
// 상태: data[상태],
DRAW_NO: data['도면번호'],
ITEM_CD: data['품목'],
OP_CD: process['공정명'],
EMP_NM: process['작업자'],
FACLT_CD: process['설비'],
종료시간: process['종료시간'],
실적수량: process['실적수량'],
DRAW_NO: data['DRAW_NO'],
ITEM_CD: data['ITEM_CD'],
OP_CD: process['OP_CD'],
EMP_NO: process['EMP_NO'],
FACLT_CD: process['FACLT_CD'],
ED_TM: process['ED_TM'],
PRD_QTY: process['PRD_QTY'],
}
console.log(bindingData)
const pop = new FieldPop(bindingData);
pop.init();
}
@ -489,7 +579,7 @@ class Tb_order_class {
// 데이터 불러오기
this.tbList.on("tableBuilt", () => {
this.getMainList();
// this.getMainList();
});
// // row 클릭 시에
// this.tbList.on("rowClick", (e, tgt) => {
@ -521,7 +611,7 @@ class Tb_order_class {
["click", "keypress"].forEach((evt) => {
const filterBtn = document.querySelector("#filter_btn");
filterBtn.addEventListener(evt, () => {
this.getMainList();
// this.getMainList();
});
});
// // 저장

View File

@ -43,7 +43,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<label for="">생산오더</label>
<div>
<div class="input-box">
<input type="text" id="">
<input type="text" id="P_WO_NO">
<?php // include _SVC_INC_PATH_ . '/img/popupIcon.php' ?>
</div>
@ -61,7 +61,7 @@ include_once _SVC_INC_PATH_ . "/header.php";
<!-- 조회 저장 버튼 -->
<div class="button-container">
<div class="button-box">
<button class="point-btn" id="filter_btn" @click="getCodeList()">조회</button>
<button class="point-btn" id="filter_btn" @click="getMainList('getStsList', 'P_WO_NO')">조회</button>
<button class="point-btn disabled-btn" id="put_btn" disabled>저장</button>
</div>
</div>
@ -143,33 +143,34 @@ include_once _SVC_INC_PATH_ . "/header.php";
<tbody>
<template v-for="(code, idx) in codeList">
<tr>
<td rowspan="5">{{code.생산오더}}<br>{{code.등록일}}</td>
<td rowspan="5">{{code.품목}}<br>{{code.도면번호}}<br>{{code.업체명}}</td>
<td rowspan="5">{{code.WO_NO}}<br>{{code.등록일}}</td>
<td rowspan="5">{{code.ITEM_CD}}<br>{{code.DRAW_NO}}<br>{{code.BP_CD}}</td>
<td rowspan="5">{{code.판매오더수량}}</td>
<td rowspan="5">{{code.납기일}}</td>
<td rowspan="5">{{code.작업순서}}</td>
<td rowspan="5">{{code.DLVY_REQ_DT}}</td>
<td rowspan="5">{{code.WO_SEQ}}</td>
<td rowspan="5">{{code.완료}}</td>
<td colspan="2" v-for="(process, index) in code.공정" :key="`process-${index}`" @click="openPop(code, index)" @mouseenter="isHover[idx][index] = true" @mouseleave="isHover[idx][index] = false" :class="{'on':isHover[idx][index], 'blue-back':process.stats=='P', 'green-back':process.stats=='C', 'orange-back':process.stats=='D', 'gray-back':process.stats=='W' }">
{{ process.공정명 }}
<td colspan="2" v-for="index in 10" :key="`process-${index}`" @click="openPop(code, index)" @mouseenter="isHover[idx][index] = true" @mouseleave="isHover[idx][index] = false" :class="{'on':isHover[idx][index] }">
{{ code.OP_CD?.OP_CD }}
</td>
</tr>
<tr>
<td v-for="n in 20" :key="`plan-${n}`" @click="openPop(code, Math.round(n / 2)-1)" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}">
{{ n % 2 === 0 ? code['공정'][n/2-1].실적수량 : code['공정'][(n-1)/2].계획수량 }}
{{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.PRD_QTY : code['OP_CD'][(n-1)/2]?.PLAN_QTY }}
</td>
</tr>
<tr>
<td v-for="n in 20" :key="`tm-${n}`" @click="openPop(code, Math.round(n / 2)-1)" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}">
{{ n % 2 === 0 ? code['공정'][n/2-1].종료시간 : code['공정'][(n-1)/2].투입시간 }}
{{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.ED_TM : code['OP_CD'][(n-1)/2]?.ST_TM }}
</td>
</tr>
<tr>
<td colspan="2" v-for="(process, index) in code.공정" :key="`pre-${index}`" @click="openPop(process)" @mouseenter="isHover[idx][index] = true" @mouseleave="isHover[idx][index] = false" :class="{'on':isHover[idx][index]}">{{ process.예상종료시간 }}
<td colspan="2" v-for="index in 10" :key="`pre-${index}`" @click="openPop(process)" @mouseenter="isHover[idx][index] = true" @mouseleave="isHover[idx][index] = false" :class="{'on':isHover[idx][index]}">
{{ code.예상종료시간?.예상종료시간 }}
</td>
</tr>
<tr>
<td v-for="n in 20" :key="`fa-${n}`" @click="openPop(code, Math.round(n / 2)-1)" @mouseenter="isHover[idx][Math.round(n / 2)-1] = true" @mouseleave="isHover[idx][Math.round(n / 2)-1] = false" :class="{'on':isHover[idx][Math.round(n / 2)-1]}">
{{ n % 2 === 0 ? code['공정'][n/2-1].작업자 : code['공정'][(n-1)/2].설비 }}
{{ n % 2 === 0 ? code['OP_CD'][n/2-1]?.EMP_NM : code['OP_CD'][(n-1)/2]?.FACLT_CD }}
</td>
</tr>